着信FTPトラフィックを許可したい。
CentOS 5.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がenforcingの場合、転送は失敗しました。
NEWを追加して修正したと思います。
これで、iptablesファイルは次のようになります。
# Generated by iptables-save v1.3.5 on Thu Oct 3 22:25:54 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [824:72492]
-A INPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -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 --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Oct 3 22:25:54 2013
コメントには文字数が多すぎないため、回答として入力してください。ご協力ありがとうございます。
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"
FTPポート20
をアクティブな接続の送受信に許可します
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
編集:ポート21入力ルールにNEW
を追加しました。
私はすでにいくつかのブログなどでそのような広範なルールを見て、なぜ単に使用しないのか疑問に思いました
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
nf_conntrack_ftp
モジュールと一緒に。これは、より簡潔で読みやすく、特にファイアウォールでは一般的に良いことです...
FWIW、カーネル4.7で変更があったようです。そのため、sysctl
を介してnet.netfilter.nf_conntrack_helper=1
を設定する(たとえば、/etc/sysctl.d/conntrack.conf
に入れる)か、
iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
(詳細は こちら を参照)
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.
アクティブ接続とパッシブ接続の両方が必要で、すでにESTABLISHED
接続を受け入れている場合は、次のようになります。
iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
次に、ポート21を開いて、パッシブポート用の特別なルールを追加するだけです。ポート20には上記のESTABLISHED
ルールですでに受け入れられているため、ルールは必要ありません。
最初にport 21
で新しい接続を受け入れます:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
次に、パッシブポート1024:
のCTヘルパーを追加します。
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に対応していない可能性のあるポートを開きすぎます。
重要な注意:デフォルトはiptables -P OUTPUT ACCEPT
であるので、OUTPUT
ルールを追加しませんでした。私が自分の箱から出ているものを信頼していることを意味します。特にNAT設定では、これは良いオプションではないかもしれません。
非常に重要な注意:FTPSはこのような設定では機能しません。パッシブポートは非表示(暗号化)であるため、iptables
は、適切なポートを推測します。 パッシブポートを使用してTLS over FTPを許可するためのIPTablesの変更 および https://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-okを参照してください。