linux中防火墙的direct文件的作用

公司中一台服务器,里面装了docker,docker中有自己的地址,系统中也看到给docker分配的网卡地址,原来没有开本地防火墙,由于被扫描到mysql很多漏洞,为避免影响业务不想升级,但又需要进行服务器加固,要开本地ACL。

firewalld的策略是默认拒绝,只有明确开放的IP、端口或者服务才能放行,而iptables的策略默认是放行,只有明确拒绝的才会拒绝,现在的这台服务器看了下iptables未安装,所以只能用防火墙的iptables来进行直接的阻止和放行了。

可是开了以后,发现网页服务登不上了,看了防火墙日志,发现里面很多被拒绝的包。由于本机没有安装iptables,于是在防火墙的direct.xml实现了iptables的功能。

------------------------------------------

Linux lsmod(英文全拼:list modules)命令用于显示已载入系统的模块。

lsmod |grep tables

iptables在Linux 7中有好几个子模块,熟悉iptables的同学应该都知道filter,nat,mangle等几个表分别装载着不同的链(Chain),而不同的链又分别可以定义着特定用途的规则。

  • iptable_security,
  • iptable_filter
  • iptables_mangle
  • iptables_nat
  • iptables_raw

而这些规则,正是firewalld中的direct规则。direct规则就是带了套iptables规则。红帽官方的firewalld手册页指出,只有在无法使用例如-add-rich-Rule=‘Rule’时,才应使用direct规则作为最后手段。因此有如下建议:

  • 我个人建议如果你对iptables有深入的理解,就使用direct规则
  • rich规则与direct规则最好不要混用。
firewall-cmd 
--permanent \
--direct \
--add-rule { ipv4 | ipv6 | eb } \
    <表(table)> <链(chain)> <优先级(priority)> args

在上面拓扑中,我们要允许internal区域的vm与external的web主机通信,我们必须为防火墙配置IPMASQ,如果你的防火墙接口的IP地址经常变动的,那么使用下面指令:

firewall-cmd --permanent --direct --add-rule \
  ipv4 nat POSTROUTING 0 -o ens33 -j MASQUERADE

注意:由于在写本文时,我在公司和家中搭建的网络环境有差别,防火墙外部接口获得的ip地址有所不同,因此配置命令和截图会有所不同,这里特此说明。

或对于有固定外网IP的情况,我们应该明确在nat表的POSTROUTING中使用SNAT操作,本示例是192.168.50.19,因此如下命令所示:

firewall-cmd --permanent --direct \
--add-rule ipv4 nat POSTROUTING 0 \
-s 10.10.10.0/24 -o ens33 \
-j SNAT --to 192.168.50.19

以下这条是可选的命令,如果你生产环境的信息安全要求比较严谨,不妨将FORWARD链的默认策略设定为DROP

iptables -P FORWARD DORP

这样以后谁要访问你的网站或者你公司的员工需要访问外网就必须在FORWARD链中显式添加基于源IP地址到目标IP的转发规则。

以下为lab实验室:

 将所有ICMP请求从internal区域(ens34)转发到external区域(enp33)

firewall-cmd --permanent --direct \
  --add-rule ipv4 filter FORWARD 0 -i ens34 -o ens33 \
  -p icmp -m state --state NEW,RELATED,ESTABLISHED \
  -j ACCEPT

对所有HTTP和HTTPS流量执行相同的操作:

firewall-cmd --permanent --direct \
--add-rule ipv4 filter FORWARD 0 -i ens34 -o ens33 \
-p tcp -m multiport --dport 80,443 \
-m state --state NEW,RELATED,ESTABLISHED \
-j ACCEPT

对所有dns流量执行相同的操作:

firewall-cmd --permanent --direct \
--add-rule ipv4 filter FORWARD 0 -i ens34 -o ens33 \
-p udp  --dport 53 \
-m state --state NEW,RELATED,ESTABLISHED \
-j ACCEPT

还允许internal区域访问public区域外的SMTP和SMTPS服务器:

firewall-cmd --permanent --direct \
--add-rule ipv4 filter FORWARD 0 -i ens34 -o ens33  \
-p tcp -m multiport --dport 25,465 \
-m state --state NEW,RELATED,ESTABLISHED 
-j ACCEPT

开放ssh端口

firewall-cmd --permanent --direct \
--add-rule ipv4 filter FORWARD 0 -i ens34 -o ens33 \
-p tcp --dport 22 \
-m state --state NEW,RELATED,ESTABLISHED \
-j ACCEPT

记录所有转发流量的日志

firewall-cmd --permanent --direct \
--add-rule ipv4 filter FORWARD 0 -i enp34 -o enp33 \
-j LOG --log-prefix "forward_traffic "

最后一条默认规则:

firewall-cmd --permanent --direct \
--add-rule ipv4 filter FORWARD 0 -i ens34 -o ens33 \
-j REJECT

配置完以上规则,我们重新加载firewalld:

firewall-cmd --reload

查看所有iptable规则:

firewall-cmd --direct --get-all-rules

下图所示:

 我们从internal区域的vm中测试,刚才用direct规则配置的防火墙,尝试打开一个网站以及做一个简单的路有跟踪,一切如常工作,那么我们本篇direct配置示例就到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值