允許使用 IPTables 進行 FTP

允許使用 IPTables 進行 FTP

我目前的場景涉及允許各種規則,但我需要可以從任何地方存取 ftp。作業系統是 Cent 5,我使用的是 VSFTPD。我似乎無法得到正確的語法。所有其他規則都正常工作。

## Filter all previous rules
*filter

## Loopback address
-A INPUT -i lo -j ACCEPT

## Established inbound rule
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Management ports
-A INPUT -s x.x.x.x/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT

## Allow NRPE port (Nagios)
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT

##Allow FTP

## Default rules
:INPUT DROP [0:0]
:FORWARD DROP
:OUTPUT ACCEPT [0:0]
COMMIT

以下是我嘗試過的規則。

##Allow FTP
-A INPUT --dport 21 any -j ACCEPT
-A INPUT --dport 20 any -j ACCEPT

-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 20 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT


-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 20 -j ACCEPT
-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 21 -j ACCEPT

-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT

答案1

這是我推薦人們參考的文檔,以便他們能夠遵循 FTP 協定:http://slacksite.com/other/ftp.html

  • 若要執行主動模式 FTP,您需要允許 TCP 連接埠 21 的傳入連線和來自連接埠 20 的傳出連線。
  • 要執行被動模式 FTP,您需要允許到 TCP 連接埠 21 的傳入連線以及到伺服器電腦上隨機產生的連接埠的傳入連線(需要在 netfilter 中使用 conntrack 模組)

您的帖子中沒有任何關於您的 OUTPUT 鏈的內容,因此我也將其包含在此處。如果您的 OUTPUT 鍊是預設丟棄的,那麼這很重要。

將這些規則新增到您的 iptables 配置中:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

為了支援被動模式 FTP,您需要在啟動時載入 ip_conntrack_ftp 模組。取消註解並修改 /etc/sysconfig/iptables-config 檔案中的 IPTABLES_MODULES 行以讀取:

IPTABLES_MODULES="ip_conntrack_ftp"

儲存 iptables 設定並重新啟動 iptables。

service iptables save
service iptables restart

若要完全排除 VSFTPD 的問題,請停止 VSFTPD,使用「netstat -a」驗證它沒有在連接埠 21 上偵聽,然後執行:

nc -l 21

這將啟動 netcat 偵聽連接埠 21 並將輸入回顯到您的 shell。從另一台主機,TELNET 到伺服器的連接埠 21,並驗證您是否獲得了 TCP 連接,以及在鍵入 TELNET 連接時是否在 shell 中看到了輸出。

最後,重新啟動 VSFTPD,驗證它是否正在偵聽連接埠 21,然後再次嘗試連線。如果與 netcat 的連線有效,那麼您的 iptables 規則就沒有問題。如果在 netcat 工作後與 VSFTPD 的連線不起作用,則表示您的 VSFTPD 配置有問題。

答案2

試試這個規則。注意:$EXTIP是 FTP 伺服器的外部 IP 位址。

-A INPUT -i $EXTIP -m state --state NEW,ESTABLISHED,RELATED -p TCP -s 0.0.0.0 -d $EXTIP --dport 21 -j ACCEPT

答案3

就我而言,我缺少 ip_conntrack_ftp 核心模組。需要加載它。所以你可以嘗試這個:

modprobe ip_conntrack_ftp

並且還將 ip_conntrack_ftp 添加到 /etc/modules 以便重啟後即可工作

相關內容