0

几个 iptables 常用的配置

Posted by 撒得一地 on 2016年8月9日 in Linux笔记

虽然 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

上一篇:

下一篇:

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 + 3 = ?

网站地图|XML地图

Copyright © 2015-2017 技术拉近你我! All rights reserved.
闽ICP备15015576号-1,版权所有©psz.