Cách cài đặt và bảo mật Memcached trên Ubuntu 18.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 back-end 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 được yêu cầu thường xuyên hoặc 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à một firewall  cơ bản. Nếu không đúng như vậy, hãy  cài đặt  như sau:
- Một server Ubuntu 18.04, được cài đặt theo hướng dẫn Cài đặt server ban đầu với Ubuntu 18.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 update 
Tiếp theo, cài đặt gói chính thức như sau:
- sudo apt 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 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 vô hiệu hóa 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      2279/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: 2279          uptime: 65          time: 1546620611          version: 1.5.6      . . . 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. . . Jan 04 16:51:12 memcached systemd-memcached-wrapper[2310]: 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 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 /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 
Bạn cần nhập và xác minh lại password bạn chọn.
 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: 2772          uptime: 31          time: 1546621072          version: 1.5.6 Ubuntu      . . . 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 . Để biết thêm thông tin về mạng riêng trên DigitalOcean, vui lòng xem tổng quan về mạng riêng DigitalOcean này .
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_server_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_server_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_server_private_IP:11211            0.0.0.0:*               LISTEN      2912/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 mạng riêng 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 Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 16.042018-11-20
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 16.04
2018-11-20
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 18.04
2018-11-06
Cách triển khai ứng dụng Symfony 4 để sản xuất với LEMP trên Ubuntu 18.04
2018-10-18
Cách cài đặt và sử dụng Composer trên Ubuntu 18.04
2018-10-16
Làm thế nào để kiểm tra các vai trò không thể phục hồi với Molecule trên Ubuntu 18.04
2018-10-02
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04 [Quickstart]
2018-07-16
Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 18.04
2018-07-13
Cách bật SFTP mà không cần quyền truy cập Shell trên Ubuntu 18.04
2018-07-13
Cách cài đặt Git trên Ubuntu 18.04 [Quickstart]
2018-07-12
 

