Linux之Firewalld安装及使用

  • A+
所属分类:VPS推荐

一、Firewalld介绍
1、firewalld介绍
Firewalld提供了动态托管的防火墙,并支持定义网络连接或接口的信任级别的网络/防火墙区域。它支持IPv4,IPv6防火墙设置,以太网桥和IP集。运行时和永久配置选项分开。它还为服务或应用程序提供了一个接口,以直接添加防火墙规则。
相较于iptables防火墙而言,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。借助带防火墙的D-Bus接口,服务,应用程序以及用户都可以轻松调整防火墙设置。该接口已完成,用于防火墙配置工具firewall-cmd,firewall-config和firewall-applet。
运行时和永久配置的分离使得可以在运行时进行评估和测试。运行时配置仅在下一次重新加载和重新启动服务或重新引导系统之前才有效。然后,将再次加载永久配置。使用运行时环境,可以将运行时用于仅在有限时间内激活的设置。如果运行时配置已用于评估,并且已完成且可以正常运行,则可以将此配置保存到永久环境中。
以下Linux发行版中使用firewalld作为默认防火墙管理工具:

RHEL 7及更高版本
CentOS 7及更高版本
Fedora 18及更高版本
SUSE 15及更高版本
OpenSUSE 15及更高版本
2、安装及启停
以centos7为例介绍Firewalld的安装及启停,centos7默认已安装firewalld,如果未安装可以使用如下命令安装。

Firewalld安装
[root@test1 ~]# yum install -y firewalld

Firewalld启动
[root@test1 ~]# systemctl start firewalld

Firewalld停止
[root@test1 ~]# systemctl stop firewalld

Firewalld状态查看
[root@test1 ~]# systemctl status firewalld

Firewalld开机自启动
[root@test1 ~]# systemctl enable firewalld

Firewalld取消开机自启动
[root@test1 ~]# systemctl disable firewalld

二、常用配置命令举例
1、查看Firewalld版本
[root@test1 ~]# firewall-cmd --version
0.6.3

2、显示所有安全区域
[root@test1 ~]# firewall-cmd --list-all-zones
block
target: %%REJECT%%
icmp-block-inversion: no

dmz
target: default

3、查看激活的安全域
[root@test1 ~]# firewall-cmd --get-active-zone
public
interfaces: ens33

4、查看开放的端口
[root@test1 ~]# firewall-cmd --list-ports
80/tcp 8080-8088/tcp

