Apacheの構築と防御を一撃で終わらせる
こんにちは!「リナックス先生」です。
Webサーバー構築の現場では、同じ設定作業を何度も繰り返すことがよくあります。しかし、手動での設定は時間の無駄であり、記述ミスの温床です。
先生、前回はエラーが出て焦りました…。
「ファイルがない」とか「ディレクトリがない」とか言われると、どうしていいか分からなくなります。
初心者でも絶対に失敗しないスクリプトはありませんか?
お待たせ。
あらゆる環境(インストール済み、未インストール、最小構成など)を想定して、エラーハンドリングを強化した「完全版スクリプト」を用意したわ。
これを使えば、Apacheの導入からセキュリティ設定まで、コーヒーを一口飲む間に終わるわよ!
1. 完全版スクリプトの機能
このスクリプトは、単に設定ファイルを書き換えるだけではありません。以下の処理をインテリジェントに行います。
🛠️ スクリプトの自動処理内容
- 環境チェック&インストール: Apacheが入っていなければ自動でインストールします。
- ディレクトリ自動生成: 設定フォルダ (
conf.d等) がなければ自動作成します。 - バックアップ: 設定変更前に、現在の設定ファイルを自動バックアップします。
- 基本セキュリティ: バージョン情報 (ServerTokens) などを隠蔽します。
- 高度なセキュリティ: XSS対策やクリックジャッキング対策のヘッダーを追加します。
- 安全な起動: 構文チェック (Configtest) をパスした場合のみ再起動します。
2. 自動構築スクリプト (setup_apache_secure.sh)
以下の手順でスクリプトを作成し、実行してください。
Step 1: ファイルの作成
サーバーに root ユーザーでログインし、エディタでファイルを作成します。
vi setup_apache_secure.sh
Step 2: コードの貼り付け
以下のコードをすべてコピーして貼り付けてください。
#!/bin/bash
# ========================================================
# AlmaLinux 9 Apache Install & Security Hardening (Fixed)
# ========================================================
# エラーが出たら停止
set -e
# 設定ファイルのパス定義
CONF_DIR="/etc/httpd/conf"
CONFD_DIR="/etc/httpd/conf.d"
MAIN_CONF="$CONF_DIR/httpd.conf"
SEC_CONF="$CONFD_DIR/z_security_hardening.conf"
BACKUP_DIR="/root/httpd_backup_$(date +%Y%m%d_%H%M%S)"
# カラー定義
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${GREEN}>>> 環境チェックを開始します...${NC}"
# 1. Apacheのインストール確認とインストール
if ! rpm -q httpd &> /dev/null; then
echo "Apache (httpd) がインストールされていません。インストールを開始します..."
dnf -y install httpd
systemctl enable httpd
else
echo "Apache (httpd) は既にインストールされています。"
fi
# 2. ディレクトリの存在確認と作成
if [ ! -d "$CONFD_DIR" ]; then
echo "設定ディレクトリを作成します: $CONFD_DIR"
mkdir -p "$CONFD_DIR"
fi
if [ ! -d "$CONF_DIR" ]; then
echo "設定ディレクトリを作成します: $CONF_DIR"
mkdir -p "$CONF_DIR"
fi
# 3. バックアップの作成
echo ">>> バックアップを作成中: $BACKUP_DIR"
mkdir -p "$BACKUP_DIR"
[ -f "$MAIN_CONF" ] && cp "$MAIN_CONF" "$BACKUP_DIR/"
[ -f "$SEC_CONF" ] && cp "$SEC_CONF" "$BACKUP_DIR/"
echo -e "${GREEN}>>> セキュリティ設定を適用します...${NC}"
# 4. httpd.conf の基本設定 (ServerTokens/Signature)
# メイン設定ファイルがない場合は空作成(稀なケースだが念のため)
if [ ! -f "$MAIN_CONF" ]; then
touch "$MAIN_CONF"
fi
# ServerTokens
if grep -q "^ServerTokens" "$MAIN_CONF"; then
sed -i 's/^ServerTokens.*/ServerTokens Prod/' "$MAIN_CONF"
else
echo "ServerTokens Prod" >> "$MAIN_CONF"
fi
# ServerSignature
if grep -q "^ServerSignature" "$MAIN_CONF"; then
sed -i 's/^ServerSignature.*/ServerSignature Off/' "$MAIN_CONF"
else
echo "ServerSignature Off" >> "$MAIN_CONF"
fi
# FileETag
if grep -q "^FileETag" "$MAIN_CONF"; then
sed -i 's/^FileETag.*/FileETag None/' "$MAIN_CONF"
else
echo "FileETag None" >> "$MAIN_CONF"
fi
# 5. セキュリティ専用設定ファイルの作成
# ヒアドキュメントを使ってファイルを新規作成(または上書き)
cat << 'EOF' > "$SEC_CONF"
# ========================================================
# Apache Security Hardening Configuration
# ========================================================
# --- 1. 不要なHTTPメソッドの無効化 ---
TraceEnable Off
# --- 2. HTTPレスポンスヘッダーの強化 ---
Header always set X-Frame-Options SAMEORIGIN
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options nosniff
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# --- 3. 機密ファイルへのアクセス拒否 ---
Require all denied
# --- 4. ディレクトリリスティングの無効化 ---
Options -Indexes
EOF
# 6. Welcomeページ(テストページ)の無効化
WELCOME_CONF="$CONFD_DIR/welcome.conf"
if [ -f "$WELCOME_CONF" ]; then
echo ">>> welcome.conf (テストページ) を無効化します..."
mv "$WELCOME_CONF" "${WELCOME_CONF}.disabled"
fi
# 7. 構文チェックと起動
echo ">>> 設定ファイルの構文チェックを実行中..."
if apachectl configtest; then
echo -e "${GREEN}>>> Syntax OK. Apacheを起動/再起動します...${NC}"
systemctl restart httpd
# Firewallの開放(http/https)
if systemctl is-active firewalld &> /dev/null; then
echo ">>> Firewallの設定を行います..."
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
fi
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} セキュリティ強化が完了しました! ${NC}"
echo -e "${GREEN}========================================${NC}"
else
echo -e "${RED}>>> Syntax Error! 設定に問題があります。${NC}"
echo "バックアップ場所: $BACKUP_DIR"
exit 1
fi
Step 3: 権限付与と実行
作成したスクリプトに実行権限を与え、実行します。
chmod +x setup_apache_secure.sh ./setup_apache_secure.sh
以下のように表示されれば成功です。
>>> Syntax OK. Apacheを起動/再起動します... >>> Firewallの設定を行います... ======================================== セキュリティ強化が完了しました! ========================================
3. 適用結果の確認
正しく設定されたか、curl コマンドで確認してみましょう。
curl -I http://localhost
▼ 成功時のレスポンス例
HTTP/1.1 200 OK Server: Apache <-- バージョン番号が消えている X-Frame-Options: SAMEORIGIN <-- 追加されたヘッダー X-XSS-Protection: 1; mode=block <-- 追加されたヘッダー X-Content-Type-Options: nosniff <-- 追加されたヘッダー
まとめ:エラーを恐れず自動化しよう
今回のスクリプトは、ディレクトリの有無やインストールの有無をチェックする「安全装置」を組み込んであります。
これにより、どんな状態のAlmaLinux 9サーバーであっても、一貫したセキュリティ設定を適用できるようになりました。
これなら僕でも安心です!
「インストールしますか?」とか聞かれずに全部やってくれるのが最高ですね。
次のサーバー構築からは、このスクリプトを必ず持ち歩くようにします!
ええ、自分だけの「秘伝のタレ(スクリプト)」を育てていくのがエンジニアの楽しみよ。
手動作業を極限まで減らして、創造的な仕事に時間を使いましょうね!
▼スクリプトの検証に最適なVPS
自動化スクリプトの動作確認には、OS再インストールが高速で、何度でも試行錯誤できる環境が最適です。開発者に愛される高パフォーマンスVPSはこちらです。


コメント