firewalld服务
firewalld简介
◆ firewalld是CentOS 7.0新推出的管理netfilter的工具
◆ firewalld是配置和监控防火墙规则的系统守护进程。可以实现iptables,ip6tables,ebtables的功能
◆ firewalld服务由firewalld包提供
◆ firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则
◆ 归入zone顺序:
- 先根据数据包中源地址,将其纳为某个zone
- 纳为网络接口所属zone
- 纳入默认zone,默认为public zone,管理员可以改为其它zone
◆ 网卡默认属于public zone,lo网络接口属于trusted zone
firewalld zone分类
预定义服务
firewalld配置
◆ firewall-cmd --get-services 查看预定义服务列表
◆ /usr/lib/firewalld/services/*.xml预定义服务的配置
◆ 三种配置方法
- firewall-config (firewall-config包)图形工具
- firewall-cmd (firewalld包)命令行工具
- /etc/firewalld 配置文件,一般不建议
firewall-cmd 命令选项
◆ --get-zones
- 列出所有可用区域
◆ --get-default-zone
- 查询默认区域
◆ --set-default-zone=<ZONE>
- 设置默认区域
◆ --get-active-zones
- 列出当前正使用的区域
◆ --add-source=<CIDR>[–zone=<ZONE>]
- 添加源地址的流量到指定区域,如果无–zone= 选项,使用默认区域
◆ --remove-source=<CIDR> [–zone=<ZONE>]
- 从指定区域中删除源地址的流量,如无–zone= 选项,使用默认区域
◆ --add-interface=<INTERFACE> [–zone=<ZONE>]
- 添加来自于指定接口的流量到特定区域,如果无–zone= 选项,使用默认区域
◆ --remove-service=<SERVICE> [–zone=<ZONE>]
- 从区域中删除指定服务,禁止该服务流量,如果无–zone= 选项,使用默认区域
◆ --remove-port=<PORT/PROTOCOL> [–zone=<ZONE>]
- 从区域中删除指定端口和协议,禁止该端口的流量,如果无–zone= 选项,使用默认区域
◆ --reload
- 删除当前运行时配置,应用加载永久配置
◆ --list-services
- 查看开放的服务
◆ --list-ports
- 查看开放的端口
◆ --list-all [–zone=<ZONE>]
- 列出指定区域的所有配置信息,包括接口,源地址,端口,服务等,如果无–zone= 选项,使用默认区域
firewall-cmd 命令示例
◆ 查看默认zone
- firewall-cmd --get-default-zone
◆ 默认zone设为dmz
- firewall-cmd --set-default-zone=dmz
◆ 在internal zone中增加源地址192.168.0.0/24的永久规则
- firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/24
◆ 在internal zone中增加协议mysql的永久规则
- firewall-cmd --permanent –zone=internal --add-service=mysql
◆ 加载新规则以生效
- firewall-cmd --reload
实验:配置firewalld
◆ systemctl mask iptables
◆ systemctl mask ip6tables
◆ systemctl status firewalld
◆ systemctl enable firewalld
◆ systemctl start firewalld
◆ firewall-cmd --get-default-zone
◆ firewall-cmd --set-default-zone=public
◆ firewall-cmd --permanent --zone=public --list-all
◆ firewall-cmd --permanent --zone=public --add-port 8080/tcp
◆ firewall-cmd —reload
其它规则
◆ 当基本firewalld语法规则不能满足要求时,可以使用以下更复杂的规则
◆ rich-rules 富规则,功能强,表达性语言
◆ Direct configuration rules 直接规则,灵活性差
◆ 帮助:man 5 firewalld.direct
管理rich规则
◆ rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,还可以实现日志syslog和auditd,也可以实现端口转发,伪装和限制速率
◆ rich语法:
- rule
[source]
[destination]
service|port|protocol|icmp-block|masquerade|forward-port
[log]
[audit]
[accept|reject|drop]
规则
◆ 规则实施顺序:
- 该区域的端口转发,伪装规则
- 该区域的日志规则
- 该区域的允许规则
- 该区域的拒绝规则
◆ 每个匹配的规则生效,所有规则都不匹配,该区域默认规则生效
rich规则选项
rich日志规则
◆ log [prefix="<PREFIX TEXT>" [level=<LOGLEVEL>] [limit value="<RATE/DURATION>"]
◆ <LOGLEVEL> 可以是emerg,alert, crit, error, warning, notice, info, debug.
◆ <DURATION> s:秒, m:分钟, h:小时, d:天
◆ audit [limit value="<RATE/DURATION>"]
伪装和端口转发
NAT网络地址转换,firewalld支持伪装和端口转发两种NAT方式
伪装NAT
firewall-cmd --permanent --zone=<ZONE> --add-masquerade
firewall-cmd --query-masquerade 检查是否允许伪装
firewall-cmd --add-masquerade 允许防火墙伪装IP
firewall-cmd --remove-masquerade 禁止防火墙伪装IP
示例:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 masquerade'
端口转发
◆ 端口转发:将发往本机的特定端口的流量转发到本机或不同机器的另一个端口。通常要配合地址伪装才能实现
firewall-cmd --permanent --zone=<ZONE> --add-forwardport=port=<PORTNUMBER>:proto=<PROTOCOL>[:toport=<PORTNUMBER>][:toaddr=<IPADDR>]
◆ 说明:toport= 和toaddr= 至少要指定一个
rich规则
◆ rich规则语法:
forward-port port=<PORTNUM> protocol=tcp|udp [toport=<PORTNUM>] [to-addr=<ADDRESS>]
示例:
转发从192.168.0.0/24来的,发往80/TCP的流量到防火墙的端口8080/TCP
firewall-cmd --zone=work --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 forward-port port=80 protocol=tcp toport=8080'