fail2banでdos攻撃を防ぐための構築方法です。
インストール
1 2 |
yum install epel-release yum install fail2ban fail2ban-systemd |
fail2banのFilterを定義
1 2 3 4 5 |
vi /etc/fail2ban/filter.d/apache-ddos.conf [Definition] failregex = ^<HOST> -.*"(GET|POST).* ignoreregex = \.(?i)(jpe?g|gif|png|bmp|pdf|js|css|woff|eot|ttf|ico|txt|xml|swf|xlsx?|docx?|pptx?) |
fail2banのJailを定義
1 2 3 4 5 6 7 8 9 10 11 12 13 |
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.d/jail.local vi /etc/fail2ban/jail.d/jail.local [apache-ddos] enabled = true port = http,https filter = apache-ddos logpath = /var/log/httpd/example.com.access_log maxretry = 30 findtime = 3 bantime = 3600 action = %(action_mwl)s destemail = admin@example.com |
1 2 |
ignoreip = 127.0.0.1/8 192.168.0.1/8 ※IPアドレスが複数ある場合はスペース区切りで。 |
サービス起動
1 2 |
systemctl start fail2ban systemctl enable fail2ban |
状況をみる
どのくらいBANされているか確認
1 |
fail2ban-client status apache-ddos |
テストしてみる
ignoreip =
を空にして、ローカルからテストできるように一時的にする。
1 |
yes 'exec 4<>/dev/tcp/127.0.0.1/80; printf "GET / HTTP/1.0\r\n\r\n" >&4; head -1 <&4' | head -100 | bash |
ログ
1 |
tailf /var/log/fail2ban.log |
例:
2019-01-01 05:02:52,043 fail2ban.filter [1134]: INFO [sshd] Found xxx.xxx.xxx.xxx
2019-01-01 05:02:52,256 fail2ban.actions [1134]: NOTICE [sshd] Ban xxx.xxx.xxx.xxx
ルールに関係なく特定のIPをBANする
例:BANしたいIPが 192.168.0.1の場合
1 |
fail2ban-client set apache-ddos banip 192.168.0.1 |
BANを解除
1 |
fail2ban-client set apache-ddos unbanip 192.168.0.1 |
参考
DoS攻撃/DDoS攻撃からサーバーを守る方法(fail2banのススメ)
https://colo-ri.jp/develop/2016/02/fail2ban.html