一、iptables简介
IPTABLES是与最新的3.5版本Linux内核集成的IP信息包过滤系统。假如Linux系统联接到因特网或LAN、服务器或联接LAN和因特网的代理服务器,则该系统有利于在Linux系统上更好地控制IP信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵守和组成的规则,这种规则存贮在专用的数据包过滤表中,而这种表集成在Linux内核中。在数据包过滤表中,规则被分组置于我们所谓的链(chain)中。而netfilter/iptablesIP数据包过滤系统是一款功能强悍的工具,可用于添加、编辑和移除规则。
(源自百度)
二、背景
一个内部局域网中有多台服务器提供不同的服务linux 端口映射软件,如web服务、FTP服务、ssh、telnet等,通过服务器(或网段、防火墙)联接外部网路,假如外部网路上的主机和局域网设备进行相互通信,则须要中间设备转发。再转述成另一种应用场合,服务器有2个网卡,分别联接内外网。内网难以直接访问设备上的数据、服务。在服务器上实现转发后,则可达到目的。
三、原理
iptables的“四表五链”其实是对用户设置规则的管理,是看待用户设置的规则的两个维度。
表的处理优先级:raw>mangle>nat>filter
表(tables)
链(chains)
INPUT
FORWARD
OUPUT
PREROUTING
POSTROUTING
filter
✔
✔
✔
nat
✔
✔
✔
mangle
✔
✔
✔
✔
✔
raw
✔
✔
要实现转发则数据包通过的流程为:PREROUTING->路由裁定->FORWARD->POSTOUTING这条链路,如右图所示:
所以我们须要PREROUTING、FORWARD、POSTOUTING三条链上操作,路由裁定是内核按照IP地址进行手动判定包的去向,所以我们不用管这个。
四、实现环境搭建示意图:
方案一1、配置(1)个人笔记本A配置
route add -net 198.120.0.0/24 gw 100.100.100.100
(2)个人笔记本B配置注:配置笔记本A访问198.120.0.0/24网关的网段为100.100.100.100
route add -net 100.100.100.0/24 gw 198.120.0.202
(3)arm设备配置注:配置笔记本B访问100.100.100.0/24网关的网段为198.120.0.202
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -A FORWARD -j REJECT
iptables -I FORWARD -i eth3 -s 198.120.0.0/24 -p tcp --dport 12345 -j ACCEPT
iptables -I FORWARD -o eth3 -d 198.120.0.0/24 -p tcp --sport 12345 -j ACCEPT
iptables -I FORWARD -i eth11 -s 100.100.100.0/24 -p tcp --dport 12345 -j ACCEPT
iptables -I FORWARD -o eth11 -d 100.100.100.0/24 -p tcp --sport 12345 -j ACCEPT
注:默认的linux的包转发功能是关掉的,可通过命令cat/proc/sys/net/ipv4/ip_forward查看(0为关掉,1为打开),倘若要让我们的linux实现转发,则须要打开这个转发功能,可以改变它的一个系统参数,使用echo”1″>/proc/sys/net/ipv4/ip_forward命令打开转发功能,仅为临时打开,重启失效。永久生效,更改/etc/sysctl.conf文件,net.ipv4.ip_forward=1,更改配置文件后使用sysctl-p才生效
2、测试截图
测试一:
笔记本A为顾客端
笔记本B为服务端
测试二:
笔记本A为服务端
笔记本B为顾客端
方案二1、配置(1)个人笔记本A配置
笔记本A的网段设置为
100.100.100.100
(2)个人笔记本B配置
笔记本B的网段设置为
198.120.0.202
(3)arm设备配置
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 198.120.0.0/24 -j SNAT --to 100.100.100.100
iptables -t nat -A POSTROUTING -s 100.100.100.0/24 -j SNAT --to 198.120.0.202
iptables -I FORWARD -i eth3 -s 198.120.0.0/24 -p tcp --dport 12345 -j ACCEPT
iptables -I FORWARD -o eth3 -d 198.120.0.0/24 -p tcp --sport 12345 -j ACCEPT
iptables -I FORWARD -i eth11 -s 100.100.100.0/24 -p tcp --dport 12345 -j ACCEPT
iptables -I FORWARD -o eth11 -d 100.100.100.0/24 -p tcp --sport 12345 -j ACCEPT
方案三1、配置(1)个人笔记本A配置
IP地址需与eth11在同一公网,网段可不设置
(2)个人笔记本B配置
IP地址需与eth3在同一公网,网段可不设置
(3)arm设备配置
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -A FORWARD -j REJECT
iptables -t nat -A PREROUTING -d 198.120.0.202 -p tcp --dport 12345 -j DNAT --to 100.100.100.8:5678
iptables -t nat -A PREROUTING -d 100.100.100.100 -p tcp --dport 5678 -j DNAT --to 198.120.0.8:12345
iptables -t nat -I POSTROUTING -j MASQUERADE
iptables -I FORWARD -i eth3 -s 198.120.0.0/24 -p tcp --dport 5678 -j ACCEPT
iptables -I FORWARD -o eth3 -d 198.120.0.0/24 -p tcp --sport 5678 -j ACCEPT
iptables -I FORWARD -i eth11 -s 100.100.100.0/24 -p tcp --dport 12345 -j ACCEPT
iptables -I FORWARD -o eth11 -d 100.100.100.0/24 -p tcp --sport 12345 -j ACCEPT
第一行:默认的linux的包转发功能是关掉的,可通过命令cat/proc/sys/net/ipv4/ip_forward查看(0为关掉,1为打开),假如要让我们的linux实现转发,则须要打开这个转发功能,可以改变它的一个系统参数,使用echo”1″>/proc/sys/net/ipv4/ip_forward命令打开转发功能,仅为临时打开,重启失效。永久生效,更改/etc/sysctl.conf文件(装置可能不存在这个文件),net.ipv4.ip_forward=1,更改配置文件后使用sysctl-p才生效
第二、三行指令:删掉系统中存在的规则
第六行:表明在路由转发前linux vi,将目的地址为198.120.0.202,目的端口为12345的tcp包的目的地址转化为100.100.100.8,端口映射为5678
第七行:表明在路由转发前,将目的地址为100.100.100.100,目的端口为5678的tcp包的目的地址转化为198.120.0.8,端口映射为12345
第八行:表示手动获取当前网卡的IP地址进行源地址转换
第十~十二行:白名单功能,降低容许转发
2、备注
iptables --line -nvL
iptables -D chain num
(本例中chain仅为FORWARDlinux 端口映射软件,num数为上述指令查看filter表中规则对应的num数)
iptables --line -t nat -nvL
iptables -t nat -D chain num
(本例中chain仅为POSTROUTINGlinux vps,num数为上述指令查看nat表中规则的对应num数)