Debian 9でProFTPD用のiptablesを設定しようとしています。アクセスはLAN内で行われます。 NATは含まれません。これまで読んだことによると、これは手動FTPを保証しませんか?
他の唯一の着信アクセスはSSHであり、これは単一のソースIPに制限されます。
適切なパッケージ更新にのみアウトバウンドアクセスが必要です。まだこれに対するルールを決めていません。
言及された規則ここ、FTPが正常に機能することを許可しますが、すべてのアウトバウンドトラフィックをブロックします。
現在の構成は
-A INPUT -p tcp -m tcp --dport 22 -s xxx.xxx.xxx.xxx -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -s yyy.yyy.yyy.yyy/25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -s yyy.yyy.yyy.yyy/25 -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
答え1
実際、ルールセットはアウトバウンドパケットに適している必要があります。問題は着信パケットにあります。答えるそのパケットは拒否されました。
主な問題は次のものです。
-A INPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
たとえば、パッケージアップデートを実行しようとすると、ツールはapt
Debianミラーサーバー(通常はHTTPターゲットポート80)への接続を送信します。ソースポートは任意の高いポートです(もちろん1024以上、12345と仮定)。
このパケットへの応答は、送信元ポートと宛先ポート番号が反転したDebianミラーから返されます。応答の送信元ポート番号は 80、宛先ポート番号は 12345 です。
ただし、受信ルールは、新しい接続であっても確立された接続であっても、送信元ポートが 1024 未満の受信パケットと一致しません。したがって、ポート80に接続要求を送信しますが、そのポートからの応答は無視されます。
私はあなたのものをお勧めします最初の2つルールを入力してください:
-A INPUT -i lo -j ACCEPT # accept anything from the loopback interface
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
最初の行は、ループバックインターフェイス、つまりネットワークプロトコルを使用して互いに通信するコンピュータのプロセスを介してすべてを可能にします。ループバックインターフェイスを介してトラフィックが入ると、定義上ソースが同じシステムにあるため、通常これをブロックする理由はありません。
2行目は、発信接続とそれに関連するすべてのエントリに対する有効な受信応答を許可します(たとえば、特定の接続試行で何が間違っているかを示すICMPエラーパケット)。さらに、この行は、FTPの対応する特別な接続追跡ヘルパーが有効になっている場合にアクティブであるか手動であるかにかかわらず、FTPデータ接続を処理します。読んでください...
(-m state
あなたが使用している一致は古くなっており、使用されなくなりました。私の一致-m conntrack --ctstate ESTABLISHED,RELATED
はデフォルトで更新されたバージョンです。)
FTP接続に適切な接続追跡ヘルパーを呼び出すと、はるかに簡単です。以前はこれが自動でした。しかし、誰かが自動アシスタント選択を乱用する方法を見つけて無効にする必要がありました。
したがって、ネットワークからTCPポート21に入るすべての接続が有効なFTP制御接続になるようにシステムに通知します。
-t raw -A PREROUTING -p tcp -s yyy.yyy.yyy.yyy/25 --dport 21 -j CT --helper ftp
着信 FTP 制御接続が確立されると、FTP conntrack ヘルパーはその中で実行されたすべてのファイル転送コマンドを監視し、自動的に conntrack サブシステムに関連する FTP データ接続を認識させ、以前の「ESTABLISHED、RELATED」ルールがその接続を受け入れます。接続のみを許可します。それら:潜在的なFTPデータ接続のためにもはやさまざまなポートを開かないでください!
FTP conntrack ヘルパーを使用すると、ポート 20 のルールや--sport 1024:65535
を含むルールは不要になります--dport 20:65535
。
手動FTPデータ接続をハイジャックしようとする試みも自動的にブロックされます。接続追跡サブシステムは、ハイジャッカーの接続がデータ転送を呼び出したFTP制御接続とは異なるソースからのものであることを検出するため、ハイジャックの試みはブロックされません。一致が成功し、デフォルトで拒否されました。
Debian アップデートに FTP ミラーリングを使用する場合は、発信 FTP 接続に対しても同様の処理を行う必要があります。これは次の方法で行うことができます。
-t raw -A OUTPUT -p tcp --dport 21 -j CT --helper ftp