LinuxにWAFを設定したら、WordPressがうまく動かない・・・
WAF(Web Application Firewall ) のModSecurity導入したら、Wordpress、MovableTypeでエラーになった・・・・
ルールをキビしくしたからって事もあると思うけど、ルールをゆるくするのも違うと思うし・・・・・
まず、EPEL リポジトリの追加してからインストール
EPEL リポジトリ追加方法
https://centossrv.com/epel.shtml
ModSecurity導入
https://www.websec-room.com/2013/11/17/1019
ここに、IPAのWAF導入の仕方等のリンクもあります。
簡単にルールを適用外にするには、httpd.confの、Wordpress等を入れたディレクトリ(例えばwordpressディレクトリ)に以下を追記します。
<Directory “/var/www/html/wordpress"> <IfModule mod_security2.c>
SecRuleEngine Off
</IfModule> </Directory> |
これで外れますが、何のためにWAFを導入したかわけのわからない事になります。
上記は検証環境とかでよいとは思いますが、外に公開する場合は、だめな方法です。
上記ははしょったやり方ですが、実際、ちゃんと動作させてやる場合、自分の場合ですが、まずセキュリティのルールを設定します。と言ってもデフォルトをちょっと変えただけです。
これも、https://www.websec-room.com/2013/12/06/1237を参照に クロスサイト・スクリプティングと SQL インジェクションだけにした場合の話です。そして、ログで、何が弾かれたか確認することを含めて、SecRuleEngine DetectionOnlyを設定します。
[root@localhost ~]# 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
Include modsecurity.d/activated_rules/modsecurity_crs_41_xss_attacks.conf
Include modsecurity.d/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf
# Default recommended configuration
#SecRuleEngine On
SecRuleEngine DetectionOnly ←Wordpress動作確認の為 |
その後、apahceを再起動し、wordpressにアクセスしてから、ログを確認します。
[root@localhost ~]#less /var/log/httpd/modsec_audit.log ←ログ
~~~~~~~~~~~~~~~~~~~~
—e50d3d00-H–
Message: Warning. Pattern match “([\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\+\\=\\{\\}\\[\\]\\|\\:\\;\"\\’\\\xc2\xb4\\\xe2\x80\x99\\\xe2\x80\x98\\`\\<\\>].*?){4,}" at ARGS_NAMES:data[wp-refresh-post-nonces][post_id]. [file “/etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line “159"] [id “981173"] [rev “2"] [msg “Restricted SQL Character Anomaly Detection Alert – Total # of special characters exceeded"] [data “Matched Data: – found within ARGS_NAMES:data[wp-refresh-post-nonces][post_id]: data[wp-refresh-post-nonces][post_id]"] [ver “OWASP_CRS/2.2.9"] [maturity “9"] [accuracy “8"] [tag “OWASP_CRS/WEB_ATTACK/SQL_INJECTION"]
Apache-Handler: application/x-httpd-php
Stopwatch: 1487313950994609 694681 (- – -)
Stopwatch2: 1487313950994609 694681; combined=10787, p1=165, p2=10609, p3=3, p4=1, p5=8, sr=63, sw=1, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.7.3 (http://www.modsecurity.org/); OWASP_CRS/2.2.9.
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_auth_gssapi/1.4.0 mod_auth_kerb/5.4
Engine-Mode: “DETECTION_ONLY" |
ここで確認するにはIDです。このIDを確認後、このIDを例外処置にする設定をします。
[root@localhost wp_4_2_2]# vi /etc/httpd/conf.d/mod_security.conf<IfModule mod_security2.c>
# ModSecurity Core Rules Set configuration
IncludeOptional modsecurity.d/*.conf
#coment out
# IncludeOptional modsecurity.d/activated_rules/*.conf
Include modsecurity.d/activated_rules/modsecurity_crs_41_xss_attacks.conf
~~~~省略~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SecAuditLogType Serial
SecAuditLog /var/log/httpd/modsec_audit.log
SecArgumentSeparator &
SecCookieFormat 0
SecTmpDir /var/lib/mod_security
SecDataDir /var/lib/mod_security
#wordpress 追加
SecRuleRemoveById 981173
</IfModule>
他の物も確認し、追記していきます。ちなみにphpmyadminを引っかかりますので、相当なIDを追記する必要があります。