certbot
Letscrypt証明書を取得して更新するには、実行時にhttpポート80を開いて閉じる必要があります。 (このサーバーには一般的なWebサービスはありません)。
私はiptables
letsencrypt "/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)ルールで使用できます。-I
nft
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