centos7防火墙firewalld
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
参考文章:
近期评论