笔者在日常安全运营过程中经常需要与各系统管理员就漏洞、告警相关问题进行沟通和协作。当识别服务器上存在风险时,也是通过管理员协助去解决。在此过程中遇到较多由于业务需要和实际使用需要,无法直接对风险进行处理情况。今天给大家介绍,也是平常使用最多也是最便捷的缓解措施,通过主机层防火墙对IP进行访问控制。
应用服务器上分别运行A、B两个服务,分别使用80和8080端口,如下图:
现在安全团队检测到B服务存在安全漏洞,存在一定风险
与管理员沟通,服务A、B均开放互联网,服务A所有用户使用,服务B仅特定用户甲使用,目前业务运行中无法中断,但可实施临时缓解措施。
先通过主机层防火墙对服务B进行访问限制,只允许用户甲访问,乙、丙、丁不可访问,先缩小暴露面,待用户甲空闲时再对漏洞进行修复
以下分别以CentOS7和6为例
CentOS7
应用服务器IP为192.168.206.130,系统版本为CentOS 7.6.1810
服务A、B分别监听80和8080两个端口
用户甲IP为192.168.206.129
可正常访问服务A和B
用户乙 IP为192.168.206.1,正常访问服务A、B
现在服务B(使用8080端口)出现漏洞,临时缓解措施需要缩小暴露面,限制服务B访问权限,只允许用户甲(使用IP192.168.206.129)才能访问
# 初次启用防火墙,需要将对外开放端口加入开放清单,不然默认策略可能会导致其他端口也无法访问
# 将服务A,80端口加入防火墙
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp
success
# 将服务B,8080端口加入防火墙
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=8080/tcp
success
# 保存策略
[root@localhost ~]# firewall-cmd --reload
success
# 查看允许开放端口
[root@localhost ~]# firewall-cmd --permanent --zone=public --list-ports
8080/tcp 80/tcp
# 删除掉可供所有人访问8080端口规则
[root@localhost ~]# firewall-cmd --zone=public --remove-port=8080/tcp --permanent
success
# 对8080端口进行配置,只允许192.168.206.129访问
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.206.129" port protocol="tcp" port="8080" accept'
success
# 保存策略
[root@localhost ~]# firewall-cmd --reload
success
# 查看策略
[root@localhost ~]# firewall-cmd --list-rich-rules
rule family="ipv4" source address="192.168.206.129" port port="8080" protocol="tcp" accept
测试用户甲访问,可正常访问服务A、B
测试用户乙访问,只能访问服务A,无法访问服务B
CentOS6
应用服务器IP为192.168.206.131,系统版本为CentOS 6.5
# 初次启用防火墙,需要将对外开放端口加入开放清单,不然默认策略可能会导致其他端口也无法访问
# 将服务A 80端口加入防火墙,因为iptables由上而下执行,这里将策略插入第一行
[root@localhost ~]# iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
# 将服务B 8080端口加入防火墙,插入第二行
[root@localhost ~]# iptables -I INPUT 2 -p tcp --dport 8080 -j ACCEPT
# 查看已添加规则
[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 #(刚添加,允许80访问)
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 #(刚添加,允许8080访问)
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# 将允许所有人访问8080端口的规则删掉
[root@localhost ~]# iptables -D INPUT 2
# 插入新规则,只允许用户甲访问8080端口
[root@localhost ~]# iptables -I INPUT 2 -p tcp -s 192.168.206.129 --dport 8080 -j ACCEPT
# 插入新规则,拒绝所有访问8080端口
# 因为iptables优先级为由上到下,用户甲访问会被第2条规则允许,其他刚会被这个规则拦截
[root@localhost ~]# iptables -I INPUT 3 -p tcp --dport 8080 -j DROP
# 查看当前iptables规则列表
[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 192.168.206.129 0.0.0.0/0 tcp dpt:8080
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# 保存策略
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
客户甲可以访问服务A、B
客户乙只能访问服务A,无法访问服务B
第2篇:Linux防火墙-firewalld的rich规则配置jiecy的博客-CSDN博客firewalld富规则
原文始发于微信公众号(A9 Team):Linux下 IP访问控制策略配置
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论