例として、すべてのソース/宛先からのすべてのポートをブロックするファイアウォールがあるとしましょう。
正常に実行するには、どのポートを開く必要がありますか?
ping google.com
...そして、ブラウザーを介してgoogle.comを閲覧するために開く必要がある他のポートはありますか?
ポート53(dns)80(http)と443(https)を開こうとしました。これで十分ではありません。iptablesを使用していますが、iptablesでこれを構成する方法を尋ねているのではなく、使用しているポートベースのファイアウォールに関係なく、どのポートを開く必要があるかを尋ねているだけです。
DNSの場合、ファイアウォールの内側のIPアドレスの任意のポートとファイアウォールの外側のIPアドレスのポート53の間のUDPパケットを許可する必要があります。
HTTPSの場合、ファイアウォールの内側のIPアドレスの任意のポートとファイアウォールの外側のポート443の間のTCPパケットを許可する必要があります。または、まれにファイアウォールの外側のポートを許可する必要があります(一部のWebサイトはデフォルトのポートです。HTTPの場合、ポート80と同じです。
TCPは接続されたプロトコルです。接続の両端は対称的ではなく、ファイアウォールは通常違いをもたらします。 (感染したマシンが検出されずにスパムを送信するのを防ぐために)送信メールを専用のリレーに強制的に通過させる以外に、送信接続を防ぐセキュリティ上の理由はほとんどありません。クライアントマシンの一般的な基本ファイアウォールは、すべてまたはほとんどの発信接続を許可し、着信接続をブロックします。
Pingの場合、ICMPを許可します。特定の種類のパケットをブロックする特別な理由がない限り、すべてのICMPを許可する必要があります。 ICMPを無差別にブロックすると、ネットワークの問題を診断しにくくなり、アプリケーションが適切なエラー応答を取得しないためにフラッドが発生する可能性があります。
以下は、典型的なクライアントマシンに適した簡単なLinuxファイアウォール構成です。これにより、SMTP以外のすべての処理をsmtp.example.com
以外のマシンに許可し、着信TCPポート22以外の接続(SSH))をブロックします。
iptables -F INPUT
# Accept everything on localhost
iptables -A INPUT -i lo -j ACCEPT
# Accept incoming packets on existing connections
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Accept DNS replies
iptables -A INPUT -p udp --sport 53 -j ACCEPT
# Accept incoming SSH connections
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Reject everything else that's incoming
iptables -A INPUT -j REJECT
iptables -F OUTPUT
# Forbid outgoing SMTP except to a known relay
iptables -A OUTPUT -p tcp --dport 22 ! -Host smtp.example.com -j REJECT
# Allow everything else that's outgoing
iptables -P OUTPUT -j ALLOW