root アクセスでこれを試してください:
# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Accept on localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow established sessions to receive traffic
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
これにより、実行中のすべての接続が残酷に切断されることに注意してください - これには、サーバーの管理に使用する SSH 接続などが含まれます。これは、ローカル コンソールにアクセスできる場合にのみ使用してください。
SSH の例外を追加する方法については、Miphix の回答を参照してください。
SSH 経由でリモートで作業している場合は、これを追加することをお勧めします (-I
INPUT
の他のすべてのルールの前に挿入します ):
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
SSH サービスが別のポートでリッスンしている場合は、22
の代わりにそのポートを使用する必要があります。 .
そうしないと、誤ってアクセスできなくなる可能性があります。
他の回答はIPv6をカバーしていないことに注意してください!システムが IPv6 トラフィックを受け入れる場合、単一の iptables ルールが ipv6 トラフィックに適用されることはありません。
iptables / ip6tables を直接使用する代わりに、iptables-restore と save を使用することをお勧めします。これらのツールを使用すると、複数のルールで iptables 構成を指定し、1 つのコマンドで簡単にロードできます。
次の内容のファイル (私は iptables.rules と名付けました) を作成します:
*filter
# drop forwarded traffic. you only need it of you are running a router
:FORWARD DROP [0:0]
# Accept all outgoing traffic
:OUTPUT ACCEPT [623107326:1392470726908]
# Block all incoming traffic, all protocols (tcp, udp, icmp, ...) everything.
# This is the base rule we can define exceptions from.
:INPUT DROP [11486:513044]
# do not block already running connections (important for outgoing)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# do not block localhost
-A INPUT -i lo -j ACCEPT
# do not block icmp for ping and network diagnostics. Remove if you do not want this
# note that -p icmp has no effect on ipv6, so we need an extra ipv6 rule
-4 -A INPUT -p icmp -j ACCEPT
-6 -A INPUT -p ipv6-icmp -j ACCEPT
# allow some incoming ports for services that should be public available
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# commit changes
COMMIT
ICMP と特定のポートへのトラフィックを許可する場合は、いくつかの例を追加したことに注意してください。
次のコマンドでロードできます:
iptables-restore < iptables.rules
ip6tables-restore < iptables.rules
これで、ルールは IPv6 にも対応し、管理が容易になりました。
Debian ユーザーへの追加の注意:ルールに満足している場合は、apt install iptables-persistent
できます。 そのため、再起動後にルールが復元されます。ルールはシャットダウン時に自動保存されないため、netfilter-persistent save
を実行します 永続ルールを更新します。