5、开放单个端口
[root@test1 ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success

6、开放一段端口范围
[root@test1 ~]# firewall-cmd --zone=public --add-port=8080-8088/tcp --permanent
success

7、对单个地址开放一个端口
[root@test1 ~]# firewall-cmd --permanent --zone=public --add-rich-rule=’
> rule family=“ipv4”
> source address=“192.168.0.186/32”
> port protocol=“tcp” port=“80” accept’
success

8、拒绝单个IP地址访问某个端口
[root@test1 ~]# firewall-cmd --permanent --zone=public --add-rich-rule=’
> rule family=“ipv4”
> source address=“8.8.8.8/32”
> port protocol=“tcp” port=“53” reject’
success

9、开放全部端口给IP
[root@test1 ~]# firewall-cmd --permanent --zone=public --add-rich-rule=’
> rule family=“ipv4”
> source address=“192.168.0.186/32” accept’;
success

10、开放全部端口给网段
[root@test1 ~]# firewall-cmd --permanent --zone=public --add-rich-rule=’
rule family=“ipv4”
source address=“192.168.0.0/16” accept’;
success

11、查看添加的规则
[root@test1 ~]# firewall-cmd --zone=public --list-rich-rules
rule family=“ipv4” source address=“192.168.0.186/32” port port=“80” protocol=“tcp” accept

12、查看全部支持的服务
[root@test1 ~]# firewall-cmd --get-services
RH-Satellite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

也可以通过服务的配置文件目录查看

[root@test1 ~]# ll /usr/lib/firewalld/services/
total 616
-rw-r–r--. 1 root root 412 Nov 17 00:16 amanda-client.xml

-rw-r–r--. 1 root root 339 Nov 17 00:16 bgp.xml

-rw-r–r--. 1 root root 374 Nov 17 00:16 ftp.xml

13、查看开放的服务
[root@test1 ~]# firewall-cmd --list-services
dhcpv6-client ssh

14、添加https服务
[root@test1 ~]# firewall-cmd --add-service=https --permanent
success

15、移除端口
[root@test1 ~]# firewall-cmd --zone=public --remove-port=80/tcp --permanent
success

16、移除服务
[root@test1 ~]# firewall-cmd --remove-service=https --permanent
success

17、开放icmp协议流量,即允许ping
[root@test1 ~]# firewall-cmd --zone=public --add-protocol=icmp
success

18、重载配置
Firewalld添加完规划后需要重载配置才能生效。

[root@test1 ~]# firewall-cmd --reload
success

三、区域及参数说明
1、默认区域及规则
区域(noze) 默认策略规则
trusted 允许所有的数据包进出
home 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许进入
Internal 等同于home区域
work 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许进入
public 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许进入
external 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh服务相关,则允许进入
dmz 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh服务相关,则允许进入
block 拒绝进入的流量,除非与出去的流量相关
drop 拒绝进入的流量,除非与出去的流量相关
各区域的默认配置文件存储路径/usr/lib/firewalld/zones/
[root@test1 ~]# ll /usr/lib/firewalld/zones/
total 36
-rw-r–r--. 1 root root 299 Nov 17 00:16 block.xml
-rw-r–r--. 1 root root 293 Nov 17 00:16 dmz.xml
-rw-r–r--. 1 root root 291 Nov 17 00:16 drop.xml
-rw-r–r--. 1 root root 304 Nov 17 00:16 external.xml
-rw-r–r--. 1 root root 369 Nov 17 00:16 home.xml
-rw-r–r--. 1 root root 384 Nov 17 00:16 internal.xml
-rw-r–r--. 1 root root 315 Nov 17 00:16 public.xml
-rw-r–r--. 1 root root 162 Nov 17 00:16 trusted.xml
-rw-r–r--. 1 root root 311 Nov 17 00:16 work.xml

2、常用firewall-cmd命令参数及说明
参数 说明
–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 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
–panic-on 开启应急状况模式
–panic-off 关闭应急状况模式
四、端口映射
1、将80端口的流量转发至8080
[root@test1 ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080

2、将80端口的流量转发至192.168.0.1
[root@test1 ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1

3、将80端口的流量转发至192.168.0.1的8080端口
[root@test1 ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080

4、禁止区域的端口转发或者端口映射
firewall-cmd [–zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=}

5、查询区域的端口转发或者端口映射
firewall-cmd [–zone=] --query-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=}

6、在区域中永久启用端口转发或映射
firewall-cmd --permanent [–zone=] --add-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=}
端口可以映射到另一台主机的同一端口,也可以是同一主机或另一主机的不同端口。

端口号可以是一个单独的端口 或者是端口范围 。
协议可以为 tcp 或udp 。
目标端口可以是端口号 或者是端口范围 。
目标地址可以是 IPv4 地址。受内核限制,端口转发功能仅可用于IPv4。
7、永久禁止区域的端口转发或者端口映射
firewall-cmd --permanent [–zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=}

8、查询区域的端口转发或者端口映射状态
firewall-cmd --permanent [–zone=] --query-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=}
如果服务启用,此命令将有返回值。此命令没有输出信息。

9、将 home 区域的 ssh 服务转发到 127.0.0.2
[root@test1 ~]# firewall-cmd --permanent --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2

10、检查是否允许伪装IP
[root@test1 ~]# firewall-cmd --query-masquerade

11、允许防火墙伪装IP
[root@test1 ~]# firewall-cmd --add-masquerade

12、禁止防火墙伪装IP
[root@test1 ~]# firewall-cmd --remove-masquerade

13、永久启用区域中的伪装
firewall-cmd --permanent [–zone=] --add-masquerade
此举启用区域的伪装功能。私有网络的地址将被隐藏并映射到一个公有IP。这是地址转换的一种形式,常用于路由。由于内核的限制,伪装功能仅可用于IPv4。

14、临时禁用区域中的 IP 伪装
firewall-cmd [–zone=] --remove-masquerade

15、永久禁用区域中的伪装
firewall-cmd --permanent [–zone=] --remove-masquerade

16、查询区域中的伪装的永久状态
firewall-cmd --permanent [–zone=] --query-masquerade
如果服务启用,此命令将有返回值。此命令没有输出信息。

17、查询区域的伪装状态
firewall-cmd [–zone=] --query-masquerade
如果启用,此命令将有返回值。没有输出信息。
————————————————
版权声明:本文为CSDN博主「恒悦sunsite」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/carefree2005/article/details/113842332

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: