最近在研究Linux下Firewall的配置發現配置好防火牆以後ftp就有問題了一直都不能夠用Filezilla 和 CuteFTP登錄在列出目錄的時候一直會失敗但是在命令行下面如果先執行passive off一切正常
答案在CU上找到的主要是要使用 ip_conntrack_ftp
/bbs/viewthreadphp?tid=>
原文
使用 P INPUT DROP 引起的網路存取正常但是 ftp 連入卻失敗?
依據前面介紹方式只有開放 ftp port 服務其他都禁止的話一般會配置使用
iptables P INPUT DROP
iptables A INPUT m state state ESTABLISHED j ACCEPT
iptables A INPUT p tcp dport j ACCEPT
iptables P INPUT DROP
iptables A INPUT m state state ESTABLISHED j ACCEPT
iptables A INPUT p tcp dport j ACCEPT
這樣的配置確認 ftp 用戶端是可以連到 ftp 主機並且看到歡迎登入畫面不過後續要浏覽檔案目錄清單與檔案抓取時卻會發生錯誤
ftp 協定本身於 data channnel 還可以區分使用 active mode 與 passive mode 這兩種傳輸模式而就以 passive mode 來說最後是協議讓 ftp client 連結到 ftp server 本身指定於大於 port 的連接埠傳輸資料
這樣配置在 ftp 傳輸使用 active 可能正常但是使用 passive mode 卻發生錯誤其中原因就是因為該主機firewall 規則配置不允許讓 ftp client 連結到 ftp server 指定的連結埠才引發這個問題
要解決該問題方式於 iptables 內個名稱為 ip_conntrack_ftp 的 helper可以針對連入與連外目的 port 為 的 ftp 協定命令溝通進行攔截提供給 iptables 設定 firwewall 規則的配置使用開放做法為
modprobe ip_conntrack_ftp
iptables P INPUT DROP
iptables A INPUT m state state ESTABLISHEDRELATED j ACCEPT
iptables A INPUT i lo j ACCEPT
iptables A INPUT p tcp dport j ACCEPT
modprobe ip_conntrack_ftp
iptables P INPUT DROP
iptables A INPUT m state state ESTABLISHEDRELATED j ACCEPT
iptables A INPUT i lo j ACCEPT
iptables A INPUT p tcp dport j ACCEPT
其中 m state 部分另外多了 RELATED 的項目該項目也就是狀態為主動建立的封包不過是因為與現有 ftp 這類連線架構會引發另外才產生的主動建立的項目
不過若是主機 ftp 服務不在 port 的話請使用下列方式進行調整
CODE:
modprobe ip_conntrack_ftp ports=
iptables P INPUT DROP
iptables A INPUT m state state ESTABLISHEDRELATED j ACCEPT
iptables A INPUT i lo j ACCEPT
iptables A INPUT p tcp dport j ACCEPT
iptables A INPUT p tcp dport j ACCEPT
modprobe ip_conntrack_ftp ports=
iptables P INPUT DROP
iptables A INPUT m state state ESTABLISHEDRELATED j ACCEPT
iptables A INPUT i lo j ACCEPT
iptables A INPUT p tcp dport j ACCEPT
iptables A INPUT p tcp dport j ACCEPT
也就是主機本身提供 ftp 服務分別在 port 與 上讓 ip_conntrack_ftp 這個 ftp helper 能夠正常提供 ftp 用戶端使用 passive mode 存取而不會產生問題
From:http://tw.wingwit.com/Article/os/fwq/201405/31012.html