WAFとは
WAF(Web Application Firewall)とは、Web アプリケーションにリクエストが送信される手前でリクエストを審査して、問題があればリクエストを拒否します。これにより仮に Web アプリケーションに脆弱性があったとしても WAFが、このリクエスト拒否をしてサイトを保護します。
ここで導入するのは、オープンソースのModSecurityです。ModSecurityは、Webサーバにインストールするホスト型のWAFで、Webアプリケーションの脆弱性を突いた攻撃を防ぎます。また、オープンソースで無償提供されており、自由に利用できるソフトウェアです。
ModSecurityのインストール
epelリポジトリからインストールします。インストール後、Apacheを再起動すれば、デフォルトでmod_securityの設定が有効になります
# yum –enablerepo=epel install mod_security mod_security_crs Apache再起動 # systemctl restart httpd.service
ModSecurityの本格運用する前に、最初、遮断した場合に、不都合が無いか確認が必要です。
ModSecurityの設定ファイル: /etc/httpd/conf.d/mod_security.conf ・・・Modsecurityの設定ファイル
active ruleファイル: /etc/httpd/modsecurity.d/activated_rules/ ・・・このフォルダの下に有るのがルールを記述したファイルのリンクです
rulesファイルの実際の配置フォルダ: /usr/lib/modsecurity.d/base_rules/・・・ルールの実際のファイルがある場所です。ここから上記のフォルダにリンクを張ります
最初にModSecurityは運用モードで動作確認が必要
# vi /etc/httpd/conf.d/mod_security.conf Include modsecurity.d/activated_rules/*.conf <ーーー全ての設定を適用する SecRuleEngine On <ーーーセキュリティモードオン
この状態で、主にWordPressの動作確認をしましょう。一般ユーザーが正常にサイトが見えるか。また、編集作業に何か支障を生じないか、を確認することが必要です。確認するとしたら、動作ログ「/var/log/httpd/modsec_audit.log」の内容を確認してみましょう。。
なお、当サイトでは、WordPressにSiteGuardを導入している関係上、そのまま適用すると、ログイン画面を表示すること自体ができなくなりました。
その対応策は。特定のクライアント(編集を行うPCのIPアドレスを指定する)については、ModSecurity自体をスルーさせる事とし、それ以外のクライアントには、設定される全ての項目を有効化します。
特定のIPのみ許可する設定
ルールファイルを新しく作成します
# cd /usr/lib/modsecurity.d/base_rules # touch modsecurity_crs_10_custom.conf # vi modsecurity_crs_10_custom.conf SecRule REMOTE_ADDR "@ipMatch 192.168.15.101,192.168.21.0/24" id:2000,phase:1,t:none,log,allow
実ファイルのルール定義のあるフォルダに移動し、定義ファイル modsecurity_crs_10_cuctom.comf を作成し、上記の内容を記入します。記載内容は、対象のIPアドレスにマッチするクライアントは審査をパスする設定です。IPアドレスを複数指定する場合は”,”で区切ります。
次に、実際に参照するフォルダにリンクを張ります
# ln -s /usr/lib/modsecurity.d/base_rules/modsecurity_crs_10_custom.conf /etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_10_custom.conf # cd /etc/httpd/modsecurity.d/activated_rules/ # ls ・・・ modsecurity_50_outbound.data modsecurity_50_outbound_malware.data modsecurity_crs_10_custom.conf ・・・リンクを張った内容が表示される事! modsecurity_crs_20_protocol_violations.conf modsecurity_crs_21_protocol_anomalies.conf ・・・ modsecurity_crs_60_correlation.conf
定義ファイルの修正
# vi /etc/httpd/conf.d/mod_security.conf <IfModule mod_security2.c> # ModSecurity Core Rules Set configuration IncludeOptional modsecurity.d/*.conf IncludeOptional modsecurity.d/activated_rules/*.conf <ーーーー全ての項目を適用します # Default recommended configuration SecRuleEngine On # SecRuleEngine DetectionOnly SecRequestBodyAccess On ・・・
Apacheを再起動します
# systemctl restart httpd.service
動作確認
1)IPを設定したPCからログインが出来る事。編集作業が出来る事を確認します。
2)それ以外のIPのPCからドメイン指定でアクセスし、サイトの表示に支障が無いこと。又、ログインが出来ないことを確認します。
どちらも、上記の状態を確認出来ればModSecurityは正常に動作していると判断して良いでしょう。