AlmaLinux8をPostfix+dovecotでE-mailサーバーにする

・ システムアカウントとE-mailアカウントは別にしたい
・ user1@hirohiro716.comのようなアドレスで主に送受信する
・ 別名でuser1@alias.hirohiro716.comでも受信したい
・ メーリングリストも使用したい
・ AlmaLinuxのバージョン: 8.5
・ Postfixのバージョン: 3.5.8
・ Dovecotのバージョン: 2.3.8
・ プロトコル: smtp/smtps/imaps/pop3s

DNSレコード

先にDNSレコードを登録しておく。
mydomain: email.hirohiro716.com
virtual_mailbox_domains: hirohiro716.com
virtual_alias_domains: alias.hirohiro716.com

email.hirohiro716.com A 0 153.126.160.145
hirohiro716.com A 0 153.126.160.145
hirohiro716.com MX 10 hirohiro716.com
hirohiro716.com TXT 0 v=spf1 +mx ~all
alias.hirohiro716.com A 0 153.126.160.145
alias.hirohiro716.com MX 10 alias.hirohiro716.com
alias.hirohiro716.com TXT 0 v=spf1 +mx ~all

SSL証明書

この手順ではZeroSSLで発行した証明書を使用する。ZeroSSLにログインして発行した証明書のzipファイルを解凍する。

# unzip email.hirohiro716.com.zip -d /etc/ssl/email.hirohiro716.com/

解凍されたファイルは「ca_bundle.crt」「certificate.crt」「private.key」で、中間CA証明書がないので作成する。

# cd /etc/ssl/email.hirohiro716.com/
# cat certificate.crt ca_bundle.crt > fullchain.crt

証明書のSELinuxコンテキストのラベル付けを復元する。

# restorecon -RF /etc/ssl/email.hirohiro716.com/

Dovecot

Dovecotをインストールする。

# dnf install dovecot

SSL証明書の設定をする。
※変更箇所のみ記載

ssl_cert = </etc/ssl/email.hirohiro716.com/fullchain.crt
ssl_key = </etc/ssl/email.hirohiro716.com/private.key

使用するプロトコルを設定する。
※変更箇所のみ記載

protocols = imap pop3

認証の際に受け付けるポート、Postfix認証用ソケットファイルの設定をする。ソケットファイルのパーミッションとか所有者とかはコメントを読む限り0666で問題なさそうなのでそのまま。
※変更箇所のみ記載

service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
unix_listener /var/spool/postfix/private/auth {
  mode = 0666
}

バーチャルメールボックス用のシステムアカウントとディレクトリを作成する。

# groupadd -g 5000 vmail
# useradd -u 5000 -g vmail -s /sbin/nologin vmail
# mkdir /var/spool/mail/virtual
# chown vmail:vmail /var/spool/mail/virtual
# chmod 770 /var/spool/mail/virtual

Dovecotにバーチャルメールボックスの場所を設定する。
※変更箇所のみ記載

mail_location = maildir:/var/spool/mail/virtual/%d/%n/Maildir

Dovecotの認証方法に関する設定を変更する。システムアカウントで認証はしない。
※変更箇所のみ記載

#!include auth-system.conf.ext
!include auth-passwdfile.conf.ext
!include auth-static.conf.ext

auth-passwdfile.conf.extはデフォルトのまま使用する。

passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}
userdb {
  driver = passwd-file
  args = username_format=%u /etc/dovecot/users
}

auth-passwdfile.conf.extで指定されているusersファイルを作成する。

user1@hirohiro716.com:{PLAIN}password-1234
user2@hirohiro716.com:{PLAIN}password-5678

auth-static.conf.extを編集して作成したアカウント「vmail」を指定する。homeの指定はしなくても大丈夫だと思われる。
※変更箇所のみ記載

userdb {
  driver = static
  args = uid=vmail gid=vmail
}

Postfix

基本的な設定

Postfixをインストールする。

# dnf install postfix

