centos7防火墙管理工具由我们以前熟知的iptables转变为了firewall。那么firewall是什么哪?firewall的服务是firewalld (防火墙守护)服务,引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。
区域(zone)
Firewall 能将不同的网络连接归类到不同的信任级别.
区域 |
默认规则策略 |
trusted |
允许所有的数据包。 |
home |
拒绝流入的数据包,除非与输出流量数据包相关或是ssh,mdns,ipp-client,samba-client与dhcpv6-client服务则允许。 |
internal |
等同于home区域 |
work |
拒绝流入的数据包,除非与输出流量数据包相关或是ssh,ipp-client与dhcpv6-client服务则允许。 |
public |
拒绝流入的数据包,除非与输出流量数据包相关或是ssh,dhcpv6-client服务则允许。 |
external |
拒绝流入的数据包,除非与输出流量数据包相关或是ssh服务则允许。 |
dmz |
拒绝流入的数据包,除非与输出流量数据包相关或是ssh服务则允许。 |
block |
拒绝流入的数据包,除非与输出流量数据包相关。 |
drop |
拒绝流入的数据包,除非与输出流量数据包相关。 |
过滤规则
source |
根据源地址过滤 |
interface |
根据网卡过滤 |
service |
根据服务名过滤 |
port |
根据端口过滤 |
icmp-block |
icmp 报文过滤,按照 icmp 类型配置 |
masquerade |
ip 地址伪装 |
forward-port |
端口转发 |
rule |
自定义规则 |
管理firewalld服务
# systemctl start firewalld # 启动,
# systemctl enable firewalld # 开机启动
# systemctl stop firewalld # 关闭
# systemctl disable firewalld # 取消开机启动
接下来我们会重点来看一下firewall-cmd命令,它是我们配置firewall的核心命令。
firewall-cmd
我们可以通过”firewall-cmd –help”来查看完整的命令帮助文档。
参数 |
作用 |
–get-default-zone |
查询默认的区域名称。 |
–set-default-zone=<区域名称> |
设置默认的区域,永久生效。 |
–get-zones |
显示可用的区域。 |
–get-services |
显示预先定义的服务。 |
–get-active-zones |
显示当前正在使用的区域与网卡名称。 |
–add-source= |
将来源于此IP或子网的流量导向指定的区域。 |
–remove-source= |
不再将此IP或子网的流量导向某个指定区域。 |
–add-interface=<网卡名称> |
将来自于该网卡的所有流量都导向某个指定区域。 |
–change-interface=<网卡名称> |
将某个网卡与区域做关联。 |
–list-all |
显示当前区域的网卡配置参数,资源,端口以及服务等信息。 |
–list-all-zones |
显示所有区域的网卡配置参数,资源,端口以及服务等信息。 |
–add-service=<服务名> |
设置默认区域允许该服务的流量。 |
–add-port=<端口号/协议> |
允许默认区域允许该端口的流量。 |
–remove-service=<服务名> |
设置默认区域不再允许该服务的流量。 |
–remove-port=<端口号/协议> |
允许默认区域不再允许该端口的流量。 |
–reload |
让“永久生效”的配置规则立即生效,覆盖当前的。 |
查看运行状态:
[root:~]# firewall-cmd –state
running
查看当前的区域:
[root:~]# firewall-cmd –get-default-zone
public
查看已被激活的区域信息:
[root:~]# firewall-cmd –get-active-zones
public
interfaces: eth0
查询eth0网卡的区域:
[root:~]# firewall-cmd –get-zone-of-interface=eth0
public
在public中分别查询ssh与http服务是否被允许:
[root:~]# firewall-cmd --zone=public --query-service=ssh
yes
[root:~]# firewall-cmd --zone=public --query-service=http
no
查看指定级别的接口:
[root:~]# firewall-cmd –zone=public –list-interfaces
ens33
查看指定级别的所有信息:
[root:~]# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
查看所有级别被允许的信息:
[root:~]# firewall-cmd –get-service
RH-Satellite-6 amanda-client … xmpp-server
管理规则:
# 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
设置默认的信任级别:
[root:~]# firewall-cmd –set-default-zone=public
success
允许https服务流量通过public区域,要求立即生效且永久有效:
[root:~]# firewall-cmd –zone=public –add-service=https –permanent
success
不再允许http服务流量通过public区域,要求立即生效且永久生效:
[root:~]# firewall-cmd –zone=public –remove-service=http –permanent
success
允许 tcp 端口 8080 至 dmz 级别:
[root:~]# firewall-cmd –zone=dmz –add-port=8080/tcp
success
列出 dmz 级别的被允许的进入端口:
[root:~]# firewall-cmd –zone=dmz –list-ports
8080/tcp
允许某范围的 udp 端口至 public 级别,并永久生效:
[root:~]# firewall-cmd –zone=public –add-port=5000-6000/udp –permanent
success
改变ens33接口的区域
[root:~]# firewall-cmd –zone=work –change-interface=ens33 –permanent
success
删除 public zone 中的 eth0:
[root:~]# firewall-cmd –zone=public –remove-interface=eth0 –permanent
success
打开ip伪装:
[root:~]# firewall-cmd –zone=external –add-masquerade
success
关闭ip伪装:
[root:~]# firewall-cmd –zone=external –remove-masquerade
打开端口转发:
[root:~]# firewall-cmd –zone=public –add-masquerade
转发 tcp 22 端口至 3753
[root:~]#firewall-cmd –zone=public –add-forward-port=port=22:proto=tcp:toport=3753
转发22 端口数据至另一个 ip 的相同端口上:
[root:~]#firewall-cmd –zone=public –add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100
转发 22 端口数据至另一 ip 的 2055 端口上:
[root:~]#firewall-cmd –zone=public –add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100
封禁 ip:
[root:~]#firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.222' reject"
通过 ipset 来封禁 ip:
[root:~]#firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:ip
[root:~]#firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=222.222.222.222
参考文章:
《CentOS 7 下使用 Firewall》
《CentOS7-firewall防火墙使用》
近期评论