12.Linux下火墙管理方式---iptables

本文深入讲解iptables的工作原理,包括其作为Linux内核IP包过滤系统的重要角色,以及如何通过各种命令进行策略设置、地址伪装和端口转发。涵盖iptables的基本操作、权限策略编写和SNAT/DNAT的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.iptables

(1)什么是iptables?
iptables(网络 过滤器)是一个工作于用户空间的防火墙应用软件,是与3.5版本Linux内核集成的IP信息包过滤系统。如果Linux系统连接到因特网或LAN、服务器或连接LAN和因特网的代理服务器,则该系统有利于在Linux系统上更好地控制IP信息包过滤和防火墙配置。
(2)说明
Iptables是用来设置、维护和检查Linux内核的IP包过滤规则的。它可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配,每条规则指定应当如何处理与之相匹配的包。这被称作'target'(目标),也可以跳向同一个表内的用户定义的链。
-A-append:在所选择的链末添加一条或更多规则。当源(地址)或者/与目的(地址)转换为多个地址时,这条规则会加到所有可能的地址(组合)后面。

-D-delete:从所选链中删除一条或更多规则。这条命令可以有两种方法:可以把被删除规则指定为链中的序号(第一条序号为1),或者指定为要匹配的规则。

-R-replace:从选中的链中取代一条规则。如果源(地址)或者/与目的(地址)被转换为多地址,该命令会失败。规则序号从1开始。

-I-insert:根据给出的规则序号向所选链中插入一条或更多规则。所以,如果规则序号为1,规则会被插入链的头部。这也是不指定规则序号时的默认方式。

-L-list:显示所选链的所有规则。如果没有选择链,所有链将被显示。也可以和z选项一起使用,这时链会被自动列出和归零。精确输出受其它所给参数影响。

-F-flush:清空所选链。这等于把所有规则一个个的删除。

--Z-zero:把所有链的包及字节的计数器清空。它可以和-L配合使用,在清空前察看计数器,请参见前文。

-N-new-chain:根据给出的名称建立一个新的用户定义链。这必须保证没有同名的链存在。

-X-delete-chain:删除指定的用户自定义链。这个链必须没有被引用,如果被引用,在删除之前你必须删除或者替换与之有关的规则。如果没有给出参数,这条命令将试着删除每个非内建的链。

-P-policy:设置链的目标规则。

-E-rename-chain:根据用户给出的名字对指定链进行重命名,这仅仅是修饰,对整个表的结构没有影响。TARGETS参数给出一个合法的目标。只有非用户自定义链可以使用规则,而且内建链和用户自定义链都不能是规则的目标。

-p-protocal[!]protocol:规则或者包检查(待检查包)的协议。指定协议可以是tcp、udp、icmp中的一个或者全部,也可以是数值,代表这些协议中的某一个。当然也可以使用在/etc/protocols中定义的协议名。在协议名前加上"!"表示相反的规则。数字0相当于所有all。Protocolall会匹配所有协议,而且这是缺省时的选项。在和check命令结合时,all可以不被使用。

-s-source[!]address[/mask]:指定源地址,可以是主机名、网络名和清楚的IP地址。mask说明可以是网络掩码或清楚的数字,在网络掩码的左边指定网络掩码左边"1"的个数,因此,mask值为24等于255.255.255.0。在指定地址前加上"!"说明指定了相反的地址段。标志--src是这个选项的简写。

-d--destination[!]address[/mask]:指定目标地址,要获取详细说明请参见-s标志的说明。标志--dst是这个选项的简写。

-j--jumptarget:目标跳转

指定规则的目标;也就是说,如果包匹配应当做什么。目标可以是用户自定义链(不是这条规则所在的),某个会立即决定包的命运的专用内建目标,或者一个扩展(参见下面的EXTENSIONS)。如果规则的这个选项被忽略,那么匹配的过程不会对包产生影响,不过规则的计数器会增加。

-i-in-interface[!][name]:进入的(网络)接口[!][名称],这是包经由该接口接收的可选的入口名称,包通过该接口接收(在链INPUT、FORWORD和PREROUTING中进入的包)。当在接口名前使用"!"说明后,指的是相反的名称。如果接口名后面加上"+",则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略,会假设为"+",那么将匹配任意接口。

-o--out-interface[!][name]:输出接口[名称],这是包经由该接口送出的可选的出口名称,包通过该口输出(在链FORWARD、OUTPUT和POSTROUTING中送出的包)那么将匹配所有任意接口。

