我的 Freebsd 服务器最近遭受了很多 DoS 攻击,导致 Apache 或 Mysql 停止提供正常连接。当 mysql 达到其最大连接数时,我的应用程序会向我发送有关每个 mysql 错误的电子邮件,这样我就可以阻止恶意 IP。但是当 Apache 拒绝连接时,除非我自己访问该网站,否则我不会知道。是否有可能知道 Apache 何时达到其最大连接数?这样我就可以调整 Apache 或阻止恶意 IP?谢谢!
答案1
答案2
我相信 mod_status 能够为您提供所需的信息,但如果 Apache 拒绝连接,它就不会那么有用:http://httpd.apache.org/docs/2.2/mod/mod_status.html
Apachetop 还应该能够告诉您当前的连接数。它在大多数存储库中都可用。
然而,最好的方法可能只是编写一个wget
对网站的调用脚本,如果在短时间内(5-10 秒)两次检查失败,则自动转储相关日志数据。
答案3
~# curl -sIL localhost
HTTP/1.1 200 OK
Date: Mon, 29 Aug 2011 03:28:42 GMT
Server: Apache/2.2.16 (Debian)
Last-Modified: Mon, 18 Jul 2011 22:20:41 GMT
ETag: "f902-b1-4a85f68d52040"
Accept-Ranges: bytes
Content-Length: 177
Vary: Accept-Encoding
Content-Type: text/html
~# echo $?
0
~# cat >mycheck.sh
#!/bin/bash
curl -sIL localhost 2>&1 >/dev/null
if [ $? -eq 0 ]; then
echo " Success !"
else
echo " FAIL "
fi
CTRL^D
~# sh mycheck.sh
Success !
~# iptables -I INPUT -p tcp --dport 80 -j DROP
~# sh mycheck.sh
FAIL