アタック!!
久しぶりにブログ書いてますが、errorログにアタックを検出したのでネタにしたいと思います。
まず下記がアタックされている様子のスクリーンショットです。222.185.238.250のGIPからアタックされていることが分かります。
アタック元
という事なので、これは中国からのアタックだという事が分かりますね。ウザイのでそろそろ対策を講じて行きたいと思います。方向性はアタックされるIPがある特定のルールに基づき自動BANされる仕組みをつくって行きます。
ブログを書きながら構成変更完了
○まずは、必要なツールをインストールをする。
sudo yum install fail2ban fail2ban-systemd
○次に、今回閉め出したいアクセスを検出するフィルターを作成する
sudo vi /etc/fail2ban/filter.d/wordpress_filter.conf
[Definition] failregex = ^<HOST>.*POST.*(wp-login\.php|xmlrpc\.php).*$ ^<HOST>.*"(GET|POST).*" (404|403) .*$ ignoreregex =
○フィルターを使っての動作を記述する
sudo vi /etc/fail2ban/jail.d/wordpress_jail.conf
[DEFAULT] bantime = 43200 findtime = 3600 maxretry = 3 #banaction = firewallcmd-ipset banaction = iptables-multiport backend = gamin action = %(action_mwl)s ignoreip = 127.0.0.1/8 [recidive] enabled = true bantime = -1 findtime = 259200 maxretry = 2 [sshd] enabled = true port = 2345 [wordpress] enabled = true filter = wordpress_filter logpath = /var/log/nginx/*access.log
この辺りで設定した正規表現で該当アクセスを検出できているか?確認
今回で言うと、下記の問題中国からのアタックを閉め出したい訳なので、該当アクセスにヒットしている事を確認
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/wordpress_filter.conf –print-all-matched
| 222.185.238.250 - - [06/May/2019:03:31:21 +0900] "GET /123131/index.php HTTP/1.1" 404 548 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0)" "-" | 222.185.238.250 - - [06/May/2019:03:31:21 +0900] "GET /program/index.php HTTP/1.1" 404 548 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0)" "-" | 222.185.238.250 - - [06/May/2019:03:31:21 +0900] "GET /shopdb/index.php HTTP/1.1" 404 548 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0)" "-" | 222.185.238.250 - - [06/May/2019:03:31:21 +0900] "GET /phppma/index.php HTTP/1.1" 404 548 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0)" "-" | 222.185.238.250 - - [06/May/2019:03:31:22 +0900] "GET /phpmy/index.php HTTP/1.1" 404 548 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0)" "-"
下記で動作をprocessをスタートして状況を確認する
systemctl start fail2ban
systemctl enable fail2ban.service
systemctl status fail2ban
動作確認
[hogehoge@vaaabbb-daada-gfgfldnfkjdbafndsanfdaslnfasdl ]# tail -f fail2ban.log 2019-05-06 16:02:54,087 fail2ban.server [19532]: INFO Exiting Fail2ban 2019-05-06 16:09:17,749 fail2ban.actions [20201]: NOTICE [wordpress] Ban 106.72.132.224 2019-05-06 16:09:18,066 fail2ban.actions [20201]: NOTICE [wordpress] Ban 66.249.71.52 2019-05-06 16:09:18,781 fail2ban.actions [20201]: NOTICE [wordpress] Ban 66.249.71.50 2019-05-06 16:09:31,315 fail2ban.actions [20201]: NOTICE [wordpress] Unban 106.72.132.224 2019-05-06 16:09:31,524 fail2ban.actions [20201]: NOTICE [wordpress] Unban 66.249.71.52 2019-05-06 16:09:31,736 fail2ban.actions [20201]: NOTICE [wordpress] Unban 66.249.71.50 2019-05-06 16:09:34,038 fail2ban.actions [20367]: NOTICE [wordpress] Ban 106.72.132.224 2019-05-06 16:09:34,462 fail2ban.actions [20367]: NOTICE [wordpress] Ban 66.249.71.50 2019-05-06 16:09:34,979 fail2ban.actions [20367]: NOTICE [wordpress] Ban 66.249.71.52 2019-05-06 16:22:53,371 fail2ban.actions [20367]: NOTICE [wordpress] Ban 126.247.226.253
後は、zabbixで上記BANされたIPの数とUNBANされた数をカウントしてグラフ化するかな!
cat fail2ban.log | grep Ban | wc -l この辺りをZabbixに叩かせてでた数字をグラフ化すると可視化できる。後ついでにslackにプッシュする設定を行う感じで外に出ている時に知る事が出来ますね。まあ、知った所で何もないんですがwひとまず、張り付いて見張っている訳にはいかないので、これでいったん自動運転をしようと思います。
という事で、ひとまず、実装はできたのでこれで様子をみようと思います。
それでは、何か参考にして頂ければ幸いです。
その後
いいですねぇ。順調にブロックされているGIPがキャッチ出来ています。ブロックされていても、パケットカウントが増えているので、おそらくクラックツールとかで、プログラム的にRETRYを繰り返しているのかなと思われます。まあ、ぶっちゃそんなツールを入れて直にクラックする奴なんて滅多にいないので、クラックされて侵入されてどこかのサーバやらPCやらの中で動いて居るのだと思いますけどね。まあ、ひとまず、不審な行動をするとBANされて一定時間くると開放されるけど、ある回数BANを繰り返すと、そのIPは永久にBANされたままになる様に設定をしています。とりあえず、他の寄生先を見つけて、違うGIPからアタックをするくらいしかないですが・・・。同様の状況になるので、あまり意味はなさげかなと思います。
pkts bytes target prot opt in out source destination 23 2261 REJECT all -- * * 203.81.114.124 0.0.0.0/0 reject-with icmp-port-unreachable 19 4476 REJECT all -- * * 153.181.242.38 0.0.0.0/0 reject-with icmp-port-unreachable 22 3400 REJECT all -- * * 210.188.25.185 0.0.0.0/0 reject-with icmp-port-unreachable 51 3387 REJECT all -- * * 180.198.72.160 0.0.0.0/0 reject-with icmp-port-unreachable 16 916 REJECT all -- * * 60.149.92.77 0.0.0.0/0 reject-with icmp-port-unreachable 16 4926 REJECT all -- * * 118.241.130.248 0.0.0.0/0 reject-with icmp-port-unreachable 12 552 REJECT all -- * * 115.28.245.132 0.0.0.0/0 reject-with icmp-port-unreachable 198 11928 REJECT all -- * * 80.250.82.41 0.0.0.0/0 reject-with icmp-port-unreachable 15 5122 REJECT all -- * * 153.172.130.235 0.0.0.0/0 reject-with icmp-port-unreachable 69 4140 REJECT all -- * * 66.249.71.52 0.0.0.0/0 reject-with icmp-port-unreachable 79 4740 REJECT all -- * * 66.249.71.50 0.0.0.0/0 reject-with icmp-port-unreachable 0 0 REJECT all -- * * 126.247.226.253 0.0.0.0/0 reject-with icmp-port-unreachable 0 0 REJECT all -- * * 123.217.103.91 0.0.0.0/0 reject-with icmp-port-unreachable 0 0 REJECT all -- * * 106.72.132.224 0.0.0.0/0 reject-with icmp-port-unreachable