我在 AWS EC2 上有一个 Ubuntu、Apache、Passenger 和 Rails 4 项目。
我是一名全栈开发人员,不熟悉项目的安全性和服务器端。这是我第一次设置 Ubuntu 和 Apache,之前我使用过 Heroku。
最近,我的网站因“用户太多”而关闭,所以当我检查我的网站时
tail -f log/production.log
我发现我收到来自随机 IP 的不间断 GET 请求到我的主页。请求并没有停止并继续淹没我的服务器。
I, [2015-04-02T16:38:47.692152 #11851] INFO -- : Rendered layouts/_google_analytics.html.erb (0.1ms)
I, [2015-04-02T16:38:47.692709 #11851] INFO -- : Completed 200 OK in 9ms (Views: 8.6ms | ActiveRecord: 0.0ms)
I, [2015-04-02T16:38:49.073504 #11851] INFO -- : Started GET "/" for 54.252.254.204 at 2015-04-02 16:38:49 +0000
I, [2015-04-02T16:38:49.077260 #11851] INFO -- : Processing by HomeController#home_page as */*
I, [2015-04-02T16:38:49.084489 #11851] INFO -- : Rendered home/_sign_up_modal.html.erb (1.6ms)
I, [2015-04-02T16:38:49.084799 #11851] INFO -- : Rendered home/home_page.html.erb within layouts/application (6.2ms)
I, [2015-04-02T16:38:49.085349 #11851] INFO -- : Rendered /home/ubuntu/.rvm/gems/ruby-2.1.5/gems/stripe-rails-0.3.1/app/views/stripe/_js.html.erb (0.1ms)
I, [2015-04-02T16:38:49.086550 #11851] INFO -- : Rendered layouts/_google_analytics.html.erb (0.0ms)
I, [2015-04-02T16:38:49.087121 #11851] INFO -- : Completed 200 OK in 10ms (Views: 8.8ms | ActiveRecord: 0.0ms)
I, [2015-04-02T16:38:50.166665 #11851] INFO -- : Started GET "/" for 107.23.255.12 at 2015-04-02 16:38:50 +0000
I, [2015-04-02T16:38:50.169943 #11851] INFO -- : Processing by HomeController#home_page as */*
I, [2015-04-02T16:38:50.176601 #11851] INFO -- : Rendered home/_sign_up_modal.html.erb (1.4ms)
I, [2015-04-02T16:38:50.176924 #11851] INFO -- : Rendered home/home_page.html.erb within layouts/application (5.5ms)
I, [2015-04-02T16:38:50.177425 #11851] INFO -- : Rendered /home/ubuntu/.rvm/gems/ruby-2.1.5/gems/stripe-rails-0.3.1/app/views/stripe/_js.html.erb (0.1ms)
我的服务器是否被用作代理或受到攻击?我怎样才能防止这种情况继续发生?
我尝试使用本指南但正如你会看到的我的其他帖子,我没有成功,只能停止所有请求,包括有效的请求。
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerName ec2-54-###-###-##.us-west-2.compute.amazonaws.com
# !!! Be sure to point DocumentRoot to 'public'!
DocumentRoot /etc/projects/myapp/public
<Directory /etc/projects/myapp/public>
#Options FollowSymLinks
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
请帮忙!如果我的术语或提供的信息不足,我深表歉意。我将热切地提供更多更好的信息和指导。
答案1
这是一个艰难的处境。这些请求似乎与恶意模式匹配,因此您的任务是阻止从您的服务器发出恶意请求的 IP。
如今有各种奇特的硬件可以做到这一点。如果您无法做到这一点,那么您只能手动创建防火墙规则或 apache 规则来忽略或阻止来自某些 IP 的请求。
对于您的服务器资源,最好是防火墙阻止而不是 apache。您可以使用 tcpdump 查看所有正在攻击您的服务器的 IP。例如,类似:
tcpdump -nn 端口 80 | awk '{print$3}' | awk -F。 '{打印$1,$2,$3,$4}' |读取 abcd 时;执行 echo $a.$b.$c.$d >> newlist.txt;完毕
*注意您可以对端口 443 运行相同的操作
它会一直运行直到您停止它,并且它将所有访问您服务器的 IP 转储到一个文件中。然后运行类似的东西:
猫新列表.txt |排序| uniq-c|排序-n
现在,您有一个排序列表,显示在您让第一个 oneliner 运行时,每个 IP 访问您的服务器的次数。由此,您可以决定有多少请求对您来说是虐待性的,通过运行几次您可以轻松地找出违规者。现在您必须获取这些 IP 并阻止它们进入防火墙。
这是防御 DDOS 的一种残酷且困难的方法。如果有人严重攻击你,它就不起作用,但在这种情况下,你的服务器可能已经崩溃了。
如果没有精美的网络硬件,就没有办法真正阻止他们攻击您,但是有了这些原则,您至少可以保护自己......直到您至少达到防火墙中的规则限制。如果涉及到这一点,请按范围而不是个人进行阻止。看着https://www.arin.net/和谷歌,如果你幸运的话,你可能会发现大部分点击都来自某个区域。咳嗽俄罗斯、中国、东欧咳嗽在这种情况下,如果整个区域会降低您的服务器性能,或者您的网站上有有价值的信息可能被盗,请考虑阻止整个区域。