安全 如何正确阻挡有人不断尝试登入?

artone · November 08, 2016 · Last by onehourzhan replied at August 29, 2021 · 7836 hits

因为收到 CloudWatch 通知我主机 CPU 使用率超过 80%,上去一看发现有人正在尝试暴力登入。

先貼 log:
54.182.204.56 - - [08/Nov/2016:10:16:21 +0800] "POST /wp-login.php HTTP/1.1" 200 3656 "-" "Amazon CloudFront"
54.182.204.56 - - [08/Nov/2016:10:16:21 +0800] "POST /wp-login.php HTTP/1.1" 200 3656 "-" "Amazon CloudFront"
54.182.204.56 - - [08/Nov/2016:10:16:21 +0800] "POST /wp-login.php HTTP/1.1" 200 3656 "-" "Amazon CloudFront"
54.182.204.56 - - [08/Nov/2016:10:16:22 +0800] "POST /wp-login.php HTTP/1.1" 200 3656 "-" "Amazon CloudFront"
54.182.204.56 - - [08/Nov/2016:10:16:22 +0800] "POST /wp-login.php HTTP/1.1" 200 3656 "-" "Amazon CloudFront"
54.182.204.56 - - [08/Nov/2016:10:16:22 +0800] "POST /wp-login.php HTTP/1.1" 200 3656 "-" "Amazon CloudFront"
54.182.204.56 - - [08/Nov/2016:10:16:22 +0800] "POST /wp-login.php HTTP/1.1" 200 3656 "-" "Amazon CloudFront"
54.182.204.56 - - [08/Nov/2016:10:16:22 +0800] "POST /wp-login.php HTTP/1.1" 200 3656 "-" "Amazon CloudFront"
54.182.204.56 - - [08/Nov/2016:10:16:23 +0800] "POST /wp-login.php HTTP/1.1" 200 3656 "-" "Amazon CloudFront"
54.182.204.56 - - [08/Nov/2016:10:16:23 +0800] "POST /wp-login.php HTTP/1.1" 200 3656 "-" "Amazon CloudFront"
54.182.204.56 - - [08/Nov/2016:10:16:23 +0800] "POST /wp-login.php HTTP/1.1" 200 3656 "-" "Amazon CloudFront"

只取其中一段,因为其他都是一样的。

我自己的分析:
  • 从 log 来看有人不断想要尝试登入我主机上的某个 WordPress 站,而且是透过破解程式自动化执行。
  • 我的主机上有很多个 WordPress 站点,有的有透过 CDN(CloudFront)加速,从 log 看来是有用 CDN 的 WordPress 之一。
  • log 上只看得出来他想尝试登入 WordPress,但是看不出来到底是想尝试登入哪个站。
我的主机架構:
  • 主機 Nginx
  • 有的 WordPress 站有用 CDN 有的没有,CDN 是 CloudFront
我目前的作法:

目前用 iptables 把该 IP 挡掉了,Nginx 的 access.log 立即停止出现登入尝试:

$ sudo iptables -A INPUT -s 54.182.204.56 -j DROP
想讨论的问题:
  • 我查了一下该 IP 似乎是 CloudFront 的 IP,显然这样是错的;我应该是阻挡攻击者,而不是挡 CDN 的 IP,请教该如何正确阻挡?
  • 从 log 看不来到底是哪个站被攻击,我该怎么进一步得知?

以上两个问题请教贤达,先谢谢各位!

第一个问题:

Nginx 得先得到 RealIP 并打到日志中。

第二个,修改 Nginx access_log 的 log_format 增加 $host

log_format my_log '$http_x_forwarded_for - $remote_user [$time_local] "$host" "$request" '
            '$status $body_bytes_sent "$http_referer" '
            '"$http_user_agent" $request_time';
access_log /var/log/nginx/access.log my_log;

@huacnlee 谢谢提供的资料,我来研究一下!

登录加验证码。

iptables 里面加限制吧。

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

可以记录 IP,然后限制同一 IP 在一定时间段内的登录频率,比如一分钟不超过 3 次、一小时不超过 10 次,对于超过的 IP 予以限制,比如停止服务 1 小时,对于屡教不改的 IP,自动加入 IPTable 禁止访问。

发现个有意义的补充: http://jessewolgamott.com/blog/2015/11/17/when-fake-googlebots-attack-your-rails-app/

另外 有个问题,当超过访问限制后会有个出错信息:Retry later

https://github.com/kickstarter/rack-attack/blob/8936cc647ac2d310b3cb49fc50fac87486795aff/lib/rack/attack.rb#L128

不知道这个 Retry later 怎么能定制一下,重新定义 @throttled_response

@zhang_soledad @Rei 谢谢!

两套 WordPress 建立专业网站视频教程 (一步步建站,一步也不少)

在互联网发达的时代,网站搭建已经是非常的容易简单,无需任何代码知识,无需聘请人做,就算是新手,也可以用一个小时来完成一个专业网站。建站三要素是域名 (网站的网址),主机空间 (存储文件,发布互联网) 和网站建设系统 (WordPress)。那么对于新手来讲怎样快速搭建一个网站呢?这里小编以知名的 US Domain Center 和 WordPress 主机演示如何快速搭建 WordPress 网站,一步步建站,一步也不少。

简单说,你只需购买一个域名和主机,然后就可以在 US Domain Center 一键免费安装 WordPress 建站系统,再一键免费安装网站的主题模板,然后添加内容,就可以快速完成网站。

域名注册:http://www.usdomaincenter.com/

选择主机:http://www.usdomaincenter.com/products/cpanel

最新 WordPress 建站课程:用 WordPress 建立专业网站视频教程 (一步步建站,一步也不少):

高端网站制作教程,如何从零开始用 WordPress 搭建专业网站中文建站教学,一步步从新手变成高手做各种网站:

US Domain Center 提供一键免费安装 WordPress 和一键免费备份网站功能,特别适合新手朋友搭建属于自己的网站。现在 US Domain Center 网站有很多语言,包括中文,所以很多人购买和使用 US Domain Center 主机都比较方便,并且支持 AliPay 支付宝,Credit Cards 信用卡,PayPal 贝宝和所有国家的货币。同时,对于很多新手站长来说,US Domain Center 主机的一键免费安装功能安装 WordPress 程序是非常吸引的。

You need to Sign in before reply, if you don't have an account, please Sign up first.