前几天由于接口收到某些互联网爬虫的请求导致服务出现若干异常请求,就想到对服务器进行配置,以达到对某些IP的屏蔽。我想到的方法有如下几种:
- 阿里云控制面板上配置黑名单;
- 服务器上配置iptables、ufw、firewalld之类的防火墙;
- 服务器上配置hosts.deny之类的配置文件;
- 配置Nginx、Apache之类的服务器
由于公司有统一的阿里云服务器安全策略,想针对某台服务器单独进行配置比较繁琐,故第1种方式被pass掉了。由于之前一直没有启用防火墙,担心启用防火墙后对现有服务产生不可预知的影响,故第2种方式也不行。
通过搜索发现第3种方式貌似可以,就对/etc/hosts.deny进行了如下配置
ALL:192.35.168.0/255.255.254.0
ALL:162.142.125.0/255.255.255.0
ALL:167.248.133.0/255.255.255.0
ALL:167.94.138.0/255.255.255.0
ALL:167.94.145.0/255.255.255.0
ALL:167.94.146.0/255.255.255.0
# 重启网络服务
>>> /etc/init.d/network restart
# 我的nginx在容器中,故需要重启docker服务
>>> systemctl restart docker
但经过测试,这种方式对http请求并不起作用。原来是因为常见的仅有rpcbind,vsftpd,sshd,telnet服务使用了libwrap,而只有使用了libwrap的服务才受tcp wrapper控制,才能使用/etc/hosts.allow和/etc/hosts.deny两个文件进行配置。
>>> ldd /usr/sbin/sshd | grep libwrap.so
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f1f14110000)
>>> lsof -w | grep libwrap
auditd 464 root mem REG 253,1 42520 1054255 /usr/lib64/libwrap.so.0.7.6
auditd 464 465 root mem REG 253,1 42520 1054255 /usr/lib64/libwrap.so.0.7.6
sshd 5915 root mem REG 253,1 42520 1054255 /usr/lib64/libwrap.so.0.7.6
sshd 9512 root mem REG 253,1 42520 1054255 /usr/lib64/libwrap.so.0.7.6
所以,第3种方式也不行。
想要使Nginx使用libwrap,需要对Nginx重新进行编译
最后通过第4种方式实现屏蔽IP
参考: