几个 iptables 常用的配置
下一篇: Centos7下防火墙开启 80 443 端口
虽然 iptables 教程、文档看了好多,但是平时用的很少,遇到需求的时候总是各种 google 或者查看现有机器上面的配置。于是决定将常用的配置在下面写下来,以后会不定期更新的。
1、端口映射:本地 80 –> 本地 8080
适用场景: tomcat 降权运行不能监听80端口
(当然,如果机器上面运行这 nginx 或者 apache 之类的 http 服务器,用它们来做反向代理也是不错的选择。)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
不足:访问 localhost:80 的时候就无力了,因为本地转发经过的 iptables 链有点区别,不再细讲。
2、端口映射:本地 222 –> 外部 22
适用场景:本机作为路由或者NAT设备,A网络到B网络的 端口映射
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 222 -j DNAT --to 192.168.3.3:22 # 先建立 DNAT 规则,这里将 eth0 接口上面222端口的数据包,全部转发到 192.168.3.3:22上面 # 数据包来源: -i [收到数据包的网卡] -d [收到数据包的ip地址] 这两种参数都可以接受 iptables -I FORWARD -p tcp -d 192.168.3.3 --dport 22 -j ACCEPT # FORWARD链添加转发条目,接受发往192.168.3.3 22端口的数据包
网络上找到的有的方案中,还配置了一个和 DNAT 对应的 反过来的 SNAT 规则,实际测试并不需要,即可正常工作。
另外,第二条添加转发的条目,我使用的是 -I 参数,也就是插入在 FORWARD 链其他条目前面。因为今天发现,libvirtd,也就是 KVM 虚拟机的 NAT 网络默认阻止了所有连接内部网络的包(当然,状态为 RELATED, ESTABLISHED的允许通过,可以通过 iptables -t filter -L 查看)
3、NAT 数据包转发
适用场景:提供 NAT 服务
假设: eth0 连接外网,eth1连接内网
iptable -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 使用地址伪装,这是一种 NAT 技术,比手动配置 SNAT 更方便 iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT # 外网连入内网的包,只允许通过特定状态的包 iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT # 内网发往外网的数据,全部允许
4、iptables 规则匹配多端口
这只是一个小细节的记录
比如上面第二点端口映射,如果映射了多个端口,最后添加FORWARD 规则的时候可以这样:
iptables -t filter -I FORWARD -p tcp -d 192.168.3.3 -m multiport --dports 22,80,443 -j ACCEPT # 这里加载了 multiport 模块,然后才有 --dports 选项可用
那么问题来了,如何一次设定多个 DNAT 端口映射?如果监听端口和目的端口相同,也许可以直接 –to 目的ip,不加端口的方式;如果端口不同,比如上面那个222–>22,这样好像就不能多个端口同时映射了。(当然,这些都是猜测,哪天无聊的时候可以玩玩)
原文:http://blog.kings-way.info/?p=623
下一篇: Centos7下防火墙开启 80 443 端口