今天我们开始学习iptables防火墙
由表(table)链(chain)规则(rule)三部分组成。
表链关系写规则,或者表的功能和链的功能写规则
表
raw表:对数据包进行状态追踪。规则链:OUTPUT、PREROUTING。
mangle表: 修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、OUTPUT, FORWARD, PREROUTING, POSTROUTING。
nat表:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。(由内向外进行网络通信)包含三个规则链,OUTPUT, PREROUTING, POSTROUTING.
filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD, OUTPUT.
顺序:raw mangle nat filter(数据包进入防火墙顺序)
链
INPUT链:当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。
OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。FORWARD链:当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。
PREROUTING链:在对数据包作路由选择之前,应用此链中的规则,用来修改目的地址,如DNAT.
POSTROUTING链:在对数据包作路由选择之后,应用此链中的规则,用来修改源地址,如SNAT.
操作:
1,rocky9开启三个虚拟机 :pc1 防火墙 pc2
拓展:(将三个虚拟机继续改名)
#修改主机名
hostnamectl set-hostname 主机名
2,充当防火墙的虚拟机(既可以充当防火墙,也有路由的功能)
#打开防火墙,开机自启
[root@firewall ~]# systemctl enable -- now firewalld
[root@firewall ~]# getenforce
Permissive
#开启路由功能
[root@firewall ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #在最下面输入该内容
[root@firewall ~]# sysctl -p
net.ipv4.ip_forward = 1
添加一个网卡,让第一个网卡为vmnet1与pc1,第二个网卡为vmnet2与pc2。
将pc1的网卡为vmnet1,pc2的网卡为vmnet2.
cd /etc/NetworkManger/
vim system-connections/ens33.nmconnection
ipv4
method=manual
address=192.168.100.254/24
nmcli c s
nmcli c add type ethernet con-name ens34 ifname ens34 #把新建的网卡配置上
vim system-connections/ens34.nmconnection
ipv4
method=manual
address=192.168.200.254/24
nmcli c reload (进行重载connection信息)
ip a (看端口地址是否设置好,如果没设置好就用图形化解决)
route -n (看地址信息?)
3.PC1
cd /etc/NetworkManger/
vim system-connections/ens33.nmconnection
ipv4
method=manual
address=192.168.100.1/24,192.168.100.254
route -n (看地址信息?)
4.PC2
cd /etc/NetworkManger/
vim system-connections/ens33.nmconnection
ipv4
method=manual
address=192.168.200.1/24,192.168.200.254
route -n (看地址信息?)
ping 192.168.100.1 (验证确实和pc1通信上。)
5.充当防火墙的虚拟机(既可以充当防火墙,也有路由的功能)
添加个网卡
yum install -y nginx
netstart -anptu |grep nginx
6,PC1
systemctl disable -- now firewalld
iptables -nL (默认查看filter表)
iptables -nL -t filter(查看filter表)
iptables -nL -t nat(查看nat表)
curl 192.168.100.254 (访问192.168.100.254)
7,充当防火墙的虚拟机(既可以充当防火墙,也有路由的功能)
iptables -t filter -A INPUT --dport 80 -s 192.168.100.1 -j DROP (指定filter表,在input中写入规则,规则为当192.168.100.1访问80号端口时为拒绝并不回应。此时用pc1访问就会卡住没有回应)
若为iptables -t filter -A INPUT --dport 80 -s 192.168.100.1 -j REJECT (指定filter表,在input中写入规则,规则为当192.168.100.1访问80号端口时为拒绝但是回应。此时用pc1访问就会接收到回应)
iptables -t filter -D INPUT 1 (删除input中的1号规则)
iptables -t filter -nL --line-number(查看规则的编号)
iptables -t filter -I INPUT 1 -P tcp --dport 80 -s 192.168.100.1 -d 192.168.100.254 -j REJECT ()
iptables -t filter -A INPUT -P ip -j DROP(拒绝所有)
iptables -nL(查看修改后的表所添加的内容)
iptables -F (默认清除filter表)
iptables -F -t filter(清除filter表)
iptables -F -t nat(清除nat表)
通用匹配
协议匹配 -p 协议名
地址匹配 -s 源地址 -d 目的地址(可以是IP、网段、域名、空(代表任何地址))
接口匹配 -i 入站网卡 -o 出站网卡
协议端口匹配
--sport 和 --dsport 必须配合 -p 指定协议使用!!!
icpm匹配
1.充当防火墙的虚拟机
iptables -t filter -A INPUT -P imcp --imcp-type 8 -j DROP (让pc1发送的请求发不出去)
iptables -t filter -A INPUT -P imcp --imcp-type 0 -j DROP (ping pc1机时也发不过去,实现双方都传输不了)
iptables -t filter -A INPUT -P imcp --imcp-type 3 -j DROP (让pc1发送的请求发不出去,并给回应?)
多端口匹配
1.充当防火墙的虚拟机
iptables -t filter -A INPUT 1 -P tcp -m multiport --dport 80,21,22,23 -j DROP (多端口匹配)
IP范围匹配
1.充当防火墙的虚拟机
iptables -t filter -A INPUT 1 -P tcp -m iprange --src-range 192.168.100.1-192.168.100.3 -j DROP
MAC匹配(了解)
状态匹配(了解)
NAT表
1.对三台虚拟机清一下规则
iptables -F
2,将两台pc的网关去掉
cd /etc/NetworkManger/
vim system-connections/ens33.nmconnection
ipv4
method=manual
address=192.168.200.1/24
cd /etc/NetworkManger/
vim system-connections/ens33.nmconnection
ipv4
method=manual
address=192.168.100.1/24
pc2
route -n
route del -net 0/0 gw 192.168.200.254
route -n
防火墙虚拟机(snat地址转换由内向外,有两种方法,第一个是转为固定公网ip,第二个是转为非固定(动态)公网ip。 )
#由内向外转时,在postrouting之后再转。 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens34 -j SNAT --to 192.168.200.254 (和pc1连的地方 ) iptables -t nat -nL(查看表的信息) tcpdump -i any (抓包,此时将pc1对防火墙虚拟机进行ping)
防火墙虚拟机(dnat服务,是指将其内部信息发布到外部,让外部进行联通,由外向内)
iptables -t nat -A PEROTING -i ens34 -d 192.168.200.254 -p tcp -dport 2222 -j DNAT --to-destination 192.168.100.1:2222
pc2
ssh -p 192.168.200.254(远程连接pc1)
防火墙虚拟机(snat地址转换由内向外,有两种方法,第一个是转为固定公网ip,第二个是转为非固定(动态)公网ip。 )
#由内向外转时,在postrouting之后再转。(这个操作为批量创建) iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens34 -j SNAT --to-source 192.168.200.253-192.168.200.254 (和pc1连的地方)(对pc1,和pc2ping,抓包看看) iptables -t nat -nL(查看表的信息) (ifconfig ens34 192.168.200.253) tcpdump -i any (抓包,此时将pc1对防火墙虚拟机进行ping) 报错说明(内部还是一对一的关系) iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens34 -j MASQUERADE (动态公网ip) tcpdump -n -i -vv any (带有端口号的信息)
pc1
ssh 192.168.200.1 (连pc2)
备份和恢复(如果不备份重启失效)
存放路径
查看路径信息