存档

文章标签 ‘firewall’

centos7防火墙firewalld

2017年10月19日 没有评论

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防火墙使用》

分类: Linux 标签: ,