一、防火墙 firewalld 的安装
1、在CentOS7中安装 firewalld 的命令如下:
yum install firewalld
2、如果需要图形界面,需再安装:
yum install firewall-config
3、使用tab键补全命令提示:
yum install bash-completion
防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。
Firewall 能将不同的网络连接归类到不同的信任级别,Zone 提供了以下几个级别:
drop:丢弃所有进入的包,而不给出任何响应
block:拒绝所有外部发起的连接,允许内部发起的连接
public:允许指定的进入连接
external:同上,对伪装的进入连接,一般用于路由转发
dmz:允许受限制的进入连接
work:允许受信任的计算机被限制的进入连接,类似 workgroup
home:同上,类似 homegroup
internal:同上,范围针对所有互联网用户
trusted:信任所有连接
二、防火墙 firewalld 的应用
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
查看状态: firewall-cmd --state
查看防火墙规则:firewall-cmd --list-all
查看所有打开的端口: firewall-cmd --list-ports
查看指定区域打开的端口: firewall-cmd --zone=public --list-ports
查询端口是否开放:firewall-cmd --query-port=8080/tcp
更新防火墙规则: firewall-cmd --reload (修改配置后要更新防火墙)
查看已被激活的 Zone 信息: firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
查看指定级别的接口:firewall-cmd --zone=public --list-interfaces
查看指定级别的所有信息:firewall-cmd --zone=public --list-all
查看所有级别被允许的信息:firewall-cmd --get-service
查看重启后所有 Zones 级别中永久放行的服务:firewall-cmd --get-service --permanent
查看区域:firewall-cmd --get-zones
查看默认区域:firewall-cmd --get-default-zone
一个区域可以绑定多个网卡,一个网卡只能绑定一个区域:
查看网卡和区域绑定:
firewall-cmd --get-zone-of-interface=ens33
区域添加网卡接口:
firewall-cmd --add-interface=ens34 --zone=public --permanent
区域删除网卡:
firewall-cmd --remove-interface=ens34 --zone=public --permanent
修改网卡的区域:
firewall-cmd --change-interface=ens33 --zone=public --permanent
trusted区域的所有服务都被允许:
网卡如果不属于任何区域,那么来自该接口的所有数据包将使用默认的区域规则:
区域添加来源地址,如果接口不属于某个区域,那么来自于该接口的流量如果匹配来源地址,那么流量将从来源的区域通过:
所有的配置操作如果想永久生效,则需要加--permanent选项,否则配置只会在当前运行环境生效。
三、firewalld的工作过程
firewalld将所有传入流量划分区域,每个区域都有自己的一套规则。为检查哪个区域用于传入连接。firewalld使用以下逻辑,第一个匹配规则胜出:
1、传入包的源地址与区域的某个源规则设置匹配,该包将通过该区域进行路由。
2、包的传入接口与区域的过滤器设置匹配,则将使用该区域。
3、否则将使用默认区域。默认区域不是单独的区域,而是指向系统上定义的某个其他区域。
除非管理员NetworkManager配置所覆盖,否则,任何新网络接口的默认区域都将设置为public区域。
防火墙的网络区域定义了网络连接的可信等级(共9个区域),我们可以根据不同场景来调用不同的firewalld区域,区域规则如下:
四、使用示例如下:
1、添加tcp的80端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
firewall-cmd --add-port=80/tcp --permanent
2、删除tcp的80端口:
firewall-cmd --remove-port=80/tcp --permanent
firewall-cmd --zone= public --remove-port=80/tcp --permanent
参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
# firewall-cmd --panic-on # 丢弃
# firewall-cmd --panic-off # 取消丢弃
$ firewall-cmd --query-panic # 查看丢弃状态
# firewall-cmd --reload # 更新规则,不重启服务
# firewall-cmd --complete-reload # 更新规则,重启服务
添加某接口至某信任等级,譬如添加 eth0 至 public,再永久生效
# firewall-cmd --zone=public --add-interface=eth0 --permanent
设置 public 为默认的信任级别
# firewall-cmd --set-default-zone=public
a. 管理端口
列出 dmz 级别的被允许的进入端口
# firewall-cmd --zome=dmz --list-ports
允许 tcp 端口 8080 至 dmz 级别
# firewall-cmd --zone=dmz --add-port=8080/tcp
允许某范围的 udp 端口至 public 级别,并永久生效
# firewall-cmd --zome=public --add-port=5060-5059/udp --permanent
b. 管理服务
添加 smtp 服务至 work zone
# firewall-cmd --zone=work --add-service=smtp
移除 work zone 中的 smtp 服务
# firewall-cmd --zone=work --remove-service=smtp
c. 配置 ip 地址伪装
查看
# firewall-cmd --zone=external --query-masquerade
打开伪装
# firewall-cmd --zone=external --add-masquerade
关闭伪装
# firewall-cmd --zone=external --remove-masquerade
d. 端口转发
要打开端口转发,则需要先
# firewall-cmd --zone=external --add-masquerade
然后转发 tcp 22 端口至 3753
# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=3753
转发 22 端口数据至另一个 ip 的相同端口上
# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100
转发 22 端口数据至另一 ip 的 2055 端口上
# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100
五、服务和其他构件
在区域中有一些基本的构件块,其中服务是最重要的。防火墙使用管理员创建在/usr/lib/firewalld/services(系统默认服务) 和/etc/firewalld/services文件下的XML文件,配置的自身服务集。XML文件时通过列表3中的例子创建的。
firewall-cmd --add-service=ftp #开放 ftp 服务规则 firewall-cmd --add-service=mysql # 开放mysql端口规则 firewall-cmd --add-service=http # 开放http端口规则 firewall-cmd --add-service=ssh # 开放ssh端口规则
以上四个规则重启服务会消失,只能临时生效,也是立刻生效的,如果要永久保存的规则就要添加参数:--permanent,添加此参数后不会立刻生效。需要重载或重启服务才生效。