Linux下的火墙管理及优化
一、什么是防火墙
从功能角度来讲
防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进
从功能实现角度来讲
火墙是系统内核上的一个模块netfilter(数据包过滤机制),通过netfiler来管理kernelspace中的策略
二、什么是内核空间的iptables
lptables 本质上是包含了5个规则表,而规则表则包含了一些列的报文的匹配规则以及操作目标
1、raw表:
第一优先级的表,设置raw表规则后,不会对数据包进行链接跟踪和NAT转换,使用于PREROUTING和OUTPUT链,对应的动作为NOTRACK。
2、mangle表:
第二优先级的表,根据规则,修改数据包的TOS(TypeOfService,服务类型)、TTL(TimeToLive,生存周期)以及设置Mark标记,以实现Qos以及策略路由等:
3、nat表:
第三优先级的表,网络地址转换表,用于修改源和目的的地址,分SNAT(源目的地址转换)和DNAT(目的地址转换)。
4、filter表:
第四优先级的表,用于控制到达链(forward链、input链、output链)上的数据包,是放行(accepte)、丢弃(drop)或者拒绝(reject)。
5、security表:
最不常用的表(通常,我们说iptables只有4张表,security表是新加入的特性),用于在数据包上应用SELinux。
三iptables服务
iptables服务是用户管理内核空间的iptables的管理工具,通过iptables书写内核空间的iptables策略iptables的规则是至上而下的读取方式,遇到与数据包信息匹配的规则后直接采用iptables的规则默认保存在内存中,如果需要永久保存需要把策略以字符的形式保存到/etc/sysconfig/iptables中。
3.1.iptables命令的语法格式及常用参数
语法格式
iptables-t表名<-A/I/D/R>规则链名[规则号]<-i/o 网卡名>-p协议名<-s 源IP/源子网>--sport 源端口<-d 目标IP/目标子网>--dport 目标端口 -j动作
常用参数
-t 对指定的表进行操作,table必须是raw,nat,filter,mangle中的一个。默认是filter表。
-p 指定要匹配的数据包协议类型
-d 地址格式同上,但这里指定地址为目的地址,按此进行过滤
-o 指定数据包出去的网络接口。只对OUTPUT,FORWARDPOSTROUTING 三个链起作用
-i 指定数据包的来自来自网络接口,比如最常见的 eth0。注意:它只对INPUT,FORWARD,PREROUTING这三个链起作用。如果没有指定此选项,说明可以来自任何一个网络接口。同前面类似,"!"表示取反
-L 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则
-A 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定
-D -delete chain rule-specification -D, --delete chain rulenum:在指定的链 chain 中删除 一个或多个指定规则
-R num Replays替换/修改第几条规则
-P 为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的
-F 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则
实例
1、查看当前iptables策略
iptables -nL
iptables -t nat -nL
2、清空指定表中的策略
iptables -t filter -F
3、允许本机回环接口访问
iptables -A INPUT -i 10 -j ACCEPT
4、允许本机sshd的22端口被访问
iptables -A INPUT -p tcp -d port 22 -j ACCEPT
5、仅允许172.25.254.100访问22端口
iptables -A INPUT -p tcp –d port 22 ! -s 172.25.254.100 -j REJECT
6、删除filter表中INPUT链的第三条策略
iptables -D INPUT 3
7、修改filter表中INPUT链的第2条策略
Iptables -R INPUT 2 -p tcp –d port 80 -j ACCEPT
8、删除EASYLEE链
iptables -X EASYLEE
9、snat地址转换
iptables -t nat-A POSTROUTING -o eth0 SNAT --to-source172.25.254.200
10、dnat地址转换
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest192.168.0.200
四、实现过程
配置好三台主机的ip,一个双网卡,一个仅主机,一个nat
dnf install iptables-services -y
关闭firewalld服务并锁定关闭
systemctl disable --now firewalld
systemctl mask firewalld
开启iptables服务
systemctl enable --now iptables.service
这里拿snat地址转换示例,snat的功能:将内部网络(私有网络)发起的连接中的源 IP地址转换 为一个在外部网络(公有网络)中可以 路由 的IP地址
- 开启内核
- 编写nat的iptables策略
- 另一台测试
连接成功
再拿dnat的地址转换示例
dnat的功能:将外部请求的目标IP地址转换为内部网络中的特定IP地址
在服务端上输入下列代码是dnat生效
再测试机上
五、.firewalld
一、firewalld服务管理方式与iptables的管理方式区别
iptables是基于Linux内核的Netfilter子系统构建的,直接操作Netfilter;而firewalld则通过libnftables库与Netfilter交互,提供了一个更高的抽象层
iptables使用基于表的规则集,包括filter、nat、mangle、raw及securty五个表;firewalld采用基于区域的规则集,包括default、public、internal、external和dmz五个区域
iptables的配置较为复杂,需要用户掌握特定的命令行语法:firewalld提供了更直观和灵活的配置方式,支持命令行和图形界面
二、firewalld域介绍
区域 | 默认规则策略 |
阻塞区域(block) | 拒绝流入的流量,除非与流出的流量相关 |
工作区域(work) | 拒绝流入的流量,除非与流出的流量相关 |
家庭区域(home) | 拒绝流入的流量,除非与流出的流量相关 |
公共区域(public) | 拒绝流入的流量,除非与流出的流量相关 |
信任区域 (trusted) | 允许所有的数据包。 |
丢弃区域(drop) | 拒绝流入的流量,除非与流出的流量相关 |
内部区域 (internal) | 等同于home区域 |
外部区域 (external) | 外部区域 (external) |
firewalld中默认使用的域是pubic
三、firewall-cmd命令详解
这里给大家讲一些常用命令和参数
参数 | |
--get-default-zone --set-default-zone=<区域名称> | 查询默认的区域名称 设置默认的区域,使其永久生效 |
--get-services --get-active-zones | 显示预先定义的服务 显示当前正在使用的区域与网卡名称 |
--add-source= | 将源自此IP或子网的流量导向指定的区域 |
--remove-source= | 不再将源自此IP或子网的流量导向某个指定区域 |
--list-all --list-all-zones | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 显示所有区域的网卡配置参数、资源、端口以及服务等信息 |
--add-service=<服务名> --add-port=<端口号/协议> | 设置默认区域允许该服务的流量 设置默认区域允许该端口的流量 |
--remove-service=<服务名> --remove-port=<端口号/协议> | 设置默认区域不再允许该服务的流量 设置默认区域不再允许该端口的流量 |
--reload | 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
--panic-on --panic-off | 开启应急状况模式 关闭应急状况模式 |
3.2 实施方式
关闭iptables服务开启firewalld服务,并且更改firewalld的配置文件,将其改成iptables
systemctl disable --now iptables.service
systemctl mask iptables.service
systemctl unmask firewalld.service
systemctl enable firewalld.service
vim /etc/firewalld/firewalld.conf
火墙信息查看
管理ip
firewall-cmd --add-source 172.25.254.101 --zone=trusted
此时172.25.254.101可以访问双网卡这台主机
192.168.0.100访问不了
管理网卡
此时172.25.254.101可以访问双网卡这台主机
192.168.0.100访问不了
四、firewalld的高级规则
4、1 地址伪装
101这台机子本来无法访问,经过地址伪装后就可以访问
重启服务失效
4.2端口转发
用101主机登陆200主机。查看IP发现是192的
本次实验共三台主机一台为双网卡主机,有nat模式与仅主机模式的两块网卡
ip为:172.25.254.200与192.168.0.200
一台网卡为nat模式的主机
ip为:172.25.254.101
一台网卡为仅主机模式的主机
ip为:192.168.0.100