linux命令__firewalld

  • linux命令__firewalld已关闭评论
  • 126 次浏览
  • A+
所属分类:linux技术
摘要

firewalld防火墙是centos7系统默认的防火墙管理工具取代了之前的iptables防火墙(1)作用点


firewalld

linux命令__firewalld

1、firewalld

firewalld防火墙是centos7系统默认的防火墙管理工具取代了之前的iptables防火墙

  • 工作在网络层、属于包括过滤防火墙
    firewalld和iptables都是用来管理防火墙的工具(属于用户状态)来定义防火墙的各种规则功能
  • 内部结构都指向netfilter网络过滤子系统(属于内状态)来实现包过滤防火墙能
    firewalld提供了支持网路区域所定义的网络链接以及接口安全等级的动态的防火墙管理工具
  • 支持ipv4、ipv6防火墙设置以及以太网桥(在某些高级服务可能会用到,如云计算)
    拥有两种配置模式:运行时配置与永久配置

2、firewalld与iptables的区别

(1)作用点

iptables主要是基于接口,来设置规则,从而判断网络的安全性
firewalld是基于区域,根据不同的区域来设置不同的规则,从而判断网络的安全性。和硬件防火墙的设置相类似。
(2)储存位置

iptables在、/etc/sysconfig/iptables 中储存配置
firewalld 将配置储存在/etc/firewalld(优先加载)和/usr/bid/firewalld/(默认配置文件)中的各种XML文件里
(3)新规则的使用

使用 iptables 每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables 里读取所有新的规则
使用 firewalld 却不会再创建任何新的规则,仅仅运行规则中的不同之处。因此firewalld 可以在运行时间内,改变设置而不丢失现行连接

iptables主要是基于接口,来设置规则,从而判断网络的安全性。
firewalld是基于区域,根据不同的区域来设置不同的规则,从而保证网络的安全。与硬件防火墙的设置相类似。

iptables 在/etc/ sysconfig/iptables中储存配置.,
firewalld 将配置储存在/etc/firewalld/(优先加载)和/usr/lib/firewalld/(默认的配置文件)中的各种XM文件里。

使用iptables 每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则。使用firewalld 却不会再创建任何新的规则,仅仅运行规则中的不同之处。因此firewalld可以在运行时间内,改变设置而不丢失现行连接。

iptables 防火墙类型为静态防火墙

firewalld 防火墙类型为动态防火墙

iptables倾向于对数据包的源/目的IP,端口,协议,出入站网卡来设置包过滤规则

filewalld对指定的网络区域设置相关过滤规则,数据包在全部指定区域的规则对包进行过滤。

Firewalls In-tables
配置文件 /usr/lib/firewalld /etc/firewalld /etc/sysconfig/iptables
对规则的修改 不需要全部刷新策略,不丢失现行连接 需要全部刷新策略,丢失连接
防火墙类型 动态防火墙 静态防火墙

3、firewalld区域的概念

  • firewalld防火墙为了简化管理,将所有网络流量分为多个区域(zone)
  • 然后根据数据包的源IP地址或传入的网络接口等条件将流量传入相应区域
  • 每个区域都定义了自己打开或者关闭的端口和服务列表。

firewalld防火墙预定了9个区域

区域名称 作用
trusted(信任区域) 允许所有的传入流量
public(公共区域) 允许与ssh或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。是新添加网络接口的默认区域。
external(外部区域) 允许与 ssh 预定义服务匹配的传入流量,其余均拒绝。 默认将通过此区域转发的IPv4传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络。
home(家庭区域) 允许与ssh、ipp-client、mdns、samba-client或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。
work(工作区域) 允许与 ssh、ipp-client、dhcpv6-client 预定义服务匹配的传入流量,其余均拒绝。
dmz(隔离区域也称为非军事区域) 允许与 ssh 预定义服务匹配的传入流量,其余均拒绝。
block(限制区域) 拒绝所有传入流量。
drop(丢弃区域) 丢弃所有传入流量,并且不产生包含 ICMP的错误响应。
internal(内部区域) 默认值时与home区域相同。

最终一个区域的安全程度是取决于管理员在此区域中设置的规则。
区域如同进入主机的安全门,每个区域都具有不同限制程度的规则,只会允许符合规则的流量传入。
可以根据网络规模,使用一个或多个区域,但是任何一个 活跃区域 至少需要关联 源地址或接口。
默认情况下,public区域是默认区域,包含所有接口(网卡)

4、firewalld数据处理流程

firewalld对于进入系统的数据包,会根据数据包的源IP地址或传入的网络接口等条件,将数据流量转入相应区域的防火墙规则。对于进入系统的数据包,首先检查的就是其源地址
firewalld检查数据包的源地址的规则:
1、若源地址关联到特定的区域(即源地址或接口绑定的区域有冲突),则执行该区域所制定的规则。
2、若源地址未关联到特定的区域(即源地址或接口绑定的区域没有冲突),则使用传入网络接口的区域并执行该区域所制定的规则。
3、若网络接口也未关联到特定的区域(即源地址或接口都没有绑定特定的某个区域),则使用默认区域并执行该区域所制定的规则。