-v--verbose:详细输出。这个选项让list命令显示接口地址、规则选项(如果有)和TOS(TypeofService)掩码。包和字节计数器也将被显示,分别用K、M、G(前缀)表示1000、1,000,000和1,000,000,000倍(不过请参看-x标志改变它),对于添加,插入,删除和替换命令,这会使一个或多个规则的相关详细信息被打印。

-n--numeric:数字输出。IP地址和端口会以数字的形式打印。默认情况下,程序试显示主机名、网络名或者服务(只要可用)。

-x-exact:精确扩展数字。显示包和字节计数器的精确值,代替用K,M,G表示的约数。这个选项仅能用于-L命令。

--line-numbers:当列表显示规则时,在每个规则的前面加上行号,与该规则在链中的位置相对应。

--to-destiontion[-][:port-port]:只用于nat表的POSTROUTING链。只能用于动态获取IP(拨号)连接:如果你拥有静态IP地址,你要用SNAT。伪装相当于给包发出时所经过接口的IP地址设置一个映像,当接口关闭连接会终止。这是因为当下一次拨号时未必是相同的接口地址(以后所有建立的连接都将关闭)。它有一个选项:

--to-ports[-port>]:指定使用的源端口范围(不指定的话,目标端口不会被修改。),覆盖默认的SNAT源地址选择(见上面)。这个选项只适用于指定了-ptcp或者-pudp的规则。

--source-port[port[,port]]:如果源端口是其中一个给定端口则匹配

--destination-port[port[,port]]:如果目标端口是其中一个给定端口则匹配

--port[port[,port]]:若源端口和目的端口相等并与某个给定端口相等,则匹配。

state:此模块,当与连接跟踪结合使用时,允许访问包的连接跟踪状态。

--state state:这里state是一个逗号分割的匹配连接状态列表。可能的状态是:INVALID表示包是未知连接,ESTABLISHED表示是双向传送的连接,NEW表示包为新的连接,否则是非双向传送的,而RELATED表示包由新连接开始,但是和一个已存在的连接在一起,如FTP数据传送,或者一个ICMP错误。

SNAT:这个目标只适用于nat表的POSTROUTING链。它规定修改包的源地址(此连接以后所有的包都会被影响),停止对规则的检查,它包含选项:
--to-source[-][:port-port]:源端口中512以下的(端口)会被安置为其他的512以下的端口;512到1024之间的端口会被安置为1024以下的,其他端口会被安置为1024或以上。如果可能,端口不会被修改。

2.实验环境搭建

(1)双网卡主机
eth0:172.25.254.118
eth1:192.168.0.118
(2)测试机1
ip:172.25.254.18
(3)测试机2
ip:192.168.0.218

3.在双网卡主机中搭建iptables

步骤一:安装开启iptable服务,关闭火墙

yum list iptables-services
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld
systemctl start iptables.service
systemctl enable iptables.service

在这里插入图片描述
步骤二:查看iptable策略

iptables -nL
iptables -t filter -nL
iptables -t nat -nL

在这里插入图片描述
在这里插入图片描述

4.iptable(3表5链)的相关设置

参数命令说明
-Liptables -L查看策略,做解析,ip对应出域名(默认为filter表)
-nLiptables -nL查看火墙策略,不做解析(默认为filter表)
-tiptables -t nat -nL指定表
-Fiptables -F清除策略(刷新iptable服务后,原策略会恢复)
service iptables save保存策略
iptables-save保存策略
-Aiptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT添加策略(按顺序添加,第一个符合行为后便不会读取第二个)
-Diptables -D INPUT 2删除指定策略
-Iiptables -t filter -I INPUT -s 172.25.254.120 -p tcp --dport 22 -j REJECT插入(默认插入到第一个)
-Riptables -t filter -R INPUT 1 -s 172.25.254.120 -p tcp --dport 22 -j DROP修改(替换)策略
-s数据来源
-p访问协议
-j行为
-Siptables -S INPUT查看策略
-Ziptables -Z INPUT清除数据包,将数据包状态从ESTABLISHED,RELATED转为NEW
-Niptables -N zxyos新建链
-Eiptables -E zxyos JAY重命名链
-Xiptables -X JAY删除链
-Piptables -P INPUT DROP修改链的默认行为(只能修改为ACCEPT和DROP,先读取链的行为,再读取链下策略的行为)

修改相关设置的操作如下:(双网卡主机中)

