為 FTP PASV 模式連接設置 Linux iptables
我一直在進行大量搜尋,每次都學到了一點,但還沒有找到解決我問題的方法。
我有 vsftpd 設置,使用 SSL/TLS 我讓它按我的需要工作,但我無法應用下面的 iptable 規則。主要是 PASV 模式不起作用。
iptables -F
一切都按預期工作。只要我應用下面的規則,它就會連接,但客戶端 (CuteFTP) 會嘗試進入 PASV 模式,但它會超時。我的ip表規則如下:
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # ssh -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT # web -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT # ssl #-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT # subversion -A INPUT -p tcp -m tcp --dport 3690 -j ACCEPT # ftp + active ftp + pasv ftp -A INPUT -p tcp --dport 21 -m state --state ESTABLISHED,NEW -j ACCEPT -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED -j ACCEPT # mysql -A INPUT -p tcp -m tcp --dport 3306 -s 67.181.185.126 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -s 98.224.120.34 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -s 174.143.169.230 -j ACCEPT # ping -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j DROP -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT COMMIT
我使用(出於測試目的)載入它們:
iptables-restore < /etc/iptables.test.rules
作為參考,我正在執行 Ubuntu 10.04 LTS,另外這裡是我使用以下命令獲得的一些輸出:
lsmod
Module Size Used by xt_conntrack 2303 1 xt_helper 1155 0 nf_nat_ftp 1751 0 nf_nat 12653 1 nf_nat_ftp ipv6 220702 16 xt_state 1215 4 nf_conntrack_ftp 5108 1 nf_nat_ftp nf_conntrack_ipv4 9505 7 nf_nat nf_conntrack 43972 7 xt_conntrack,xt_helper,nf_nat_ftp,nf_nat,xt_state,nf_conntrack_ftp,nf_conntrack_ipv4 iptable_filter 2218 1 ip_tables 13794 1 iptable_filter nf_defrag_ipv4 1051 1 nf_conntrack_ipv4 dm_mirror 11338 0 dm_region_hash 6224 1 dm_mirror dm_log 7341 2 dm_mirror,dm_region_hash dm_snapshot 23956 0 dm_mod 50258 3 dm_mirror,dm_log,dm_snapshot
locate _ftp
/lib/modules/2.6.33.5-rscloud/kernel/net/ipv4/netfilter/nf_nat_ftp.ko /lib/modules/2.6.33.5-rscloud/kernel/net/netfilter/ipvs/ip_vs_ftp.ko /lib/modules/2.6.33.5-rscloud/kernel/net/netfilter/nf_conntrack_ftp.ko /lib/security/pam_ftp.so /usr/share/man/man8/pam_ftp.8.gz
此外,我的 vsftpd.conf 被動埠設置如下:
pasv_min_port=50000 pasv_max_port=60000
我也嘗試過載入模組,
modprobe ip_conntrack_ftp
但這似乎不起作用。通過上面的輸出,似乎該模組甚至不在系統上,或者被nf_conntrack_ftp
… nf_ modules …最終編輯
所以我想我找到了答案:http ://www.shorewall.net/FTP.html#Conntrack
因為 ftp 幫助程序模組必須讀取和修改通過命令通道發送的命令,所以當命令通道通過使用 TLS/SSL 加密時,它們將無法工作。
此外,另一個引起一些混亂的有趣事實是為什麼我有
nf_conntrack
vsip_conntrack
。如果您執行的是核心 2.6.19 或更早版本,則模組名稱為 ip_nat_ftp 和 ip_conntrack_ftp
測試
uname -r
(獲取核心版本)我已經通過禁用 TLS/SSL 測試了上述內容,並且 PASV 與
RELATED,ESTABLISHED
. 然而,我想使用 TLS/SSL 的主要原因是使用者名/密碼不會被明文發送。
如果您載入核心模組
ip_conntrack_ftp
,這應該有助於解決您的問題。您可以使用以下命令載入模組
modprobe ip_conntrack_ftp
這個不正確:
-A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED -j ACCEPT
它應該是 :
-A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT