サーバへの攻撃を止める
Linuxサーバ(Alma Linux 9)が急に重くなった。/var/log/httpd/ssl_access_log を見れば、特定のIPアドレスから大量にアクセスがある。しかもアクセス内容がおかしい。攻撃か、暴走クローラか。
とりあえず Deny access to a site with an .htaccess file を参考にして .htaccess
にアクセス禁止の呪文を書いた:
<RequireAll> Require all granted Require not ip XXX.XXX.XXX.XXX </RequireAll>
これでアクセス要求には 403 Forbidden が返る。
それでも止まらないので、firewalld を使うことにした。
いきなり sudo systemctl start firewalld
とするとssh接続まで切れて難儀する。
sudo systemctl start firewalld && sudo firewall-cmd --set-default-zone=public
ならsshは大丈夫である。でもこれでは http/https も止まる。
sudo firewall-cmd --add-service=http sudo firewall-cmd --add-service=https
のようにしてサービスごとに許可する。ただ、これでは再起動すると元に戻るので、うまくいったならば
sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --add-service=https --permanent
のようにして永続化する。
サービス一覧は次のようにして確認できる:
sudo firewall-cmd --get-services
たくさんのサービスが現れるので、必要に応じて設定する:
sudo firewall-cmd --add-service=git sudo firewall-cmd --add-service=git --permanent
現状および永続化された設定は次のコマンドで確認できる:
sudo firewall-cmd --list-all sudo firewall-cmd --list-all --permanent
あと、sshのポートを変更しているなら、そのポートを開けておく必要がある:
sudo firewall-cmd --add-port=XXXXX/tcp sudo firewall-cmd --add-port=XXXXX/tcp --permanent
さて、問題は例の XXX.XXX.XXX.XXX というホストである。ここからのアクセスをすべて拒否したい。それには
sudo firewall-cmd --add-rich-rule="rule family='ipv4' source address='XXX.XXX.XXX.XXX' reject"
とすればよい。必要に応じてこれも --permanent
を付けたものも実行しておく。