今天我们开始学习iptables防火墙

发布于:2025-09-13 ⋅ 阅读:(17) ⋅ 点赞:(0)

由表(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) 

备份和恢复(如果不备份重启失效)


存放路径

查看路径信息


网站公告

今日签到

点亮在社区的每一天
去签到