坚持
  • 微信

当前位置:首页 > 应用服务 > LINUX系统 >

centos7下Firewall使用

作者:管理员 时间:2021-12-31 阅读数: 1134人阅读

centos7下Firewall使用详解

安装它,只需

# yum install firewalld

如果需要图形界面的话,则再安装

# yum install firewall-config(亲测买的云服务器或者vps上不好使,可能是依赖没有安装全,还是使用基本的命令维护较好)


一、介绍


防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永 久的接口规则,并实时生效而无需重启服务。



什么是区域?

网络区域定义了网络连接的可信等级。这是一个一对多的关系,这意味着一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接。

预定义的服务

服务是端口和/或协议入口的组合。备选内容包括 netfilter 助手模块以及 IPv4、IPv6地址。


端口和协议

定义了 tcp 或 udp 端口,端口可以是一个端口或者端口范围。


ICMP阻塞

可以选择 Internet 控制报文协议的报文。这些报文可以是信息请求亦可是对信息请求或错误条件创建的响应。


伪装

私有网络地址可以被映射到公开的IP地址。这是一次正规的地址转换。


端口转发

端口可以映射到另一个端口以及/或者其他主机。


哪个区域可用?

由firewalld 提供的区域按照从不信任到信任的顺序排序。


firewall-cmd --get-zones


上面代码获取支持的区域

丢弃(drop)

任何流入网络的包都被丢弃,不作出任何响应。只允许流出的网络连接。


阻塞(block)

任何进入的网络连接都被拒绝,并返回 IPv4 的 icmp-host-prohibited 报文或者 IPv6 的 icmp6-adm-prohibited 报文。只允许由该系统初始化的网络连接。


公开(public)

用以可以公开的部分。你认为网络中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连接接入。(You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.)


外部(external)

用在路由器等启用伪装的外部网络。你认为网络中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连接接入。


隔离区(dmz)

用以允许隔离区(dmz)中的电脑有限地被外界网络访问。只接受被选中的连接。


工作(work)

用在工作网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。


家庭(home)

用在家庭网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。


内部(internal )

用在内部网络。你信任网络中的大多数计算机不会影响你的计算机。只接受被选中的连接。


受信任的(trusted)

允许所有网络连接。


我应该选用哪个区域?

例如,公共的 WIFI 连接应该主要为不受信任的,家庭的有线网络应该是相当可信任的。根据与你使用的网络最 符合的区域进行选择,网络服务器的一般是public。


如何配置或者增加区域?

你可以使用任何一种 firewalld 配置工具来配置或者增加区域,以及修改配置。工具有例如 firewall-config 这样的图形界面工具, firewall-cmd 这样的命令行工具,以及D-BUS接口。或者你也可以在配置文件目录中创建或者拷贝区域文件。 @PREFIX@/lib/firewalld/zones 被用于默认和备用配置,/etc/firewalld/zones 被用于用户创建和自定义配置文件。

如何为网络连接设置或者修改区域

区域设置以 ZONE= 选项 存储在网络连接的ifcfg文件中。如果这个选项缺失或者为空,firewalld 将使用配置的默认区域。 

如果这个连接受到 NetworkManager 控制,你也可以使用 nm-connection-editor 来修改区域。




二、使用方法

可以通过图形界面工具 firewall-config 或者命令行客户端 firewall-cmd 启用或者关闭防火墙特性。


使用firewall-cmd

命令行工具 firewall-cmd 支持全部防火墙特性。对于状态和查询模式,命令只返回状态,没有其他输出。

# systemctl start firewalld # 启动,

# systemctl enable firewalld # 开机启动

# systemctl stop firewalld # 关闭

# systemctl disable firewalld # 取消开机启动

具体的规则管理,可以使用 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让“永 久生效”的配置规则立即生效,覆盖当前的。

特别需要注意的是firewalld服务有两份规则策略配置记录,必需要能够区分:

RunTime:当前正在生效的。

Permanent:永 久生效的。


查看版本:

$ firewall-cmd --version


获取 firewalld 状态

firewall-cmd --state


在不改变状态的条件下重新加载防火墙(永 久生效):

firewall-cmd --reload


获取支持的区域列表

