RHEL7默认使用firewalld作为防火墙管理工具,拥有运行时配置(临时)与永久配置选项,支持动态更新及"zone"的区域功能概念。可使用图形化工具firewall-config和文本管理工具firewall-cmd。firewall服务取代了iptables服务,但iptables命令任然可用。基于iptables的防火墙被默认不启动,但仍然可以继续使用。RHEL7中有几种防火墙共存:firewalld、iptables、ebtables等,默认使用firewalld作为防火墙,管理工具是firewall-cmd。RHEL7的内核版本是3.10,在此版本的内核里防火墙的包过滤机制是 firewalld,使用firewalld来管理netfilter,不过底层调用的命令仍然是iptables 等。因为这几种daemon是冲突的,所以建议禁用其他几种服务。
区域:定义网络连接可信度。这是一个一对多的关系:一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接。区域设置以 ZONE= 选项存储在网络连接的ifcfg文件中。如果这个选项缺失或者为空,firewalld 将使用配置的默认区域。在/etc/firewalld/zones下面新增或修改区域。网络接口可以指定到某个区域,未指定区域的网络接口一律配置到默认区域。共9个区域,系统默认处于public区域
1. 丢弃区域(Drop Zone):如果使用丢弃区域,任何进入的数据包将被丢弃,使用丢弃规则意味着将不存在响应。
2. 阻塞区域(Block Zone):阻塞区域会拒绝进入的网络连接,返回 icmp-host-prohibited阻止,只有服务器已经建立的连接会被通过即只允许由该系统初始化的网络连接。
3. 公共区域(Public Zone):只接受那些被选中的连接,默认只允许ssh和dhcpv6-client。这个zone 是缺省 zone
4. 外部区域(External Zone):这个区域相当于路由器的启用伪装(masquerading)选项。只有指定的连接会被接受,即ssh,而其它的连接将被丢弃或者不被接受。
5. 隔离区域(DMZ Zone):如果想要只允许给部分服务能被外部访问,可以在DMZ区域中定义。它也拥有只通过被选中连接的特性,即ssh。
6. 工作区域(Work Zone):在这个区域,我们只能定义内部网络。比如私有网络通信才被允许,只允ssh,ipp-client 和 dhcpv6-client。
7. 家庭区域(Home Zone):这个区域专门用于家庭环境。它同样只允许被选中的连接,ssh,ipp-client,mdns,samba-client 和 dhcpv6-client。
8. 内部区域(Internal Zone):这个区域和工作区域(Work Zone)类似,只有通过被选中的连接,和 home 区域一样。
9. 信任区域(Trusted Zone):信任区域允许所有网络通信通过。记住:因为 trusted 是最被信任的,即使没有设置任何的服务,那么也是被允许的,因为 trusted 是允许所有连接的
1. 启动防火墙
# systemctl start firewalld
2. 查看防火墙状态
# systemctl status firewalld
3. 禁用防火墙
# systemctl disable firewalld
4. 停用防火墙
# systemctl stop firewalld
1. 查看firewall-cmd版本
# firewall-cmd --version
2. 查看帮助
# firewall-cmd --help
3. 显示firewall状态
# firewall-cmd --state
4. 查看所有打开的端口
# firewall-cmd --zone=public --list-ports
5. 更新防火墙规则
# firewall-cmd --reload
6. 查看区域信息
# firewall-cmd --get-active-zones
7. 查看指定接口所属区域
# firewall-cmd --get-zone-of-interface=eth0
8. 拒绝所有包
# firewall-cmd --panic-on
9. 取消拒绝状态
# firewall-cmd --panic-off
10. 查看是否拒绝所有包
# firewall-cmd --query-panic
11. 临时开发ftp服务
# firewall-cmd --add-service=ftp
12. 永久开发ftp服务
# firewall-cmd --permanent --add-service=ftp
13. 临时开放TCP 80端口
# firewall-cmd --add-port=80/tcp
14. 永久开放TCP 80端口
# firewall-cmd --permanent --add-port=80/tcp
rich-rule主要是为了解决firewall的基本语法无法满足要求,rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,还可以实现日志syslog和auditd,也可以实现端口转发,伪装和限制速率
rich语法:
rule [source] [destination] [service|port|protocol|icmp-block|masquerade|forward-port] [log] [audit] [accept|reject|drop]
规则:
规则实施顺序:
该区域的端口转发,伪装规则
该区域的日志规则
该区域的允许规则
该区域的拒绝规则
每个匹配的规则生效,所有规则都不匹配,该区域默认规则生效
rich规则示例:
1. 拒绝从192.168.0.11的所有流量,当address 选项使用source 或 destination时,必须用family= ipv4 |ipv6
# firewall-cmd --permanent --zone=classroom --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject‘
2. 限制每分钟只有两个连接到ftp服务
# firewall-cmd --add-rich-rule=‘rule service name=ftp limit value=2/m accept’
3. 抛弃esp( IPsec 体系中的一种主要协议)协议的所有数据包
# firewall-cmd --permanent --add-rich-rule='rule protocol value=esp drop'
4. 接受所有192.168.1.0/24子网端口5900-5905范围的TCP流量
# firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=5900-5905 protocol=tcp accept'
在firewall中,伪装只需要简单勾选即可;如果使用命令,方式如下
firewall-cmd [--zone=[区域] --add-masquerade
1. DNAT:当内部需要提供对外服务时(如对外发布web网站),公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换;
2. SNAT(伪装):内部地址要访问公网上的服务时(如web访问),将内部地址的私有IP转换为公网的公有IP;
注意:启用伪装功能的主机同时也需要开启转发服务:
# echo 1 > /proc/sys/net/ipv4/ip_forward
或者
# vi/etc/sysctl.conf 添加如下内容
net.ipv4.ip_forward= 1
保存退出并执行#sysctl-p使修改生效