我的服务器访问量很大。这台服务器通常几乎没有流量,但每次我重新启动服务器时,访问量都很大。我首先收到以下错误,
ip_conntrack: table full, dropping packet
然后我的 httpd 内存迟早会耗尽,服务器会变得无响应。有什么办法可以修复它吗?
我的 access_log 的最新头部。我将 http 改为 hxxp
122.193.164.5 - - [27/Mar/2011:23:48:35 -0700] "GET hxxp://pubs.acs.org/templates/jsp/_style2/_achs/css/atypon-main.css HTTP/1.0" 200 174299 "hxxp://pubs.acs.org/doi/abs/10.1021/ac100095u" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
218.29.188.217 - - [27/Mar/2011:23:48:38 -0700] "GET hxxp://rotator.adjuggler.com/servlet/ajrotator/913831/0/vh?ajecscp=1301294917498&z=pdn&dim=753179&kw=&click=http://ad.yieldads.com/clk?2,13%3B5900475f5cba1a74%3B12efb38a54b,0%3B%3B%3B1304299909,cl1GAPp3GABp04QAAAAAAEfOIQAAAAAAAgAAAAIAAAAAAP8AAAABGF1nJgAAAAAAJ6sXAAAAAAD1YSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn.A8AAAAAAAIAAwAAAAAAS6U4-y4BAAAAAAAAADY2ZjM3ZGE0LTU5MDctMTFlMC04MzUwLTAwMzA0OGQ3MjBhOABmlSoAAAA=,,http%3A%2F%2Fwww.healthcarefinancenews.com%2F, HTTP/1.0" 200 1181 "http://ad.yieldmanager.com/iframe3?cl1GAPp3GABp04QAAAAAAEfOIQAAAAAAAgAAAAIAAAAAAP8AAAABGF1nJgAAAAAAJ6sXAAAAAAD1YSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn.A8AAAAAAAIAAwAAAAAAwMqhRbbzxT.AyqFFtvPFP1yPwvUoXM8.XI.C9Shczz9mZmZmZmbWP2ZmZmZmZtY.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbr8TXwhPZCb-NEWYczMEV.VtRMDgbQFgGd6CwAAAAAA==,,http%3A%2F%2Fwww.healthcarefinancenews.com%2F,Z%3D300x250%26s%3D1603578%26_salt%3D954499605%26B%3D12%26m%3D2%26u%3Dhttp%253A%252F%252Fwww.healthcarefinancenews.com%252F%26r%3D1,66f37da4-5907-11e0-8350-003048d720a8" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8"
117.41.182.55 - - [27/Mar/2011:23:48:38 -0700] "GET hxxp://www5.tellgames.com/media/games/images/tellgames/120x90/02470dca7676598b9381e4c5dc2eef05.jpg HTTP/1.0" 200 4883 "http://us.tellgames.com/index.php?category=17&sortby=play&referer=ad2games" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)"
117.41.186.191 - - [27/Mar/2011:23:48:37 -0700] "GET hxxp://s0.2mdn.net/1361550/K2147_NBRD_FYEA_728.jpg HTTP/1.0" 200 41371 "hxxp://ad.doubleclick.net/adi/N3340.161249.ADNETIK.COM/B5252096.3;sz=728x90;click=http://ad.z5x.net/clk?2,13%3B6b9391cec2a21533%3B12efb389ce8,0%3B%3B%3B2955295377,s5mFAKglGQBtfoAAAAAAAJJyIQAAAAAAAgAAAAYAAAAAAP8AAAABGB5.JwAAAAAAd0IfAAAAAABy8CsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdhBAAAAAAAAIAAwAAAAAA6Jw4-y4BAAAAAAAAADY1YTAxMzY4LTU5MDctMTFlMC1iMTJmLTAwMzA0OGQ3NTRlMABwpioAAAA=,,http%3A%2F%2Fwww.providesearch.com%2F,;pc=[TPAS_ID];ord=[timestamp]" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040614 Firefox/0.9"
173.252.208.155 - - [27/Mar/2011:23:48:38 -0700] "GET hxxp://ads.smowtion.com/st?ad_size=160x600§ion=1739112 HTTP/1.0" 200 1336 "hxxp://www.consumerhealthdigest.info/category/health-information" "Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.4) Gecko/20030701"
61.139.105.162 - - [27/Mar/2011:23:48:38 -0700] "GET hxxp://therugged.com/wp-content/uploads/2011/01/Steph61-80x53.jpg HTTP/1.0" 200 2980 "hxxp://www.therugged.com/category/lifestyle#player" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1"
答案1
这些是您托管的域名吗?我怀疑不是。
最近我发现我的机器上开放 http 代理的扫描数量大幅增加 - 看起来你可能正在运行一个开放的 http 代理(这与运行一个开放的邮件中继一样糟糕 - 甚至更糟糕,因为大多数人现在都实施了各种缓解措施,如 RBL 和 SPF)。
禁用代理/添加身份验证/限制到您的 LAN 地址。
另一方面,如果您真的是所有这些域名的网站管理员,那么请查看 mod_evasive 和 mod_security。
答案2
从时间戳来看,命中率似乎不是很高,但从 IP 来看,似乎来自各个地方。大多数 Web 服务器应该能够每秒处理几次命中。但是,您可以尝试一些方法来缓解您的问题。
- 如果其中一些连接通过保持打开的连接来阻塞连接,则可以减少活着每个连接的超时时间。
- 检查你的 httpd 没有消耗太多内存减少监听进程和线程的最大数量。
- 将您的 Web 服务器停放在 varnish/pound 等反向代理后面,并在边缘过滤目标连接,立即丢弃无效连接。
- 增强服务器,使其能够处理更多连接。定期使用以下工具进行测试:围城或者阿帕奇长凳以确保您能够处理合理的负载。
答案3
这是一个小型 IPtables 脚本,它可以限制特定时间段内来自各个 IP 的连接数。它过去曾为我们阻止过这种事情。它使用最新模块(大多数现代操作系统都会自动将其作为 IPtables 模块加载)。
看起来这些 HTTP 命中可能不会导致 Web 服务器问题,但这只会限制来自 IP 的所有流量,因此如果您删除 --dport 选项,则不会只关注 HTTP 命中。与任何与 IPtables 相关的东西一样:请谨慎使用(如果是远程服务器,请先在本地尝试)。
iptables -F; iptables -X; iptables -nL
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl -j DROP
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl -j LOG --log-level info --log-prefix IP-DROP:
答案4
使用反向代理,我建议使用 Nginx,因为它重量轻。
为您的域名设置一个服务器部分,并将其作为默认的捕获所有请求的部分。到达捕获所有域名的任何请求都会返回 404。
还可以将 KeepAlive 设置为 0 来关闭它,并且您可能希望禁用默认部分的日志记录直到攻击停止,否则它将填满我们的磁盘。