通过iptables限制Linux源站仅允许CDN回源IP访问
最近分析后台日志,发现有两条记录没有经过CDN转发,直接将请求发到了源站:

在百度搜了一下对应的IP,发现该IP被标记为异常风控IP:

说明源站IP可能已经泄露了,对方已经绕过了CDN的白名单防护,所以我们需要加固一下源站的安全防护。加固方法为限制源站服务器仅允许CDN的回源IP段访问。
1.获取CDN回源IP列表
我们使用的CDN是阿里云的边缘安全加速ESA,开启ESA提供的源站防护功能就可以获取到回源IP列表,其他CDN可以根据官方提示获取回源IP:

开启后会在回源列表中看到所有的回源IP,点击复制按钮将回源IP列表复制下来备用:

注意:回源IP列表会定时更新,列表更新后需要手动确认后才会启用新的回源IP。

如果列表更新后未手动确认,阿里云ESA不会启用新的回源IP列表。

2.通过iptables配置源站防火墙
iptables是Linux上常用的防火墙软件,可以配置Linux内核中netfilter框架的包过滤规则。我们这次使用iptables为源站配置防火墙规则。
防火墙配置规则如下:
- 允许本地回环地址访问
- 允许已建联的相关IP访问
- 允许白名单IP访问
- 允许CDN网段访问
- 拒绝其他所有IP访问
具体配置命令如下:
#允许本地回环地址访问
iptables -A INPUT -i lo -j ACCEPT
#允许已建联的相关IP访问
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许白名单IP访问
iptables -A INPUT -s 10.0.8.5 -j ACCEPT
#允许CDN网段访问
iptables -A INPUT -s 117.49.26.96/27 -j ACCEPT
iptables -A INPUT -s 221.215.47.0/26 -j ACCEPT
#拒绝其他所有IP访问
iptables -A INPUT -j DROP 注1:必须要配置允许本地访问和已建联的IP访问,不然可能会导致本地127.0.0.1/8网络不通,同时服务器将不能访问外部网络,包括ping、wget、curl等命令返回的数据包将无法进入服务器。
注2:iptables是按照规则链内从上到下的顺序匹配执行,所以需要将拒绝的规则放在整条链的最下方。
3.设置iptables防火墙规则开机自动加载
因为iptables设置的规则默认是临时生效,一旦重启系统所有规则都会清空,所以我们需要保存防火墙规则让其开机自动加载。我们使用的Linux版本为Rocky Linux,可以安装iptables-services工具实现:
dnf install iptables-services 安装完成后通过下面命令保存已配置好的防火墙规则:
service iptables save 保存成功后规则文件默认保存在/etc/sysconfig/iptables中:

可以观察文件中规则和iptables -vnL查询的规则是否一致:

设置服务开机自动启用:
systemctl enable iptables 这样就可以让防火墙开机自动加载防火墙规则了。
扩展说明:
1.其他iptables命令
查看规则:iptables -vnL
增加规则到链顶部:iptables -I INPUT -s x.x.x.0/24 -j DROP
增加规则到链底部:iptables -A INPUT -s x.x.x.0/24 -j DROP
删除规则:iptables -D INPUT -s ***.***.***.*** -j DROP
保存规则到文件:iptables-save > /etc/iptables
加载文件规则:iptables-restore < /etc/iptables
- 本文标签: Linux Network
- 本文链接: https://blog.eyyyye.com/article/141
- 版权声明: 本文由爱做梦的比特原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
