第9章: サーバーサービスの構築と管理
9.1 この章で解説する主要な技術・概念
AlmaLinux 9をサーバー用途で運用する場合、Webサーバーやデータベースサーバー、メールサーバーなどの各種サービスを構築する機会が多いでしょう。本章では、以下のサービス構築と管理をより詳細に解説し、実運用で役立つベストプラクティスを示します。
- Webサーバー (Apache HTTP Server, Nginx)
- 基本設定、バーチャルホスト、SSL/TLS、ログ管理
- データベースサーバー (MariaDB, PostgreSQL)
- 初期セットアップ、ユーザーと権限、バックアップ
- メールサーバー (Postfix, Dovecot)
- SMTP/IMAP/POP3の設定、セキュリティ(SPF, DKIM, DMARC)
- FTPサーバー (vsftpd)
- 基本設定とセキュリティ(FTPS, chrootなど)
- DNSサーバー (BIND)
- 正引き/逆引きゾーン設定、キャッシュDNS
- 高度な運用管理
- 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)
- mod_ssl パッケージ導入:
sudo dnf install mod_ssl
- 証明書と秘密鍵を
/etc/pki/tls/certs/
や/etc/letsencrypt/live/...
などに配置 - 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>
sudo systemctl restart httpd
で反映
セキュリティとパフォーマンス
- AllowOverride を最小限にし、
Options
やDirectoryIndex
を厳格設定 - mod_evasive や mod_security を導入し、DoSやWeb脆弱性攻撃を軽減
- KeepAlive や MaxRequestWorkers の調整でパフォーマンスを最適化
- 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.conf
のlisten_addresses
やport
を調整 - バックアップ:
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
- SPF (Sender Policy Framework)
example.com. IN TXT "v=spf1 ip4:203.0.113.1 include:_spf.google.com ~all"
のようにDNSに設定- 送信サーバーIPを指定し、不正ななりすまし送信を防ぐ
- DKIM (DomainKeys Identified Mail)
- 送信メールに電子署名を付与する仕組み
- OpenDKIMや他のツールで鍵を作成し、公開鍵はDNSにTXTレコードで登録
- 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)
- 証明書作成 (自己署名など)
/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サーバーやメールゲートウェイを負荷分散し、高可用性を確保
- Keepalived や Pacemaker: IPフェイルオーバーやクラスター管理によるダウンタイム最小化
- スケーラブルなアーキテクチャ (例: WebはNginx+PHP-FPM、DBはレプリケーション、メールは冗長MX設定)
9.8 学習のまとめ
- Webサーバー(Apache, Nginx): バーチャルホストやSSL/TLS設定をマスターし、ログ管理やモジュール設定(Apache)、サーバーブロックやリバースプロキシ(Nginx)など状況に応じて使い分け。
- データベースサーバー(MariaDB, PostgreSQL): インストール後のセキュア化(
mysql_secure_installation
など)とユーザー権限管理が重要。バックアップ/リストア戦略を確立し、本番でのデータ損失を防ぐ。 - メールサーバー(Postfix, Dovecot): SMTP(Postfix)とIMAP/POP3(Dovecot)を連携。SPF, DKIM, DMARCなどの導入で迷惑メールやなりすましを防止。
- FTPサーバー(vsftpd): 匿名ログイン禁止やFTPSを導入し、セキュアなファイル転送を実現。
- DNSサーバー(BIND): ゾーンファイルの正確な管理とDNSSEC(本章では触れていないが)などの導入も検討。
- 高度な運用管理: systemdユニットファイルでカスタムサービスを管理、ログ監視やFail2Ban、SELinuxなどと連携して多層防御。可用性向上策や負荷分散も含めて総合的に設計。
次章へのつながり
次の章(第10章)では、サーバー運用に欠かせないシステム監視やパフォーマンスチューニングにフォーカスします。リソース消費状況の把握やボトルネックの特定、ツールの導入方法などを学び、安定稼働と高パフォーマンスを両立するための知識を習得しましょう。