firewalld高级配置
1、IP地址伪装 masquerade:伪装
通过地址伪装,NAT设备将经过设备的包转发到指定接收方,同时将通过的数据包的原地址更改为NAT的接口地址转发到不同步目的地。当是返回数据包是,会将目的地之修改为原始主机地址并路由。
2、端口转发
也叫端口映射。通过端口转发,将指定IP地址及端口的流量转发到相同计算机上不同端口,或不同计算机上的端口。
firewall-cmd高级配置
firewalld(Dynamic Firewall Manager of Linux systems,Linux 系统的动态防火墙管理器)服务是默认的防火墙配置管理工具
它拥有基于 CLI(命令行界面)和基于 GUI(图形用户界面)的两种管理方式。
相较于传统的防火墙管理配置工具,firewalld 支持动态更新技术并加入了区域的概念。简单来说,区域就是 firewalld 预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
firewalld 中常见的区域名称(默认为 public)以及相应的策略规则如表 所示。public是默认的。
直接规则
就是将指定网段或某一具体ip加入到同一区域,从而达到批量化限制用户行为!
1)直接只用iptables或firewalld语句规则写入管理区域
2)执行优先级最高。优先级:直接规则→富规则→区域规则
3)不会iptables语句的用户不建议直接使用直连接口
4)适用于服务或应用程序
firewalld中的直接规则设置的是一种流程性的规则选项,描述在过程中要做那些事。配置难度相对较高,不建议初学者设置。
语句:
firewall-cmd --direct
例1:启用黑名单
firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist
--direct:直接规则
--permanent:将规则写入防火墙配置文件,永久执行【需要使用firewalll-cmd --reload加载配置文件才能生效。如果不使用此选项,所有新添加的规则都是临时使用~】
--add-chain:添加一个新区域
ipv4 raw blacklist:以ipv4地址格式构建区域,读取raw表进行追踪,区域名称为blocklist(黑名单)
例2:将1.0.0.0网段加入到黑名单
firewall-cmd --direct --add-rule ipv4 raw PREROUTING 0 -s 1.0.0.0 -j blacklist
解释:添加直连规则,临时生效(永久生效),添加规则,目标地址转换之前的数据包中:源地址为1.0.0.0网段加入blocklist区域。
例3:设置访问日志记录
firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix "blacklisted"
解释:blacklist 0(区域规则执行前) -m limit --limmit 1/min(执行时间周期为1分钟)
例4:配置黑名单中的动作
firewall-cmd --direct --permnent --add-rule ipv4 raw blacklist 1 -j DROP 重新加载firewalld配置文件:firewall-cmd --reload
富规则(富语言规则)
富语言是firewalld防火墙提供的一种新的规则表达式,在iptables的基础上运行,用户不会iptables也能够学习使用,功能比iptables更多。
通过这种语言可以表达firewalld的基本语法中未涵盖的自定义防火墙规则。
富语言可用于表达基本的允许/拒绝规则,也可以用于配置记录(面向syslog和auditd),以及端口转发、伪装和速率限制。
1)规则排序
语句中描述的时间或表达式比较详细。包括允许、拒绝、配置日志记录、端口转发、地址伪装、速率限制、访问时间等规则(且所在区域的规则的基本排序是相同的)
如果区域中的任何规则与包均不匹配,通常会拒绝该包,但是区域可能具有不同的默认值。例如:可信区域(trusted)将接收任何不匹配的包。此外,在匹配某个记录规则后将继续正常处理包
直接规则是个例外。大部分直接规则将首先进行解析–>然后由 firewalld进行其他处理,但是直接规则语法允许管理员在任何区域中的任何位置插入任何规则。
2)测试和调试
为了便于测试和调试,几乎所有规则都可以与超时一起添加到运行时配置。
当包含超时的规则添到防火墙时,计时器便针对该规则开始倒计时,一旦规则的计时器达到0秒便从运行时配置中删除该规则
在使用远程防火墙时,使用超时会是一种极其有用工具。
特别是在测试更复杂的规则集时,如果规则有效,则管理员可以再次添加该规则。如果规则没有按照预期运行,甚至可能将管理员锁定而
使其无法进入系统,那么规则将被自动删除以允许管理员可以继续工作。
通过在启用规则的 firewall-cmd命令的结尾追加选项-timeout= .可向运行时规则中添加超时
3)理解富规则命令
firewall-cmd有四个选项可以用于处理富规则,且所有选项都可以同常规的--permanent或--zone选项
结合使用(使用方法见下面的参数)
参数: 【如果没有指定区域,则为默认区域】
--add-rich-rule 添加富规则
--remove-rich-rule 删除富规则
--query-rich-rule=‘rule’ 查看单条rich规则 {查询rule是否已添加到指定区域,如果未指定区域,则为默认区域。规则存在,则返回0,否则返回1}
--list-rich-rules 查看rich规则列表
例:
firewall-cmd --zone=区域 --add-rich-rule=‘rule 富规则表达式’ //新建rich规则
# 查询富规则是否添加到指定区域
firewall-cmd --query-rich-rule
#禁止ip访问
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="192.168.2.*" drop'
#允许ip访问
firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address="192.168.2.*" drop'
# 查看富规则列表
firewall-cmd --list-rich-rule
任何已配置的富语言规则都会显示在firewall-cmd --list-all(默认为public区域)和firewall-cmd --list-all-zone的输出结果中
表达式:
source address=源IP地址
destination address=目标IP地址
element:要素,该项只能是以下几种要素类型之一:server name=服务名
port port=端口号
protocol value=协议类型(TCP/UDP)
icmp-block=ICMP数据包类型(request reply)
maskquerade 转换地址与端口号(规则里的IP伪装)
forward-port:将指定的TCP或UDP协议的数据包转发到本机的其他端口,或另一台机器[其他端口]
forward-port port=number_or_range protocol=protocol to-port=number_or_range to-addr=address(目标地址可以是个简单的IP地址)audit:审核,审核类型可以是accept、reject或drop中的一种。但不能在audit命令后指定,因为审核类型将会从规则动作中自动收集(审核不包含自身参数,但可以选择性的增加限制)
accept:通过
drop:丢弃、拒绝(发送端不会受到任何消息)
reject:拒绝并返回消息(发送端将接到一个拒绝消息)log:日志
log prefix=日志文件(前缀文本)
level:级别
limit value=跳数/时间(s,m,h,d)
–timeout=超时时间
富规则实例
例1:
// 在external区域中,为认证报头协议AH使用新的IPV4和IPV6连接
firewall-cmd --zone=external --add-rich-rule=‘rule protocol value=ah accept’
例2:
// 允许ipv4的主机访问ftp服务
firewall-cmd --zone=external --add-rich-rule=‘rule famliy=ipv4 server name=ftp accept’
例3:
// 允许ipv4的1.0.0.0主机访问tftp服务,并每分钟记录一次日志
firewall-cmd --zone=internal --add-rich-rule=‘rule famliy=ipv4 server name=tftp source address=1.0.0.1/24 log limit value=1/m audit accept’
例4:
// 允许ipv4的192.168.1.10主机访问http服务,并每分钟记录一次日志
firewall-cmd --zone=trusted --add-rich-rule=‘rule famliy=ipv4 server name=http source address=192.168.1.10/24 log limit value=1/m audit accept’
例5:
// 为redius服务拒绝来自1:2:3:4:5:6:: 的ipv6连接,日志前缀为DNS,级别为info,每分钟记录三次
firewall-cmd --zone=trusted --add-rich-rule=‘rule famliy=ipv6 server name=redius source address=1:2:3:4:5:6:: log limit value=3/m log prefix=dns
level=info audit drop’
例6:
// 指定端口和ip访问
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.44.101" port protocol="tcp" port="8080" accept"
shell
// 移除规则
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.44.101" port port="8080" protocol="tcp" accept"
实验接着上篇文章的做
配置IP伪装和地址转发
1、在外网服务器上搭建web用于测试
结果:内网测试机可以访问。dmz区域的网站服务器也可以访问。
yum -y install httpd
vim /var/www/html/index.html
systemctl enable httpd
systemctl restart httpd
firefox 127.0.0.1
内网服务器访问:firefox http://···
web服务器访问:firefox http://···
# 原因:
在网关服务器上查看
firewall-cmd --list-all --zone=external
masquerade: yes 地址伪装开启(地址转换默认开启)
解析:
external区域默认启用地址伪装
默认不转发没有经过地址转换的数据包
把本服务器其他区域发来的数据包里的源IP替换成自己区域网卡的IP
# 在网关服务器上配置:
firewall-cmd --remove-masquerade --zone=external
firewall-cmd --zone=external --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 masquerade'
2、配置端口转发实现外网服务器访问dmz的web服务
# 在网关服务器上配置:
firewall-cmd --zone=external --add-forward-port=port=443:proto=tcp:toaddr=192.168.2.10
# 验证:
外网服务器访问
firefox https://···
3、使用富规则实现地址伪装
这才是真正类似于NAT地址转换的操作,iptables只是把ip转换到网关上了(网关不存在就不行)
新申请的公网地址100.1.1.15配置在网关服务器的外网接口ens33上
在网关服务器上配置:
vim /etc/*/*/*ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR0=100.1.1.10
NETMASK=255.255.255.0
ZONE=external
IPADDR1=100.1.1.15
NETMASK=255.255.255.0
ifdown ens33
ifup ens33
ip addr查看
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:f7:c3:83 brd ff:ff:ff:ff:ff:ff
inet 100.1.1.10/8 brd 100.255.255.255 scope global ens33
valid_lft forever preferred_lft forever
inet 100.1.1.15/8 brd 100.255.255.255 scope global secondary ens33
valid_lft forever preferred_lft forever
firewall-cmd --zone=external --add-rich-rule='rule family=ipv4 destination address=100.1.1.15/32 forward-port port=443 protocol=tcp to-addr=192.168.2.10'
解释:将目标地址为100.1.1.15和端口(https:端口为443)的访问请求映射到web服务器地址(192.168.2.10),从而实现访问100.1.1.15达到访问web服务器!!!
扩展:在external区域中添加转换规则【富规则中包含SNAT+DNAT】
方法一:富语言简写语句
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'
You know how to do it, don’t let yourself fall into garbage!