常用参数

--get-default-zone :显示当前默认区域 --set-default-zone=<zone> :设置默认区域  --get-active-zones :显示当前正在使用的区域及其对应的网卡接口 --get-zones :显示所有可用的区域  --get-zone-of-interface=<interface> :显示指定接口绑定的区域 --zone=<zone> --add-interface=<interface> :为指定接口绑定区域 --zone=<zone> --change-interface=<interface> :为指定的区域更改绑定的网络接口 --zone=<zone> --remove-interface=<interface> :为指定的区域删除绑定的网络接口  --list-all-zones :显示所有区域及其规则 [--zone=<zone>] --list-all :显示所有指定区域的所有规则,省略--zone=<zone>时表示仅对默认区域操作  [--zone=<zone>] --list-services :显示指定区域内允许访问的所有服务 [--zone=<zone>] --add-service=<service> :为指定区域设置允许访问的某项服务 [--zone=<zone>] --remove-service=<service> :删除指定区域已设置的允许访问的某项服务  [--zone=<zone>] --list-ports :显示指定区域内允许访问的所有端口号 [--zone=<zone>] --add-port=<portid>[-<portid>]/<protocol> :为指定区域设置允许访问的某个/某段端口号(包括协议名) [--zone=<zone>] --remove-port=<portid>[-<portid>]/<protocol> :删除指定区域已设置的允许访问的端口号(包括协议名)  [--zone=<zone>] --list-icmp-blocks :显示指定区域内拒绝访问的所有 ICMP 类型 [--zone=<zone>] --add-icmp-block=<icmptype> :为指定区域设置拒绝访问的某项 ICMP 类型 [--zone=<zone>] --remove-icmp-block=<icmptype> :删除指定区域已设置的拒绝访问的某项ICMP类型 firewall-cmd --get-icmptypes :显示所有 ICMP 类型  

区域管理

  1. 显示当前系统中的默认区域

    [root@honey~] firewall-cmd --get-default-zone public 
  2. 显示默认区域的所有规则

    linux命令__firewalld

  3. 显示当前正在使用的区域及对应的网卡接口

    [root@honey-slave ~] firewall-cmd --get-active-zones public   interfaces: ens192 
  4. 设置默认区域

    firewall-cmd --set-default-zone=home firewall-cmd --get-default-zone 

服务管理

  1. 查看默认区域内允许访问的所有服务

    [root@honey-slave ~] firewall-cmd --list-service cockpit dhcpv6-client ssh 
  2. 添加httpd服务到public区域

    [root@honey-slave ~] firewall-cmd --add-service=http --zone=public success [root@honey-slave ~] firewall-cmd --list-service cockpit dhcpv6-client http ssh 
  3. 查看public区域已配置规则

    firewall-cmd --list-all --zone=public  这条命令和上面的显示所有规则的输出一样 
  4. 删除public区域的httpd服务

    [root@honey-slave ~]# firewall-cmd --remove-service=http --zone=public success [root@honey-slave ~]# firewall-cmd --list-service cockpit dhcpv6-client ssh 
  5. firewall-cmd --add-service=http --add-service=https --permanent firewall-cmd --reload	 firewall-cmd --list-all		 添加使用 --permanent选项表示设置成永久生效,需要重新启动firewalld服务或执行firewall-cmd --reload命令 重新加载防火墙规则时才会生效。若不带有此选项,表示用于设置运行时规则,但是这些规则在系统或firewalld服务重启、停止时配置将失效。  --runtime-to-permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性配置。  

端口管理

  1. 允许TCP的433端口到internal区域

    [root@honey-slave ~]# firewall-cmd --zone=internal --add-port=443/tcp success [root@honey-slave ~]# firewall-cmd --list-all --zone=internal internal   target: default   icmp-block-inversion: no   interfaces:    sources:    services: cockpit dhcpv6-client mdns samba-client ssh   ports: 443/tcp   protocols:    masquerade: no   forward-ports:    source-ports:    icmp-blocks:    rich rules:  
  2. 从internal区域将tcp的433端口移除

    [root@honey-slave ~] firewall-cmd --zone=internal --remove-port=443/tcp success 
  3. 允许UDP的2048-2050端口到默认区域

    [root@honey-slave ~] firewall-cmd --add-port=2048-2050/udp success [root@honey-slave ~] firewall-cmd --list-all public (active)   target: default   icmp-block-inversion: no   interfaces: ens192   sources:    services: cockpit dhcpv6-client ssh   ports: 55210-55212/tcp 9091/tcp 80/tcp 443/tcp 9988/tcp 30100-30105/tcp 35000-36000/tcp 2048-2050/udp 

其他命令

重新加载防火墙配置 firewall-cmd --reload  规则更改后必须重新加载生效   查看防火墙运行状态 firewall-cmd --state   等于#systemctl status firewalld   查看所有区域配置 firewall-cmd --list-all-zones   查看防火墙默认区域配置 firewall-cmd --list-all   查看防火墙默认区域名 firewall-cmd --get-default-zone   设置防火强默认区域 firewall-cmd --set-default-zone=public   把网卡分配给区域 firewall-cmd --zone=public --add-interface=ens32   查看指定网卡所在区域 firewall-cmd --get-zone-of-interface=ens32   更改网卡所属区域 firewall-cmd --zone=public --change-interface=ens32  

