80,443を除くすべてのポートをiptablesでブロックする方法は?[複製]


14

すべてのポート(インとアウト)をブロックするのは簡単ですが、「except」という言葉では難しいです。条件を満たすルールがわからない。

PS:私はこの質問が新しいものではないことを知っています。しかし実際、私は何も助けを見つけませんでした。だから、私を助けてください!


すべてのポートを閉じてから、次の行で単一のポートを開くことはできませんか?
sinni800 14年

これを行います:iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -I INPUT -p tcp --dport 80 -j ACCEPT ------動作しません!
user71169

回答:


24

まず!NOTシンボルです。

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

第二に、あなたが書いたルールは期待した結果をもたらさないかもしれません。ポート80での接続への応答を含むすべてをドロップします。したがって、Webサーバーの目的のために接続することはできません。

これらのルールはRELATED接続とESTABLISHED接続を許可しているため、実際に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

2
Bashシェルが使用されている場合、!このようにエスケープするべきではありません\!か?
クリスティアン・Ciupitu 14年

@CristianCiupituいいえ、エスケープする必要はありません。奇妙なことが起こっているかもしれませんが、私のbashではそれをエスケープする必要はありません。
サイバーナード14年

「iptables -nvL」の出力をチェックして、接続中のパッケージを確認しました。うまくいくようです、あなたのルール。しかし、これらのポートを使用する一部のアプリを使用する以外、本当に機能するかどうかは確認できません。アプリがポートを使用するということは、そのポートのみを使用するという意味ではありません。それで、確認する提案はありますか?
user71169 14年

1
@cybernard、はい、あなたは正しいです。平野を!エスケープする必要はありません。誤報については申し訳ありません。
クリスティアンシウピトゥ14年

3
@MohammadShahidルールは自動的に永続的なものではなく、再起動すると消えてログインできます。SSH接続を維持する場合は、ポートのリストに22を追加する必要があります。
サイバーナード

5
# 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

これで必要なものが得られるはずです


3
あなたはSSHを介して接続されている場合は、TCPポート22開く必要があります覚えて
マクシミリアンAST

はい、SSHポートを忘れないでください。おそらく、デフォルトのポリシーを削除する前にSSHポートを追加する必要があります。;)
ジェームスリトル

3

デフォルトのアクションを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エラーに対して開かれないとします。


動作するはずですが、そうではありません。私はとても混乱しています。
user71169 14年

何が機能しないのですか?すべての着信パケットを許可しますか、それとも許可しませんか?の出力で質問を更新できますiptables -nvLか?
mtak 14年

なぜ反対票なのか?私はこれを運用環境で実行しているので、100%確実に機能します。
mtak 14年

ごめんなさい!それは私ではありません、誰かがそれをしました:))はい それが私が質問をしなければならない理由です。
user71169 14年

2
これをしないでくださいssh
アシュシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.