Cách cài đặt và bảo mật Memcached trên CentOS 7
Hệ thống bộ nhớ đệm đối tượng bộ nhớ như Memcached có thể tối ưu hóa hiệu suất database backend bằng cách tạm thời lưu trữ thông tin trong bộ nhớ, giữ lại các bản ghi thường xuyên hoặc được yêu cầu gần đây. Bằng cách này, chúng giảm số lượng yêu cầu trực tiếp đến database của bạn.Vì các hệ thống như Memcached có thể góp phần gây ra các cuộc tấn công từ chối dịch vụ nếu được cấu hình không đúng cách, nên điều quan trọng là phải bảo mật các server Memcached của bạn. Trong hướng dẫn này, ta sẽ trình bày cách bảo vệ server Memcached của bạn bằng cách ràng buộc cài đặt của bạn với network interface local hoặc mạng riêng và tạo user được ủy quyền cho version Memcached của bạn.
Yêu cầu
Hướng dẫn này giả định bạn có một server được cài đặt với user sudo không phải root và firewall cơ bản. Nếu không đúng như vậy, hãy cài đặt và cài đặt những điều sau:
- Một server CentOS 7, được cài đặt theo hướng dẫn Cài đặt Server Ban đầu với CentOS 7 của ta .
- FirewallD, được cấu hình theo phần “Cài đặt và kích hoạt firewall của bạn để bắt đầu khi server khởi động ” trong hướng dẫn của ta về cách sử dụng FirewallD với CentOS 7.
Với những yêu cầu này, bạn sẽ sẵn sàng cài đặt và bảo mật server Memcached của bạn .
Cài đặt Memcached từ repository chính thức
Nếu bạn chưa cài đặt Memcached trên server của bạn , bạn có thể cài đặt nó từ repository CentOS chính thức. Trước tiên, hãy đảm bảo index gói local của bạn được cập nhật:
- sudo yum update
Tiếp theo, cài đặt gói chính thức như sau:
- sudo yum install memcached
Ta cũng có thể cài đặt libmemcached
, một thư viện cung cấp một số công cụ để làm việc với server Memcached của bạn:
- sudo yum install libmemcached
Memcached bây giờ sẽ được cài đặt như một dịch vụ trên server của bạn, cùng với các công cụ cho phép bạn kiểm tra khả năng kết nối của nó. Bây giờ ta có thể chuyển sang bảo mật cài đặt cấu hình của nó.
Bảo mật cài đặt cấu hình đã ghi nhớ
Để đảm bảo version Memcached của ta đang lắng nghe trên giao diện local 127.0.0.1
, ta sẽ sửa đổi biến OPTIONS
trong file cấu hình có tại /etc/sysconfig/memcached
. Ta cũng sẽ tắt trình nghe UDP. Cả hai hành động này sẽ bảo vệ server của ta khỏi các cuộc tấn công từ chối dịch vụ.
Bạn có thể mở /etc/sysconfig/memcached
bằng vi
:
- sudo vi /etc/sysconfig/memcached
Tìm biến OPTIONS
, ban đầu sẽ trông giống như sau:
. . . OPTIONS=""
Liên kết với network interface local của ta sẽ hạn chế lưu lượng truy cập vào các client trên cùng một máy. Ta sẽ thực hiện việc này bằng cách thêm -l 127.0.0.1
vào biến OPTIONS
của ta . Điều này có thể quá hạn chế đối với một số môi trường nhất định, nhưng nó có thể tạo ra một điểm khởi đầu tốt như một biện pháp bảo mật.
Vì giao thức UDP hiệu quả hơn nhiều đối với các cuộc tấn công từ chối dịch vụ so với TCP, ta cũng có thể vô hiệu hóa trình nghe UDP. Để làm điều này, ta sẽ thêm tham số -U 0
vào biến OPTIONS
của ta . Tệp đầy đủ sẽ trông như thế này:
PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 127.0.0.1 -U 0"
Lưu file khi bạn hoàn tất.
Khởi động lại dịch vụ Memcached của bạn để áp dụng các thay đổi :
- sudo systemctl restart memcached
Xác minh Memcached hiện được liên kết với giao diện local và chỉ lắng nghe các kết nối TCP bằng lệnh :
- sudo netstat -plunt
Bạn sẽ thấy kết quả sau:
OutputActive Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name . . . tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2383/memcached . . .
Điều này xác nhận memcached
được liên kết với địa chỉ 127.0.0.1
chỉ sử dụng TCP.
Thêm user được ủy quyền
Để thêm user đã xác thực vào dịch vụ Memcached của bạn, bạn có thể sử dụng Lớp bảo mật và Xác thực đơn giản (SASL), một khuôn khổ loại bỏ các thủ tục xác thực khỏi các giao thức ứng dụng. Ta sẽ bật SASL trong file cấu hình Memcached của bạn và sau đó chuyển sang thêm user có thông tin xác thực.
Cấu hình hỗ trợ SASL
Trước tiên, ta có thể kiểm tra khả năng kết nối của version Memcached của ta bằng lệnh memstat
. Điều này sẽ giúp ta cài đặt rằng SASL và xác thực user được bật sau khi ta áp dụng các thay đổi đối với file cấu hình của bạn .
Để kiểm tra xem Memcached có đang hoạt động hay không, hãy nhập như sau:
- memstat --servers="127.0.0.1"
Bạn sẽ thấy kết quả như sau:
OutputServer: 127.0.0.1 (11211) pid: 3831 uptime: 9 time: 1520028517 version: 1.4.25 . . .
Bây giờ ta có thể chuyển sang kích hoạt SASL. Đầu tiên, ta có thể thêm tham số -S
vào biến OPTIONS
của ta trong /etc/sysconfig/memcached
, sẽ kích hoạt SASL. Mở lại file :
- sudo vi /etc/sysconfig/memcached
Ta sẽ thêm cả tham số -S
và -vv
vào biến OPTIONS
của ta . Tùy chọn -vv
sẽ cung cấp kết quả dài dòng tới /var/log/memcached
, điều này sẽ giúp ta khi gỡ lỗi. Thêm các tùy chọn này vào biến OPTIONS
như sau:
. . . OPTIONS="-l 127.0.0.1 -U 0 -S -vv"
Lưu và đóng file .
Khởi động lại dịch vụ Memcached:
- sudo systemctl restart memcached
Tiếp theo, ta có thể xem các log đảm bảo rằng hỗ trợ SASL đã được bật:
- sudo journalctl -u memcached
Bạn sẽ thấy dòng sau, cho biết rằng hỗ trợ SASL đã được khởi tạo:
Output. . . Mar 05 18:16:11 memcached-server memcached[3846]: Initialized SASL. . . .
Ta có thể kiểm tra lại kết nối, nhưng vì SASL đã được khởi tạo, lệnh này sẽ không thành công nếu không xác thực:
- memstat --servers="127.0.0.1"
Lệnh này không nên tạo ra kết quả . Ta có thể nhập như sau để kiểm tra trạng thái của nó:
- echo $?
$?
sẽ luôn trả về mã thoát của lệnh cuối cùng đã thoát. Thông thường, bất kỳ điều gì bên cạnh số 0
cho biết quá trình thất bại. Trong trường hợp này, ta sẽ thấy trạng thái thoát là 1
, điều này cho ta biết rằng lệnh memstat
không thành công.
Thêm user đã xác thực
Như vậy, ta có thể download hai gói cho phép ta làm việc với Thư viện SASL của Cyrus và các cơ chế xác thực của nó, bao gồm các plugin hỗ trợ các schemas xác thực PLAIN . Các gói này, cyrus-sasl-devel
và cyrus-sasl-plain
, sẽ cho phép ta tạo và xác thực user của bạn . Cài đặt các gói bằng lệnh :
- sudo yum install cyrus-sasl-devel cyrus-sasl-plain
Tiếp theo, ta sẽ tạo folder và file mà Memcached sẽ kiểm tra cài đặt cấu hình SASL của nó:
- sudo mkdir -p /etc/sasl2
- sudo vi /etc/sasl2/memcached.conf
Thêm phần sau vào file cấu hình SASL:
mech_list: plain log_level: 5 sasldb_path: /etc/sasl2/memcached-sasldb2
Ngoài việc chỉ định cấp độ ghi log của ta , ta sẽ đặt mech_list
thành plain
, điều này cho Memcached biết rằng nó nên sử dụng file password của riêng mình và xác minh password văn bản rõ. Ta cũng sẽ chỉ định đường dẫn đến file database user mà ta sẽ tạo tiếp theo. Lưu file khi bạn hoàn tất.
Bây giờ ta sẽ tạo một database SASL với thông tin đăng nhập user của ta . Ta sẽ sử dụng lệnh saslpasswd2
để tạo một mục nhập mới cho user trong database của ta bằng cách sử dụng tùy chọn -c
. User của ta sẽ là sammy ở đây, nhưng bạn có thể thay thế tên này bằng user của bạn . Sử dụng tùy chọn -f
, ta sẽ chỉ định đường dẫn đến database của bạn , đó sẽ là đường dẫn ta đặt trong /etc/sasl2/memcached.conf
:
- sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy
Cuối cùng, ta muốn cung cấp cho user quyền sở hữu memcached
đối với database SASL:
- sudo chown memcached:memcached /etc/sasl2/memcached-sasldb2
Khởi động lại dịch vụ Memcached:
- sudo systemctl restart memcached
Chạy lại memstat
sẽ xác nhận xem quá trình xác thực của ta có hoạt động hay không. Lần này, ta sẽ chạy nó với thông tin xác thực của ta :
- memstat --servers="127.0.0.1" --username=sammy --password=your_password
Bạn sẽ thấy kết quả như sau:
OutputServer: 127.0.0.1 (11211) pid: 3831 uptime: 9 time: 1520028517 version: 1.4.25 . . .
Dịch vụ Memcached của ta hiện đang chạy thành công với hỗ trợ SASL và xác thực user .
Cho phép truy cập qua mạng riêng
Ta đã trình bày cách cấu hình Memcached để lắng nghe trên giao diện local , có thể ngăn chặn các cuộc tấn công từ chối dịch vụ bằng cách bảo vệ giao diện Memcached khỏi bị các bên bên ngoài tiếp xúc. Tuy nhiên, có thể có những trường hợp bạn cần cho phép truy cập từ các server khác. Trong trường hợp này, bạn có thể điều chỉnh cài đặt cấu hình của bạn để liên kết Memcached với network interface riêng.
Lưu ý: Ta sẽ trình bày cách cấu hình cài đặt firewall bằng FirewallD trong phần này, nhưng cũng có thể sử dụng Tường lửa cloud DigitalOcean để tạo các cài đặt này. Để biết thêm thông tin về cách cài đặt Tường lửa trên cloud DigitalOcean, hãy xem Giới thiệu của ta về Tường lửa trên cloud DigitalOcean . Để tìm hiểu thêm về cách giới hạn lưu lượng đến cho các máy cụ thể, hãy xem phần của hướng dẫn này về áp dụng các luật firewall bằng cách sử dụng thẻ và tên server và thảo luận của ta về thẻ firewall .
Giới hạn quyền truy cập IP với firewall
Trước khi bạn điều chỉnh cài đặt cấu hình của bạn , bạn nên cài đặt các luật firewall để giới hạn các máy có thể kết nối với server Memcached của bạn. Nếu bạn đã tuân theo các yêu cầu và cài đặt FirewallD trên server của bạn và không có kế hoạch kết nối với Memcached từ một server khác, thì bạn không cần điều chỉnh các luật firewall của bạn . Phiên bản Memcached độc lập của bạn sẽ được lắng nghe trên 127.0.0.1
, nhờ vào biến OPTIONS
mà ta đã xác định trước đó và do đó sẽ không phải lo lắng về lưu lượng đến. Tuy nhiên, nếu bạn định cho phép truy cập vào server Memcached của bạn từ các server khác, thì bạn cần áp dụng các thay đổi đối với cài đặt firewall của bạn bằng lệnh firewall-cmd
.
Bắt đầu bằng cách thêm vùng Memcached chuyên dụng vào policy firewalld
của bạn:
- sudo firewall-cmd --permanent --new-zone=memcached
Sau đó, chỉ định cổng nào bạn muốn tiếp tục mở. Memcached sử dụng cổng 11211
theo mặc định:
- sudo firewall-cmd --permanent --zone=memcached --add-port=11211/tcp
Tiếp theo, chỉ định các địa chỉ IP riêng sẽ được phép truy cập Memcached. Đối với điều này, bạn cần biết địa chỉ IP riêng của server khách hàng của bạn :
- sudo firewall-cmd --permanent --zone=memcached --add-source=client_server_private_IP
Cập nhật firewall đảm bảo rằng các luật mới có hiệu lực:
- sudo firewall-cmd --reload
Các gói từ địa chỉ IP của khách hàng của bạn bây giờ sẽ được xử lý theo các luật trong vùng Memcached dành riêng. Tất cả các kết nối khác sẽ được xử lý bởi vùng public
mặc định.
Với những thay đổi này, ta có thể chuyển sang áp dụng các thay đổi cấu hình cần thiết cho dịch vụ Memcached của ta , ràng buộc nó với network interface riêng của server của ta .
Liên kết Memcached với Giao diện Mạng Riêng
Bước đầu tiên liên kết với network interface riêng của server của ta sẽ là sửa đổi biến OPTIONS
mà ta đã đặt trước đó.
Ta có thể mở lại /etc/sysconfig/memcached
bằng lệnh :
- sudo vi /etc/sysconfig/memcached
Bên trong, tìm biến OPTIONS
. Bây giờ ta có thể sửa đổi -l 127.0.0.1
để phản ánh IP riêng của server Memcached của ta :
. . . OPTIONS="-l memcached_servers_private_IP -U 0 -S -vv"
Lưu file khi bạn hoàn tất.
Khởi động lại dịch vụ Memcached :
- sudo systemctl restart memcached
Kiểm tra cài đặt mới của bạn với netstat
để xác nhận thay đổi:
- sudo netstat -plunt
OutputActive Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name . . . tcp 0 0 memcached_servers_private_IP:11211 0.0.0.0:* LISTEN 2383/memcached . . .
Kiểm tra kết nối từ ứng dụng bên ngoài của bạn đảm bảo rằng bạn vẫn có thể truy cập dịch vụ. Bạn cũng nên kiểm tra quyền truy cập từ client không được ủy quyền đảm bảo rằng các luật firewall của bạn có hiệu lực.
Kết luận
Trong hướng dẫn này, ta đã trình bày cách bảo mật server Memcached của bạn bằng cách cấu hình nó để liên kết với network interface local hoặc riêng tư của bạn và bằng cách cài đặt xác thực SASL.
Để tìm hiểu thêm về Memcached, hãy xem tài liệu dự án . Để biết thêm thông tin về cách làm việc với Memcached, hãy xem hướng dẫn của ta về Cách cài đặt và sử dụng Memcache trên Ubuntu 14.04 .
Các tin liên quan
Cách cài đặt Java trên CentOS và Fedora2018-02-16
Cách theo dõi cảnh báo Nagios với Alerta trên CentOS 7
2017-09-13
Cách cài đặt MongoDB trên CentOS 7
2017-09-11
Cách cài đặt Nagios 4 và theo dõi server của bạn trên CentOS 7
2017-09-11
Cách cài đặt WordPress với Caddy trên CentOS 7
2017-08-04
Cách cài đặt và sử dụng Webmin trên CentOS 7
2017-07-13
Cách bật SFTP mà không cần quyền truy cập Shell trên CentOS 7
2017-06-01
Cách theo dõi cảnh báo Zabbix với Alerta trên CentOS 7
2017-05-31
Cách cài đặt Perlbrew và quản lý nhiều phiên bản Perl 5 trên CentOS 7
2017-05-31
Cách cấu hình NTP để sử dụng trong Dự án NTP Pool trên CentOS 7
2017-05-11