**应急模式管理*******(加--permanent参数才会写入配置文件以永久生效)*******:

拒绝所有流量 firewall-cmd --panic-on  不能轻易用   取消应急模式 firewall-cmd --panic-off(但需要重启firewalld后才可以远程ssh)   查看是否为应急模式 firewall-cmd --query-panic  

linux命令__firewalld

**协议添加示例*****(加--permanent参数才会写入配置文件以永久生效)*****:****

添加协议 firewall-cmd --add-protocol=icmp   取消协议 firewall-cmd --remove-protocol=icmp   查看添加的协议 firewall-cmd --list-protocols [root@honey-slave ~] firewall-cmd --add-protocol=icmp success [root@honey-slave ~] firewall-cmd --list-protocols icmp [root@honey-slave ~] firewall-cmd --remove-protocol=icmp success [root@honey-slave ~] firewall-cmd --list-protocols  [root@honey-slave ~]#  

**端口流量转发示例*****(加--permanent参数才会写入配置文件以永久生效)*****:****

将原本访问本机888端口的流量转发到本机22端口:

[root@honey-slave ~] firewall-cmd --zone=drop --add-forward-port=port=888:proto=tcp:toport=22 success 

将原本访问本机888端口的流量转发到ip为10.0.83.33的主机的22端口(需要开启masquerade):

[root@honey-slave ~] firewall-cmd --zone=drop --add-masquerade success [root@honey-slave ~] firewall-cmd --zone=drop --add-forward-port=port=888:proto=tcp:toport=22:toaddr=10.0.83.33 success 

测试端口转发功能是否生效:在客户端尝试访问192.168.2.210主机的888端口,连上去后发现实际连接的是10.0.83.33主机,测试OK。

**富规则临时添加示例*****(加--permanent参数才会写入配置文件以永久生效)*****:****

允许10.0.83.33和10.0.81.29主机的所有流量,以及协议为tcp,端口为2889:

[root@honey-slave ~] firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=10.0.81.29 port protocol="tcp" port="2889" accept" --permanent success [root@honey-slave ~] firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=10.0.83.33 port protocol="tcp" port="2889" accept" --permanent 

允许10.0.83.33主机的icmp协议,即允许10.0.83.33主机ping:

firewall-cmd --add-rich-rule="rule family="ipv4" source address="10.0.83.33" protocol value="icmp" accept" 

取消允许10.0.81.29主机的所有流量

firewall-cmd --zone=drop --remove-rich-rule="rule family="ipv4" source address="10.0.81.29" accept" 

允许192.168.2.208主机访问ssh服务

firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="ssh" accept" 

禁止192.168.2.208访问https服务,并返回错误信息:

firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="https" reject" 

允许192.168.2.0/24网段的主机访问22端口

firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" accept" 

允许任意地址的主机访问5601端口

firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" port  protocol="tcp" port="5601" accept" 

每分钟允许2个新连接访问ftp服务

[root@honey-slave ~] firewall-cmd --add-rich-rule="rule service name=ftp limit value=2/m accept" success [root@honey-slave ~] firewall-cmd --list-all public (active)   target: default   icmp-block-inversion: no   interfaces: ens192   sources:    services: cockpit dhcpv6-client ssh   ports: 55210-55212/tcp 9091/tcp 80/tcp 443/tcp 9988/tcp 30100-30105/tcp 35000-36000/tcp 2048-2050/udp   protocols:    masquerade: no   forward-ports:    source-ports:    icmp-blocks:    rich rules:  	rule service name="ftp" accept limit value="2/m" 

允许新的ipv4和ipv6连接ftp,并使用日志和审核,每分钟允许访问一次:

firewall-cmd --add-rich-rule="rule service name=ftp log limit value="1/m" audit accept" 

拒绝来自192.168.2.0/24网段的连接,10秒后自动取消:

firewall-cmd --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 reject" --timeout=10 

将来自192.168.2.0/24网段访问本机80端口的流量转发到本机的22端口:

firewall-cmd --zone=drop --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 forward-port port=80 protocol=tcp to-port=22" 

列出当前active zone的各种属性值

firewall-cmd --list-[option]

option可以取下面的值
interfaces
sources
services
ports
protocols
forward-ports
source-ports
icmp-blocks
rich-rules

[root@honey-slave ~] firewall-cmd --list-rich-rules  rule family="ipv4" source address="10.0.83.33" port port="3888" protocol="tcp" accept rule family="ipv4" source address="192.168.2.208" protocol value="icmp" accept rule service name="ftp" accept limit value="2/m" rule service name="ftp" log limit value="1/m" audit accept [root@honey-slave ~]# firewall-cmd --list-ports 55210-55212/tcp 9091/tcp 80/tcp 443/tcp 9988/tcp 30100-30105/tcp 35000-36000/tcp 2048-2050/udp