main.cfを編集して基本的な設定をする。
※変更箇所のみ記載

# Not matching the actual hostname.
myhostname = email.hirohiro716.com
mydomain = $myhostname
myorigin = $mydomain

# Receive mail on all network interfaces.
inet_interfaces = all

# Disable IPv6.
inet_protocols = ipv4

# Specifies the domain that this machine delivers locally.
mydestination = $myhostname, localhost.$mydomain, localhost

# Not publish.
smtpd_banner = $myhostname ESMTP unknown

# Certificate settings.
smtpd_tls_cert_file = /etc/ssl/email.hirohiro716.com/fullchain.crt
smtpd_tls_key_file = /etc/ssl/email.hirohiro716.com/private.key

# Disable user search.
disable_vrfy_command = yes

# SASL settings.
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination

# Client restriction settings.
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client, permit

# HELO restriction settings.
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, reject_unknown_hostname, reject_non_fqdn_hostname, reject_invalid_hostname, permit

# Sender restriction settings.
smtpd_sender_restrictions = permit_mynetworks, reject_unknown_sender_domain, reject_non_fqdn_sender

master.cfを編集して利用するプロトコルの種類を設定する。smtpsのsmtpd_tls_wrappermodeを有効にしないとtcp/465でもSTARTTLSが試行される。
※変更箇所のみ記載

smtp      inet  n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
メールの容量に関する設定

現在のサイズに関する設定値を確認する。

berkeley_db_create_buffer_size = 16777216
berkeley_db_read_buffer_size = 131072
body_checks_size_limit = 51200
bounce_size_limit = 50000
header_size_limit = 102400
lmdb_map_size = 16777216
mailbox_size_limit = 51200000
message_size_limit = 10240000
tcp_windowsize = 0

メールボックスが50MB、メッセージが10MBに制限されている。ちょっと少ないので設定変更する。再度「main.cf」を編集して最下部に追記する。
※追記する箇所のみ記載

# Maximum mailbox size 1GB. Maximum message size 20MB.
mailbox_size_limit = 1024000000
message_size_limit = 20480000
バーチャルメールボックスの設定

バーチャルメールボックスの設定をする。再度「main.cf」を編集して最下部に追記する。
※追記する箇所のみ記載

# Virtual mailbox settings.
virtual_mailbox_domains = hirohiro716.com
virtual_mailbox_base = /var/spool/mail/virtual
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

main.cfで指定したバーチャルメールボックスの場所を定義するファイルを作成する。

user1@hirohiro716.com hirohiro716.com/user1/Maildir/
user2@hirohiro716.com hirohiro716.com/user2/Maildir/

作成したvmailboxから検索テーブル(vmailbox.db)を生成する。

# postmap /etc/postfix/vmailbox
バーチャルエイリアスの設定

バーチャルエイリアスの設定をする。再度「main.cf」を編集して最下部に追記する。
※追記する箇所のみ記載

# Virtual ailias settings.
virtual_alias_domains = alias.hirohiro716.com
virtual_alias_maps = hash:/etc/postfix/virtual

main.cfで指定したバーチャルエイリアスの転送先を定義するファイルを作成する。

@alias.hirohiro716.com @hirohiro716.com

作成したvirtualから検索テーブル(virtual.db)を生成する。

# postmap /etc/postfix/virtual
メーリングリストの設定

メーリングリストはバーチャルエイリアスの設定で実現する。再度「main.cf」を編集して「virtual_alias_maps」に「regexp:/etc/postfix/ml」をカンマ区切りで追記する。
※変更箇所のみ記載

virtual_alias_maps = hash:/etc/postfix/virtual, regexp:/etc/postfix/ml

main.cfで指定したメーリングリストの設定を定義するファイルを作成する。

# Group1
/^group1@(hirohiro716\.com|alias\.hirohiro716\.com)$/
        user1@hirohiro716.com,
        user2@hirohiro716.com,

