文章标题

本文详细介绍了iptables的四大表:Filter、NAT、Mangle和Raw的功能与用途,包括各种内置链的作用,以及常用的iptables命令和参数,如数据包的处理动作、规则链的管理等。

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

iptables

这里写图片描述

iptables具有Filter, NAT, Mangle, Raw四种内建表:

1. Filter

Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:

  • INPUT链 – 处理来自外部的数据
  • OUTPUT链 – 处理向外发送的数据
  • FORWARD链 – 将数据转发到本机的其他网卡设备上

2. NAT

NAT表有三种内建链:

  • PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
  • POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
  • OUTPUT链 – 处理本机产生的数据包。

3. Mangle

Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:

  • PREROUTING
  • OUTPUT
  • FORWARD
  • INPUT
  • POSTROUTING

4. Raw

Raw表用于处理异常,它具有2个内建链:

  • PREROUTING chain
  • OUTPUT chain

规则链名:

  • INPUT链:处理输入数据包。

  • OUTPUT链:处理输出数据包。

  • PORWARD链:处理转发数据包。

  • PREROUTING链:用于目标地址转换(DNAT)。

  • POSTOUTING链:用于源地址转换(SNAT)。

动作:

  • accept:接收数据包。

  • DROP:丢弃数据包。

  • REDIRECT:重定向、映射、透明代理。

  • SNAT:源地址转换。

  • DNAT:目标地址转换。

  • MASQUERADE:IP伪装(NAT),用于ADSL。

  • LOG:日志记录。

#常用参数及命令
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。

shell> iptables-restore < /etc/iptables/empty.rules
shell> iptables --flush
shell> iptables -F

shell> sudo iptables -L -n --line-numbers #显示行号

shell> iptables -D INPUT 1  #根据行号删除

shell> iptables -F # 删除所有

#开启ipv4转发
#临时
shell> echo "1" > /proc/sys/net/ipv4/ip_forward
shell> sysctl net.ipv4.ip_forward=1
#永久
shell> echo 'net.ipv4.ip_forward=1' >>/etc/sysctl.conf

#保存规则
shell> iptables-save > iptables.save

#恢复规则
shell> iptables-restore < iptables.save

NAT

#多端口转发:
#将本地服务器的50000~65535转发至目标IP为1.1.1.1的50000~65535端口
iptables -A PREROUTING -p tcp -m tcp --dport 50000:65535 -j DNAT --to-destination 1.1.1.1
iptables -A POSTROUTING -d 1.1.1.1/32 -p tcp -m tcp --dport 50000:65535 -j SNAT --to-source [本地服务器IP]

#允许转发1.1.1.1的数据包
iptables -I FORWARD -s 1.1.1.1/32 -j ACCEPT
iptables -I FORWARD -d 1.1.1.1/32 -j ACCEPT

#不同端口号转发:
#使用本地服务器的60000端口来转发目标IP为1.1.1.1的50000端口
iptables -A PREROUTING -p tcp -m tcp --dport 60000 -j DNAT --to-destination 1.1.1.1:50000
iptables -A POSTROUTING -d 1.1.1.1/32 -p tcp -m tcp --dport 50000 -j SNAT --to-source [本地服务器IP]

#允许转发1.1.1.1的数据包
iptables -I FORWARD -s 1.1.1.1/32 -j ACCEPT
iptables -I FORWARD -d 1.1.1.1/32 -j ACCEPT


#将外网访问80端口的数据转发到8080端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

#local to local
#将本机访问80端口的转发到本机8080
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j DNAT --to 127.0.0.1:8080
iptables -t nat -A OUTPUT -p tcp -d 192.168.1.128 --dport 80 -j DNAT --to 127.0.0.1:8080

#本地连接指的是在本机上,用 127.0.0.1 或者本机 IP 来访问本机的端口。本地连接的数据包不会通过网卡,而是由内核处理后直接发给本地进程。这种数据包在 iptables 中只经过 OUTPUT 链,而不会经过 PREROUTING 链。所以需要在 OUTPUT 链中进行 DNAT。除了对 127.0.0.1 之外,对本机 IP (即 192.168.1.128) 的访问也属于本地连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值