一時的な nftables 承認ルールを追加および削除する方法

一時的な nftables 承認ルールを追加および削除する方法

certbotLetscrypt証明書を取得して更新するには、実行時にhttpポート80を開いて閉じる必要があります。 (このサーバーには一般的なWebサービスはありません)。

私はiptablesletsencrypt "/etc/letsencrypt/renewal-hooks/pre" および ".../post" スクリプトで次のコマンドを使用しました。

iptables -I INPUT -p tcp --dport 80 -j ACCEPT -m comment --comment "Allow HTTP for certbot"

そして

iptables -D INPUT -p tcp --dport 80 -j ACCEPT -m comment --comment "Allow HTTP for certbot"

同じコマンドを取得するためにiptables-translate最初の(nsert)ルールで使用できます。-Inft

nft insert rule ip filter INPUT tcp dport 80 counter accept comment \"Allow HTTP for certbot\"

しかし、-D(elete)コマンドを使用すると、

Translation not implemented

それでは、nftablesを使用してこれを達成するための最良の方法は何ですか?

nft add table ...特別なテーブル全体を追加して削除することもできますかnft delete table ...?しかし、他のテーブルからパケットがドロップされないようにするにはどうすればよいですかpolicy drop

ベストアンサー1

ルールを削除するには、対応する「ハンドル」を知る必要があります。次のオプションを使用する-aと、このメッセージが表示されます。

nft -a list chain filter input

したがって、ポート80を開いて再び閉じる必要があるこの特別な場合は、letsencrypt "renewal-hooks"ディレクトリで次のスクリプトを使用します。

/etc/letsencrypt/renewal-hooks/から今後/fw-certbot-open

#!/bin/bash

# Open firewall to let certbot renew certificates

me=$(basename "$0")

logger -t "$me" "Opening port 80 for certbot"

## Reverse order since we do inserts
nft insert rule ip filter input              tcp dport 80 counter                                accept comment \"Allow HTTP for certbot\"
nft insert rule ip filter input ct state new tcp dport 80 log prefix \"nft:ok-certbot \" group 0 accept comment \"Allow and log HTTP for certbot\"

そして"/etc/letsencrypt/renewal-hooks/郵便はがき/fw-certbot-close":

#!/bin/bash

# Removing firewall rules created for certbot renew certificates

me=$(basename "$0")

logger -t "$me" "Closing port 80 opened for certbot"

## Remove port 80 accept rules
for h in $(nft -a list chain filter input \
           | awk '/dport 80 .* accept .* # handle [0-9]+/ {print $NF}')
do
    nft delete rule filter input handle $h
done

これはうまくいくようです。ハンドルを取得するnftために出力を解析せずにこれを実行するより簡単な方法があるかどうか疑問に思います。awk

おすすめ記事