# Team2
/^team2@(hirohiro716\.com|alias\.hirohiro716\.com)$/
        user1@hirohiro716.com,

ファイアウォールの例外設定をする。

# firewall-cmd --permanent --add-service={smtp,smtp-submission,smtps,imaps,pop3s}
# firewall-cmd --reload

サービスを有効化して実行する。

# systemctl enable --now dovecot
# systemctl enable --now postfix

AlmaLinux8にkernel5.4をインストールする

環境

・ ディストリビューション: AlmaLinux 8.5
・ Linuxカーネル: 4.18.0-348.20.1.el8_5.x86_64

手順

ELRepoを利用してインストールを行うので、GPGキーをインポートする。

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

ELRepoリポジトリを追加する。

# dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm

kernel-ltの中身を確認する。ltはLTSの略。

名前         : kernel-lt
バージョン   : 5.4.189
リリース     : 1.el8.elrepo
Arch         : x86_64
サイズ       : 70 k
ソース       : kernel-lt-5.4.189-1.el8.elrepo.src.rpm
リポジトリー : elrepo-kernel
概要         : The Linux kernel. (The core of any Linux-based operating system.)
URL          : https://www.kernel.org/
ライセンス   : GPLv2
説明         : The kernel-lt meta package.

kernel-ltをインストールする。

# dnf --enablerepo=elrepo-kernel install kernel-lt kernel-lt-devel kernel-lt-headers

再起動してブート時に新しくインストールしたカーネルを選択する。

# reboot

AlmaLinux8.5にリモートデスクトップで接続する

EPELリポジトリを追加する。

# dnf install epel-release

xrdpをインストールする。

# dnf install xrdp

ファイアウォールに例外を追加する。

# firewall-cmd --permanent --add-service=rdp
# firewall-cmd --reload

サービスを有効化して起動する。

# systemctl enable xrdp
# systemctl start xrdp

PostgreSQLストリーミングレプリケーション設定(AlmaLinux8)

OS規定のversion:10を使用。

2台構成

host:sv1 ip:192.168.0.100 略称:プライマリ
host:sv2 ip:192.168.0.101 略称:セカンダリ

プライマリとセカンダリの共通設定

インストールする。

# dnf install postgresql-server postgresql-devel postgresql-contrib

ファイアウォールに例外を追加する。

# firewall-cmd --add-service=postgresql --permanent
# firewall-cmd --reload

データベースを初期化してデータベースクラスタを作成する。

# postgresql-setup initdb

サービスを有効化する。

# systemctl enable postgresql

プライマリの設定

サービスを起動する。

# systemctl start postgresql

レプリケーション用ユーザーを作成する。

# su postgres
$ psql
=# CREATE USER replication_user REPLICATION PASSWORD 'password';
=# \q

外部からの通信を許可。最下部に下記を追記する。

host    replication    replication_user    192.168.0.0/24    md5

postgresql.confを編集して下記8行を変更する。
※synchronous_commitはシステム要件によって変更した方が良い

listen_addresses = '*'
wal_level = hot_standby
fsync = on
synchronous_commit = off
wal_sync_method = fsync
max_wal_senders = 2  ※プライマリを含んだレプリケーションサーバーの数を入れる
wal_keep_segments = 32  ※8~32が目安らしい
synchronous_standby_names = '*'

ついでに下記設定値がシステム要件に合っているか確認する。

max_connections = 300  ※同時接続数
shared_buffers = 1024MB  ※物理メモリの1/4程度
work_mem = 8MB  ※物理メモリの1/500程度だが最大8MB
effective_cache_size = 2048MB  ※物理メモリの1/2程度

サービスを再起動する。

# systemctl restart postgresql

セカンダリの設定

postgresqlサービスが停止した状態でdataを空にする。

# rm -r -f /var/lib/pgsql/data/*

先程作成したレプリケーション用ユーザーを使用してプライマリからデータをコピーする。
※-Rオプションはrecovery.confを自動作成する指定
※-Pオプションは進捗を表示する指定

