Open7

プライベートネットワーク内でACEME DNS01 challengeを実現する

あごしあごし

DNS-01 challengeで必要となるコンポーネント

  • PKI (hashicorp Vaultを使う)
  • DNS (powerDNSで建てる)
  • ACMEクライアント (Certbotを利用。今後はLegoにしようと思っている。)

上のコンポーネント使って、証明書を取得することはできた。DNSにTXTレコードを登録するところは手動になってしまっているので、DNSのAPIを使って自動登録できるようにしたい。
必須ではないがDNSSECを有効にして、セキュアに登録したい。

あごしあごし

powerdnsのDNSSEC有効化方法。

# vi /etc/pdns/pdns.conf
## 以下を追記。バックエンドがpostgresqlの場合。
gpgsql-dnssec=yes

# systemctl restart pdns
# pdnsutil secure-zone <<zone名>>

クライアント側は特に設定は不要っぽい。
本当にsecureになっているか確認したい。

あごしあごし

PowerDNS api有効化

とりあえずapiを有効化する。

 # vi /etc/pdns/pdns.conf
api=yes
api-key=<<任意の文字列を設定>>

# systemctl restart pdns

confファイルにAPI key書くの良くない。hashicorp vaultから取得する様にできないかな。
現在APIちゃんと使えているのか確認どうする?

あごしあごし

API使うにはpdns.confのwebserver系パラメータを変更する必要あった。

# vi /etc/pdns/pdns.conf
webserver=yes
// 外部からのリクエストを受信するには0.0.0.0か、DNSサーバの物理IPを設定
webserver-address=0.0.0.0
// デフォルトはlocalhostのみになっている。許可するネットワークアドレスを設定。
webserver-allow-from=192.168.0.0/24
あごしあごし

clientにlegoをインストールする。

https://go-acme.github.io/lego/installation/index.html
almalinuxだとsnapでインストール。まずはsnapを入れる。

snapdをインストールする。

# dnf install -y epel-release
# dnf install -y epel-next-release
# ln -s /var/lib/snapd/snap /snap
 echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' > /etc/profile.d/snap.sh
# systemctl enable --now snapd.service snapd.socket
Created symlink /etc/systemd/system/multi-user.target.wants/snapd.service → /usr/lib/systemd/system/snapd.service.
Created symlink /etc/systemd/system/sockets.target.wants/snapd.socket → /usr/lib/systemd/system/snapd.socket.

legoインストール

# snap install lego