第9章: サーバーサービスの構築と管理
9.1 本章の概要
この章では、AlmaLinux 9 上における主要なサーバーサービスを網羅的に構築・運用する手順とベストプラクティスを解説します。Web サーバー(Apache/Nginx)からデータベース(MariaDB/PostgreSQL)、メール(Postfix/Dovecot)、FTP(vsftpd)、DNS(BIND)まで、初心者~中級者が現場で即活用できるように、以下のポイントを押さえて丁寧に導きます。
- AlmaLinux 9 の最小インストールまたは GUI/CLI インストール環境
- root または sudo 権限のあるユーザー
- ネットワーク設定、ホスト名・DNS 解決、時刻同期(chrony)済み
- SELinux が enforcing、firewalld が有効化済み
本章を学ぶことで、以下のような運用環境を手に入れられます。
- HTTP/HTTPS サービスの安全かつ効率的な配信(
dnf
によるモジュール管理を含む) - データベースの初期セキュア化とユーザー権限設定によるアクセス制御
- メール送受信基盤の構築と SPF/DKIM/DMARC によるなりすまし対策
- FTP サーバーの chroot 制限や FTPS 設定による安全なファイル転送
- BIND を使ったゾーン管理、キャッシュ DNS サーバー構築による名前解決高速化
- systemd ユニットファイルのカスタマイズ、ログ監視(journalctl/Fail2Ban)との連携で運用性向上
- tuned プロファイル/チューニングツールによるパフォーマンス最適化
- HAProxy/Keepalived/Pacemaker を用いたロードバランスとフェイルオーバー構成
章の流れとしては、まず各サービスの“何を”提供するかを理解し、次に“なぜ”必要なのか背景と注意点を解説します。最後に“どうやって”インストール~基本設定~運用管理までのハンズオン手順を示し、章末にはモジュールや関連ツールの応用例、トラブルシューティングのコツも掲載します。
セキュリティ設定(SELinux コンテキスト、firewalld のゾーン/サービス設定)やログ監視・アラート、定期的なアップデート戦略も随所で取り上げ、AlmaLinux 9 を採用するメリットを最大化する設計思想を提供します。
9.2 Web サーバー (Apache & Nginx)
AlmaLinux9 上で Web サーバーを構築する際、もっとも広く利用される Apache HTTP Server と Nginx について解説します。各サーバーの特徴やモジュール選定、セキュリティ設定(SELinux・firewalld)、パフォーマンスチューニング、SSL/TLS(HTTP/2・TLS 1.3対応)、リバースプロキシ/ロードバランサー設定まで、初心者~中級者が現場で即実装できるレベルで詳細に説明します。
root
または sudo
権限ユーザーで実行してください。SELinux はデフォルトで enforcing
、firewalld は有効化済みとします。
9.2.1 Apache HTTP Server
Apache はモジュール拡張性に優れ、.htaccess や多彩な MPM(マルチプロセッシングモジュール)で動作特性を細かく制御できます。静的コンテンツ配信から動的モジュール(PHP, Python via mod_wsgi など)、プロキシ/キャッシュまで幅広い用途に対応可能です。
インストールと基本起動
# 実行ユーザー: sudo 権限ユーザー
# 目的: Apache HTTP Server のインストールと起動確認
# 期待結果: httpd サービスが自動起動設定され、ポート 80 で待ち受け開始
sudo dnf install httpd -y # dnf で Apache パッケージをインストール
sudo systemctl enable httpd # OS 起動時に httpd を自動起動する設定
sudo systemctl start httpd # Apache サービスを起動
sudo firewall-cmd --add-service=http --permanent # firewalld で HTTP を許可
sudo firewall-cmd --reload # 設定を反映
- ✅
/etc/httpd/conf/httpd.conf
でグローバル設定 - ✅
/etc/httpd/conf.modules.d/
でモジュール読み込み制御 - ✅
/etc/httpd/conf.d/
配下に個別バーチャルホストを定義
SELinux コンテキスト設定
# 目的: 外部ディレクトリをドキュメントルートに使う際の SELinux 設定
# 期待結果: Apache が指定ディレクトリを正常に配信可能に
sudo semanage fcontext -a -t httpd_sys_content_t '/srv/www/example(/.*)?' # コンテキストを定義
sudo restorecon -Rv /srv/www/example # コンテキストを適用
MPM とパフォーマンスチューニング
AlmaLinux9 ではデフォルトで event
MPM が有効です。大規模な同時接続数に強い一方、PHP-FPM 等の外部プロセス連携を推奨します。
# /etc/httpd/conf.modules.d/00-mpm.conf の例
# 目的: MPM モジュールの切り替えとチューニング
# 期待結果: event MPM で最大接続数を調整
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # Prefork を無効化
LoadModule mpm_event_module modules/mod_mpm_event.so # Event を有効化
StartServers 2 # 起動時サーバープロセス数
MinSpareThreads 25 # 最小アイドルスレッド数
MaxSpareThreads 75 # 最大アイドルスレッド数
ThreadLimit 64 # スレッド数上限
ThreadsPerChild 25 # プロセスあたりスレッド数
MaxRequestWorkers 150 # 最大同時リクエスト数
MaxConnectionsPerChild 0 # プロセス再生成までの接続数
php-fpm
と mod_proxy_fcgi
で連携してください。
VirtualHost & HTTP/2 設定
# /etc/httpd/conf.d/vhost.conf の例
# 実行ユーザー: sudo 権限ユーザー
# 目的: HTTP/2 対応バーチャルホスト定義
# 期待結果: ポート 443 で HTTP/2 と TLS 1.3 を利用可能に
LoadModule http2_module modules/mod_http2.so # HTTP/2 モジュールを読み込む
<VirtualHost *:443> # HTTPS 用バーチャルホスト
ServerName www.example.com # サイトのホスト名
DocumentRoot /var/www/html/example # ドキュメントルート
Protocols h2 http/1.1 # HTTP/2 と HTTP/1.1 を有効化
SSLEngine on # SSL/TLS を有効化
SSLCertificateFile /etc/pki/tls/certs/server.crt # 証明書ファイルパス
SSLCertificateKeyFile /etc/pki/tls/private/server.key # 秘密鍵ファイルパス
SSLProtocol all -SSLv3 # SSLv3 を無効化
SSLCipherSuite HIGH:!aNULL:!MD5 # 強力な暗号スイート選定
</VirtualHost>
Let’s Encrypt で無料証明書取得
# 実行ユーザー: sudo 権限ユーザー
# 目的: certbot で証明書を自動取得・更新
# 期待結果: /etc/letsencrypt 以下に証明書が配置される
sudo dnf install certbot python3-certbot-apache -y # certbot と Apache プラグインをインストール
sudo certbot --apache --agree-tos --redirect -d www.example.com -m admin@example.com # 証明書取得・設定
9.2.2 Nginx
Nginx はイベント駆動アーキテクチャに基づく高性能 Web サーバー/リバースプロキシです。軽量ながらロードバランサーやキャッシュ機能を内蔵し、大規模サイトでも実績があります。
インストールと基本起動
# 実行ユーザー: sudo 権限ユーザー
# 目的: Nginx のインストールと起動確認
# 期待結果: nginx サービスが自動起動設定され、ポート 80 で待ち受け開始
sudo dnf install nginx -y # dnf で Nginx をインストール
sudo systemctl enable nginx # OS 起動時に nginx を自動起動する設定
sudo systemctl start nginx # Nginx サービスを起動
sudo firewall-cmd --add-service=http --permanent # firewalld で HTTP を許可
sudo firewall-cmd --reload # 設定を反映
SELinux ブール値設定
# 目的: Nginx がユーザーホーム配下やポート 8080 を扱えるようにする
# 期待結果: SELinux が適切に緩和され、nginx が正常動作
sudo setsebool -P httpd_enable_homedirs on # ホームディレクトリ公開を許可
sudo setsebool -P httpd_unified on # 統一ドメイン許可を有効化
sudo semanage port -a -t http_port_t -p tcp 8080 # TCP8080 を HTTP ポートに追加
基本サーバーブロック設定
# /etc/nginx/conf.d/example.conf の例
# 実行ユーザー: sudo 権限ユーザー
# 目的: 静的コンテンツ配信用サーバーブロック
# 期待結果: www.example.com が /usr/share/nginx/html/example を配信
server {
listen 80; # HTTP ポート 80 を Listen
server_name www.example.com; # サイトのホスト名を設定
root /usr/share/nginx/html/example; # ドキュメントルートを指定
location / {
index index.html index.htm; # インデックスファイル指定
}
}
パフォーマンスチューニング & キャッシュ
gzip 圧縮やプロキシキャッシュで転送効率を向上させます。
# /etc/nginx/nginx.conf のチューニング例
# 目的: ワーカープロセス数・接続数、gzip 圧縮、プロキシキャッシュを設定
# 期待結果: 高負荷時にもスループットを維持
user nginx; # worker が実行するユーザー
worker_processes auto; # CPU コア数に合わせて自動設定
error_log /var/log/nginx/error.log warn; # エラーログ出力先とログレベル
pid /var/run/nginx.pid; # プロセス ID ファイル
events {
worker_connections 1024; # 1 ワーカープロセスあたりの最大接続数
multi_accept on; # 接続待機中に一度に複数 accept
}
http {
include /etc/nginx/mime.types; # MIME タイプ定義読込
default_type application/octet-stream; # デフォルト MIME タイプ
sendfile on; # sendfile で高速転送
tcp_nopush on; # パケット結合を有効化
tcp_nodelay on; # パケット遅延を無効化
keepalive_timeout 65; # Keep-Alive タイムアウト秒
gzip on; # gzip 圧縮を有効化
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 圧縮対象 MIME
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache_zone:10m max_size=1g inactive=60m use_temp_path=off; # プロキシキャッシュ定義
}
SSL/TLS & HTTP/2 設定
# /etc/nginx/conf.d/example-ssl.conf の例
# 実行ユーザー: sudo 権限ユーザー
# 目的: HTTPS(TLS1.3)と HTTP/2 対応
# 期待結果: ポート 443 で高速かつ安全な通信を実現
server {
listen 443 ssl http2; # HTTPS と HTTP/2 を有効化
server_name www.example.com; # サイトのホスト名
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; # 証明書
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; # 秘密鍵
ssl_protocols TLSv1.2 TLSv1.3; # TLS バージョン指定
ssl_ciphers HIGH:!aNULL:!MD5; # 強力暗号スイート指定
ssl_prefer_server_ciphers on; # サーバー優先暗号指定
root /usr/share/nginx/html/example; # ドキュメントルート
index index.html index.htm; # インデックスファイル
location / {
try_files $uri $uri/ =404; # ファイル存在チェック
}
}
certbot renew --quiet
を Cron または systemd timer で実行すると便利です。9.3 データベースサーバー (MariaDB & PostgreSQL)
データベースはアプリケーションの中核を担う重要コンポーネントです。本節では、AlmaLinux 9 標準リポジトリからインストールできる MariaDB 10.5 系 と PostgreSQL 13 系 を例に、初期セキュリティ設定から運用管理、パフォーマンスチューニング、高可用性構成までを解説します。
- root または sudo 権限ユーザー
- SELinux enforcing、firewalld 有効化済み
- 最小限のネットワーク/時刻同期設定完了
9.3.1 MariaDB (10.5 系)
MariaDB は MySQL 互換の軽量かつ高性能な RDBMS です。mysql_secure_installation
による初期セキュア化、/etc/my.cnf.d/
でのチューニング、SELinux 設定、バックアップ・レプリケーションまで幅広く扱います。
インストールと初期セキュリティ設定
# 実行ユーザー: sudo 権限ユーザー
# 目的: MariaDB 10.5 のインストールと初期セキュリティ設定
# 期待結果: root パスワード設定と匿名アカウント削除が完了
sudo dnf install mariadb-server -y # MariaDB サーバーパッケージをインストール
sudo systemctl enable mariadb # OS 起動時に MariaDB を自動起動設定
sudo systemctl start mariadb # MariaDB サービスを起動
sudo mysql_secure_installation # root パスワード設定・匿名ユーザー削除等を実行
- ✅
/etc/my.cnf.d/mariadb-server.cnf
でサーバー設定を追加 - ✅
/var/lib/mysql
がデフォルトデータディレクトリ - ✅ Unix ソケット認証がデフォルトで有効
基本操作 (データベース/ユーザー作成)
# 実行ユーザー: MariaDB root ユーザー
# 目的: サンプル DB/ユーザー作成と権限付与
# 期待結果: myapp データベースと myuser ユーザーが作成される
# MariaDB シェルにログイン
mysql -u root -p # root 権限で MariaDB シェルへ接続
# データベース作成
CREATE DATABASE myapp; # myapp データベースを作成
# ユーザー作成と権限付与
CREATE USER 'myuser'@'%' IDENTIFIED BY 'securePass123'; # myuser を任意ホストから接続可で作成
GRANT ALL PRIVILEGES ON myapp.* TO 'myuser'@'%'; # myapp に対して全権限を付与
FLUSH PRIVILEGES; # 権限情報をリロード
EXIT; # MariaDB シェルを終了
SELinux コンテキスト設定
# 目的: データディレクトリをカスタムパスに変更する場合の SELinux 設定
# 期待結果: MariaDB が新ディレクトリを読み書き可能になる
sudo semanage fcontext -a -t mysqld_db_t '/data/mysql(/.*)?' # SELinux タイプを定義
sudo restorecon -Rv /data/mysql # 新設定を適用
パフォーマンスチューニング
/etc/my.cnf.d/mariadb-server.cnf
に主要パラメータを設定し、InnoDB バッファプールや接続数を最適化します。
[mysqld] # MariaDB サーバー全体設定開始
innodb_buffer_pool_size = 1G # InnoDB バッファプールを 1GB に設定
innodb_log_file_size = 256M # トランザクションログファイルを 256MB に設定
max_connections = 200 # 最大同時接続数を 200 に設定
query_cache_type = 0 # クエリキャッシュを無効化(InnoDB 推奨)
slow_query_log = 1 # スロークエリログを有効化
slow_query_log_file = /var/log/mariadb/slow.log # スロークエリログ出力先
バックアップとリストア
# 目的: mysqldump でフルバックアップを取得・リストア
# 期待結果: /backup/mysql-full.sql にバックアップが保存され、リストア可能
# フルバックアップ取得
mysqldump --all-databases --single-transaction --quick --lock-tables=false \
> /backup/mysql-full.sql # データを /backup/mysql-full.sql に出力
# リストア実行
mysql -u root -p < /backup/mysql-full.sql # バックアップファイルを MariaDB に投入
レプリケーション構成 (簡易マスター/スレーブ)
MySQL 標準レプリケーションを用い、マスターログをスレーブに複製する構成例です。
# マスター側 my.cnf に設定追加
[mysqld]
server-id = 1 # サーバー識別子を 1 に設定
log-bin = mariadb-bin # バイナリログを有効化
binlog_format = ROW # 行ベースレプリログフォーマット
# スレーブ側 my.cnf に設定追加
[mysqld]
server-id = 2 # サーバー識別子を 2 に設定
relay-log = mariadb-relay-bin # リレーログを指定
# スレーブへのレプリ設定 (マスターで取得したログ位置を使用)
CHANGE MASTER TO
MASTER_HOST='master.example.com', # マスターのホスト名
MASTER_USER='repl', # レプリケーション専用ユーザー
MASTER_PASSWORD='replPass', # レプリユーザーのパスワード
MASTER_LOG_FILE='mariadb-bin.000001', # マスターのバイナリログファイル
MASTER_LOG_POS= 107; # マスターのログ位置
START SLAVE; # スレーブレプリ開始
9.3.2 PostgreSQL (13 系)
PostgreSQL は ACID 準拠で高い信頼性を誇る RDBMS です。拡張性に優れ、JSON 型サポートやパーティショニング、並列クエリ処理など先進機能が豊富です。
インストールと初期化
# 実行ユーザー: sudo 権限ユーザー
# 目的: PostgreSQL 13 のインストールとデータベース初期化
# 期待結果: psql コマンドで DB 操作可能に
sudo dnf install postgresql-server -y # PostgreSQL サーバーパッケージをインストール
sudo postgresql-setup --initdb # データディレクトリを初期化
sudo systemctl enable postgresql # OS 起動時に PostgreSQL を自動起動設定
sudo systemctl start postgresql # PostgreSQL サービスを起動
/var/lib/pgsql/data/pg_hba.conf
で認証方式を確認し、必要に応じて md5
や scram-sha-256
に変更してください。
基本操作 (データベース/ユーザー作成)
# 実行ユーザー: postgres ユーザー
# 目的: サンプル DB/ロール作成と権限付与
# 期待結果: mydb データベースと myrole ロールが作成される
sudo -i -u postgres psql # postgres ユーザーで psql シェル起動
# データベース作成
CREATE DATABASE mydb; # mydb データベースを作成
# ロール作成と権限付与
CREATE ROLE myrole WITH LOGIN PASSWORD 'PgPass!234'; # myrole ロールを作成
GRANT ALL PRIVILEGES ON DATABASE mydb TO myrole; # mydb への全権限を付与
\q # psql シェルを終了
パフォーマンスチューニング
/var/lib/pgsql/data/postgresql.conf
でワーカープロセス数や共有バッファ、WAL 設定を調整します。
# メイン設定ファイル: postgresql.conf
shared_buffers = 512MB # 共有バッファを 512MB に設定
work_mem = 16MB # 各クエリワーカーのメモリ上限を設定
maintenance_work_mem = 128MB # メンテナンス作業用メモリを設定
wal_level = replica # レプリ用 WAL レベルを設定
max_wal_senders = 3 # 最大 WAL 送信プロセス数を設定
max_connections = 100 # 最大同時接続数を設定
checkpoint_timeout
で 5~10 分に設定すると I/O 負荷が安定します。
バックアップと PITR
# 目的: pg_dump でバックアップ、WAL アーカイブで PITR 準備
# 期待結果: フルバックアップと WAL ファイルが取得される
# フルバックアップ取得
sudo -u postgres pg_dumpall > /backup/pg-full.sql # 全データベースを /backup/pg-full.sql にバックアップ
# WAL アーカイブ設定 (postgresql.conf)
archive_mode = on # アーカイブを有効化
archive_command = 'cp %p /backup/wal/%f' # WAL ファイルを指定先にコピー
# リストア例 (フルバックアップ)
psql -f /backup/pg-full.sql # バックアップファイルをリストア
ストリーミングレプリケーション
マスター/スタンバイ構成を組み、WAL をリアルタイム転送します。
# マスター側 postgresql.conf
listen_addresses = '*' # 全インターフェイスで待受
wal_level = replica # レプリ用 WAL レベル
max_wal_senders = 3 # WAL 送信プロセス数
wal_keep_size = '1GB' # WAL キープサイズ
# スタンバイ側 recovery.conf(PostgreSQL13 では standby.signal ファイルで動作)
primary_conninfo = 'host=master.example.com port=5432 user=replicator password=repPass' # 接続情報
# スタンバイ起動
systemctl start postgresql # スタンバイを起動
9.4 メールサーバー (Postfix & Dovecot)
メールサーバーは、ユーザー間の電子メール送受信を担う中核コンポーネントです。本節では、MTA(Mail Transfer Agent)として広く使われる Postfix と、MDA/IMAP/POP3 を提供する Dovecot の構築から、TLS・SMTP認証、SPF/DKIM/DMARC によるなりすまし防止まで、初心者でも実運用可能なレベルで詳細に解説します。
- AlmaLinux 9 がインストール済み。
- root または sudo 権限ユーザー。
- ホスト名、DNS 逆引き、時刻同期(chrony)が適切に設定済み。
- SELinux が
enforcing
、firewalld が有効化済み。
9.4.1 Postfix (MTA)
Postfix は高性能かつ安全性に優れた MTA です。SMTP (port 25) によるメール転送の他、SMTP AUTH (port 587) や SMTPS (port 465) による認証・暗号化をサポートし、スパムリレー防止機能を備えています。
インストールと基本設定
# 実行ユーザー: sudo 権限ユーザー
# 目的: Postfix のインストールとサービス起動
# 期待結果: SMTP (25), Submission (587) が起動し、外部ホストから接続可能
sudo dnf install postfix -y # Postfix パッケージをインストール
sudo systemctl enable postfix # OS 起動時に postfix を自動起動設定
sudo systemctl start postfix # Postfix サービスを起動
sudo firewall-cmd --add-service=smtp --permanent # port 25 を許可
sudo firewall-cmd --add-service=submission --permanent # port 587 を許可
sudo firewall-cmd --reload # ファイアウォール設定を反映
- ✅
/etc/postfix/main.cf
で共通設定 - ✅
/etc/postfix/master.cf
でサービス動作定義 - ✅
/var/spool/postfix
がキュー/ワークディレクトリ
mynetworks
と smtpd_recipient_restrictions
を適切に設定してください。
SMTP 認証 (SASL) と TLS 設定
# 実行ユーザー: sudo 権限ユーザー
# 目的: SMTP AUTH & TLS を有効化し、認証付き送信を可能に
# 期待結果: port 587 で STARTTLS/AUTH LOGIN が動作
# Postfix に SASL (Dovecot) と TLS を設定
postconf -e 'smtpd_tls_cert_file=/etc/pki/tls/certs/mail.crt' # 証明書ファイル指定
postconf -e 'smtpd_tls_key_file=/etc/pki/tls/private/mail.key' # 秘密鍵ファイル指定
postconf -e 'smtpd_use_tls=yes' # TLS を有効化
postconf -e 'smtpd_tls_auth_only=yes' # AUTH 前に TLS 必須化
postconf -e 'smtpd_sasl_type=dovecot' # SASL バックエンドに Dovecot 指定
postconf -e 'smtpd_sasl_path=private/auth' # Dovecot ソケットパス
postconf -e 'smtpd_sasl_auth_enable=yes' # SMTP AUTH を有効化
postconf -e 'smtpd_recipient_restrictions=permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination' # 受信制限
postconf -e 'mynetworks=127.0.0.0/8' # ローカルネットワーク定義
postconf -e 'inet_interfaces=all' # すべてのインターフェイスで待受
postconf -e 'inet_protocols=ipv4' # IPv4 のみ利用
systemctl restart postfix # 設定反映のため再起動
9.4.2 Dovecot (IMAP/POP3)
Dovecot は安全かつ高速な IMAP/POP3 サーバーです。メールユーザーの認証・メールボックス管理を担い、Postfix と連携して SMTP AUTH を実現します。
インストールとサービス起動
# 実行ユーザー: sudo 権限ユーザー
# 目的: Dovecot のインストールと自動起動設定
# 期待結果: IMAP (143), IMAPS (993), POP3 (110), POP3S (995) が待ち受け開始
sudo dnf install dovecot -y # Dovecot パッケージをインストール
sudo systemctl enable dovecot # OS 起動時に dovecot 自動起動設定
sudo systemctl start dovecot # Dovecot サービスを起動
sudo firewall-cmd --add-service=imap --permanent # port 143 を許可
sudo firewall-cmd --add-service=imaps --permanent # port 993 を許可
sudo firewall-cmd --add-service=pop3 --permanent # port 110 を許可
sudo firewall-cmd --add-service=pop3s --permanent # port 995 を許可
sudo firewall-cmd --reload # ファイアウォール設定を反映
- ✅
/etc/dovecot/dovecot.conf
がメイン設定ファイル - ✅
/etc/dovecot/conf.d/10-auth.conf
で認証方式設定 - ✅
/etc/dovecot/conf.d/10-mail.conf
でメールボックス形式設定
認証とメールボックス設定
# 実行ユーザー: sudo 権限ユーザー
# 目的: Dovecot で SMTP AUTH と Maildir 形式を設定
# 期待結果: ユーザーが Maildir を利用し、Postfix で認証可能に
# 10-auth.conf を編集
sed -i 's/^#disable_plaintext_auth = yes/disable_plaintext_auth = yes/' /etc/dovecot/conf.d/10-auth.conf # 平文認証を禁止
sed -i 's/^#auth_mechanisms = plain/auth_mechanisms = plain login/' /etc/dovecot/conf.d/10-auth.conf # 認証メカニズム設定
# 10-mail.conf を編集
postconf -e 'mail_location=maildir:~/Maildir' # 各ユーザのホーム下に Maildir 形式を指定
# Dovecot と Postfix の連携用ソケット作成確認
grep -R "unix_listener auth" -n /etc/dovecot/conf.d # ソケット定義を検証
systemctl restart dovecot # 設定反映のため再起動
semanage fcontext
と restorecon
で dovecot_mail_t
を設定してください。
9.4.3 SPF, DKIM, DMARC 設定
なりすましメール対策として、DNS レコードで送信者の正当性を検証する SPF、電子署名による検証の DKIM、受信ポリシーを示す DMARC を順に設定します。
SPF レコード設定
# 目的: DNS に SPF レコードを追加し、送信元 IP を制限
# 期待結果: example.com ドメインからの正当な送信元が検証される
# DNS 管理画面で以下 TXT レコードを追加
# example.com. IN TXT "v=spf1 mx ip4:203.0.113.10 include:spf.protection.example.net ~all"
DKIM(OpenDKIM)設定
# 実行ユーザー: sudo 権限ユーザー
# 目的: OpenDKIM インストールと Postfix 連携設定
# 期待結果: 送信メールに DKIM 署名が付与される
sudo dnf install opendkim -y # OpenDKIM をインストール
sudo mkdir -p /etc/opendkim/keys/example.com # キー用ディレクトリ作成
opendkim-genkey -D /etc/opendkim/keys/example.com -d example.com -s default # 鍵ペア生成
sudo chown -R opendkim:opendkim /etc/opendkim/keys # 所有者を opendkim に設定
# /etc/opendkim.conf に以下を追記
echo "Domain example.com" >> /etc/opendkim.conf # 署名対象ドメイン
echo "KeyFile /etc/opendkim/keys/example.com/default.private" >> /etc/opendkim.conf # 秘密鍵パス
echo "Selector default" >> /etc/opendkim.conf # セレクタ名
echo "Socket inet:8891@localhost" >> /etc/opendkim.conf # ソケット設定
# Postfix に milter を追加
postconf -e 'smtpd_milters=inet:localhost:8891' # 受信時に DKIM 検証
postconf -e 'non_smtpd_milters=inet:localhost:8891' # 送信時にも DKIM
systemctl enable opendkim # 起動時有効化
systemctl start opendkim # OpenDKIM を起動
systemctl restart postfix # Postfix に設定を反映
DMARC レコード設定
# 目的: DNS に DMARC レコードを追加し、受信者にポリシー通知
# 期待結果: SPF/DKIM 検証失敗時の処理が定義される
# DNS 管理画面で以下 TXT レコードを追加
# _dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; ruf=mailto:dmarc-feedback@example.com; pct=100"
9.5 FTP サーバー (vsftpd)
安全かつ効率的なファイル転送サービスを提供する FTP サーバーとして、AlmaLinux 9 標準リポジトリの vsftpd を使った構築方法を解説します。匿名 FTP の禁止、ローカルユーザーの chroot 制限、FTPS(TLS)による暗号化通信、パッシブモード設定、さらには仮想ユーザー認証まで、初心者でも実運用できるレベルの詳細手順を示します。
- AlmaLinux 9 がインストール済み
- root または sudo 権限ユーザー
- SELinux enforcing、firewalld 有効化済み
- ホスト名、DNS、時刻同期(chrony)設定済み
9.5.1 基本インストールと chroot 制限
# 実行ユーザー: sudo 権限ユーザー
# 目的: vsftpd のインストールと基本設定
# 期待結果: FTP サーバが起動し、ローカルユーザーが chroot 制限される
sudo dnf install vsftpd -y # vsftpd パッケージをインストール
sudo systemctl enable vsftpd # vsftpd サービスを起動時に有効化
sudo systemctl start vsftpd # vsftpd サービスを起動
sudo firewall-cmd --add-service=ftp --permanent # FTP (port 21) を許可
sudo firewall-cmd --reload # ファイアウォール設定を反映
# /etc/vsftpd/vsftpd.conf の設定例
anonymous_enable=NO # 匿名ログインを禁止
local_enable=YES # ローカルユーザーのログインを許可
write_enable=YES # ファイルのアップロード/書き込みを許可
chroot_local_user=YES # ローカルユーザーをホームディレクトリに chroot 制限
allow_writeable_chroot=YES # chroot 内での書き込みを許可
user_sub_token=$USER # ユーザーディレクトリ名にユーザー名を使用
local_root=/home/$USER/ftp # ローカルユーザーの FTP ホームを設定
sudo systemctl restart vsftpd
で必ず再起動してください。設定ミスがあるとサービスが起動しません。
SELinux 設定
# 目的: ホームディレクトリを chroot で利用できるように SELinux を緩和
# 期待結果: vsftpd がユーザーホーム配下を読み書き可能に
sudo setsebool -P ftp_home_dir on # ホームディレクトリでの FTP 公開を許可
sudo setsebool -P allow_ftpd_full_access on # vsftpd の全書き込みアクセスを許可
9.5.2 FTPS (SSL/TLS) 設定
通信の盗聴を防ぐため、TLS を利用した FTPS を設定します。自己署名証明書の作成例と vsftpd.conf での有効化手順を示します。
# 実行ユーザー: sudo 権限ユーザー
# 目的: OpenSSL で自己署名証明書を作成し、FTPS を有効化
# 期待結果: /etc/pki/tls/certs/vsftpd.pem と秘密鍵が生成され、TLS 接続が可能になる
sudo dnf install openssl -y # OpenSSL をインストール
sudo mkdir -p /etc/pki/tls/{certs,private} # 証明書ディレクトリを作成
sudo openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/pki/tls/private/vsftpd.pem \
-out /etc/pki/tls/certs/vsftpd.pem \
-subj "/C=JP/ST=Tokyo/L=Chiyoda/O=Example/OU=IT/CN=ftp.example.com" # 証明書と秘鍵を生成
# /etc/vsftpd/vsftpd.conf に以下を追記
ssl_enable=YES # SSL/TLS を有効化
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem # 証明書ファイルのパス
rsa_private_key_file=/etc/pki/tls/private/vsftpd.pem # 秘密鍵ファイルのパス
ssl_tlsv1=YES # TLSv1 を有効化
ssl_sslv2=NO # SSLv2 を無効化
ssl_sslv3=NO # SSLv3 を無効化
allow_anon_ssl=NO # 匿名ユーザーの SSL 接続を禁止
force_local_data_ssl=YES # データ接続に TLS を強制
force_local_logins_ssl=YES # ログイン接続に TLS を強制
# パッシブモードとポート範囲の設定
pasv_enable=YES # パッシブモードを有効化
pasv_min_port=40000 # パッシブモード最小ポート番号
pasv_max_port=40100 # パッシブモード最大ポート番号
sudo firewall-cmd --add-port=40000-40100/tcp --permanent # パッシブモード用ポートを許可
sudo firewall-cmd --reload # ファイアウォール設定を反映
9.5.3 仮想ユーザー認証とパフォーマンスチューニング
システムユーザーを使用せず、独立した仮想ユーザーで FTP アクセスを管理する方法を示します。また、大量接続時のチューニングポイントを解説します。
# 目的: PAM と db4 を使って仮想ユーザー認証を設定
# 期待結果: /etc/vsftpd/virtusers.db に仮想ユーザー情報が配置され、ログイン可能
sudo dnf install db4-utils -y # db4 ユーティリティをインストール
printf "ftpuser\nsecurePass123\n" > /etc/vsftpd/virtusers # 仮想ユーザー名とパスワードをファイル化
sudo db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db # DB ハッシュを生成
rm -f /etc/vsftpd/virtusers # 平文ファイルを削除
# PAM 設定ファイル /etc/pam.d/vsftpd-virtual の例
cat << 'EOF' | sudo tee /etc/pam.d/vsftpd-virtual # PAM 認証設定を作成
auth required pam_userdb.so db=/etc/vsftpd/virtusers # 仮想ユーザー認証を有効化
account required pam_userdb.so db=/etc/vsftpd/virtusers # アカウント管理を有効化
EOF
sudo systemctl restart vsftpd # 設定を反映して再起動
# vsftpd.conf に仮想ユーザー設定を追加
guest_enable=YES # 仮想ユーザーをゲストユーザーとして扱う
guest_username=ftp # ゲストユーザーにマッピングするローカルユーザー
virtual_use_local_privs=YES # ローカルユーザーの権限を使用
user_config_dir=/etc/vsftpd/vconf # ユーザー別設定ディレクトリを指定
# 多数接続時のパフォーマンスチューニング例
max_clients=50 # 同時接続数の上限を 50 に設定
max_per_ip=5 # IP ごとの最大接続数を 5 に制限
9.6 DNS サーバー (BIND)
DNS はドメイン名と IP アドレスを対応付けるシステムで、ネットワークサービスの根幹を担います。本節では、AlmaLinux 9 標準パッケージの BIND を使ったマスター/スレーブ/キャッシュ DNS サーバーの構築、ゾーン設定、DNSSEC、SELinux 対応、ロギング、高度なビュー設定までを、初心者~中級者向けに徹底解説します。
- root または sudo 権限ユーザー
- SELinux enforcing、firewalld 有効化済み
- ポート 53 (TCP/UDP) がファイアウォールで許可済み
- AlmaLinux 9 の最小インストール環境
9.6.1 インストールと基本設定
# 実行ユーザー: sudo 権限ユーザー
# 目的: BIND (named) のインストールとファイアウォール/SELinux 設定
# 期待結果: named サービスがポート 53 で待ち受け可能になる
sudo dnf install bind bind-utils -y # BIND とユーティリティをインストール
sudo systemctl enable named --now # named を自動起動設定し、即時起動
sudo firewall-cmd --add-service=dns --permanent # firewalld で DNS (TCP/UDP 53) を許可
sudo firewall-cmd --reload # ファイアウォール設定を反映
sudo semanage port -a -t named_port_t -p tcp 53 # SELinux に TCP 53 ポートを追加
sudo semanage port -a -t named_port_t -p udp 53 # SELinux に UDP 53 ポートを追加
- ✅
/etc/named.conf
がメイン設定ファイル - ✅ ゾーンファイルは
/var/named/
配下に配置 - ✅
rndc
コマンドで named の管理が可能
9.6.2 マスターゾーンの設定
マスター DNS サーバーでは、自ドメインの正式なゾーンデータを公開します。/etc/named.conf
にゾーン定義を追加し、/var/named/example.com.zone
にゾーンファイルを作成します。
# /etc/named.conf にゾーン設定を追加
zone "example.com" IN { # ゾーン名とクラスを指定
type master; # マスターゾーンとして定義
file "example.com.zone"; # ゾーンファイルパスを指定
allow-update { none; }; # 動的更新を無効化
}; # ゾーン定義終了
# ゾーンファイル example.com.zone の例
$TTL 86400 # デフォルト TTL を 86400 秒 (24h) に設定
@ IN SOA ns1.example.com. root.example.com. ( # SOA レコード開始
2025051001 # シリアル番号 (YYYYMMDDnn)
3600 # リフレッシュ間隔 (秒)
1800 # リトライ間隔 (秒)
604800 # 有効期限 (秒)
86400 # 最小 TTL (秒)
) # SOA レコード終了
@ IN NS ns1.example.com. # NS レコードを定義
ns1 IN A 192.168.10.10 # ns1 の A レコード
www IN A 192.168.10.20 # www の A レコード
@ IN MX 10 mail.example.com. # メールサーバー優先順を設定
mail IN A 192.168.10.30 # mail ホストの A レコード
# ゾーン構文チェックと反映
sudo named-checkzone example.com /var/named/example.com.zone # ゾーンファイルの構文を検証
sudo rndc reload example.com # ゾーンをリロード
sudo systemctl restart named # named サービス再起動
9.6.3 スレーブゾーンの設定
スレーブ DNS サーバーでは、マスターからゾーンデータを転送して冗長化を実現します。/etc/named.conf
に以下を追加します。
# /etc/named.conf にスレーブ定義を追加
zone "example.com" IN { # ゾーン名とクラスを指定
type slave; # スレーブゾーンとして定義
file "slaves/example.com.zone"; # スレーブ用ファイルパスを指定
masters { 192.168.10.10; }; # マスター DNS の IP を指定
allow-update { none; }; # 動的更新を無効化
}; # スレーブゾーン定義終了
# スレーブでの反映確認
sudo rndc reload example.com # スレーブでゾーンをリロード
sudo rndc status # named サービスの状態を表示
9.6.4 キャッシュ DNS サーバー設定
キャッシュ専用 DNS サーバーは再帰問い合わせを受け、他の DNS サーバーから取得した結果をキャッシュします。/etc/named.conf
の options セクションに以下を追加します。
# キャッシュサーバー用 options 設定例
options { # options ブロック開始
recursion yes; # 再帰問い合わせを許可
allow-query { any; }; # 全クライアントのクエリを許可
forwarders { # フォワーダー設定開始
8.8.8.8; # Google DNS
8.8.4.4; # Google DNS
}; # フォワーダー設定終了
}; # options ブロック終了
# 設定反映
sudo systemctl restart named # named を再起動して反映
9.6.5 DNSSEC の設定
DNSSEC を導入すると、ゾーンデータの改ざん検出が可能になります。以下は基本的なゾーン署名手順です。
# TSIG キー生成 (ゾーン転送用)
sudo dnssec-keygen -a HMAC-SHA256 -b 256 -n USER transfer-key # TSIG キーを生成
# ゾーン署名鍵 (ZSK/KSK) の生成
sudo dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com # ゾーン署名鍵を生成
# ゾーン署名
sudo dnssec-signzone \
-A \ # 自動アルゴ式選択
-3 $(head -c 100 /dev/random | sha1sum | cut -d" " -f1) \ # NSEC3 salt
-N INCREMENT \ # シリアル自動更新
-o example.com \ # ゾーン名を指定
-t /var/named/example.com.zone # ゾーンファイルを署名
# Trust Anchor としてクライアントに配布する場合は example.com.zone.key を使用
9.6.6 ロギングと ACL、高度なビュー設定
ログを整理し、ACL や views 機能でアクセス制御・応答内容を使い分けることで、運用性とセキュリティを強化できます。
# ロギング設定例 (named.conf)
logging { # ログ設定ブロック開始
channel default_syslog { # チャンネル定義
syslog daemon; # syslog daemon ファシリティを使用
severity info; # ログレベルを info に設定
}; # チャンネル定義終了
category default { default_syslog; }; # 全カテゴリを default_syslog に割当
}; # ログ設定終了
# 内部/外部で応答を分けるビュー設定例
view "internal" { # internal ビュー開始
match-clients { 192.168.0.0/16; }; # 内部ネットワークをマッチ
recursion yes; # 再帰問い合わせを許可
zone "internal.example.com" IN { # 内部用ゾーン定義
type master; # マスターゾーン
file "internal.example.com.zone"; # ゾーンファイル
}; # ゾーン定義終了
}; # internal ビュー終了
# ACL 定義例: 転送を信頼ネットワークに限定
acl "trusted" { 192.168.10.0/24; }; # 信頼ネットワーク定義
options { # options ブロック開始
allow-transfer { trusted; }; # ゾーントランスファーを trusted のみに許可
}; # options ブロック終了
9.7 高度な運用管理
本章では、AlmaLinux 9 環境におけるシステム運用の高度化手法を紹介します。カスタム systemd ユニットやタイマー、ログ管理とセキュリティ連携、可用性・負荷分散構成までを網羅し、運用性・信頼性・拡張性を最大化します。
- root または sudo 権限ユーザー
- firewalld・SELinux(enforcing) が有効化済み
- chrony による時刻同期済み
- 基本的な systemd/journalctl の操作知識
9.7.1 Systemd ユニットファイルとタイマー
標準サービスを拡張・カスタマイズしたり、定期実行タスクを systemd タイマーで管理する方法を解説します。ユニットのオーバーライドや依存関係設定で可搬性と理解性を高めましょう。
[Unit] # ユニット定義セクション開始
Description=MyApp カスタムサービス # サービスの説明を記載
After=network.target # network.target 起動後に MyApp を起動
[Service] # サービス実行セクション開始
Type=simple # プロセス駆動型サービスとして実行
User=myappuser # MyApp を実行するシステムユーザー
Group=myappgroup # 実行グループを指定
ExecStart=/usr/local/bin/myapp --config /etc/myapp/config.yaml # サービス起動コマンド
Restart=on-failure # 失敗時に自動再起動
[Install] # インストールセクション開始
WantedBy=multi-user.target # マルチユーザーターゲット起動時に有効化
- ✅
/etc/systemd/system/myapp.service
に配置 - ✅
systemctl daemon-reload
でユニットを再読み込み - ✅
systemctl enable myapp
で起動時有効化
定期実行タスク (Timer ユニット)
cron の代替として systemd タイマーを使うメリットは、依存関係やログの一元管理ができることです。
[Unit] # タイマー用ユニットセクション開始
Description=MyApp 日次バックアップタイマー # タイマーユニットの説明
[Timer] # タイマー実行設定セクション開始
OnCalendar=daily # 毎日 00:00 に実行
Persistent=true # 実行漏れがあれば次回起動時に即実行
[Install] # インストールセクション開始
WantedBy=timers.target # timers.target に紐付け
- ✅
/etc/systemd/system/myapp-backup.timer
に配置 - ✅
systemctl enable --now myapp-backup.timer
で即時有効化 - ✅
systemctl list-timers
でスケジュールを確認
9.7.2 ログ管理とセキュリティ連携
journalctl や logrotate、Fail2Ban でログを効率的に管理し、異常検知を自動化します。監査ログには auditd を組み合わせ、SELinux イベントも収集しましょう。
永続化された Journal 設定
# 目的: journald のログ永続化設定
# 期待結果: /var/log/journal 以下にバイナリログが保存される
sudo mkdir -p /var/log/journal # 永続化ディレクトリを作成
sudo sed -i 's/^#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf # 永続化を有効化
sudo systemctl restart systemd-journald # 設定を反映して journald を再起動
logrotate でファイルログ管理
大容量ログを定期ローテーションし、ディスク容量を抑制します。
# 目的: /var/log/myapp/*.log を週次でローテート
# 期待結果: 4 世代までログを保持し、圧縮する
cat << 'EOF' | sudo tee /etc/logrotate.d/myapp # myapp 用 logrotate 設定を作成
/var/log/myapp/*.log { # 対象ログファイル
weekly # 週次でローテーション
rotate 4 # バックアップ世代数を 4 に設定
compress # 古いログを gzip 圧縮
missingok # ログがなくてもエラーにしない
notifempty # 空ファイルはローテーションしない
create 0640 myappuser myappgroup # 新ログ作成時のパーミッション
}
EOF
Fail2Ban 連携で不正アクセス防止
認証ログを監視し、指定回数失敗した IP を自動でブロックします。
# 目的: sshd と myapp の Jail を設定
# 期待結果: 5 回失敗した IP を 1 時間ブロック
sudo dnf install fail2ban -y # Fail2Ban をインストール
# /etc/fail2ban/jail.local に設定追加
cat << 'EOF' | sudo tee /etc/fail2ban/jail.local
[sshd] # SSHD 用 Jail 定義
enabled = true # Jail を有効化
port = ssh # SSH ポートを指定
filter = sshd # フィルタを sshd に設定
logpath = /var/log/secure # SSH ログパスを指定
maxretry = 5 # 失敗回数上限を 5 回
bantime = 3600 # ブロック時間を 3600 秒に設定
[myapp-auth] # MyApp 認証ログ用 Jail
enabled = true # Jail を有効化
port = http,https # ポート 80/443 を監視
filter = myapp-auth # カスタムフィルタ名
logpath = /var/log/myapp/auth.log # 認証ログパスを指定
maxretry = 3 # 失敗回数上限を 3 回
bantime = 7200 # ブロック時間を 7200 秒に設定
EOF
sudo systemctl enable --now fail2ban # Fail2Ban を即時有効化
9.7.3 可用性と負荷分散
HAProxy、Keepalived、Pacemaker/Corosync による冗長化とロードバランス構成を解説します。サービス停止時のフェイルオーバーや水平スケールを実現し、ダウンタイムを最小化します。
HAProxy でのレイヤー4/7 負荷分散
# 目的: HTTP と TCP 両方を負荷分散
# 期待結果: backend プールへラウンドロビンで転送
sudo dnf install haproxy -y # HAProxy をインストール
cat << 'EOF' | sudo tee /etc/haproxy/haproxy.cfg # HAProxy 設定を作成
global # グローバル設定
log /dev/log local0 # ログ出力先を指定
maxconn 2000 # 最大同時接続を設定
defaults # デフォルト設定
mode http # HTTP モードをデフォルトに設定
timeout connect 5s # 接続タイムアウトを 5 秒に設定
timeout client 50s # クライアントタイムアウトを 50 秒に設定
timeout server 50s # サーバータイムアウトを 50 秒に設定
frontend http_front # HTTP フロントエンド定義
bind *:80 # 全インターフェイス:80 で待受
default_backend http_back # デフォルトバックエンドを指定
backend http_back # HTTP バックエンド定義
balance roundrobin # ラウンドロビン方式で負荷分散
server web01 192.168.10.11:80 check # web01 をヘルスチェック有効で追加
server web02 192.168.10.12:80 check # web02 をヘルスチェック有効で追加
frontend tcp_front # TCP フロントエンド定義
bind *:3306 # MySQL 用 TCP:3306 で待受
default_backend tcp_back # デフォルトバックエンドを指定
backend tcp_back # TCP バックエンド定義
mode tcp # TCP モードを指定
balance leastconn # 最小接続数優先方式
server db01 192.168.10.21:3306 check # db01 をヘルスチェック有効で追加
server db02 192.168.10.22:3306 check # db02 をヘルスチェック有効で追加
EOF
sudo systemctl enable --now haproxy # HAProxy を即時有効化
Keepalived での VRRP 冗長化
# 目的: 仮想 IP を冗長化し、フェイルオーバーを実現
# 期待結果: マスター障害時にバックアップが仮想 IP を引き継ぐ
sudo dnf install keepalived -y # Keepalived をインストール
cat << 'EOF' | sudo tee /etc/keepalived/keepalived.conf # Keepalived 設定を作成
vrrp_instance VI_1 { # VRRP インスタンス定義
state MASTER # マスターノード設定 (BACKUP on second)
interface eth0 # VRRP を動作させるインターフェイス
virtual_router_id 51 # VRID を任意設定
priority 100 # マスターは高いプライオリティ
authentication { # 認証設定
auth_type PASS # パスワード認証方式
auth_pass secret123 # 認証パスワードを設定
}
virtual_ipaddress { # 仮想 IP 定義
192.168.10.100/24 # フェイルオーバー用仮想 IP
}
}
EOF
sudo systemctl enable --now keepalived # Keepalived を即時有効化
Pacemaker & Corosync でのクラスタ構築
# 目的: Pacemaker/Corosync クラスタのインストールと基本設定
# 期待結果: 2 ノードクラスタが形成され、リソース管理が可能
sudo dnf install pacemaker corosync pcs fence-agents-all -y # クラスタパッケージをインストール
# ユーザー認証設定
sudo passwd hacluster # hacluster ユーザーのパスワードを設定
sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p yourpass # ノード間認証
# クラスタ構成開始
sudo pcs cluster setup --name mycluster node1.example.com node2.example.com # クラスタをセットアップ
sudo pcs cluster start --all # すべてのノードでクラスタを起動
sudo pcs cluster enable --all # 自動起動設定
# リソース追加例: VIP と Apache
sudo pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.10.200 cidr_netmask=24 op monitor interval=30s # 仮想 IP リソース
sudo pcs resource create WebServer systemd:httpd op monitor interval=1min # Apache サービスリソース
sudo pcs constraint colocation add WebServer with ClusterIP INFINITY # リソースをコロケーション
sudo pcs constraint order ClusterIP then WebServer # 起動順序を設定
EOF
9.8 学習のまとめ
本章では、AlmaLinux9 上で主要なサーバーサービスをゼロから構築し、運用するための知見を総括しました。dnf
を用いたパッケージ管理から始まり、SELinux や firewalld といった セキュリティ設定 を組み込んだ実践手順を通じて、サービスの可用性・性能・安全性を高める方法を学びました。
- Web サーバー(Apache/Nginx)
モジュール構成やMPM、イベント駆動モデルによるパフォーマンスチューニング、HTTP/2・TLS1.3 対応、Let’s Encrypt 自動更新まで、実稼働レベルの最適化手法を習得。 - データベース(MariaDB/PostgreSQL)
mysql_secure_installation
/postgresql-setup
による初期セキュア化、InnoDB バッファプール・shared_buffers 調整、バックアップ(mysqldump/pg_dumpall)と PITR、ストリーミングレプリケーション構築まで網羅。 - メール(Postfix/Dovecot)
SMTP AUTH と TLS 強制、SPF/DKIM/DMARC によるなりすまし防止、Maildir 形式の安全な受信基盤を実装し、スパム対策の基礎を確立。 - FTP(vsftpd)
匿名禁止、ローカルユーザーの chroot 制限、FTPS(SSL/TLS)設定、仮想ユーザー認証によるアクセス管理と、パッシブモード最適化で安全・効率的なファイル転送を実現。 - DNS(BIND)
マスター/スレーブ/キャッシュの各モード、ゾーンファイル管理、DNSSEC によるゾーン署名、ACL・views 機能で内部外部応答を分離する高度設定まで網羅。 - 高度な運用管理
systemd
ユニット&タイマーで cron タスクを統合、永続化 journal と logrotate でログを最適管理、Fail2Ban 連携による不正アクセス防御、HAProxy/Keepalived/Pacemaker で可用性・負荷分散を構築。
- AlmaLinux9 の長期サポートスケジュールを確認し、セキュリティパッチ適用計画を策定
- Prometheus/Grafana や Zabbix で各種メトリクス監視を導入
- Ansible/Chef/Puppet による構成管理で再現性と保守性を向上
本ガイドの設定例はサンプル構成です。実運用ではネットワークポリシー、ユーザー権限、ログ保管ポリシーなどを追加検討し、組織のセキュリティ要件に合わせて最適化してください。
以上を踏まえ、AlmaLinux9 環境のサーバー基盤を自信を持って設計・運用できるスキルが身につきました。今後は本節で紹介したベストプラクティスを継続的にレビュー・改善し、堅牢かつ高性能なインフラ運用を実践してください。
さらなる学習リソース
以下では、本ガイドで扱った各種コンポーネントや運用手法をさらに深掘りできる、公式情報から専門書籍・オンラインコースまで幅広いリソースを厳選してご紹介します。各リンク先には実践的な設定例やトラブルシューティング、内部アーキテクチャ解説などが豊富に掲載されており、専門書を凌駕するレベルの知見が得られます。
- AlmaLinux プロジェクト公式ドキュメント
https://wiki.almalinux.org/
AlmaLinux Community がメンテナンスする公式 Wiki。RHEL 由来の最新パッケージ情報やリリースノート、移行ガイドなどを網羅しています。 - Red Hat Enterprise Linux 9 ドキュメント
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/
RHEL 9 の公式ガイド。SELinux、firewalld、systemd、Podman/Buildah、Performance Co-Pilot(PCP)など、AlmaLinux と共通の深層設定・運用ノウハウが豊富です。 - O’Reilly — “Linux Administration: A Beginner’s Guide”
by Wale Soyinka
Linux サーバー運用の基礎からネットワークサービス構築、セキュリティ対策までを解説。各種デーモンの内部動作やトラブルシュートの章が特に詳細です。 - O’Reilly — “The Linux Programming Interface”
by Michael Kerrisk
Linux カーネル API や systemd/journalctl/cgroups などの内部構造をプログラミング視点で解説。高度な運用管理で役立つ深い知識が得られます。 - Apache HTTP Server ドキュメント
https://httpd.apache.org/docs/2.4/
モジュール開発ガイドから MPM・イベントモデルの詳細設定、セキュリティベストプラクティスまで網羅。公式FAQも実運用での課題解決に役立ちます。 - Nginx ドキュメント
https://nginx.org/en/docs/
イベント駆動アーキテクチャの原理解説、ストリーミング/キャッシュ/ロードバランサー機能の深層設定例が充実しています。 - MariaDB Knowledge Base
https://mariadb.com/kb/en/
InnoDB チューニング、レプリケーション、バックアップ、セキュリティ機能など、公式FAQ・チュートリアル形式で詳細に解説。 - PostgreSQL ドキュメント
https://www.postgresql.org/docs/13/
JSON 型やパーティショニング、並列クエリ、ストリーミングレプリケーション、WAL アーカイブなど、先進機能の内部動作を丁寧に説明。 - Postfix ドキュメント
http://www.postfix.org/documentation.html
SMTP トランザクションフロー、MILTER API、SASL/TLS 統合の実装詳細まで記載。デバッグガイドも充実。 - Dovecot ドキュメント
https://doc.dovecot.org/
Maildir/Mailbox フォーマット解析、プラグイン開発ガイド、認証バックエンド(LDAP、SQL)連携例など高度なカスタマイズ方法。 - vsftpd ドキュメント
https://security.appspot.com/vsftpd/vsftpd_conf.html
設定オプションの全リファレンスとセキュリティ設計指南。仮想ユーザー/PAM 連携、TLS パフォーマンス調整の詳細が記載されています。 - BIND 9 ドキュメント
https://bind9.readthedocs.io/
DNSSEC、TSIG、views、ACL、統計情報(rndc stats)など、高度機能の設定例と設計原則が詳述されています。 - systemd ドキュメント
https://www.freedesktop.org/software/systemd/man/
ユニットファイル構文、依存関係、タイマー、cgroups 統合など、最新の systemd 機能を網羅的に解説。 - firewalld ドキュメント
https://firewalld.org/documentation/
ゾーン設計、rich language、direct インターフェイス、IPv6 サポートなど高度設定、バックエンド(nftables)解説も掲載。 - HAProxy ドキュメント
https://www.haproxy.org/#docs
レイヤー4/7 設定、ヘルスチェック、SSL/TLS 統合、パフォーマンスチューニングパラメータ解説が詳細です。 - Keepalived ドキュメント
https://www.keepalived.org/documentation.html
VRRP、LVS、ヘルスチェックスクリプト、通知スクリプト例まで包括的に解説。 - Pacemaker & Corosync ドキュメント
https://clusterlabs.org/documentation/
リソースエージェント開発、STONITH、フェンシング、クロスサイトクラスタリングなどエンタープライズ向け設計原則。 - オンライン講座 — Linux Foundation
https://training.linuxfoundation.org/
LFCS/LFCE 認定コース、ネットワークサービス構築、セキュリティ、コンテナ運用など実践的演習付きプログラム。 - オンライン講座 — Red Hat Training
https://www.redhat.com/en/services/training-and-certification
RHCSA/RHCE 認定コース、Ansible 自動化、セキュリティ、OpenShift 運用など、RHEL ベース環境に特化した公式トレーニング。