防火墙介绍
netfilter是规则表的容器,iptables是防火墙的核心模块,负责维护防火墙的规则表,iptables和firewalld都是Linux上管理防火墙规则的工具。
防火墙管理工具切换
在rhel8中默认使用的是firewalld
1.firewalld ----->iptables
yum install iptables-services -y
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld #冻结firewalld(冻结后无法开启firewalld)
systemctl enable --now iptables
2.iptales -----> fiewalld
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl enable --now firewalld
(1)在克隆虚拟机1中安装iptables
(2)进行切换
iptables的使用
/etc/sysconfig/iptables #iptables策略记录文件(每次重启服务后都会读取该文件)
永久保存策略必须修改上述文件
iptales-save > /etc/sysconfig/iptables
或
service iptables save
(1)清除iptables所有规则后重启服务发现规则又出现了
-L:列出所有规则
-F:清除所有规则
(2)将iptables信息导入/etc/sysconfig/iptables文件
我们自己写文件还是比较困难的,因此我们选择导入的方式。
(3)重启服务进行测试
发现生效了
防火墙默认策略
1.默认策略中的5条链
input:输入
output:输出
forward:转发
postrouting:路由之后
prerouting:路由之前
2.默认策略中的3张表
filter:经过本机内核的数据(input,output,forward)
nat:不经过内核的数据(postrouting,prerouting ,input , output)
mangle:当filter和nat表不够用时使用(input,output,forward,postrouting,prerouting)
3.iptables命令
iptables
-t #指定表名称
-n #不做解析(不将主机名转换成ip)
-L #查看
-A #添加策略
-p #协议
--dport #目的地端口
-s #来源
-j #动作
ACCEPT #允许
DROP #丢弃
REJECT #拒绝
SNAT #源地址转换
DNAT #目的地地址转换
-N #新建链
-E #更改链名称
-X #删除链
-D #删除规则
-I #插入规则
-R #更改规则
-P #更改默认规则
命令展示:
(1)-t、-L、-n
(2)-A、-j、REJECT
先建立一个监控
在克隆虚拟机2(192.168.9.101)中连接克隆虚拟机1(192.168.9.100)失败
(3)-D
发现可以在虚拟机2中正常连接虚拟机1
(4)-A、-j、DROP
REJECT是直接拒绝,远程的主机不会再发送数据,而DROP会将数据包丢弃,远程主机会一直尝试发送数据而卡在那儿。
虚拟机2会卡在那儿
(5)-s、ACCEPT
发现ACCEPT这条规则加到了第二条
在虚拟机2中ping虚拟机1失败,发现刚才加上去的ACCEPT这条命令不生效。系统会从上到下读取防火墙策略,当资源和策略达到匹配时就执行这个策略,不会再向下匹配(即使后面有匹配的也不会读了)。
(6)-I插入
INPUT后面可以跟数字,默认是第一条。
在虚拟机2中ping虚拟机1,发现可以ping通。
(7)-p、–dport
只允许虚拟机2连接22端口(ssh)
发现虚拟机2可以ssh连接虚拟机1,但是不能ping通虚拟机1。
(8)-R
注意使用-R是必须在INPUT后面加数字,否则会报错。
(9)-P(只能跟DROP和RECEPT)
先来看一下没有策略时会怎么样,没有策略时会执行默认策略,默认策略是ACCEPT。
虚拟机2可以随意连接虚拟机1
更改默认规则为DROP后
发现虚拟机2无法连接虚拟机1
(10)-N、-E、-X
4.数据包状态
RELATED:建立过连接的
ESTABLISHED:正在连接的
NEW:建立新的连接
实验步骤:
如果我们只允许虚拟机2使用虚拟机1的dns和apache服务该怎么配置呢?
首先应该允许使用自己的回环接口lo,然后设定指定端口允许,最后拒绝所有数据包。
这样出现一个问题,当防火墙策略非常多的时候,由于它会一条条匹配,这样就造成了非常大的网络延迟,我们应该记录数据包的状态,只检测新建立连接的数据包,让已经建立过和正在建立连接的数据包直接通过。
-m:使用扩展
–state:状态
-i:指定入口网卡
! -s 192.168.9.101:除了192.168.9.101以外的主机
在虚拟机2中测试,发现无法ping通(使用ICMP协议),无法使用ssh(使用22端口)。
而在虚拟机3(192.168.9.7)中发现依然不能ping通虚拟机1,但是可以使用ssh连接虚拟机1。
5.nat表中的dnat和snat
虚拟机1:双网卡主机
ip1:192.168.9.100
ip2:172.25.254.2
虚拟机2:192网段
ip:192.168.9.101
gateway:192.168.9.100(虚拟机1ip1)
虚拟机3:172网段
ip:172.25.254.101
gateway:172.25.254.2(虚拟机1ip2)
目的:虚拟机3连接虚拟机2
实验步骤:
(1)清空虚拟机1防火墙策略
(2)在虚拟机3中可以ping通虚拟机1,无法ping通虚拟机2。
(3)查看虚拟机1的内核路由功能是否开启
发现该功能开启
(4)编写虚拟机1的nat表
prerouting指数据进入网卡经过路由之前,postrouting指数据经过路由后从网卡出去之前。
-o:从虚拟机1ens160网卡出去的数据
–to-source:都伪装成虚拟机1ens160网卡的ip
发现虚拟机3可以ping通虚拟机2,也可以ssh连接虚拟机2。
我们在虚拟机2中使用 w -i (w命令查看登录者的信息及他们的行为,-i显示ip地址而不显示主机名)命令,发现虽然是虚拟机3ssh连接的虚拟机2,显示的却是虚拟机1在连接虚拟机2。
(5)在虚拟机2中ping虚拟机3
发现ping不通
(6)修改虚拟机1iptables
从虚拟机1ens160网卡进去的数据都伪装成172.25.254.101。
(7)在虚拟机2中测试
连接虚拟机1时发现连接到的是虚拟机3(172.25.254.101)