1 firewall的原理
firewall有9个域zone,默认是public域
名称 | 功能 | 配置文件 |
---|---|---|
阻塞区域(block) | 任何传入的网络数据包都将会被阻止 | block.xml |
工作区域(work) | 相信网络上的其他计算机不会损害自己的计算机 | work.xml |
家庭区域(home) | 相信网络上的其他计算机不会损害自己的计算机 | home.xml |
公共区域(public) | 不相信网络上的任何计算机,只有选择接受传入的网络计算机 | public.xml |
隔离区域(DMZ) | 隔离区域也被叫做非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接 | dmz.xml |
信任区域(trusted) | 所有的网络连接都可以接受 | trusted.xml |
丢弃区域(drop) | 任何传入的网络连接都被拒绝,且不响应 | drop.xml |
内部区域(internal) | 信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接 | internal.xml |
外部区域(external) | 不相信网络上的其他计算机,不会损害你的计算机,只有选择接受传入的网络连接 | external.xml |
这些zone的配置文件都保存在/usr/lib/firewallld/zones
目录下。默认情况下在/etc/firewalld/zones
下面只有一个public.xml
。如果给另外一个zone做一些改动,并永久保存,那么就会自动生成对应的配置文件。
比如给work zone增加一个端口
firewall-cmd --permanent --zone=work --add-prot=1000/tcp
那么就会在/usr/lib/firewalld/zones/
目录下生成对应的work.xml
配置文件。
由此可见,firewalld的配置文件其实有两个主要的目录
/usr/lib/firewalld/
系统配置文件,尽量不要修改/etc/firewalld/
用户配置文件,可以自行修改
在/etc/firewalld
配置文件目录下面,不止保存了zones的配置文件,还有services文件,也就是/usr/lib/firewalld/services/
目录中,每个文件分别对应一项具体的网络服务,通过名字来管理更加高效。
2 Firewall服务的配置和使用
2.1 systemctl对防火墙的管理
systemctl start firewalld # 起服务 systemctl stop firewalld #停服务 systemctl enable firewalld # 设置防火墙开机自启 systemctl disable firewalld # 关闭防火墙开机自启 systemctl status firewalld # 查看firewalld服务的状态 systemctl mask firewalld.service # 注销服务,执行后无法使用systemctl控制该服务的开启与关闭且开机不会加载该服务 systemctl unmask firewalld.service # 取消注销
2.2 firewall-cmd对防火墙的管理
firewall-cmd --state # 显示状态 firewall-cmd --reload # 重载防火墙策略,无需断开链接,动态加载规则 firewall-cmd --complete-reload # 重启防火墙,类似于重启服务 firewall-cmd --panic-on # 任何人都不能访问我这台计算机 firewall-cmd --panic-off # 与上一条命令对应
2.3 对zone和服务的全览(泛查询)
firewall-cmd --get-zones # 查看所有的zone firewall-cmd --get-default-zone # 查看默认的zone firewall-cmd --get-active-zones # 查看活跃的zone firewall-cmd --get-zone-of-interface=ens33 # 查看ens33接口所属区域 firewall-cmd --get-services # 查看所有的服务
2.4 对某个zone下的服务查看,可以配合”–zone=域”使用
firewall-cmd --list-all # 列出指定的zone的规则,如果不指定zone默认查看当前活跃zone的规则 firewall-cmd --list-source # 列出源IP firewall-cmd --list-source-ports # 列出源端口 firewall-cmd --list-ports # 列出端口 firewall-cmd --list-services # 列出活跃zone下的服务
2.5 对服务、端口等的设置与添加,策略的设置
firewall-cmd --set-default-zone=work # 设置默认zone firewall-cmd --add-interface=ens33 # 添加接口 firewall-cmd --add-source=192.168.0.21 # 添加源地址 firewall-cmd --add-service=dhcp # 添加服务 firewall-cmd --add-port=80/tcp # 添加端口 firewall-cmd --add-masquerade # 开启内核路由转发功能,其等同于以下改法 vim /etc/sysctl.conf修改net.ipv4.ip_forward = 1 firewall-cmd --add-icmp-block=echo-request # 禁止ping firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 设置80到8080端口转发,add-forward-prot=后面的内容以冒号分隔,正好是三对,源端口:协议:目标端口
2.6 对策略的删除
firewall-cmd --remove-sevice=dhcp # 删除服务 firewall-cmd --remove-port=80/tcp # 删除端口 firewall-cmd --panic-on # 丢弃 firewall-cmd --query-panic # 查询丢弃状态 firewall-cmd --panic-off # 取消丢弃
2.7 永久生效
firewall-cmd --permanent ... # 如果想要永久生效,就在firewall-cmd后边加一个--permanent参数
3 富规则
rule [source] [destination] service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port [log] [audit] [accept|reject|drop|mark]
firewall-cmd --add-rich-rules='rule family=ipv4 source not address=192.168.0.200 destination address=192.168.0.33 accept' # 源地址不是192.168.0.200目标地址是192.168.0.33的情况,允许通过