admin管理员组文章数量:1642339
公司中一台服务器,里面装了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配置示例就到这里。
版权声明:本文标题:linux中防火墙的direct文件的作用 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1729336272a1197021.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论