Cách cài đặt và bảo mật Memcached trên Ubuntu 16.04
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 như sau:
- Một server Ubuntu 16.04, được cài đặt theo hướng dẫn Cài đặt server ban đầu với Ubuntu 16.04 của ta .
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 .
Bước 1 - 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 chính thức của Ubuntu. Trước tiên, hãy đảm bảo index gói local của bạn được cập nhật:
- sudo apt-get update
Tiếp theo, cài đặt gói chính thức như sau:
- sudo apt-get install memcached
Ta cũng có thể cài đặt libmemcached-tools
, 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 apt-get install libmemcached-tools
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ước 2 - 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ẽ kiểm tra cài đặt mặc định trong file cấu hình có tại /etc/memcached.conf
. Phiên bản Memcached hiện tại đi kèm với Ubuntu và Debian có tham số -l
được đặt cho giao diện local , giúp ngăn chặn các cuộc tấn công từ chối dịch vụ từ mạng. Ta có thể kiểm tra cài đặt này đảm bảo rằng nó được đặt chính xác.
Bạn có thể mở /etc/memcached.conf
bằng nano
:
- sudo nano /etc/memcached.conf
Để kiểm tra cài đặt giao diện, hãy tìm dòng sau trong file :
. . . -l 127.0.0.1
Nếu bạn thấy cài đặt mặc định là -l 127.0.0.1
thì không cần phải sửa đổi dòng này. Nếu bạn sửa đổi cài đặt này để cởi mở hơn, thì bạn cũng nên tắt UDP, vì nó có nhiều khả năng bị khai thác trong các cuộc tấn công từ chối dịch vụ. Để tắt UDP (trong khi để TCP không bị ảnh hưởng), hãy thêm tùy chọn sau vào cuối file này:
. . . -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.
Bước 3 - 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 memcstat
. Đ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:
- memcstat --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 sẽ thêm tham số -S
vào /etc/memcached.conf
. Mở lại file :
- sudo nano /etc/memcached.conf
Ở cuối file , thêm thông tin sau:
. . . -S
Tiếp theo, tìm và bỏ ghi chú tùy chọn -vv
, tùy chọn này sẽ cung cấp kết quả dài dòng cho /var/log/memcached
. Dòng không ghi chú sẽ trông như thế này:
. . . -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 02 22:03:58 memcached systemd-memcached-wrapper[2760]: 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:
- memcstat --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 memcstat
không thành công.
Thêm user đã xác thực
Bây giờ ta có thể download sasl2-bin
, một gói chứa các chương trình quản trị cho database user SASL. Điều này sẽ cho phép ta tạo user đã xác thực:
- sudo apt-get install sasl2-bin
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 nano /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 sẽ cung cấp quyền sở hữu user memcache
đối với database SASL:
- sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2
Khởi động lại dịch vụ Memcached:
- sudo systemctl restart memcached
Chạy lại memcstat
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 :
- memcstat --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 .
Bước 4 - Cho phép truy cập qua mạng riêng (Tùy chọn)
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 UFW 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. Bạn cần biết địa chỉ IP riêng của server khách hàng để cấu hình các luật firewall của bạn .
Nếu bạn đang sử dụng firewall UFW , bạn có thể giới hạn quyền truy cập vào version Memcached của bạn bằng lệnh như sau:
- sudo ufw allow from client_servers_private_IP/32 to any port 11211
Bạn có thể tìm hiểu thêm về firewall UFW bằng cách đọc hướng dẫn cơ bản về ufw của ta .
Với những thay đổi này, bạn có thể điều chỉnh dịch vụ Memcached để liên kết với network interface riêng của server của bạn.
Liên kết Memcached với Giao diện Mạng Riêng
Bây giờ firewall của bạn đã sẵn sàng, bạn có thể điều chỉnh cấu hình Memcached để liên kết với network interface riêng của server thay vì 127.0.0.1
.
Ta có thể mở lại file /etc/memcached.conf
bằng lệnh :
- sudo nano /etc/memcached.conf
Bên trong, tìm dòng -l 127.0.0.1
mà bạn đã kiểm tra hoặc sửa đổi trước đó và thay đổi địa chỉ để phù hợp với network interface riêng của server của bạn:
. . . -l memcached_servers_private_IP . . .
Lưu file khi bạn hoàn tất.
Tiếp theo, 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 Buildbot trên Ubuntu 16.042018-03-06
Cách quản lý an toàn bí mật với HashiCorp Vault trên Ubuntu 16.04
2018-02-28
Cách bảo mật Roundcube trên Ubuntu 16.04
2018-02-24
Cách cài đặt ứng dụng Webmail của riêng bạn với Roundcube trên Ubuntu 16.04
2018-02-24
Cách thiết lập và sử dụng LXD trên Ubuntu 16.04
2018-02-22
Cách cài đặt và bảo mật phpMyAdmin trên Ubuntu 16.04
2018-02-20
Cách thiết lập vsftpd cho Thư mục người dùng trên Ubuntu 16.04
2018-02-20
Cách thiết lập đường ống tích hợp liên tục với GitLab CI trên Ubuntu 16.04
2018-01-26
Cách cài đặt Swift và Vapor trên Ubuntu 16.04
2018-01-25
Cách cài đặt và cấu hình GitLab trên Ubuntu 16.04
2018-01-24