【完全版】コピペで完了!AlmaLinux 9用 Apacheインストール&セキュリティ一括設定スクリプト

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はこちらです。

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント