CentOS上でApacheを使用していますが、OS側で行うApacheに関わるセキュリティ設定についてまとめました。
下記資料を参考にしました。
NSA(National Security Agency)の『Guide to the Secure Configuration of Red Hat Enterprise Linux 5』
※目次をクリックすると目次の下部にコンテンツが表示されます。
chroot
●chrootとは
chrootを実行すると、ルートパスが指定されたパスに置き換わり、そのパスより上部のパスにはアクセスできなくなります。
これによってそのサービスを特定のファイル名前空間に隔離することができます。
Apacheをchrootを使って実行するとたとえApacheが不正アクセスを受けたとしてもその被害をファイルシステム内の限られた領域内にとどめることが出来ます。
●設定方法
・/etc/httpd/conf/httpd.confに下記設定を追加します。
SecChrootDir /chroot/apache
※参考
https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#wiki-SecChrootDir
・Apacheによって必要とされるすべてのファイル(Apacheのバイナリ、モジュール、設定ファイル、Webページなど)を/chroot/apacheディレクトリ内に置く必要があります。
chrootを実行すると、ルートパスが指定されたパスに置き換わり、そのパスより上部のパスにはアクセスできなくなります。
これによってそのサービスを特定のファイル名前空間に隔離することができます。
Apacheをchrootを使って実行するとたとえApacheが不正アクセスを受けたとしてもその被害をファイルシステム内の限られた領域内にとどめることが出来ます。
●設定方法
・/etc/httpd/conf/httpd.confに下記設定を追加します。
SecChrootDir /chroot/apache
※参考
https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#wiki-SecChrootDir
・Apacheによって必要とされるすべてのファイル(Apacheのバイナリ、モジュール、設定ファイル、Webページなど)を/chroot/apacheディレクトリ内に置く必要があります。
iptables(/etc/sysconfig/iptables)で許可するポート番号、状態を設定
参考資料における推奨設定例を示します。
設定ファイル内の該当チェインのLOG、DROPのルールより上の行に下記ルールを追加します。
-A RH-Firewall-1-INPUT -m state –state NEW -p tcp –dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -p tcp –dport 443 -j ACCEPT
設定ファイル内の該当チェインのLOG、DROPのルールより上の行に下記ルールを追加します。
-A RH-Firewall-1-INPUT -m state –state NEW -p tcp –dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -p tcp –dport 443 -j ACCEPT
ファイル、ディレクトリの権限設定
参考資料における推奨の設定例を示します。
# chmod 511 /usr/sbin/httpd
# chmod 750 /var/log/httpd/
# chmod 750 /etc/httpd/conf/
# chmod 640 /etc/httpd/conf/*
# chgrp -R apache /etc/httpd/conf
# chmod 511 /usr/sbin/httpd
# chmod 750 /var/log/httpd/
# chmod 750 /etc/httpd/conf/
# chmod 640 /etc/httpd/conf/*
# chgrp -R apache /etc/httpd/conf