解決Linux iptables防火墻和vsftpd的問(wèn)題
最近在研究Linux下Firewall的配置,發(fā)現(xiàn)配置好防火墻以后ftp就有問(wèn)題了,一直都不能夠用Filezilla 和 CuteFTP登錄,在列出目錄的時(shí)候一直會(huì)失敗。但是在命令行下面如果先執(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ù)前面介紹方式,只有開(kāi)放 ftp port 21 服務(wù),其他都禁止的話,一般會(huì)配置使用:
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
這樣的配置,確認(rèn) ftp 用戶端是可以連到 ftp 主機(jī)并且看到歡迎登入畫(huà)面,不過(guò)后續(xù)要瀏覽檔案目錄清單與檔案抓取時(shí)卻會(huì)發(fā)生錯(cuò)誤...
ftp 協(xié)定本身于 data channnel 還可以區(qū)分使用 active mode 與 passive mode 這兩種傳輸模式,而就以 passive mode 來(lái)說(shuō),***是協(xié)議讓 ftp client 連結(jié)到 ftp server 本身指定于大于 1024 port 的連接埠傳輸資料。
這樣配置在 ftp 傳輸使用 active 可能正常,但是使用 passive mode 卻發(fā)生錯(cuò)誤,其中原因就是因?yàn)樵撝鳈C(jī)firewall 規(guī)則配置不允許讓 ftp client 連結(jié)到 ftp server 指定的連結(jié)埠才引發(fā)這個(gè)問(wèn)題。
要解決該問(wèn)題方式,于 iptables 內(nèi)個(gè)名稱為 ip_conntrack_ftp 的 helper,可以針對(duì)連入與連外目的 port 為 21 的 ftp 協(xié)定命令溝通進(jìn)行攔截,提供給 iptables 設(shè)定 firwewall 規(guī)則的配置使用。開(kāi)放做法為:
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 的項(xiàng)目,該項(xiàng)目也就是狀態(tài)為主動(dòng)建立的封包,不過(guò)是因?yàn)榕c現(xiàn)有 ftp 這類連線架構(gòu)會(huì)引發(fā)另外才產(chǎn)生的主動(dòng)建立的項(xiàng)目。
不過(guò)若是主機(jī) ftp 服務(wù)不在 port 21 的話,請(qǐng)使用下列方式進(jìn)行調(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
也就是主機(jī)本身提供 ftp 服務(wù)分別在 port 21 與 30000 上,讓 ip_conntrack_ftp 這個(gè) ftp helper 能夠正常提供 ftp 用戶端使用 passive mode 存取而不會(huì)產(chǎn)生問(wèn)題。
【編輯推薦】



















