Những điểm chính
• Khái niệm /etc/hosts.allow
Là tập tin whitelist thuộc hệ thống TCP Wrappers, dùng để chỉ định danh sách IP hoặc mạng được phép truy cập vào các dịch vụ cụ thể.
• Khái niệm /etc/hosts.deny
Là tập tin blacklist dùng để chặn các kết nối từ địa chỉ IP không mong muốn nếu chúng không được cho phép trong hosts.allow.
• Cơ chế ưu tiên xử lý
Hệ thống luôn kiểm tra hosts.allow trước, nếu khớp thì cho phép ngay, nếu không mới kiểm tra tiếp hosts.deny.
• Chiến lược cấu hình chuẩn
Nên áp dụng nguyên tắc “Chặn tất cả, chỉ mở cho IP tin cậy” bằng cách khai báo ALL: ALL trong hosts.deny và thêm IP cụ thể vào hosts.allow.
• Cú pháp cơ bản
Tuân theo định dạng danh_sách_dịch_vụ : danh_sách_client, cho phép kiểm soát chi tiết từng dịch vụ như SSH hoặc FTP.
• Khắc phục sự cố phổ biến
Hướng dẫn xử lý các lỗi như tự khóa quyền truy cập hoặc quy tắc không hoạt động do dịch vụ không hỗ trợ libwrap.
• Lưu ý quan trọng
Các thay đổi có hiệu lực ngay lập tức và đây chỉ là lớp bảo mật bổ sung, không thay thế hoàn toàn firewall.
/etc/hosts.allow là gì?
/etc/hosts.allow là một tập tin cấu hình dạng văn bản trên các hệ điều hành giống Unix (Linux, macOS), được TCP Wrappers sử dụng để kiểm soát truy cập. Chức năng chính của file này là chỉ định những địa chỉ IP, tên miền hoặc dải mạng được phép kết nối tới các dịch vụ mạng cụ thể trên máy chủ.
Nói cách khác, đây là một whitelist giúp quản trị viên xác định ai có quyền truy cập vào các dịch vụ như SSH, Telnet, FTP,…

Cơ chế hoạt động của TCP Wrappers
Khi có một yêu cầu kết nối đến máy chủ, hệ thống sẽ kiểm tra quyền truy cập theo thứ tự sau:
• Kiểm tra hosts.allow
Hệ thống quét file /etc/hosts.allow trước. Nếu tìm thấy quy tắc khớp (dịch vụ và IP), kết nối sẽ được chấp nhận ngay và bỏ qua hosts.deny.
• Kiểm tra hosts.deny
Nếu không có quy tắc phù hợp trong hosts.allow, hệ thống tiếp tục quét /etc/hosts.deny. Nếu có quy tắc khớp, kết nối sẽ bị từ chối.
• Quy tắc mặc định
Nếu không khớp với bất kỳ quy tắc nào trong hai file trên, hệ thống sẽ cho phép truy cập theo mặc định.
Cấu trúc và cú pháp chuẩn
Cú pháp trong hai file tuân theo định dạng:
Trong đó:
• danh_sách_dịch_vụ (daemon_list):
Tên tiến trình dịch vụ, ví dụ: sshd, vsftpd, hoặc ALL.
• danh_sách_client (client_list):
Địa chỉ IP, tên miền hoặc dải mạng, ví dụ: 192.168.1.1, 192.168.1.0/24, ALL.
• tùy_chọn (option):
Các lệnh bổ sung như ghi log, gửi email cảnh báo,…
Ví dụ:
• sshd: 192.168.1.100
→ Cho phép IP 192.168.1.100 truy cập SSH.
• sshd: ALL
→ Áp dụng quy tắc SSH cho tất cả các IP.
Hướng dẫn sử dụng /etc/hosts.allow và /etc/hosts.deny
Để bảo mật hiệu quả, bạn nên áp dụng nguyên tắc: “Chặn tất cả, chỉ mở cho IP tin cậy”.
Bước 1: Tạo quy tắc từ chối mặc định
Mở file hosts.deny:
Thêm dòng sau vào cuối file:
Quy tắc này sẽ từ chối mọi kết nối đến tất cả dịch vụ.
Bước 2: Thêm IP được phép truy cập
Mở file hosts.allow:
Thêm các quy tắc cho phép theo nhu cầu, ví dụ:
Bước 3: Lưu và kiểm tra
• Nhấn Ctrl + X → chọn Y → nhấn Enter để lưu file.
• Các thay đổi có hiệu lực ngay lập tức.
• Nên thử kết nối từ một phiên làm việc mới để đảm bảo quy tắc hoạt động đúng trước khi thoát phiên hiện tại.
Các lỗi thường gặp và cách khắc phục
Lỗi bị khóa hoàn toàn
• Hiện tượng: Không thể SSH từ bất kỳ IP nào.
• Nguyên nhân: Đã chặn tất cả trong hosts.deny nhưng quên thêm IP cá nhân vào hosts.allow.
• Cách xử lý:
Truy cập server qua Console/VNC do nhà cung cấp VPS hỗ trợ và thêm IP của bạn vào hosts.allow.
Lỗi quy tắc không hoạt động do thiếu hỗ trợ
• Hiện tượng: Quy tắc không có tác dụng.
• Nguyên nhân: Dịch vụ không hỗ trợ TCP Wrappers (libwrap).
• Cách xử lý:
Kiểm tra bằng lệnh:
Nếu không có kết quả, hãy dùng firewall thay thế.
Lỗi cú pháp
• Hiện tượng: Quy tắc bị hệ thống bỏ qua.
• Nguyên nhân: Sai định dạng, thiếu dấu hai chấm hoặc khoảng trắng.
• Cách xử lý:
Kiểm tra lại file, đảm bảo đúng định dạng:
dịch_vụ: IP
Lưu ý quan trọng khi sử dụng
• Thứ tự ưu tiên:
hosts.allow luôn được kiểm tra trước. Nếu đã cho phép tại đây, hosts.deny sẽ bị bỏ qua cho kết nối đó.
• Phạm vi tác động:
Chỉ các dịch vụ được biên dịch với libwrap mới tuân theo các quy tắc này.
Nginx, Apache và nhiều dịch vụ hiện đại thường không hỗ trợ TCP Wrappers.
• Giải pháp thay thế:
Nên ưu tiên firewall như iptables, UFW hoặc Firewalld để kiểm soát truy cập mạnh mẽ hơn.
Tuy nhiên, /etc/hosts.allow vẫn hữu ích như một lớp bảo mật bổ sung.