着信FTPを許可するiptables


32

着信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が強制されている場合、転送は失敗しました。

回答:


27

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
--sport 1024: and --dport 1024:範囲内のすべてのポート1024:32535が非特権ポートであることを意味することを 忘れていました 。つまり、特権アクセスのないユーザーはこれらのポートを使用してアプリケーションをテストできます。
バレンティンバジラミ

@Gokulである、それは正しい。クライアント接続をリッスンするポートでサーバーを制御できます。ただし、パッシブモードでは、--sportファイアウォールの問題を回避し、クライアントがサーバーに接続できるようにするには、非特権モードにする必要があります。
バレンティンバジラミ

2
まあ、追加できますがNEW,ESTABLISHED、それは問題ではありません。接続は常に最初のNEW状態にあり、次にジャンプしRELATEDて、この接続がすでに許可された接続に関連していることを示します。接続がESTABLISHED状態に変わると、両側(サーバー/クライアント)で接続が確立されたことを通知します。-m state --state ...代わりに試すことができます。
バレンティンバジラミ

1
NEW確かに重要ではありません。それなしでは機能しないようです。
レアンドロス

1
@ val0x00ffの必要性がわかりません--sport 1024:。クライアントのポートがルールに役立つのはなぜですか?ポート80からサーバーのパッシブポートに接続する場合、接続も許可する必要があります。
イヴァン

15

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

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に変更があったようです。そのため、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

(詳細はこちらをご覧ください)


1
カーネル4.7に関する情報は私の命を救い、何時間もこれを機能させようとしていました。シンプルecho "1" > /proc/sys/net/netfilter/nf_conntrack_helperですべてが期待どおりに動作します。
キーパー

1
すばらしいです!4.7はJessieカーネル4.9では解決できない問題でした!
アルナスバルティシウス

@Jakob他のサービスへのアクセスに使用される可能性のあるRELATED接続に問題があります:home.regit.org/wp-content/uploads/2011/11/…およびgithub.com/rtsisyk/linux-iptables-contrack-exploit
Yvan

6

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.

3
これには間違いなく賛成に値する。nf_conntrack_ftpモジュールのロードを忘れると、パッシブFTP接続とiptables接続追跡のトラブルシューティングを行うときに頭痛の種になります。このモジュールを使用すると、以前のFTPセッションが確立されることなく、これらのポートが任意の接続から保護されるように、「NEW」タイプを削除できます。
ライアングリッグス

5

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

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


2
クールに機能し、正しい方向を示してくれてうれしいです。正しい答えを探している他の人を助けるために、あなた自身の答えを解決済みとしてマークしてください。
バレンティンバジラミ

受け入れられた答えにはタイプミスがあると思います。私は信じている--dport 20:6553520からのすべてのポートを残している- 65535 1024年の間に任意のソースポートからオープン:65535、明示的に許可しない限り、おそらく、あってはならないことを暴露多くのサービスを残しています。私が意図したものだと思う--dport 1024:65535
-itnAAnti

0

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

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

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

最初に新しい接続を受け入れます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

こちらもご覧ください:

注:1024: FTPサーバーでasを設定する必要があります。FTP構成でデフォルトのパッシブポートを検索します。それ以外の場合は、FTPに関連していない可能性のあるポートを開きすぎます。

重要な注意:OUTPUTデフォルトはなので、ルールは追加しませんでしたiptables -P OUTPUT ACCEPT。箱から出ているものを信頼しているという意味です。特にNAT設定では、これは適切なオプションではない場合があります。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.