温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。
网站上线后我们都需要根据实际访问情况做一定的优化,以期达到既定的目标,前面我们探讨过被反代、垃圾蜘蛛频繁爬取的问题,参见:
在实际应用中,发现 Nginx 并没有完全按照预定的策略执行,比如查询日志:
43.228.90.160 - - [25/Mar/2018:09:59:42 +0800] "GET \x00\x00\x00\x00\x00\x01\x00\x00stats\r\n HTTP/1.1" 400 0 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
虽然 IP 43.228.90.160 已设置 403 禁止访问,但是仍然与服务器产生了连接,消耗了资源,所以要怎么设置不让它产生连接呢?
是的,这时候就到防火墙上场的时间了。现在各大主机商基本上都提供了在主机管理界面上编辑防火墙的功能,即在连接到主机前先过主机商的防火墙,这种方式不占主机资源,但是每次编辑策略都要登录管理界面不方便,这里暂且不谈,我们说说使用主机自带的防火墙。
防火墙在 CentOS7 为 firewalld, Ubuntu 为 ufw,两者功能相似,也都提供了连接阻断功能,其他功能可参见前面的文章:
连接阻断在防火墙中有两种,一个是 drop,一个是 reject,两者的区别在于 drop 是直接丢弃请求,不返回任何数据,直到客户端连接尝试超时,而 reject 是直接断开,并返回 ICMP 错误信息包,通俗来说,就是骗子给我们打电话,drop 是直接拒接,reject 是拒接后还回个电话给骗子。
对于直接面向互联网的网站,建议使用 drop,不仅节省资源,还延缓了被攻击的进度(因为不会返回任何有关服务器的信息),内部建议使用 reject,好处在于容易诊断和调试网络设备或防火墙造成的问题。
在 CentOS7 中,开启 drop IP 黑名单命令如下:
# firewall-cmd --zone=public --add-rich-rule="rule family='ipv4' source address='95.85.0.0/16' drop" --permanent
若要取消 drop IP 则是:
# firewall-cmd --zone=public --remove-rich-rule="rule family='ipv4' source address='95.85.0.0/16' drop" --permanent
若要 reject 则是:
# firewall-cmd --zone=public --add-rich-rule="rule family='ipv4' source address='95.85.0.0/16' reject" --permanent
在 Ubuntu 下也是一样,拒绝是:
# ufw deny from 95.85.0.0/16 to any (port 80)
删除策略则是:
# ufw delete deny from 95.85.0.0/16 to any (port 80)
开站一年来,收集的 IP 黑名单清单参见 GitHub:
PS: 其实重点就是最后的清单 :twisted:
参考文章:
1、《新概念运维之REJECT和DROP的区别》
2、《How to block an IP address with ufw on Ubuntu Linux server》
Windows 7Chrome 67.0.3371.0来自 山西 的大神
不太懂
就是字面意思,将垃圾 IP 的访问直接 drop 掉
NICE