1つのファイアウォールであって、2つではない
Debian 13 は nftables を /etc/nftables.conf とそれをロードするサービスとともに出荷しています。AlmaLinux 10 は nftables の上に firewalld を搭載し、そのサービスは /etc/sysconfig/nftables.conf がインクルードするものを読み取ります。1つを選んでください。firewalld を手書きのルールセットと一緒に実行すると、どちらでもないルールセットが生成されます。
systemctl disable --now firewalld # AlmaLinux, if going manual
systemctl enable --now nftablesルールセット
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
set ssh_flood {
type ipv4_addr
flags dynamic, timeout
timeout 1h
}
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
ct state invalid drop
iif lo accept
ip protocol icmp icmp type { echo-request, destination-unreachable, time-exceeded } accept
ip6 nexthdr ipv6-icmp accept
tcp dport 22 ct state new add @ssh_flood { ip saddr limit rate over 6/minute } drop
tcp dport 22 accept
tcp dport { 80, 443 } accept
udp dport 443 accept
counter comment "dropped by policy"
}
chain forward {
type filter hook forward priority filter; policy drop;
}
chain output {
type filter hook output priority filter; policy accept;
}
}人々が間違える部分:
- ICMPv6 は意図的に全面的に許可されています。近隣探索とパケット過大の両方がそこにあり、手でフィルタリングすると IPv6 が壊れ、1日半の間アプリケーションのバグとして見えます。
ssh_floodセットは、1分間に6つの新しい接続を超えるアドレスを1時間のタイムアウトリストに追加します。ログパーサーも cron ジョブもセカンドデーモンもありません。- IPv6 の場合、
type ipv6_addrでセットを複製し、ip6 saddrでルールを複製します。セットはシングルファミリーです。 udp dport 443は QUIC のためにあります。提供しない場合は削除してください。
自分をロックアウトせずにロードする
systemd-run --on-active=120 nft flush ruleset
nft -f /etc/nftables.conf最初のコマンドは、2分でルールセットをクリアする一時ユニットをスケジュールし、その名前を出力します。新しいセッションを開いてください。機能する場合は、タイマーを停止します:
systemctl stop run-u1234.timer機能しない場合は、待つと、マシンが自動的に戻れるようにします。空のルールセットはフィルタリングがないことを意味するので、一晩置いておくのではなく、仕事を終わらせてください。
実際に何をしているかを確認する
nft list ruleset
nft -a list chain inet filter input
nft list set inet filter ssh_flood-a はハンドルを表示します。これにより、ファイルを書き換えずに単一のルールを削除できます:
nft delete rule inet filter input handle 12カウンターは誰も尋ねない質問に答えます: 1週間後にゼロのルールは、間違っているか不要であり、その両方を知る価値があります。
トレース
パケットがルールセットが示すとおりに動作しない場合:
nft add rule inet filter input tcp dport 8443 meta nftrace set 1
nft monitor traceトレースルールは後で削除してください。それは無料ではなく安価です。
ホストファイアウォールが対象としないもの
それはポリシーをフィルタリングし、フラッドはフィルタリングしません。ボリューム攻撃は、ポートに到達するずっと前にエッジでドロップされ、インスタンス上のルールは、すでに処理されたパケットに CPU を費やすだけです。詳細は DDoS保護 を参照してください。
永続化
nft list ruleset > /etc/nftables.conf
systemctl restart nftablesエクスポートされたファイルの先頭に shebang と flush ruleset 行を戻してください。それらがないと、次のロードは実行中のルールセットに追加され、置き換えられず、すべてのルールが2回表示されます。