使用iptables阻止默认IP的直接端口80访问?

我在我的网站前面使用了cloudflare的nginx来保护他们免受第7层攻击,但是现在一些攻击者发现了这种新的方式,他们每天直接用第7层攻击攻击我的默认IP,而不是攻击这些站点。 当他们在直接IP地址上打开默认页面时,我将返回444响应,但仍然是攻击太大,所以他们正在使所有的站点/服务器在几分钟之内不可用,并在一段时间内取决于攻击使Nginx繁忙。

所以我想问是否有可能禁用端口80访问默认IP而不影响我的其他网站和服务? 这些攻击太大了,我的默认虚拟主机的日志文件在1小时内就变成了1GB,所以即使返回444也没有工作,为什么我认为在防火墙级别阻止它会更好?

任何build议如何与iptables实现这一点?

我用Ngiinx 1.13使用CentOS 6.9。

再有想法? 还在等待!

您可以设置iptables规则,只允许CloudFlare IP通过端口80到达您的Nginx实例。这可以通过首先创build一个具有CloudFlare IPv4范围列表的ipset来实现(可在https://www.cloudflare.com/ips -v4 ),然后应用适当的iptables规则来利用这个集合。

像下面的东西应该工作:

 ipset -N cloudflare nethash ipset -q -A cloudflare ABCD/M ... [ repeat above for each entry in CF ips-v4 file ] iptables -A INPUT -p tcp --dport 80 -m set --match-set cloudflare src -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j DROP 

进一步的Nginx技巧使用CloudFlare Ray-ID标题

对于前面有CloudFlare的每个站点,您也可以将这个技巧应用到Nginx中。 它以预期的格式有效地检查CloudFlare CF-Ray标题的存在。 如果不存在,则返回444(请求的立即删除)。

 server { listen ABCD:80; server_name _; if ($http_cf_ray !~ '^[0-9a-f]{16}-[AZ]{3}$') { return 444; } ... 

我想你也可以在这一点上禁用日志logging,以进一步减轻任何过多的日志噪音(未经testing):

  if ($http_cf_ray !~ '^[0-9a-f]{16}-[AZ]{3}$') { access_log off; error_log off; return 444; }