すべてのポート(内外)をブロックするのは簡単ですが、「except」という言葉では困難です。条件を満たす規則がわかりません。
シモンズ:私はこの質問が新しいものではないことを知っています。しかし実際には、私は何も助けを見つけることができませんでした。だから、私はplsを助けて!
まずは! NOT記号です。
iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP
第二に、あなたが書いたルールは期待した結果を得られないかもしれません。あなたはポート80の接続への応答を含むすべてを落とします。したがって、あなたはそれに接続することができないでしょうWebサーバーの目的のために言う。
これらの規則は、関連する接続と確立された接続を許可するので、それが実際にあなたがやろうとしていることであれば、Webサーバーは機能するはずです。
iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP
# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
これはあなたにあなたが必要なものを与えるはずです
デフォルトのアクションをDROPに設定してから、80と443を許可するように例外ルールを作成できます。
# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
iptablesは、一致するものが見つかるまで「例外」のリストを調べます。それはそれから-j
パラメータによって指定されたアクションを実行します(この場合ACCEPT)。一致するものが見つからない場合は、デフォルトのポリシーにフォールバックしてパケットをドロップします。
この回避策では、すべてのサブドメインがロックアウトされることに注意してください。たとえば、この方法では、www.mydomain.comで正常に機能しますが、サブドメインはwww.sub.mydomain.comでDNSエラーが発生しないとします。