着信 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
参照:
- https://github.com/rtsisyk/linux-iptables-contrack-exploit
- http://home.regit.org/wp-content/uploads/2011/11/secure-conntrack-helpers.html
注記: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