FTPの受信を許可するiptables

FTPの受信を許可するiptables

着信 FTP トラフィックを許可したい。

CentOS5.4:

これは私のファイルです/etc/sysconfig/iptables

# Generated by iptables-save v1.3.5 on Thu Oct  3 21:23:07 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [133:14837]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
# Completed on Thu Oct  3 21:23:07 2013

また、デフォルトでは、ip_conntrack_netbios_n モジュールがロードされます。

#service iptables restart

Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]

しかし、問題はそのモジュールにはありません。アンロードを試みましたが、それでもうまくいきませんでした。

iptables を無効にすると、別のマシンから FTP にバックアップを転送できます。iptables が強制されている場合は、転送は失敗します。

答え1

FTP サーバーには、データを転送するためのチャネルが必要です。ポートは21接続を確立するために使用されます。したがって、データ転送を可能にするには、ポートも有効にする必要があります20。次の構成を参照してください。

まず、パッシブFTP接続が拒否されないように次のモジュールをロードします。

modprobe ip_conntrack_ftp

21受信ポートと送信ポートでFTP接続を許可する

iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"

20アクティブな受信および送信接続にFTPポートを許可する

iptables -A INPUT  -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"

最後にFTPパッシブ受信トラフィックを許可する

iptables -A INPUT  -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive inbound connections"

FTP とファイアウォールの問題の詳細については、以下を参照してください。http://slacksite.com/other/ftp.html#active

編集:NEWポート 21 入力ルールに追加されました。

答え2

私はすでにいくつかのブログなどでそのような広範なルールを見てきましたが、なぜ単純に使用しないのか疑問に思いました。

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

モジュールと一緒にnf_conntrack_ftp。これはより簡潔で読みやすく、特にファイアウォールでは一般的に良いことです...

ちなみに、カーネル4.7では変更があったようで、net.netfilter.nf_conntrack_helper=1経由して設定するかsysctl(たとえば、に入れる/etc/sysctl.d/conntrack.conf)、

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp

(見るここ詳細については)

答え3

FTP クライアント:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

FTP サーバー:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED -j ACCEPT

クライアント側でパッシブモードとアクティブモードを切り替えるには

ftp> passive
Passive mode on.
ftp> passive
Passive mode off.

答え4

アクティブ接続とパッシブ接続の両方が必要で、すでにESTABLISHED次のような接続を受け入れている場合:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

次に、ポート 21 を開いて、パッシブ ポート用の特別なルールを追加するだけです。ポート 20 はESTABLISHED上記のルールですでに受け入れられているため、ルールは必要ありません。

まず、次の場所で新しい接続を受け入れますport 21:

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

次に、パッシブ ポート用の CT ヘルパーを追加します1024:

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
iptables -A INPUT -p tcp -m conntrack --ctstate RELATED -m helper --helper ftp --dport 1024: -j ACCEPT

参照:

注記:FTP サーバーで次のように設定する必要があります1024:。FTP 構成でデフォルトのパッシブ ポートを検索します。そうしないと、FTP に関連しない可能性のあるポートが多すぎるほど開かれることになります。

重要な注意点:OUTPUTデフォルトでは になっているため、ルールを追加しませんでしたiptables -P OUTPUT ACCEPT。つまり、ボックスから出力される内容を信頼するということです。これは、特に NAT 設定では適切なオプションではない可能性があります。

非常に重要な注意:このような設定では、パッシブポートが隠されている(暗号化されている)ため、FTPSは機能しません。そのため、iptables適切なポートを推測する方法はありません。パッシブポートを使用して FTP over TLS を許可するように IPTables を変更するそしてhttps://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok

関連情報