1、firewalld防火墙
netfilter:内核态,使用的内核与iptables相同。
firewalld:用户态,提供了图形化配置界面和富语言的命令语句设置。比iptables的功能更多。
2、firewalld数据处理流程
firewalld检查数据来源的源地址,匹配区域规则
1.如果源地址关联到特定的区域,则执行该区域指定的规则。
2.若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所制定的规则
3.若网络接口未关联到特定的区域,则使用默认区域并执行该区域所制定的规则
3、firewalld的安全区域
firewalld默认创建了9个安全区域,分为两大类,第一类通行区域,默认限定允许通行什么类型的数据。第二类拒绝区域,什么数据都不允许通行的区域。
所有区域的通行规则是:允许任何数据发出,拒绝任何数据传入,除指定类型的数据流量。
trusted:信任区域,允许所有数据的发出和传入。
public: 公共区域,是所有接口的默认区域,除ssh和dhcp客户端
work: 办公区域,除ssh,dhcpv6-client,ipp-client等预定义服务
home: 家庭区域,除ssh,dhcpv6-client,ipp-client,mdns,samba-client等预定义服务
internal:内部区域,除ssh,dhcpv6-client,ipp-client,mdns,samba-client等预定义服务
external:外部区域,除ssh等预定义服务
dmz: 隔离区域,除ssh等预定义服务
block: 限制区域,拒绝任何数据传入
drop: 丢弃区域,拒绝任何数据传入,并且不产生ICMP错误信息
4、firewalld配置命令
firewall-config #进入图形化配置界面
firewall-cmd #firewall配置命令
1.显示firewall安全区域
firewall-cmd --get-zones
2.显示默认区域
firewall-cmd --get-default-zone
3.显示当前活动的区域
firewall-cmd --get-active-zones
一般情况下,网卡接口加入哪个区域,哪个区域就是活动的。
4.显示指定接口绑定的区域
firewall-cmd --get-zone-of-interface=ens33
5.显示所有区域和配置规则
firewall-cmd --list-all-zones
显示的信息说明:
home (active) #区域名称及状态(active活动状态)
target: default #匹配默认规则
icmp-block-inversion: no #未启用ICMP消息过滤
interfaces: ens33 #当前连接网络接口
sources: #源地址规则
services: dhcpv6-client mdns samba-client ssh #允许访问服务
ports: #允许访问的端口
protocols: #允许访问的协议
masquerade: no #地址伪装未启用
forward-ports: #端口转换
sourceports: #源端口号
icmp-blocks: #icmp消息过滤类型
rich rules: #富语言
6.显示指定区域的所有规则
firewall-cmd --zone=home --list-all
5、第二类命令,添加修改规则类
1.在指定的区域中添加网卡接口
一个网卡接口只能加入一个安全区域,而一个安全区域能够添加多个网卡接口。
firewall-cmd --zone=internal --add-interface=ens33
2.在指定的区域中添加服务
firewall-cmd --zone=internal --add-service=http
注意:每条语句只能添加一个服务
3.删除指定区域中的网卡接口
当一个网卡接口从安全区域中被删除后,会进入默认区域。
firewall-cmd --zone=internal --remove-interface=ens33
4.删除指定区域中的服务
firewall-cmd --zone=internal --remove-service=http
1、第二类命令,添加修改规则类
1.在指定区域中添加端口号
例:修改本地服务器的ssh服务端口号为2200,添加到firewalld的internal区域中
firewall-cmd --zone=internal --add-port=2200/tcp
2.在指定的区域中添加连续范围的端口号
firewall-cmd --zone=internal --add-port=4000-4005/tcp
3.删除指定区域中的端口号
firewall-cmd --zone=internal --remove-port=4000-4005/tcp
4.在指定区域中添加icmp的拒绝消息
firewall-cmd --zone=internal --add-icmp-block=echo-request
5.在指定区域中删除icmp的拒绝消息
firewall-cmd --zone=internal --remove-icmp-block=echo-request
2、配置模式
--reload 读取firewalld的配置信息,加载配置规则。相当于重启服务,重新读取配置。
firewall-cmd --reload
--permanent 永久保存,将规则配置写入配置文件中,当前不生效,只能在重启服务或重新加载配置后生效。
注意:在输入规则时,不写--permanent选项,规则是临时生效的,重新启动服务,重启系统,重新加载配置都会丢失以添加的规则。一般使用临时规则的方式进行测试,功能实现后,再添加--permanent选项设置为永久生效。
3、直接规则
firewalld中的直接规则设置的是一种流程性的规则选项,描述在过程中要做那些事。配置难度相对较高,不建议初学者设置。
例:将ip地址为10.3的主机加入黑名单,设置每分钟记录一次日志,并且丢弃数据包。
1.创建类型为ipv4的黑名单容器
firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist
2.将10.3加入到黑名单
firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.10.3 -j blacklist
3.设置每分钟记录一次日志
firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix "blacklisted"
4.设置丢弃黑名单中的数据包
firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP
4、富语言规则
富语言是firewalld防火墙提供的一种新的规则表达式,在iptables的基础上运行,用户不会iptables也能够学习使用,功能比iptables更多。
富语言管理操作语法:
1.添加富语言规则
firewall-cmd --permanent --zone=internal --add-rich-rule='规则表达式'
2.删除富语言规则
firewall-cmd --permanent --zone=internal --remove-rich-rule='规则表达式'
3.显示指定区域的富语言规则
firewall-cmd --zone=internal --list-rich-rules
4.规则表达式语法
source 源ip地址:source address=192.168.10.3 或 192.168.10.0/24
destination 目标IP地址:destination address=192.168.10.2 或 192.168.10.0/24
log 日志管理:log prefix=前缀文本 level=日志级别 limit value=条目数/时间 (s,m,h,d)
audit 审核:审核执行动作 ACCEPT REJECT DROP
element 其他要素:
service name=服务名
port port=端口号或端口范围
protocol=tcp或udp
icmp-block name=icmp类型(request replay)
masquerade 规则里的IP伪装
forward-port 端口与地址转换
family=ipv4 指定地址类型ipv4或ipv6
例:允许来自192.168.10.0/24的ipv4地址连接http,并使用系统日志,每分钟记录一次
firewall-cmd --zone=internal --add-rich-rule='rule family=ipv4 source address=192.168.10.0/24 service name=http log prefix=aaa level=info limit value=1/m accept'
练习案例:
1、允许新的ipv4和ipv6连接FTP,并使用审核每分钟记录一次。
2、为RADIUS协议拒绝所有来自:1:2:3:4:5:6:: 的新IPV6连接,日志前缀为"dns",级别为info,并每分钟最多记录3次。接受来自其他发起端新的IPV6连接。
3、将源地址192.168.10.2加入白名单,允许来自这个源地址的所有连接。
4、拒绝来自public区域中IP地址192.168.20.11的所有流量。
5、丢弃来自默认区域中任何位置的所有传入的ipsec esp协议包。
6、在192.168.1.0/24子网的dmz区域中,接收端口号7900-7905的所有TCP包。
7、接收从work区域到ssh的新连接,以notice级别,并且每分钟最多三条消息的方式将新连接记录到syslog
8、在接下来的5分钟内,拒绝从默认区域中的192.168.2.0/24子网到DNS的链接,并且拒绝的链接将记录到audit系统,且每小时最多一条消息。
1、案例讲解
1.允许新的ipv4和ipv6连接FTP,并使用审核每分钟记录一次。
firewall-cmd --zone=internal --add-rich-rule='rule family=ipv4 service name=ftp log prefix=ftp level=info limit value=1/m audit accept'
firewall-cmd --zone=internal --add-rich-rule='rule family=ipv6 service name=ftp log prefix=ftp level=info limit value=1/m audit accept'
2.为RADIUS协议拒绝所有来自:1:2:3:4:5:6:: 的新IPV6连接,日志前缀为"dns",级别为info,并每分钟最多记录3次。接受来自其他发起端新的IPV6连接。
firewall-cmd --zone=internal --add-rich-rule='rule family=ipv6 source address=1:2:3:4:5:6:: service name=radius log prefix=redius level=info limit value=3/m drop'
firewall-cmd --zone=internal --add-rich-rule='rule family=ipv6 service name=radius accept'
3.在192.168.1.0/24子网的dmz区域中,接收端口号7900-7905的所有TCP包。
firewall-cmd --zone=dmz --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept'
2、firewalld配置地址转换
1.地址伪装
external区域默认配置了地址伪装选项。只要将外网接口添加到external区域中,直接就能访问外网。
其他区域启用地址伪装功能:
firewall-cmd --zone=work --add-masquerad
取消地址伪装功能:
firewall-cmd --zone=external --remove-masquerad
2.目标地址转换 DNAT
将内网中的服务器发布到外网
在external区域中添加http服务,允许external区域接收http访问请求。
firewall-cmd --zone=external --add-service=http
firewall-cmd --zone=external --add-service=https
在external区域中添加转换规则
方法一:富语言简写语句
firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=192.168.20.2
方法二:富语言标准语句
firewall-cmd --zone=external --add-rich-rule='rule family=ipv4 destination address=192.168.30.1 forward-port port=80 protocol=tcp to-addr=192.168.20.2'