# su postgres
$ pg_basebackup -R -h 192.168.0.100 -p 5432 -U replication_user -D /var/lib/pgsql/data/ -P

/var/lib/pgsql/data/内のすべてのファイルの所有者/所有グループがpostgresになっているか確認する。

ll /var/lib/pgsql/data/

/var/lib/pgsql/data/postgresql.confを編集して設定を変更する。

hot_standby = on

postgresqlサービスを起動する。

# systemctl start postgresql

プライマリサーバーで下記SQLを実行するとレプリケーションされているか確認できる。

SELECT * FROM pg_stat_replication;

フェイルオーバーする際はセカンダリで下記コマンドを実行する。

# su postgres
$ pg_ctl promote -D /var/lib/pgsql/data/

FreeIPAサーバーを4.6.8から4.9.6へ移行する

移行元

・ ディストリビューション: CentOS 7.9
・ ホスト名: ipa1.local.example.com
・ IPアドレス: 192.168.0.10
・ IPAサーバー: 4.6.8

移行先

・ ディストリビューション: AlmaLinux 8.5
・ ホスト名: newipa1.local.example.com
・ IPアドレス: 192.168.0.20
・ IPAサーバー: 4.9.6

重要な留意事項

移行先の4.9.6にはca設定を含むレプリカが作成できない不具合があるため、試した限り移行元から移行先へのレプリカ作成は一度しか実行できない。一度でも4.9.6でレプリカを作成した場合、それ以降は4.6.8のca設定を含むレプリカを4.9.6で作成できなくなった。

4.9.6への移行を実行する際に注意すること

この作業手順でca設定などが消失しても運営者は一切責任とりません

・移行元のバックアップを作成してから実行する
・移行先のFQDNは本番プライマリサーバーと同一にする

移行元と移行先のFQDNが同一の場合

4.9.6のレプリカ作成前なら4.6.8同士のレプリカを作成できるので、それを利用して4.6.8のレプリカを作成し、プライマリに変更して移行元とする。
参考ページ: dna範囲の確認方法

① 一時的に移行元と同じ4.6.8でcaを含むバックアップ用のレプリカを作成する
② IdMのWebUIなどで「IPA CA renewal master」をバックアップ用のレプリカに変更する
③ 移行元のdna範囲を控える
④ 移行先と同じFQDNのIPAサーバーを削除する
⑤ さっきの記事を参考に控えたdna範囲をバックアップ用のレプリカにセットする

移行元(CentOS 7.9)での作業

移行元でファイアウォールを無効化しておく。使用しているポートが違うのか例外設定していても失敗する。

# systemctl stop firewalld

移行元のIdMにWEBブラウザでアクセスして、移行先のhostを追加する。

移行先(AlmaLinux 8.5)での作業

移行先のホスト名をFQDNに変更する。

# hostnamectl set-hostname newipa1.local.example.com

参照するDNSサーバーを移行元IPAサーバーにする。

# nmcli connection modify コネクション名 ipv4.dns 192.168.0.10
# nmcli connection up コネクション名

必要なパッケージをインストールする。

# dnf install @idm:DL1
# dnf install ipa-server ipa-server-dns

IPAクライアントとして設定する。

# ipa-client-install

初回ログイン時にホームディレクトリを自動生成するよう設定する。

# authconfig --enablemkhomedir --update

ファイアウォールの例外を登録する。

# firewall-cmd --permanent --add-service={freeipa-ldap,freeipa-ldaps,freeipa-replication,dns,ntp,http,https}
# firewall-cmd --reload

ca設定を含むレプリカを作成する。
※DNSとしても動作させるため「–setup-dns」オプション指定

# ipa-replica-install --setup-ca --setup-dns --forwarder <forwarderのIPアドレス1> --forwarder <forwarderのIPアドレス2>

参照するDNSサーバーを自身にする。

# nmcli connection modify コネクション名 ipv4.dns 192.168.0.20
# nmcli connection up コネクション名

