Linux下iptables可以用来做端口转发
iptabels原理
Iptables服务不是真正的防火墙,只是用来定义防火墙规则功能的"防火墙管理工具",将定义好的规则交由内核中的netfilter即网络过滤器来读取,从而真正实现防火墙功能。
iptables抵挡封包的方式:
拒绝让 Internet 的封包进入 Linux 主机的某些 port
拒绝让某些来源 IP 的封包进入
拒绝让带有某些特殊标志( flag )的封包进入
分析硬件地址(MAC)来提供服务
iptables命令中设置数据过滤或处理数据包的策略叫做规则,将多个规则合成一个链,叫规则链。规则链则依据处理数据包的位置不同分类:
PREROUTING: 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
INPUT:处理入站的数据包
OUTPUT:处理出站的数据包
FORWARD:处理转发的数据包
POSTROUTING: 在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
iptables中的规则表是用于容纳规则链,规则表默认是允许状态的,那么规则链就是设置被禁止的规则,而反之如果规则表是禁止状态的,那么规则链就是设置被允许的规则。
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记(较少使用)
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
规则表的先后顺序:raw→mangle→nat→filter
规则链的先后顺序:
入站顺序:PREROUTING→INPUT
出站顺序:OUTPUT→POSTROUTING
转发顺序:PREROUTING→FORWARD→POSTROUTING
内建表与链的关系流程图(去掉了mangle表):
另外注意:
1.没有指定规则表则默认指filter表。
2.不指定规则链则指表内所有的规则链。
3.在规则链中匹配规则时会依次检查,匹配即停止(LOG规则例外),若没匹配项则按链的默认状态处理。
iptables命令中则常见的控制类型有:
ACCEPT:允许通过.
LOG:记录日志信息,然后传给下一条规则继续匹配.
REJECT:拒绝通过,必要时会给出提示.
DROP:直接丢弃,不给出任何回应.
使用iptabels进行转发
示例:
将本机的8080端口转发至其他主机,主机IP:192.168.1.12,目标主机IP和端口:192.168.1.13:8088,规则如下;
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.1.13:8088
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 8088 -j SNAT --to-source 192.168.1.12
echo 1 > /proc/sys/net/ipv4/ip_forward
#开启iptables forward转发功能。
tcp范围端口映射:
iptables -t nat -A PREROUTING -p tcp --dport 2000:2500 -j DNAT --to 192.168.66.2:2000-2500
远程转发:
iptables -A FORWARD -p tcp --dport 80 -j ACCEPTiptables -A FORWARD -p tcp --sport 80 -j ACCEPT
#把访问192.168.0.12的80端口转发到192.168.0.13的80端口
iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.0.12 --dport 80 -j DNAT --to-destination 192.168.0.13:80
#配置地址伪装
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 80 -j MASQUERADE
本地转发:
访问本机的8080端口转发到本地的80端口
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80
清空转发规则(nat表)
iptables -F -t nat |