1.1 firewalld概述
动态防火墙后台程序firewalld 提供了一个动态管理的防火墙,用以支持网络“zones”,以分配对一个网络及其相关链接和界面一定程度的信任。具备对ipv4和ipv6防火墙设置的支持、以太网桥的支持,并有分离运行时间和永久性配置选择;还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。
系统提供了图像化的配置工具firewall-config、system-config-firewall,提供命令行客户端firewall-cmd,用于配置firewalld永久性或非永久性运行时间的改变;其依次用iptables工具与执行数据宝筛选的内核中的netfilter通信。
火墙的三张表
mangle表 input链 preouting链 forward链 postouting链 output链
filter表 input链 forward链 output链(通过本机内核的数据)
nat表 input链 preouting链 postouting链 output链
firewall域
网络区名称 | 默认配置 |
---|---|
trusted(信任) | 接受所有的网络连接 |
public(公共) | firewalld默认使用域,仅接受ssh或dhcpv6-client服务连接 |
block(限制) | 拒绝所有网路连接,有回复提示 |
drop(丢弃) | 任何接收的网络数据包都被丢弃,无回复 |
home(家庭) | 用于家庭网络,接受ssh,mdns,ipp-client,samba-client或dhcpv6-client服务连接 |
internal(内部) | 用于内部网络,接受ssh,mdns,ipp-client,samba-client或dhcpv6-client服务连接 |
work(工作) | 用于工作区,接受ssh、ip-client或dhcp6-client服务连接 |
external(外部) | 出去的ipv4网络连接通过此区域伪装和转发,接受ssh服务 |
dmz(非军事区) | 接受ssh服务连接 |
查看火墙
firewall-cmd --state | 查看火墙状态 |
firewall-cmd --list-all | 列出火墙服务 |
firewall-cmd --list-all-zones | 列出火墙所有域及域的服务 |
firewall-cmd --get-zones | 查看所有域 |
firewall-cmd --get-active-zones | 查看工作的域 |
firewall-cmd --get-default-zone | 查看默认的域 |
firewall-cmd --zone=public --list-all | 查看指定域的火墙服务 |
firewall-cmd --get-services | 查看所有火墙服务 |
firewall-cmd --list-ports | 查看火墙所有端口 |
firewall-cmd --direct --get-all-rules | 查看火墙所有规则 |
设置火墙
firewall-cmd --set-default-zone=trusted | 设置火墙默认域 |
firewall-cmd --permanent --zone=xxx --add-source=x.x.x.x/24 | 为特定主机授予特权 |
firewall-cmd --zone=xxx --remove-source=x.x.x.x/24 | 删除特定主机特权 |
firewall-cmd --zone=xxx --add-interface=eth0 | 为域添加网卡服务 |
firewall-cmd --zone=xxx --change-interface=eth0 | 改变域的网卡服务 |
firewall-cmd --zone=xxx --remove-interface=eth0 | 删除域的网卡服务 |
注意:对域中网卡的管理不用加permanent参数,否则命令无效
重加载火墙
firewall-cmd --reload | 只是刷新火墙状态,不会断开连接 |
firewall-cmd --complete-reload | 刷新火墙状态,并断开客户端所有的连接,然后再去连接符合要求的连接 |
(1) 火墙的插件/usr/lib/firewalld/services
用firewall-cmd为火墙添加一个火墙中不存在的服务iscsi,会出现报错
在火墙插件中添加一个服务文件
cd /usr/lib/firewalld
cp -p http.xml iscsi.xml
vim iscsi.xml
修改服务文件
sysmctl restart firewalld
重启服务
firewall-cmd --get-services
发现火墙服务中多了一个我们用文件添加的服务iscsi
此时用firewall-cmd --permanent --add-service=iscsi
添加成功
(2)火墙的服务管理 /etc/firerwalld/zones
使用firewall-cmd --permanent --zone=public --add-port=3260/tcp
添加成功后
cat /etc/firewalld/zones/public.xml
查看public域文件,会看到添加的端口信息也加载到文件中
(3)firewalld 高级规则
通过“rich language”语法,可以用比直接接口方式更易理解的方法建立复杂的防火墙规则;能永久保留设置;高级语法使用关键词值,是iptables工具的抽象表示。
1) 对特定主机限定特定服务的高级规则:
添加:firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s x.x.x.x -p tcp --dport 22 -j REJECT|ACCEPT|DROP
删除:firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s x.x.x.x -p tcp --dport 22 -j REJECT|ACCEPT|DROP
参数 | 含义 |
---|---|
–permanent | 永久性 |
–direct | |
filter INPUT | filter表中INPUT链 |
1 | 链表中的第一行规则 |
-s | source 数据来源 |
-p | 协议 |
–dport | 服务端口 |
-j | 动作行为 |
DROP 与 REJECT区别: DROP丢弃 没有提示信息;REJECT拒绝 有提示信息
2)火墙的伪装——路由之后SNAT(以ssh服务为例)
准备:为服务端添加双网卡,配置eth0和eth1的ip分别为172.25.254.201、192.168.0.201;为客户端更改ip为 192.268.0.101
服务端:
a.火墙伪装功能设定
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
firewwall-cmd --list-all
b.内核的路由功能设定
vim /etc/sysctl.conf
sysctl -p
sysctl -a | grep ip_forward
客户端:
设置网关:
vim /etc/sysconfig/ifcfg-eth0
GATEWAY=192.168.0.201
通过火墙的伪装功能,使192网段的客户端主机能与172网段的主机通信,并且与172网段主机通信身份为服务端ip:172.25.254.201
3)火墙的端口转发——路由之前DNAT(以ssh服务为例)
服务端:
firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.27.254.X
firewall-cmd --reload
firewwall-cmd --list-all
在192.168.0.101客户端连接服务端网段的任意主机都会发生跳转,跳转至服务端设定的目的主机端口;这里连接服务器网段的主机都会发生跳转的原因是因为没有限定通过哪个ip的端口,只要进入该服务器的ip都会发生跳转。