「IPA CA renewal master」を移行先に変更する。

# kinit admin
# ipa config-mod --ca-renewal-master-server newipa1.local.example.com

移行元のdna範囲を確認する。
※必要に応じて予め「kinit admin」で認証する

# ipa-replica-manage dnarange-show

確認した移行元のdna範囲を移行先にセットする。
※必要に応じて予め「kinit admin」で認証する

# ipa-replica-manage dnarange-set newipa1.local.example.com 1304400077-1304599999

AlmaLinux8でIPAユーザー認証できるsambaファイルサーバーの設定

環境

ここの手順で構築したIPAサーバーで認証する。

・ AlmaLinuxのバージョン: 8.5
・ ホスト名: samba.local.example.com
・ IPアドレス: 192.168.0.12
・ sambaのバージョン: 4.14.5
・ ipa-clientのバージョン: 4.9.6

IPAサーバーでの作業手順

IPAサーバーのIdMにWEBブラウザでアクセスして、ホスト「samba.local.example.com」をIPアドレス「192.168.0.12」で追加する。

IPAサーバーでsambaからの認証要求を処理するために必要なパッケージをインストールする。

# dnf install ipa-server-trust-ad

下記コマンドを実行してsambaを信頼設定する。

# ipa-adtrust-install

ファイアウォールに例外を登録する。

# firewall-cmd --permanent --add-service=freeipa-trust
# firewall-cmd --reload

IPAサーバーを再起動する。

# systemctl restart ipa

※セカンダリIPAサーバーでもsambaからの認証要求を処理したい場合は同様の設定手順をセカンダリでも行う必要がある

Sambaサーバーでの作業手順

FQDNでホスト名を設定する。

# hostnamectl set-hostname samba.local.example.com

必要なパッケージをインストールする。

# dnf install ipa-client-samba

IPAクライアントとして設定する。

# ipa-client-install

共有ディレクトリを作成する。
※root以外がアクセスできないようにする

# mkdir -p /var/samba/share
# chmod 770 /var/samba/share

samba構成ユーティリティを実行して初期設定する。

# ipa-client-samba

初期設定されたsambaの設定ファイルを編集して最下行に追記する。
※「force user」にrootを指定してファイル操作をrootで実行させる

[share]
path = /var/samba/share
create mask = 0660
directory mask = 0770
force user = root
writable = yes
valid users = @testgroup

ファイアウォールに例外を登録する。

# firewall-cmd --permanent --add-service=samba
# firewall-cmd --reload

SELinuxのラベル付けを行う。

# semanage fcontext -a -t samba_share_t "/var/samba/share(/.*)?"
# restorecon -RF /var/samba/share/

SELinuxにsmbdによるパブリックディレクトリへの書き込みを有効にする。

# setsebool -P allow_smbd_anon_write true

サービスを有効にして起動する。

# systemctl enable --now smb
# systemctl enable --now winbind

AlmaLinux8でのFreeIPAサーバーの設定

前提条件

・ AlmaLinuxのバージョン: 8.5
・ ipaサーバーのバージョン: 4.9.6
・ プライマリのIPアドレスは192.168.0.10
・ セカンダリのIPアドレスは192.168.0.11

プライマリサーバーの設定

FQDNでホスト名を設定する。
※FQDNが192.168.0.10に名前解決できるようにしておく

# hostnamectl set-hostname ipa1.local.example.com

モジュールを検索して必要そうなものを特定する。

$ dnf module list

idmのDL1にServerと書いてあったので、それをインストールする。

# dnf install @idm:DL1

モジュールのインストールが完了したら、必要なパッケージをインストールする。

# dnf install ipa-server ipa-server-dns

対話型のインストーラーを起動する。
※同時にbindも設定してもらう
※DNSフォワーダーも設定する
※そのほかは大体Enterで続行した

# ipa-server-install

