Linux系统中集成了多款防火墙工具,其中,firewalld(Dynamic Firewall Manager of Linux systems ,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,拥有基于CLI(命令行界面)和基于GUI(图形化界面)的管理方式
firewalld相对于传统的防火墙加入了区域(zone)的概念
也就是说是firewalld预先设置好的防火墙策略集合,使用者可以根据自己使用场景来变换相应的策略
下表是firewalld中一些常用的区域名称以及策略规则
区域 | 默认规则策略 |
---|---|
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 | 拒绝流入的流量,除非与流出的流量相关 |
其中,trusted是最放松的状态,允许所有数据包,home相等于internal区域,可推荐家用,work顾名思义,推荐工作使用,public则是较为安全的,推荐公共场合的使用。external和dmz不同,external是允许指定的外部连接,而dmz则是指可通过有限的内部进行公共访问,其次也可指定外部连接;
block指的是拒绝所有外部连接,允许内部发起的连接,drop是指任何传入的网络数据包都将被丢弃而不发出任何通知。只有传出网络连接是可能的
firewalld-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本
使用参数及作用如下
参数 | 作用 |
– | – |
–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 | 关闭应急状况模式 |
使用firewalld配置的防火墙策略默认为运行时模式(Runtime),又称生效模式,而且随系统的重启而失效,永久模式(Permanent)的使用要在firewalld-cmd命令正常设置防火墙时添加–permantent参数,但是缺点就是只能在重启后生效,若想让配置立马生效,则需手动执行firewalld-cmd --reload命令
测试命令如下
查看当前情况下firewalld服务所使用的区域
[root@centos7 ~]#firewall-cmd --get-default-zone
public
查询ens32网卡在firewalld服务中的区域
[root@centos7 ~]#firewall-cmd --get-zone-of-interface=ens32
public
设置某个默认区域为public
###设置默认区域为public
[root@centos7 ~]#firewall-cmd --set-default-zone=public
success
###查看区域
[root@centos7 ~]#firewall-cmd --get-default-zone
public
由上得出 -设置某个默认区域格式为: –set-default-zone=区域名称
修改网卡的默认区域
####修改永久默认区域
[root@centos7 ~]#firewalld-cmd --permantent --zone=external --change-interface=ens32
success
####查看当前默认区域
[root@centos7 ~]#firewalld-cmd --get-zone-of-interface=ens32
public
###查看当前永久模式配置
[root@centos7 ~]#firewalld-cmd --permantent --get-zone-of-interface=ens32
由上得出:
应急状况模式,阻断一切网络连接 (注:远程服务时慎用)
注:应急模式下无法使用网络,无法访问外部信息。
###开启应状况急模式
[root@centos7 ~]#firewall-cmd --panic-on
###关闭应急状况模式
[root@centos7 ~]#firewall-cmd --panic-off
查看public区域是否允许请求SSH和HTTPS协议的流量
###查看是否允许请求
[root@centos7 ~]#firewall-cmd --zone=public --query-service=ssh
yes
[root@centos7 ~]#firewall-cmd --zone=public --query-service=https
no
由此得出:当查看某个区域的某些协议时格式为:–zone=区域名称 --query-service=协议名称
查看系统默认活动区域名称、来源地址和关联的网卡
[root@centos7 ~]#firewall-cmd --get-active-zones
external####当前区域默认名称
interfaces: ens32####当前网卡名称
设置某个协议的流量为永久允许或者是永久拒绝,并亲立即生效
[root@centos7 ~]#firewall-cmd --zone=public --add-service=https
success
[root@centos7 ~]#firewall-cmd --permantent --zone=public --add-service=https
success
########永久生效
[root@centos7 ~]#firewall-cmd --reload
success
######设置为永久拒绝
[root@centos7 ~]#firewall-cmd --permantent --zone=public --remove-service=https
success
[root@centos7 ~]#firewall-cmd --reload
success
###然后你可以查看状态
[root@centos7 ~]#firewall-cmd --zone=public --query-service=https
no
以上得出
访问8080和8081端口的流量策略设置为允许
[root@centos7 ~]#firewall-cmd --zone=public --add-port=8082-8083/tcp
###查看命令
[root@centos7 ~]#firewall-cmd --zone=public --list-ports
8082-8083/tcp
尝试将原本访问本机888端口的流量转发到22端口,要求当前和长期均有效
[root@centos7 ~]#firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10
success
[root@centos7 ~]#firewall-cmd --reload
success
###在ssh客户端使用访问如下
[root@A ~]#ssh -p 888 192.168.10.10
The authenticity of host '[192.168.10.10]:888 ([192.168.10.10]:888)' can't be established.
ECDSA key fingerprint is b8:25:88:89:5c:05:b6:dd:ef:76:63:ff:1a:54:02:1a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.10.10]:888' (ECDSA) to the list of known hosts.
[email protected]'s password:此处输入远程root管理员的密码
Last login: Sun Jul 19 21:43:48 2017 from 192.168.10.10
流量转发命令格式为: firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
firewall中富规则
firewalld的富语言(rich language)提供了一种不需要了解iptables语法的通过高级语言配置复杂IPv4和IPv6防火墙规则的机制,为管理员提供了一种表达性语言.通过这种语言可以表达firewalld的基本语法中未涵盖的自定义防火墙规则。例如,仅允许从单个IP地址(而非通过某个区域路由的所有IP地址)连接到服务。
富规则可用于表达基本的允许/拒绝规则,也可以用于配置记录(面向syslog 和auditd),以及端口转发、伪装和速率限制。