Asumming cho cả máy chủ và máy khách một hạn chế INPUT
và mở OUTPUT
, tức là:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
Và từ iptables-extend (8) qua ví dụ về FTP ở chế độ hoạt động:
1. MỚI
MỚI Gói đã bắt đầu một kết nối mới hoặc liên kết với một kết nối không thấy các gói theo cả hai hướng.
Máy khách trên cổng 50000
(bất kỳ cổng không có đặc quyền ngẫu nhiên nào) kết nối với máy chủ FTP trên cổng 21
, máy chủ sẽ cần ít nhất điều này để chấp nhận kết nối đến này:
iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT
2. THÀNH LẬP
THÀNH LẬP Gói được liên kết với một kết nối đã thấy các gói theo cả hai hướng.
Bây giờ về phía khách hàng, ông mở một kết nối đi đến máy chủ trên cổng 21
sử dụng một cổng địa phương 50000
và ông cần iptables sau để cho phép các phản ứng đến từ server (21)
đến client (50000)
:
sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
3. LIÊN QUAN
LIÊN QUAN Gói tin đang bắt đầu một kết nối mới, nhưng được liên kết với một kết nối hiện có, chẳng hạn như truyền dữ liệu FTP hoặc lỗi ICMP.
Bây giờ sau khi kết nối FTP đã được thiết lập và kết nối dữ liệu sắp được thực hiện, máy khách sẽ mở một ổ cắm máy chủ (vâng, với máy khách FTP đang hoạt động sẽ trở thành máy chủ cho kết nối dữ liệu) trên cổng 60000
(theo hiểu biết của tôi, khách hàng sẽ đánh dấu cổng này 60000
như RELATED
kết nối khác từ 50000->21
) và sẽ gửi số cổng này đến máy chủ bằng PORT
lệnh FTP . Sau đó, máy chủ FTP sẽ mở một kết nối mới từ cổng của nó 20
sang cổng 60000
trên máy khách, và giờ đây, máy khách yêu cầu những điều sau đây để cho phép kết nối mới này thành công:
sudo iptables -A INPUT -m state --state RELATED -j ACCEPT
Cuối cùng, để làm việc này, bạn cần kích hoạt ip_conntrack_ftp
mô-đun hạt nhân để cho phép hệ thống đánh dấu các kết nối / gói là RELATED
(đây là sự hiểu biết của tôi, tôi đã không đào sâu về vấn đề này quá nhiều):
modprobe ip_conntrack_ftp