ファイアウォールの例外を登録するよう促されるので登録する。
※サービス名で設定する場合は「ldap」ではなく「freeipa-ldap」なので注意
※freeipa-replicationはセカンダリを構築しない場合はいらない

# firewall-cmd --permanent --add-service={freeipa-ldap,freeipa-ldaps,freeipa-replication,dns,ntp,http,https}
# firewall-cmd --reload

参照するDNSサーバーを自身にする。

# nmcli connection modify コネクション名 ipv4.dns 192.168.0.10
# nmcli connection up コネクション名

chronyのserver/clientの設定をする。
※変更箇所のみ記載

# Allow NTP client access from local network.
#allow 192.168.0.0/16
allow 192.168.0.0/24

# Select which information is logged.
#log measurements statistics tracking
server ntp.nict.jp iburst

chronydを再起動する。

# systemctl restart chronyd

初回ログイン時にホームディレクトリを自動生成するよう設定する。

# authconfig --enablemkhomedir --update

セカンダリサーバーの設定

プライマリのIdMにWEBブラウザでアクセスして、セカンダリのhostを追加する。

セカンダリのホスト名をFQDNに変更する。

# hostnamectl set-hostname ipa2.local.example.com

参照するDNSサーバーをプライマリIPAサーバーにする。

# nmcli connection modify コネクション名 ipv4.dns 192.168.0.10
# nmcli connection up コネクション名

必要なパッケージをインストールする。

# dnf install @idm:DL1
# dnf install ipa-server ipa-server-dns

IPAクライアントとして設定する。

# ipa-client-install

chronyのserver/clientの設定をする。
※変更箇所のみ記載

# Allow NTP client access from local network.
#allow 192.168.0.0/16
allow 192.168.0.0/24

# Select which information is logged.
#log measurements statistics tracking
server ntp.nict.jp iburst

chronydを再起動する。

# systemctl restart chronyd

初回ログイン時にホームディレクトリを自動生成するよう設定する。

# authconfig --enablemkhomedir --update

ファイアウォールの例外を登録する。

# firewall-cmd --permanent --add-service={freeipa-ldap,freeipa-ldaps,freeipa-replication,dns,ntp,http,https}
# firewall-cmd --reload

レプリカインストールを実行する。なぜか「–setup-ca」オプションをつけると必ず失敗する。ほかのディストリビューション(Rocky Linux、Oracle Linux)で試してみたり、色々な小細工してみたけど解決できなかったので、今回はCA設定をプライマリだけで運用することにした。
※DNSとしても動作させるため「–setup-dns」オプション指定

# ipa-replica-install --setup-dns --forwarder <forwarderのIPアドレス1> --forwarder <forwarderのIPアドレス2>

参照するDNSサーバーを自身にする。

# nmcli connection modify コネクション名 ipv4.dns 192.168.0.11
# nmcli connection up コネクション名

補足

プライマリのCA設定がレプリケーションできていないため定期的にバックアップを取得する必要がある。下記のコマンドでバックアップを作成できるが、作成場所は指定できず/var/lib/ipa/backup/に「ipa-full-2022-04-09-14-28-16」という形でディレクトリが作成される。cronで実行する場合は適宜スクリプトを書いた方が良い。

# ipa-backup

対してリストアはバックアップファイルへのパスを指定して実行する。

# ipa-restore /var/lib/ipa/backup/ipa-full-2022-04-09-14-28-16/

AlmaLinux8でsudoのパスワード入力をなしにする

今回はwheelグループを対象に設定する。下記コマンドを実行して/etc/sudoersを編集する。

# visudo

ファイル終盤ぐらいにある下記の部分、上の方をコメントブロックし、下の方をコメント解除する。

## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

AlmaLinux8でdhcpとbindを連携させ家庭内DDNS

インストール

今回はDNSサーバーもDHCPサーバーも1台で兼任させる。
まずインストールする。
※Version bind9.11.26 dhcp4.3.6

# dnf install bind dhcp-server

DNSサーバーの設定

bindから設定する。
下記の箇所の内容を変更または追記する。

