一、简介
iptables的端口转发功能,如nginx的4层代理,可以将外部访问的端口重定向到服务器内部的端口,iptables端口转发功能通常涉及到PREROUTING和nat表。
二、添加端口转发规则
#开启IP转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1
#添加端口转发规则
iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 5555
#允许外部访问服务器5555端口
iptables -I INPUT -p tcp --dport 5555 -j ACCEPT
#保存iptables规则
service iptables save
#查看iptables规则
iptables -t nat -nvL
三、iptables的四表五链
在Linux系统中,iptables定义IP数据包过滤规则。iptables有四个表和五个链组成,这四个表分别是filter、nat、mangle和raw,五个链包括PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING。
链
PREROUTING:预路由,所有数据包进入路由前由此链负责
INPUT:进站,数据包目标是本机由此链负责
OUTPUT:出站,数据包从本机发送由此链负责
FORWORD:转发,数据包的目标地址是其它外部地址由此链负责
POSTROUTING:后路由,所有数据包离开本机时由此链负责
规则
ACCEPT:允许数据包通过
DROP:直接丢弃数据包
REJECT:拒绝数据包通过,必要时给数据发送端一个响应信息
SNAT:源地址转换
DNAT:目标地址转换
REDIRECT:重定向
常用filter表(管理INPUT、FORWARD、OUTPUT三个链)和nat表(管理PREROUTING、OUTPUT、POSTROUTING三个链)。
常见的iptables规则设置示例
0.规则
#添加
iptables -A
#插入
iptables -I
#查看
iptables -L
#查看 带行号
iptables -L --line-number
#删除
iptables -D
#清空规则
iptables -F
1.设置默认策略
#设置默认策略为DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
2.允许特定端口
#添加允许80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#添加允许特定IP访问 如192.168.1.1
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
#添加运行特定IP和端口访问
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 80 -j ACCEPT
3.端口转发
REDIRECT(重定向)
#将进入的80端口的流量转发到本机的8080端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
DNAT(目标网络地址转换
#将进入的数据包从一个IP地址转发到另一个IP地址(通常是本机)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:8080
4.删除规则
#添加允许80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#删除INPUT链上允许80端口访问的规则
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
#或者
#查看当前规则显示行号(增加或删除规则,行号会实时更新)
iptables -L --line-number
#删除指定编号的规则(例如INPUT链上编号2)
iptables -D INPUT 2
5.保存规则
#保存iptables规则
service iptables save