|
我重新认识了iptables
转发 POSTROUTING PREROUTING 这3个地方的功能不一样
转发就是单纯的路由
POSTROUTING主要是地址伪装,也就是SNAT
PREROUTING主要是端口映射或者说叫DNAT
这3个东西可以结合使用
单独开转发仅仅只是让防火墙能转发数据包,要实现其他功能还需要其他操作
开转发,同时服务器设置了网关,然后防火墙设置PREROUTING端口映射就可以实现IP透传 这个时候服务器是不能上网的
开转发,同时服务器设置了网关,然后防火墙设置单接口POSTROUTING 就能让服务器访问外网 之后如果防火墙设置PREROUTING端口映射也能实现IP透传
开转发,服务器不设置网关,然后防火墙设置全接口POSTROUTING 然后防火墙设置PREROUTING端口映射 就可以让外面的客户端访问服务器被映射的端口,这个时候服务器看到的IP就是防火墙的LAN口IP(这就是我以前一直使用的方式,其实这个方式是错误的)
FORWARD在PREROUTING之后
数据包进来先匹配PREROUTING,如果匹配了就进入FORWARD如果不匹配就进入INPUT
最后放上iptables开启IP透传的教程
第一步:开启转发
第二步:PREROUTING开启端口映射
第三步:内部服务器的网关指向防火墙的LAN口
仅仅这3步就可以了
效果就是服务器通过netstat -ant命令看到的IP是客户端的真实IP
如果这个时候还需要服务器能上网,则只需要把服务器的IP增加到POSTROUTING里面
比如iptables -t nat -A POSTROUTING -s 192.168.0.2 -o eth0 -j MASQUERADE
甚至如果软路由单网卡多IP
默认IP被DDOS黑洞了,这个时候可以手动修改SNAT 让内部的服务器走另外一个IP出去(这个情况适用于内部的服务器需要访问外网的情况,比如我的乐趣魔力就必须访问外网才可以正常使用)
比如iptables -t nat -R POSTROUTING 1 -s 192.168.80.31 -o eth1 -j SNAT --to-source 192.168.11.218
#这个就是我本地虚拟机测试,路由器有217和218这2个IP,默认是217,218是我后来手动添加的,模拟临时购买IP
我手动把217模拟黑洞了,然后内部的客户端就无法上网了,然后我手动指定了SNAT的ip 内部的客户端就可以上网了
下面这张图是数据包的路径
https://baike.baidu.com/pic/IPTA ... f7de3fe9925bd317dcd
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -j DROP
iptables -t filter -I INPUT 3 -p tcp --dport 3389 -j ACCEPT
iptables -t filter -I INPUT 3 -p tcp --dport 3306 -j ACCEPT
iptables -t filter -A FORWARD -j DROP
iptables -t filter -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -t filter -A OUTPUT -j DROP
iptables -t filter -I OUTPUT 3 -p tcp --sport 3389 -j ACCEPT
iptables -t filter -I OUTPUT 3 -p tcp --sport 3306 -j ACCEPT
上面这几条的配置意思是
只能访问服务器的80和22端口
中间这个转发是服务器作为路由器使用的时候才有用,不过以防万一全部阻止
服务器只有80和22端口可以与外部通信
写玩以后要保存
service iptables save
(如果不保存重启服务器或者重启计算机以后规则就没有了)
实测这样写没有问题,网站访问正常,WinSCP连接正常
iptables -F INPUT(不指定表名时默认清空filter表)
iptables -t nat -F (清空nat 表)
iptables -t raw -X (清空raw表中用户自定义的所有规则链)
允许防火墙ping通过
iptables -t filter -I INPUT 1 -p icmp -j ACCEPT
iptables -t filter -I OUTPUT 1 -p icmp -j ACCEPT
把这两条规则插入进去成为第一条规则
查看编号
iptables -nL --line-number
删除第10行
iptables -D INPUT 10
iptables -I 3 INPUT -i lo0 -j ACCEPT会出现在INPUT链中第三条规则
|
|