AlmaLinux 9 総合ガイド 第9章

第9章: サーバーサービスの構築と管理


9.1 この章で解説する主要な技術・概念

AlmaLinux 9をサーバー用途で運用する場合、Webサーバーデータベースサーバーメールサーバーなどの各種サービスを構築する機会が多いでしょう。本章では、以下のサービス構築と管理をより詳細に解説し、実運用で役立つベストプラクティスを示します。

  1. Webサーバー (Apache HTTP Server, Nginx)
  • 基本設定、バーチャルホスト、SSL/TLS、ログ管理
  1. データベースサーバー (MariaDB, PostgreSQL)
  • 初期セットアップ、ユーザーと権限、バックアップ
  1. メールサーバー (Postfix, Dovecot)
  • SMTP/IMAP/POP3の設定、セキュリティ(SPF, DKIM, DMARC)
  1. FTPサーバー (vsftpd)
  • 基本設定とセキュリティ(FTPS, chrootなど)
  1. DNSサーバー (BIND)
  • 正引き/逆引きゾーン設定、キャッシュDNS
  1. 高度な運用管理
  • Systemdユニット設定、ログ監視、セキュリティ対策の連携

9.2 Webサーバー

9.2.1 Apache HTTP Server

インストールと基本設定

sudo dnf install httpd
sudo systemctl enable httpd
sudo systemctl start httpd
  • デフォルトのドキュメントルート: /var/www/html
  • メイン設定ファイル: /etc/httpd/conf/httpd.conf
  • バーチャルホスト設定ファイル: /etc/httpd/conf.d/*.conf
バーチャルホスト (Name-based)
<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/example
    <Directory "/var/www/example">
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog /var/log/httpd/example-error.log
    CustomLog /var/log/httpd/example-access.log combined
</VirtualHost>
  • サブドメインや複数ドメインを1つのサーバーでホスト可能

HTTPS (SSL/TLS)

  1. mod_ssl パッケージ導入:
   sudo dnf install mod_ssl
  1. 証明書と秘密鍵/etc/pki/tls/certs//etc/letsencrypt/live/...などに配置
  2. SSLバーチャルホスト設定:
   <VirtualHost *:443>
       ServerName www.example.com
       DocumentRoot /var/www/example
       SSLEngine on
       SSLCertificateFile /etc/pki/tls/certs/server.crt
       SSLCertificateKeyFile /etc/pki/tls/private/server.key
       ...
   </VirtualHost>
  1. sudo systemctl restart httpd で反映

セキュリティとパフォーマンス

  • AllowOverride を最小限にし、OptionsDirectoryIndex を厳格設定
  • mod_evasivemod_security を導入し、DoSやWeb脆弱性攻撃を軽減
  • KeepAliveMaxRequestWorkers の調整でパフォーマンスを最適化
  • SELinuxコンテキスト: httpd_sys_content_t を正しく設定し、外部ディレクトリのアクセス許可を確保

9.2.2 Nginx

インストールと基本設定

sudo dnf install nginx
sudo systemctl enable nginx
sudo systemctl start nginx
  • メイン設定: /etc/nginx/nginx.conf
  • サーバーブロック設定: /etc/nginx/conf.d/*.conf
サーバーブロック例
server {
    listen       80;
    server_name  www.example.com;
    root         /usr/share/nginx/html/example;

    location / {
        index  index.html index.htm;
    }
}
  • 同時に複数のserverブロックを定義可能
  • SSL化はlisten 443 ssl;で有効にし、証明書パスを設定

リバースプロキシやロードバランサーとしての活用

  • proxy_pass でバックエンドサーバーにリクエストを転送
  • upstreamディレクティブで複数バックエンドのロードバランスを構成
upstream backend {
    server 192.168.10.50:8080;
    server 192.168.10.51:8080;
}

server {
    listen 80;
    server_name app.example.com;
    location / {
        proxy_pass http://backend/;
    }
}

9.3 データベースサーバー

9.3.1 MariaDB

インストールと初期設定

sudo dnf install mariadb-server
sudo systemctl enable mariadb
sudo systemctl start mariadb

sudo mysql_secure_installation
  • mysql_secure_installation で rootパスワード設定、匿名ユーザー削除、テストデータベース削除を行う

基本操作

# MariaDBシェルを起動
mysql -u root -p

# データベース作成
CREATE DATABASE myapp;

# ユーザー作成と権限付与
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON myapp.* TO 'myuser'@'%';
FLUSH PRIVILEGES;
  • セキュリティ: rootログイン制限 (bind-address=127.0.0.1) やパスワードポリシーを考慮
  • バックアップ: mysqldump myapp > myapp_2025.sql などで定期取得

9.3.2 PostgreSQL

インストールと初期設定

sudo dnf install postgresql-server
sudo postgresql-setup --initdb
sudo systemctl enable postgresql
sudo systemctl start postgresql
  • データディレクトリ: /var/lib/pgsql/data
  • 認証設定: /var/lib/pgsql/data/pg_hba.conf

基本操作

# postgresユーザーに切り替えてpsql起動
sudo -i -u postgres psql

# データベース作成
CREATE DATABASE mydb;
# ユーザー作成
CREATE USER myuser WITH ENCRYPTED PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
  • リスナー設定: /var/lib/pgsql/data/postgresql.conflisten_addressesport を調整
  • バックアップ: pg_dump mydb > mydb_2025.sql, リストアは psql mydb < mydb_2025.sql

9.4 メールサーバー

9.4.1 Postfix (MTA)

インストールと初期設定

sudo dnf install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
  • メイン設定ファイル: /etc/postfix/main.cf
  • myhostname, mydomain, myorigin, mydestination, mynetworks などを編集し、自己ドメインに合わせる
基本オプション例
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8, 192.168.10.0/24
inet_interfaces = all
  • mynetworks でリレーを許可するトラストネットワークを指定
  • relayhost で他のSMTPサーバーを中継する設定も可

9.4.2 Dovecot (IMAP/POP3)

sudo dnf install dovecot
sudo systemctl enable dovecot
sudo systemctl start dovecot
  • 主設定: /etc/dovecot/dovecot.conf
  protocols = imap pop3 lmtp
  listen = *
  • 認証設定: /etc/dovecot/conf.d/10-auth.conf, /etc/dovecot/conf.d/10-mail.conf など

メールボックス形式

  • mail_location = maildir:~/Maildir が推奨される場合が多い (Maildir形式)
  • /var/mail/username を使う場合はmbox形式

9.4.3 SPF, DKIM, DMARC

  1. SPF (Sender Policy Framework)
  • example.com. IN TXT "v=spf1 ip4:203.0.113.1 include:_spf.google.com ~all" のようにDNSに設定
  • 送信サーバーIPを指定し、不正ななりすまし送信を防ぐ
  1. DKIM (DomainKeys Identified Mail)
  • 送信メールに電子署名を付与する仕組み
  • OpenDKIMや他のツールで鍵を作成し、公開鍵はDNSにTXTレコードで登録
  1. DMARC
  • SPFとDKIMの結果に基づいて受信側にポリシーを通知
  • _dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
  • 攻撃メールのフィルタリング精度向上

9.5 FTPサーバー (vsftpd)

9.5.1 インストールと基本設定

sudo dnf install vsftpd
sudo systemctl enable vsftpd
sudo systemctl start vsftpd
  • 設定ファイル: /etc/vsftpd/vsftpd.conf

基本オプション例

anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
ftpd_banner=Welcome to AlmaLinux FTP service
  • chroot_local_user=YES でユーザーを自分のホームディレクトリに制限
  • /etc/vsftpd/user_list/etc/vsftpd/ftpusers でログインを制限可能

9.5.2 FTPS (SSL/TLS)

  1. 証明書作成 (自己署名など)
  2. /etc/vsftpd/vsftpd.conf で指定
   ssl_enable=YES
   rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
   rsa_private_key_file=/etc/pki/tls/private/vsftpd.key
   allow_anon_ssl=NO
   force_local_data_ssl=YES
   force_local_logins_ssl=YES
   passive_enable=YES
   pasv_min_port=40000
   pasv_max_port=40050
  • ファイアウォールでPASV用ポート(40000-40050)を許可

9.6 DNSサーバー (BIND)

9.6.1 インストールと基本設定

sudo dnf install bind bind-utils
sudo systemctl enable named
sudo systemctl start named
  • メイン設定: /etc/named.conf
  • デフォルトでlisten-on port 53 { 127.0.0.1; }; となっているため、外部アクセスを許可するならlisten-onに他のインターフェースアドレスまたはany;を追加

9.6.2 ゾーンファイルの設定

/etc/named/named.conf:

zone "example.com" IN {
    type master;
    file "/var/named/example.com.zone";
    allow-update { none; };
};

/var/named/example.com.zone:

$TTL 86400
@ IN SOA ns1.example.com. root.example.com. (
  2025012301 ; Serial
  3600       ; Refresh
  1800       ; Retry
  604800     ; Expire
  86400 )    ; Minimum
  IN  NS  ns1.example.com.
ns1 IN  A   192.168.10.10
www IN  A   192.168.10.20
  • named-checkconf で構文チェック
  • named-checkzone example.com /var/named/example.com.zone でゾーンファイル検証
  • sudo systemctl restart named

9.6.3 キャッシュDNSサーバー

  • Type=forwarder または Type=recursor として外部DNSに問い合わせを転送
  • ローカルネットワーク内での名前解決を高速化

9.7 高度な運用管理

9.7.1 Systemdユニットファイル

sudo systemctl status httpd
sudo systemctl restart mariadb
  • 独自のサービスを作成する場合は /etc/systemd/system/myapp.service を定義し、systemctl enable myapp で自動起動を設定

ユニットファイル例

[Unit]
Description=My Custom App
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/myapp --port 8080
Restart=on-failure

[Install]
WantedBy=multi-user.target

9.7.2 ログ監視とセキュリティ対策の連携

  • 各サービスのログは/var/log/配下やjournalctl -u servicenameで確認
  • Fail2Banのjail設定を追加し、PostfixやDovecotの認証失敗にも対応
  • SELinuxやfirewalldと組み合わせて、攻撃ベクトルを多層防御

9.7.3 サービスの可用性と負荷分散

  • HAProxy: 複数Webサーバーやメールゲートウェイを負荷分散し、高可用性を確保
  • KeepalivedPacemaker: IPフェイルオーバーやクラスター管理によるダウンタイム最小化
  • スケーラブルなアーキテクチャ (例: WebはNginx+PHP-FPM、DBはレプリケーション、メールは冗長MX設定)

9.8 学習のまとめ

  1. Webサーバー(Apache, Nginx): バーチャルホストやSSL/TLS設定をマスターし、ログ管理やモジュール設定(Apache)、サーバーブロックやリバースプロキシ(Nginx)など状況に応じて使い分け。
  2. データベースサーバー(MariaDB, PostgreSQL): インストール後のセキュア化(mysql_secure_installation など)とユーザー権限管理が重要。バックアップ/リストア戦略を確立し、本番でのデータ損失を防ぐ。
  3. メールサーバー(Postfix, Dovecot): SMTP(Postfix)とIMAP/POP3(Dovecot)を連携。SPF, DKIM, DMARCなどの導入で迷惑メールやなりすましを防止。
  4. FTPサーバー(vsftpd): 匿名ログイン禁止やFTPSを導入し、セキュアなファイル転送を実現。
  5. DNSサーバー(BIND): ゾーンファイルの正確な管理とDNSSEC(本章では触れていないが)などの導入も検討。
  6. 高度な運用管理: systemdユニットファイルでカスタムサービスを管理、ログ監視やFail2Ban、SELinuxなどと連携して多層防御。可用性向上策や負荷分散も含めて総合的に設計。

次章へのつながり

次の章(第10章)では、サーバー運用に欠かせないシステム監視パフォーマンスチューニングにフォーカスします。リソース消費状況の把握やボトルネックの特定、ツールの導入方法などを学び、安定稼働と高パフォーマンスを両立するための知識を習得しましょう。