certbot
Letscrypt 인증서를 얻고 갱신하려면 런타임에 http 포트 80을 연 다음 닫아야 합니다 . (이 서버에는 일반 웹 서비스가 없습니다).
저는 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
답변2
이것mivk에서 제공한 답변당신이 요청한 것을 정확하게 수행할 것입니다.
관리하기 더 쉬울 수 있는 또 다른 접근 방식은 일련의 임시 규칙을 사용하고 더 이상 필요하지 않을 때 새로 고치는 것입니다.
# nft add chain ip filter temporary_web
# nft insert rule ip filter INPUT tcp dport 80 counter jump temporary_web comment \"Allow HTTP for certbot\"
그러면 certbot 전에 다음 명령을 실행할 수 있습니다.
# nft insert rule ip filter temporary_web counter accept
certbot이 실행된 후 다음을 통해 체인을 지울 수 있습니다.
# nft flush chain ip filter temporary_web