options {
    // zoneファイルの保存場所
    directory "/var/named/";
    // LAN内からの問い合わせを許可
    allow-query {
        localhost;
        192.168.1.0/24;
    };
    // 自分で名前解決できないときの丸投げ先
    forwarders {
        192.168.1.254;
        8.8.8.8;
    };
};

zone "example.jp." {
    type master;
    file "example.jp.zone";
    // 自身からの変更を許可しておく
    allow-update {
        localhost;
    };
};

さっき指定したzoneファイルを作成する。
※admin.example.jp.の部分はadmin@example.jpという管理者のE-mailという意味らしい

$TTL 86400
@    IN    SOA    dns.example.jp.    admin.example.jp. (
           2022032319
           10800
           36400
           604800
           86400
)

       IN    NS   dns.example.jp.
dns    IN    A    192.168.1.11

作成したらファイルの所有者をnamedに変更する。

# chown named:named /var/named/example.jp.zone

DHCPサーバーの設定

設定ファイルを下記のように編集する。

# DNSサーバーに更新要求を送信する設定
ddns-update-style interim;
# 普通のDHCPの設定
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.101 192.168.1.120;
    option routers 192.168.1.254;
    option domain-name "example.jp";
    option domain-name-servers 192.168.1.11;
    # 更新を通知するDNSサーバーを指定
    zone example.jp. {
        primary localhost;
    }
}

その他の必要な設定

SELinuxとFirewallに例外を追加する。

# setsebool -P named_write_master_zones true
# firewall-cmd --add-service=dns --permanent
# firewall-cmd --add-service=dhcp --permanent
# firewall-cmd --reload

サービスを有効にして起動。

# systemctl enable named
# systemctl start named
# systemctl enable dhcpd
# systemctl start dhcpd

補足

nsupdate

nsupdateを使用してDNSサーバーを更新をテストするには bind-utils をインストールし、nsupdateコマンドを実行する。実行したら対話型コンソールになるので下記のような感じで入力する。何もエラーが出なければOK。

>server 127.0.0.1
>update add test.example.jp. 3600 A 192.168.1.222
>send
>server 127.0.0.1
>update delete test.example.jp.
>send
rndc

rndcでdumpして現在のDNSレコードを確認する。

# rndc dumpdb -zones
# cat /var/named/named_dump.db | grep dns.example.jp.

AlmaLinux8のApacheにZeroSSLで手動発行した証明書をインストールする

AlmaLinux release 8.5 (Arctic Sphynx)
Apache 2.4.37
OpenSSL 1.1.1k

SSL関連のパッケージをインストールする。

# dnf install openssl
# dnf install mod_ssl

ZeroSSLにログインして発行した証明書のzipファイルをWebサーバーにアップロードして解凍する。

# unzip test.example.com.zip -d /etc/ssl/test.example.com/

SELinuxのラベル付けを行うためのユーティリティをインストールする。

# dnf install policycoreutils-python-utils

httpdからファイルを読み込めるようにSELinuxのラベルを追加する。

# semanage fcontext -a -t httpd_sys_content_t "/etc/ssl/test.example.com(/.*)?"
# restorecon -RF /etc/ssl/test.example.com/

Apacheの設定ファイルの最下部にSSL証明書の設定を追記する。

<VirtualHost *:443>
    ServerName test.example.com
    DocumentRoot "/var/www/html/test/"
    <Directory "/var/www/html/test/">
        AllowOverride All
    </Directory>
    SSLEngine on
    SSLProtocol -All +TLSv1.2
    SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4:!DH
    SSLHonorCipherOrder On
    SSLCertificateFile /etc/ssl/test.example.com/certificate.crt
    SSLCertificateKeyFile /etc/ssl/test.example.com/private.key
    SSLCertificateChainFile /etc/ssl/test.example.com/ca_bundle.crt
</VirtualHost>

Apacheの設定を再読み込みする。

# systemctl reload httpd