web-dev-qa-db-ja.com

着信FTPを許可するiptables

着信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の場合、転送は失敗しました。

33
Being Gokul

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

コメントには文字数が多すぎないため、回答として入力してください。ご協力ありがとうございます。

5
Being Gokul

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を追加しました。

27

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

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

(詳細は こちら を参照)

15
Jakob

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.
6
Sathish

アクティブ接続とパッシブ接続の両方が必要で、すでに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を参照してください。

0
Yvan