iptables -L	/*查看策略,做解析,ip对应出域名*/
iptables -nL	/*查看火墙策略,不做解析*/

在这里插入图片描述
在这里插入图片描述

iptables -t filter -nL	/*查看指定表策略*/
iptables -t nat -nL

在这里插入图片描述
在这里插入图片描述

iptables -F	/*清除策略(刷新iptable服务后,原策略会恢复)*/	
iptables -nL
systemctl restart iptables.service 
iptables -nL

在这里插入图片描述
保存策略(方式一):

iptables -F
service iptables save	/*保存策略,策略被保存到/etc/sysconfig/iptables文件中*/
cat /etc/sysconfig/iptables
systemctl restart iptables.service 
iptables -nL

在这里插入图片描述
保存策略(方式二):

iptables -F
iptables-save > /etc/sysconfig/iptables		/*保存策略*/
systemctl restart iptables.service 
iptables -nL

在这里插入图片描述

iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT		/*添加策略(按顺序添加,第一个符合行为后便不会读取第二个)*/
iptables -nL	
iptables -t filter -A INPUT -s 172.25.254.120 -p tcp --dport 22 -j REJECT
iptables -nL

在这里插入图片描述

iptables -D INPUT 2	/*删除指定策略*/
iptables -nL
iptables -t filter -I INPUT -s 172.25.254.120 -p tcp --dport 22 -j REJECT	/*插入策略(默认插入到第一个)*/
iptables -nL

在这里插入图片描述

iptables -t filter -R INPUT 1 -s 172.25.254.120 -p tcp --dport 22 -j DROP	/*修改(替换)策略*/
iptables -nL

在这里插入图片描述

iptables -S INPUT	/*查看策略*/
iptables -nL	/*查看策略(以表格的形式查看)*/

在这里插入图片描述

iptables -Z INPUT	
iptables -nL	

在这里插入图片描述

iptables -N zxyos	/*新建链*/
iptables -nL
iptables -E zxyos JAY	/*重命名链*/
iptables -nL
iptables -X JAY		/*删除指定链*/		
iptables -nL

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

iptables -P INPUT DROP	/*修改链的默认行为(只能修改为ACCEPT和DROP)*/
iptables -nL
iptables -P INPUT REJECT  
iptables -P INPUT ACCEPT
iptables -nL

在这里插入图片描述
在这里插入图片描述

5.iptable的权限策略编写

e.g.:去电影院看电影,有票就可入场,若中途有事出了观影厅,在电影结束前还可以凭票根再次入场

编写iptable策略,实现以上所述权限,并允squid(3128)、dns(53)、ssh(22)服务:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT		/*建立过状态和建立过状态断开后重新连接的都允许*/
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT		/*通过回环接口的数据都允许,lo---回环接口*/
iptables -A INPUT -m state --state NEW -p tcp --dport 3128 -j ACCEPT		/*squid服务允许*/
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT		/*dns服务允许*/
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT		/*ssh服务允许*/
iptables -A INPUT -j REJECT		/*其他的都拒绝*/
iptables -nL
iptables-save 		/*保存策略*/
iptables-save > /etc/sysconfig/iptables		/*永久保存策略*/

-m state(状态) --state 状态(ESTABLISHED | RELATED | NEW)
在这里插入图片描述
在这里插入图片描述

6.iptables的地址伪装(SNAT)和端口转发(DNAT)

(1)SNAT和DNAT(由连接发起者是谁来区分)

SNAT:源地址转换

内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。

DNAT:目的地址转换

当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。

该实验在nat表中进行,192.168.0.218测试机网关设为192.168.0.118

(2)POSTROUTING—地址伪装(源地址转换)

192.168.0.218虚拟机测试

ping 172.25.254.18		/*ping不通*/

在这里插入图片描述

iptables -t nat -A POSTROUTING  -o eth0 -j SNAT --to-source 172.25.254.118		/*把要从eth0出去的数据的原地址改为172.25.254.118*/
iptables -t nat -nL

192.168.0.218虚拟机测试

ping 172.25.254.18		/*可ping通*/

在这里插入图片描述

(3)PREROUTING—端口转发(目的地址转换)
iptables -t nat -A PREROUTING  -i eth0 -p tcp --dport 22 -j DNAT --to-dest 192.168.0.218:22		/*从eth0的22端口进来的数据,目的地转为 192.168.0.218的22端口*/
iptables -t nat -nL

172.25.254.18测试

ssh root@172.25.254.118
ifconfig eth0	/*ip为 192.168.0.218*/

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值