Apache服务器因HTTP CONNECT请求无响应的处理方案咨询
看起来你的Apache服务器正被大量恶意请求轰炸,导致资源耗尽无法响应正常请求。我先帮你分析下日志里的关键问题:
- 大量来自特定IP的
CONNECT请求,这些请求是试图把你的服务器当作HTTP代理,用来访问外部站点(比如m.113kp.com、httpbin.org),这类请求会占用大量连接资源 - 还有很多带
\x16\x03\x01这类十六进制字符的请求,这是客户端错误地给80端口发送TLS握手数据包,Apache无法解析返回400错误,但这类无效请求同样在消耗服务器资源
下面是具体的处理方案,你可以按优先级来操作:
先禁用不必要的代理模块
先检查Apache是否加载了代理相关模块,执行命令:apachectl -M,如果看到proxy_module和proxy_http_module被加载,但你本身不需要代理功能的话,直接在Apache配置文件里注释掉这两行:# LoadModule proxy_module modules/mod_proxy.so # LoadModule proxy_http_module modules/mod_proxy_http.so然后重启Apache:
systemctl restart apache2(CentOS/RHEL用service httpd restart)拒绝所有CONNECT请求(如果业务不需要)
在你的虚拟主机配置或者Apache主配置里添加规则,直接阻断CONNECT方法:<Location /> <Limit CONNECT> Order deny,allow Deny from all </Limit> </Location>配置后重启Apache,这样就能直接拒绝所有代理请求
封禁高频恶意IP
从日志里能看到几个重复发起请求的恶意IP:78.135.85.252、3.88.173.121、54.209.41.100等,你可以用iptables直接封禁这些IP:iptables -A INPUT -s 78.135.85.252 -j DROP iptables -A INPUT -s 3.88.173.121 -j DROP iptables -A INPUT -s 54.209.41.100 -j DROP也可以在Apache配置里用
Deny from规则封禁,不过iptables层面封禁更高效限制单IP并发连接数
启用mod_limitipconn模块,限制单个IP的最大并发连接数,避免单个IP耗尽连接资源:<IfModule limitipconn_module> MaxConnPerIP 10 # 允许静态资源不受限制(可选) NoIPLimit image/* css/* js/* </IfModule>记得先确保模块已加载,没有的话先安装或启用
拦截无效的TLS握手请求
用mod_rewrite拒绝包含控制字符的无效请求:RewriteEngine On RewriteCond %{REQUEST_URI} ^[\x00-\x1F] RewriteRule .* - [F,L]如果你已经配置了HTTPS,也可以把所有80端口的请求重定向到443,减少这类无效请求:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]实时监控日志
可以用goaccess这类工具实时分析访问日志,及时发现新的恶意流量:goaccess /var/log/apache2/access.log -o /var/www/html/traffic-report.html --real-time-html这样你可以在浏览器里实时查看流量情况,快速定位异常
备注:内容来源于stack exchange,提问作者Yogesh Prajapati

