解決Linux iptables防火墻和vsftpd的問題
最近在研究Linux下Firewall的配置,發(fā)現(xiàn)配置好防火墻以后ftp就有問題了,一直都不能夠用Filezilla 和 CuteFTP登錄,在列出目錄的時候一直會失敗。但是在命令行下面如果先執(zhí)行passive off,一切正常。
答案在CU上找到的,主要是要使用 ip_conntrack_ftp
linux.chinaunix.net/bbs/viewthread.php?tid=812400">http://linux.chinaunix.net/bbs/viewthread.php?tid=812400
原文:
使用 -P INPUT DROP 引起的網(wǎng)路存取正常,但是 ftp 連入?yún)s失敗?
依據(jù)前面介紹方式,只有開放 ftp port 21 服務(wù),其他都禁止的話,一般會配置使用:
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
這樣的配置,確認 ftp 用戶端是可以連到 ftp 主機并且看到歡迎登入畫面,不過后續(xù)要瀏覽檔案目錄清單與檔案抓取時卻會發(fā)生錯誤...
ftp 協(xié)定本身于 data channnel 還可以區(qū)分使用 active mode 與 passive mode 這兩種傳輸模式,而就以 passive mode 來說,***是協(xié)議讓 ftp client 連結(jié)到 ftp server 本身指定于大于 1024 port 的連接埠傳輸資料。
這樣配置在 ftp 傳輸使用 active 可能正常,但是使用 passive mode 卻發(fā)生錯誤,其中原因就是因為該主機firewall 規(guī)則配置不允許讓 ftp client 連結(jié)到 ftp server 指定的連結(jié)埠才引發(fā)這個問題。
要解決該問題方式,于 iptables 內(nèi)個名稱為 ip_conntrack_ftp 的 helper,可以針對連入與連外目的 port 為 21 的 ftp 協(xié)定命令溝通進行攔截,提供給 iptables 設(shè)定 firwewall 規(guī)則的配置使用。開放做法為:
modprobe ip_conntrack_ftp
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
modprobe ip_conntrack_ftp
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
其中 -m state 部分另外多了 RELATED 的項目,該項目也就是狀態(tài)為主動建立的封包,不過是因為與現(xiàn)有 ftp 這類連線架構(gòu)會引發(fā)另外才產(chǎn)生的主動建立的項目。
不過若是主機 ftp 服務(wù)不在 port 21 的話,請使用下列方式進行調(diào)整:
CODE:
modprobe ip_conntrack_ftp ports=21,30000
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 30000 -j ACCEPT
modprobe ip_conntrack_ftp ports=21,30000
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 30000 -j ACCEPT
也就是主機本身提供 ftp 服務(wù)分別在 port 21 與 30000 上,讓 ip_conntrack_ftp 這個 ftp helper 能夠正常提供 ftp 用戶端使用 passive mode 存取而不會產(chǎn)生問題。
【編輯推薦】