# firewall-cmd --get-zones

block dmz drop external home internal public trusted work


获取所有支持的服务

# firewall-cmd --get-services 

RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https


获取所有支持的ICMP类型

# firewall-cmd --get-icmptypes 

destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded


列出全部启用的区域的特性

# firewall-cmd --list-all-zones (内容较多,不展示)


输出区域 全部启用的特性。如果生略区域,将显示默认区域的信息。 

firewall-cmd [–zone=] –list-all


获取默认区域的网络设置

# firewall-cmd --zone=public --list-all


设置默认区域 

firewall-cmd --set-default-zone=

# firewall-cmd --set-default-zone=dmz


获取活动的区域 

firewall-cmd –get-active-zones 



列举区域中启用的服务 

firewall-cmd [ –zone= ] –list-services

# firewall-cmd --zone=public --list-services 

dhcpv6-client ssh


根据接口获取区域 

firewall-cmd –get-zone-of-interface=


# firewall-cmd --get-zone-of-interface=eno16777736 

trusted


输出接口所属的区域名称。

# firewall-cmd --get-zone-of-interface=lo 

no zone


列出 public zone 所有网卡

# firewall-cmd --zone=public --list-interfaces


查询eno16777728网卡的区域:

# firewall-cmd --get-zone-of-interface=eno16777728

public


在public中分别查询ssh与http服务是否被允许:

# firewall-cmd --zone=public --query-service=ssh

yes

# firewall-cmd --zone=public --query-service=http

no


查看默认区域

#firewall-cmd --get-default-zone


设置默认规则为dmz:

# firewall-cmd --set-default-zone=dmz

让“永 久生效”的配置文件立即生效:

# firewall-cmd --reload

success


启动/关闭应急状况模式,阻断所有网络连接(建议关闭,可能把自己弄残):

应急状况模式启动后会禁止所有的网络连接,一切服务的请求也都会被拒绝,当心,请慎用。

# firewall-cmd --panic-on

success

# firewall-cmd --panic-off

success


允许https服务流量通过public区域,要求立设置当前生效与永 久有效

# firewall-cmd --zone=public --add-service=https

# firewall-cmd --permanent --zone=public --add-service=https


不再允许http服务流量通过public区域,要求立即生效且永 久生效:

# firewall-cmd --permanent --zone=public --remove-service=http

 success

使用参数“–reload“让永 久生效的配置文件立即生效:

# firewall-cmd --reload


允许8080与8081端口流量通过public区域,立即生效且永 久生效:

#?firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp

#?firewall-cmd --reload



将 eth0 添加至 public zone,永 久

# firewall-cmd --zone=public --permanent --add-interface=eth0

eth0 存在与 public zone,将该网卡添加至 work zone,并将之从 public zone 中删除

# firewall-cmd --zone=work --permanent --change-interface=eth0

删除 public zone 中的 eth0,永 久

# firewall-cmd --zone=public --permanent --remove-interface=eth0


配置 public zone 的 icmp

查看所有支持的 icmp 类型

# firewall-cmd --get-icmptypes

destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded

列出

# firewall-cmd --zone=public --list-icmp-blocks

添加 echo-request 屏蔽

# firewall-cmd --zone=public --add-icmp-block=echo-request [--timeout=seconds]

移除 echo-reply 屏蔽

# firewall-cmd --zone=public --remove-icmp-block=echo-reply


IP 封禁 (这个是我们平时用得最多的, reject 拒绝   accept 允许 ,删除该规则把 –add-rich-rule 改成 –remove-rich-rule即可)

# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.222' reject"  单个IP

# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.0/24' reject" IP段

# firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.2 port port=80  protocol=tcp  accept" 单个IP的某个端口


设置富规则,拒绝192.168.10.0/24网段的用户访问ssh服务:

firewalld服务的富规则用于对服务、端口、协议进行更详细的配置,规则的优先级最 高。

# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject" 

success

屏蔽192.168.10.0/24网段访问80端口

[root@localhost ~]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.66.26" port protocol="tcp" port="80" reject"

列出公共区域的规则

[root@localhost ~]# firewall-cmd --zone=public --list-rich-rules