LoginSignup
7
7

More than 5 years have passed since last update.

不正アクセスをhosts.denyに自動で登録

Posted at

前置き

昔Xoops Cubeで作ったサイト(しばらく放置していた)が「なんか最近重たいな〜」と思って調べると、MySQL DBのコメントテーブルが大量のダミーデータで埋め尽くされていて、そいつがサーバ全体のパフォーマンスをダウンさせていた。

しかもそのコメント欄は非表示にしてあったから、気付かなかった。
(非表示にはなっていたが、投稿は受け付けられる仕組みになっていた)

とりあえずその大量のダミーデータを消し去ることで解決したが、どうせならBotとかDOSアタックを弾こう、とちょっとしたスクリプトを書いてみた。

簡易DenyHosts

ApacheのHTTPDのログを見ていると、公開していないURLに対してPOSTしてくる奴らが居る。
ipアドレスから調べると、ロシアとか中国とか・・・。

ということで、そいつらをまとめて /etc/hosts.denyに放り込む。
Bashスクリプトは下のような感じ。

bash
#!/bin/bash

LIST=$(grep "POST /modules/x_movie/" /var/log/httpd/access_log| awk '{print$1}'| uniq)

result=$(grep "POST /phpmyadmin/scripts/setup.php" /var/log/httpd/access_log| awk '{print$1}'| uniq)
LIST="${LIST} ${result}"

for ip in $LIST; do
  if [ "$(grep $ip /etc/hosts.deny)" = "" ]; then
    echo "# /root/auto_deny.sh" >> /etc/hosts.deny
    echo "ALL EXCEPT sshd : $ip : DENY" >> /etc/hosts.deny
  fi
done

このスクリプトをcronで1分ごとに実行しておけばOK。

ALL EXCEPT sshdにしたのは、もし自分がテストをしていてDenyされてしまったら、手も足も出ないから、sshdだけ外した。
sshdはDenyHostsでカバーしている。

簡易的だけど効果テキメン!

7
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7