iptablesルールが機能しない

iptablesルールが機能しない

ルールを追加したhttps://example.com:9700にもかかわらず、iptableルールがアクセスをブロックしている理由がわかりません。accept

まずすべてを片付ける

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

次にすべてをドロップし、sshと9700ポートの例外を追加します

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 9700 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 9700 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

サービスはクリア後に動作し、2 番目のルール セット後に動作を停止します。

SSHのルールは完全に正常に機能していることに注意してください。ルールを追加した後、SSH経由でサーバーに再接続できます。

DNSの問題 回答の 1 つによると、検証済み DNS は機能していません。ただし、IP アドレス経由でアクセスできない理由は説明されていません。https://xx.xxx.xx.x:9700

答え1

example.com の名前を解決できますか? いずれかのネーム サービスへのアクセスをブロックすると、マシンは example.com にアクセスできなくなります。/etc/hosts にホスト example.com とその IP アドレスを追加するか、DNS に iptables 例外を追加する必要があります。

投稿されたとおりここDNS ルックアップの例外は次のようになります。

iptables -A INPUT -p udp --source-port 53 -j ACCEPT

編集:

DNS の問題を無視したので、ルールを詳しく調べたところ、iptables の理解では、うまくいかないようです。宛先ポート 9700 (マシン上) で (マシンへの) INPUT トラフィックを許可し、ローカル ポート 9700 から (マシンから外部への) OUTPUT トラフィックを許可しています。

あなたが望んでいるのは、まさにその逆です (あるいは私が間違っているのでしょうか?): マシンがポート 9700 で外部サーバーにアクセスし、このサーバーが応答できるようにしたいのです。

したがって、最後の 2 つのルールは次のようになります。

iptables -A OUTPUT -p tcp -m tcp --dport 9700 -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

これにより、コンピュータ上の任意のポートから始まるトラフィック (プロトコルが送信トラフィックに使用するポートを制御することはできないため) がポート 9700 上の他のマシンに送信されるようになり、パケットが既に確立されている接続の一部である場合は、世界中の他のマシンからコンピュータへのトラフィックも送信されるようになります。

答え2

試す:

iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

iptables -t filter -A INPUT -i lo -j ACCEPT

iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

iptables -t filter -A INPUT -p tcp --dport 9700 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 9700 -m state --state ESTABLISHED -j ACCEPT

example.com の IP アドレスを解決する DNS サーバーは同じマシンではないと想定しています。

また、OUTPUT チェーンのポリシーを ACCEPT に設定しても特に問題はないと思います。試してみてください。

この一連のルールは私にとっては有効です。あなたにも有効であるはずです。

よろしくお願いします!

関連情報