目的:公司最近有些服务器要放在公网进行测试,需要配置防火墙规则防止入侵
定义
策略与区域
策略制定流量之间的流动
区域制定特定的信任级别,通常用于定义广泛的网络环境
设置策略->设置区域->设置策略对象->设置策略筛选规则(对区域设置部分规则)
创建策略与区域
对策略创建规则
对区域创建规则
创建策略
firewalld-cmd --permanent --new-policy mypolicy
制定区域
firewalld-cmd --permanent --policy mypolicy --add-ingress-zone internal
firewalld-cmd --permanent --policy mypolicy --add-egress-zone external
设置策略对象为全部流量
firewalld-cmd --permanet -policy mypolicy --set-target ACCEPT
firewalld-cmd --reload
设置策略为仅有http与httpd可以通过
firewalld-cmd --permanent -policy mypolicy --add-service http
firewalld-cmd --permanent -polict mypolicy --add-service https
firewalld-cmd --reload
对区域内部配置隐式规则 允许该区域所有主机都可以发送https请求
firewalld-cmd --permanent --zone internal --add-service https
firewalld-cmd --reload
区域
public:只有被选择的连接会被接受,通常用于公共地区
连接,接口与源地址:
NetworkManger处理的网络连接,NetworkManager 告诉 firewalld 将用于此连接的网络接口分配到该连接的配置中定义的区域。
由网络脚本处理的网络连接,没有守护程序可以告诉 firewalld 添加连接到区域。这只能在 ifcfg-post 脚本中完成。因此,在此之后对名称的更改不能提供给 firewalld。
配置防火墙区域的方法
1.firewalld-cmd
2.修改配置文件
/usr/lib/firewalld/zones 用于默认和备用配置
/etc/firewalld/zones 用于用户创建和自定义的配置文件
区域标签
configure traffic:
<zone></zone> 定义区域概念
target:主要是流量与规则匹配后的动作
<short></short> 定义区域的名字
<description></description> 描述其具体作用
selected traffic
<interface name="string" /> 目的是将网卡名与区域绑定
<source></source>
address="address/mask"
mac="MAC"
<service>
name="string" 描述的是必须要匹配ssh服务的流量
<port> 定义了允许访问的端口范围和协议
<source-port>
action traffic:
<forward-port> 将端口的HTTP流量转发到别的端口上
<rule>
<accept> [<limit value="rate/duration"/>] </accept>
<reject [type="rejecttype"]> [<limit value="rate/duration"/>] </reject>
<drop> [<limit value="rate/duration"/>] </drop>
<mark set="mark[/mask]"> [<limit value="rate/duration"/>] </mark>
1.定义区域
定义区域
定义区域名字
描述区域作用
2.对流量进行筛选
对网卡名的筛选
对源端口的筛选
对服务进行筛选
对端口进行筛选
3.对流量进行记录
对符合流量的日志进行记录
对符合流量的审计进行记录
4.对流量进行处理
接受
丢弃
拒绝
记录
转发
实战案例:
禁止192.168.234.158 ssh连接 192.168.234.160
vim /etc/firewalld/zones/public.xml (修改配置文件)
或是以下实战 一定要注意xml的标签都要闭和
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<interface name="Bond1">
<rule family="ipv4">
<description>针对192.168.20.0网段的FTP端口放开</description>
<source address="192.168.20.0/16"></source>
<destination address="192.168.232.33" />
<port port="20-21" protocol="tcp" />
<accept/>
</rule>
<rule family="ipv4">
<description>针对192.168.30.0网段的FTP端口放开</description>
<source address="192.168.30.0/16"></source>
<destination address="192.168.232.33" />
<port port="20-21" protocol="tcp" />
<accept/>
</rule>
</interface>
</zone>
firewalld-cmd --reload(加载配置)
firewalld-cmd --list-all(查看配置是否成功)
踩得坑
踩得坑:
1.主机上开启防火墙规则时,最好禁用掉docker的端口映射 不然会在默认情况下添加docker的规则 从而导致规则失效
参考文章:Linux防火墙firewalld不生效,无法拦截Docker映射端口 - 我命由我不由天—hao - 博客园 (cnblogs.com)
2.在对防火墙及进行ssh禁止时,先移除之前对ssh无限制的规则
firewall-cmd --permanent --remove-service=ssh
参考文章:firewalld修改默认的22端口限制ip访问_firewalld 22端口-优快云博客
参考文献:https://firewalld.org/documentation/zone/options.html