本ブログの問い合わせフォームにspam投稿が多いのにいい加減うんざりしてきた。wordpressのpluginでのspam対策とかもあるみたいだけど、無償版でどの程度効果あるのかよくわからないし、問い合わせフォームへのアクセスIP調べてみたらほぼ海外っていうのが分かったのでgeoipでブロックしてやろうと思った。日本語サイトなんて日本人しか見ないだろう。。。
あとはcloudfrontで簡単にアクセス制御ができるみたいだけど、お金の考え方が勉強不足だったので、一旦スルー。またどこかの機会で。
事前確認
- OS確認
# cat /etc/system-release
Amazon Linux release 2 (Karoo)
- MW確認(マイナーバージョンは一応伏せときます)
# httpd -v
Server version: Apache/2.4.** ()
# apachectl -M | grep geoip
# ※無い
- アクセス元のIP確認(問い合わせフォームへPOSTしてるIP)
# cat /var/log/httpd/access.log | grep POST | grep contact | awk '{print $1}' > /tmp/log
- 海外IPか確認(表示が0件であれば全て海外IP)
# cat /tmp/log | while read line; do geoiplookup $line | grep JP; done
設定
mod_geoipはepelにあるのでそこからインストールする必要がある。特に何も触っていないAmazonLinuxであればyumでインストールしようとしても出てこないため、epelのレポジトリを追加してあげる必要がある。
「/usr/share/GeoIP/GeoIP.dat」があることは前提としている。
- 以下は不要。失敗例。epel使えるようにするには別のコマンドを使えと。
# yum install epel-release
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
No package epel-release available.
Error: Nothing to do
epel-release is available in Amazon Linux Extra topic "epel"
To use, run
# sudo amazon-linux-extras install epel
Learn more at
Amazon Linux 2 FAQs
- epelを使えるようにする
# yum repolist | grep epel
amzn2extra-epel/2/x86_64 Amazon Extras repo for epel
# amazon-linux-extras install epel
# yum repolist | grep epel
amzn2extra-epel/2/x86_64 Amazon Extras repo for epel 1
epel/x86_64 Extra Packages for Enterprise Linux 7 - x8 13,438+227
- mod_geoipのインストール
# yum search mod_geoip
mod_geoip.x86_64 : GeoIP module for the Apache HTTP Server
# yum install mod_geoip
# apachectl -M | grep geoip
geoip_module (shared)
- インストール直後に以下のようにファイルが生成されている
# cat /etc/httpd/conf.d/geoip.conf
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</IfModule>
# cat /etc/httpd/conf.modules.d/10-geoip.conf
LoadModule geoip_module modules/mod_geoip.so
- 日本だけのIP許可に変更
- 問い合わせフォームだけに限定
- 限定させないとGoogleSearchCondoleとか正常bot君のアクセスも全部止めてしまう
# vi /etc/httpd/conf.d/geoip.conf
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</IfModule>
<LocationMatch /contact/>
SetEnvIf GEOIP_COUNTRY_CODE JP AllowCountry
Require all denied
Require env AllowCountry
</LocationMatch>
- apacheの再起動
# apachectl configtest
# apachectl restart
動作確認
- 自宅PC、会社PC、スマホなどからアクセスして問題無いこと確認
- 海外からのアクセスは以下のようなサイトから確認できる
- http://adilam.homeip.net/proxy/
- サイト閲覧できず、apacheのアクセスログで403を返していることを確認
その他
geoipのデータベースは、無償版でもユーザー登録が必要になっただとか。。。知らん間に。。。めんどくさい。ただ、ざっと調べた感じではdatを自動で更新してくれるsystemdがあるような無いような。今度調べてやってみよう。
コメント