场景:一个路由器上运行了监听着80端口的web。路由器有lan口,有wan口,lan口下设备允许访问该路由器的80端口。而wan口的设备有以下要求:
1.禁止访问路由器80端口
2.允许指定的ip地址(包含 ipv4 ipv6)访问8888端口来进入网页
针对这个需求,以下是我的解决思路:
1.用iptables 禁止来自wan口的数据访问设备80端口;
2.筛选ip,将符合条件的ip地址,且目标是8888端口的数据转发到80端口。
用到的技术分析:
1.端口转发技术, DNAT
2.ipv4 ip条件筛选
3.ipv6 ip条件筛选
技术实现:
1.端口转发
iptables -t nat -I PREROUTING -i br0 -p tcp --dport 8888 -j DNAT --to-destination 192.168.8.1:80
参数含义:
-t nat : 应用在nat表
-I PREROUTING:应用在PREROUTING链
-i br0:指从br0过来的数据
-p tcp:tcp协议的数据
-dport:8888 目标是访问8888端口
-j DNAT:进行网络地址转换
--to-destination 192.168.8.1:80:目标地址改为192.168.8.1:80
2.ipv4 ip 条件过滤
过滤有几种情况,一个是带掩码的过滤,一个是直接指示地址池的过滤
2.1掩码过滤:
iptables -t nat -I PREROUTING -i br0 --source 192.168.8.0/30 -p tcp --dport 8888 -j DNAT --to-destination 192.168.8.1:80
2.2地址池的过滤:
iptables -t nat -I PREROUTING -i br0 -m iprange --src-range 192.168.8.10-192.168.8.120 -p tcp --dport 8888 -j DNAT --to-destination 192.168.8.1:80
3.ipv6 ip条件过滤
ip6tables可以做到过滤,如禁止某个地址段访问某个端口:
ip6tables -t filter -A INPUT -i wan1 -p tcp --source 2400:f000:c000:10::/60 --dport 80 -j DROP
-i wan1: 指定从wan口上来的地址
--source: 制定ipv6地址段
但ipv6的存在,能给地球上每一颗沙子都配上ip地址,因此nat转换实现很艰难,甚至是没有nat表,因此条件可做,nat不行。
看起来此方案行不同,要另寻方法。