シンプルルータでiptablesを使用してWANからの着信トラフィックをブロックすると、発信トラフィックは終了します(Ubuntu)

シンプルルータでiptablesを使用してWANからの着信トラフィックをブロックすると、発信トラフィックは終了します(Ubuntu)

NATルーターとして機能する単純なUbuntuシステムから着信トラフィックを破棄するのに問題があります。

これまで私がしたこと:

net.ipv4.ip_forward=1有効にしました/etc/sysctl.conf

NATを有効にするには、iptablesで有効にします。

sudo iptables ! -o lo -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE

いいですね。すべてが期待どおりに動作します。

今WANインターフェイスから着信トラフィックを削除したいと思います。だから私は次のことをしました。

# SSH still allowed
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT )

それから:

sudo iptables -A INPUT -i eth0 -j DROP

残念ながら、最後のコマンドはシステム自体のすべてのhttpトラフィックをブロックします。発信トラフィックは許可されなくなりました。 NATシステムではまだ動作します。

sudo iptables -A INPUT -i eth0 -j DROP したがって、インターネットトラフィックのみをブロックしたい場合、このルールは間違っているようです。

答え1

(tcp)接続は双方向にデータを転送することを忘れないでください。簡単なコマンドには以下がcurl google.com含まれます。

  • DNSサーバークエリ
  • DNSサーバーから応答を受け取る
  • リモートWebサイトにHTTPリクエストを送信する
  • リモートウェブサイトからHTTP応答を受信する

すべての着信トラフィックブロックを使用すると、-A INPUT -i eth0 -j DROPすべてのトランザクションの「受信...」部分がブロックされます。少なくともESTABLISHED接続に関連するトラフィックを許可する必要があります。現在実行中の作業の簡単なファイアウォールは次のとおりです。

# Allow RELATED and ESTABLISHED traffic
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow ICMP traffic
-A INPUT -p icmp -j ACCEPT

# Allow all traffic on lo. This isn't strictly necessary for what you're
# doing, but it helps avoid shooting yourself in the foot later
# on.
-A INPUT -i lo -j ACCEPT

# Allow new ssh connections
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

# Reject anything else coming in on eth0. You could use
# DROP here if you prefer.
-A INPUT -i eth0 -j REJECT --reject-with icmp-host-prohibited

(これはFedoraのパッケージで生成されたデフォルトのファイアウォールルールセットですiptables-services。)

関連情報