Slow HTTP DoS Attack 是一种针对 Web Server 的 DoS 攻击手法, 而且对于使用 thread based 的服务器 (Apache 默认是使用 thread) 尤其有效。做法是向 Web Server 发出连线请求, 但一直不回应 HTTP Header, 或者该回应的时间尽量拉长, 让 Web Server 一直等待 HTTP Header 回应, 直至连线超过 timeout 时间为止, 而默认的 timeout 时间是 300 秒, 这样就可以一直占用连线。
如果攻击者制造大量这些没有回应的连线, 占据了全部或大部份 Web Server 的连线, 正常使用者便不能连到网页, 造成 DoS 的效果。而且攻击者不需使用大量的频宽便可以限断服务。
在 Apache 2.2.15 开始, 默认已经安装了 mod_reqtimeout, 它可以设定接收 HTTP Header 的 timeout 时间, 先开启 httpd.conf, 在 CentOS httpd.conf 的默认位置是 /etc/httpd/conf/httpd.conf:
# vi /etc/httpd/conf/httpd.conf
在最后的位置加入以下内容:
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
在 vi 储存盘案及离开:
:wq
以上设定是只会等待 HTTP Header 20 秒, 而连个 HTTP Header 传送过程只容许在 40 秒内完成.
然后重新启动 Apache:
# systemctl restart http