1.はじめに
CentOS 7ではApache 2.4がデフォルトになっていますが、2.2の頃に比べて設定が簡素になっていて、逆に解り難くなっている感じもします。
また、多くのサイトでは基本的な設定は記載されているのですが、セキュリティを考えたり、マルチドメインに対応させたり、高速化を考えたり。。。意外と面倒なんですよね。
そこで、自分用にサイトをカスタマイズしてみました。
ということで、個人用設定です。
2.こんな感じにしよう
お品書きです。
・Apacheのインストール
・VirtualHostの設定
・SSL対応(紹介のみ)
・基本的なセキュリティ設定
・ちょっと踏み込んだセキュリティ設定
・高速化
こんな感じで進めていこうと思います。
SSL対応の前にVirtualHostの設定を行う理由は、今回使用するSSLの証明書がドメイン毎に必要となる為、事前にマルチドメインの設定を行っておきたかったためです。
順序についても少し考えてから行ってみると、作業が戻らなくて良いかと思います。
3.Apacheのインストール
CentOS 7ではデフォルトで準備されている場合もありますね。
もし入っていなかった場合には、yumでインストールしましょう。
1 |
# yum install httpd |
あまりに簡単すぎますが、インストール自体はこれで終わりです。
以下のFirewall設定を行えば、公開出来てしまいます。
3.1 firewallの設定
1 2 3 |
# firewall-cmd --add-service httpd # firewall-cmd --add-service httpds # firewall-cmd --runtime-to-permanent |
上記のコマンドでは、httpとhttpsを開放しています。
実際には、まだhttpsの設定は行っていませんので接続は出来ません。
試しに、httpでドメインを指定してアクセスしてみましょう。
きちんとApacheのロゴが表示されるでしょう。
3.2 VirtualHostの設定
複数ドメインでWebサーバを構築したい場合があります。
そこで、複数ドメインでWebサーバが動くように設定を行います。
/etc/httpd/conf.dに新たな設定ファイルを追加します。
/etc/httpd/conf.d/virtual.confとします。
1 2 3 4 5 6 7 8 9 10 11 |
NameVirtualHost *:80 <VirtualHost *:80> ServerName hoge.ne.jp DocumentRoot /var/www/html </VirtualHost> NameVirtualHost sub.hoge.ne.jp <VirtualHost *:80> ServerName sub.hoge.ne.jp DocumentRoot /var/www/html/sub </VirtualHost> |
上記では、hoge.ne.jpとsub.hoge.ne.jpで指定する2つのドメインでアクセスできるようになりました。
4.SSL対応(紹介のみ)
Let’s Encryptを利用すると、無償でSSL証明書を得ることが出来ます。
下記のサイトにインストール方法が記されていますので参考にされると良いでしょう。
https://free-ssl.jp/usage/install-certbot.html#CentOS7
1 2 |
# yum install epel-release # yum install certbot python-certbot-apache |
実行方法についても同じ様に下記のサイトに記されています。
https://free-ssl.jp/usage/#TestExec
1 |
# certbot |
コマンドを実行されたら内容を確認しながらインストールすると、 /etc/httpd/conf.d/virtual.conf も適当に書き換えられて、SSL対応が可能になります。
こんな感じに書き換えられます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
NameVirtualHost *:80 <VirtualHost *:80> ServerName hoge.ne.jp DocumentRoot /var/www/html RewriteEngine on RewriteCond %{SERVER_NAME} =hoge.ne.jp RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> NameVirtualHost sub.hoge.ne.jp <VirtualHost *:80> ServerName sub.hoge.ne.jp DocumentRoot /var/www/html/sub RewriteEngine on RewriteCond %{SERVER_NAME} =sub.hoge.ne.jp RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> |
httpdを再起動するとSSLの設定が有効になります。
1 |
# systemctl restart httpd |
5.基本的なセキュリティ設定
これから幾つかの設定を行います。
設定を行った際に行う2つのことをここで説明しておきます。
1つ目は、正しき記載されているか?
2つ目は、httpdの再起動です。
それぞれ、よく使うコマンドになりますので以下に記します。
正しく記載されているか確認します。
1 2 3 |
# httpd -t ・・・・・・(省略) Syntax OK |
httpdの再起動を行います。
1 2 3 |
# systemctl restart httpd もしくは # systemctl reload httpd <== こちらは、設定を再読込み |
5.1 Wellcomeページの削除
デフォルト状態でドメインへアクセスすると、Welcomeページが表示されます。
Welcomeページは通常不要なページです。
必要ないから削除してしまいましょう。
/etc/httpd/conf.d/welcom.confファイルを削除するかリネームすることでwelcomぺ^自我表示されなくなります。
1 |
# mv /etc/httpd/conf.d/welcom.conf /etc/httpd/conf.d/welcom.conf.org |
httpdを再起動することで設定は反映されます。
5.2 Index表示をデフォルトで行わせない。
デフォルトの設定では、URLで指定されるフォルダーの一覧が表示される状態になっています。
フォルダーの一覧が表示されてしまうと、サイトに含まれるファイルの一覧や構造が解ってしまいます。
この機能をデフォルトでOFFにします。
/etc/httpd/conf/httpd.confに含まれる以下の設定を変更します。
1 2 |
# Options Indexes FollowSymLinks Options FollowSymLinks |
5.3 HTTP TRACEメソッドを無効化する。
クロスサイトスクリプティングの対策として、TRACEメソッドを無効化します。
/etc/httpd/conf/httpd.confに以下の1行を追加します。
1 |
TraceEnable off |
5.4 X-Frame-Options を設定する。
クリックジャッキングの対策として有効なX-Frame-Optionsを設定します。
/etc/httpd/conf/httpd.confに以下の1行を追加します。
1 |
Header append X-FRAME-OPTIONS "SAMEORIGIN" |
SAMEORIGIN以外にもオプションはありますが、ブラウザによってサポートされていない場合もあります。
ブラウザのバージョンに依存することもあります。
ネット上で情報確認を行った上で対応を考えてみてください。
この設定を行うと、iframeなどで異なるドメインのサーバで勝手に使用されることが出来なくなります。
5.5 Apacheバージョンの隠ぺい
Apacheのバージョンをデフォルトでは取得できる設定になっています。
でも、バージョン情報が解ってしまうと、そのバージョンを狙った攻撃も解ってしまいます。
そこで、このバージョン情報を隠ぺいします。
普通は必要ない情報ですからいいでしょう。
/etc/httpd/conf/httpd.confに以下を追加します。
1 2 |
ServerTokens ProductOnly ServerSignature off |
5.6 暗号化を強化する。
まず、安全性の低い暗号化を無効にします。
/etc/httpd/conf.d/ssl.confにある以下の内容を変更します。
1 2 |
#SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4:!DH |
次に、以下を有効にします。
1 |
SSLHonorCipherOrder on |