Hướng dẫn kiểm soát truy cập bằng /etc/hosts.allow và /etc/hosts.deny trên Linux

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,…


etc, hosts, linux

 

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:

 

danh_sách_dch_vụ : danh_sách_client [: tùy_chọn]
 

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:


 
sudo nano /etc/hosts.deny
 

Thêm dòng sau vào cuối file:


 
ALL: ALL
 

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:


 
sudo nano /etc/hosts.allow
 

Thêm các quy tắc cho phép theo nhu cầu, ví dụ:


 
sshd: 192.168.1.100 sshd: 203.0.113.10
 

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:


 
ldd $(which sshd) | grep libwrap
 

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.

 HỖ TRỢ TRỰC TUYẾN