CentOS 用iptables做NAT服务
时间:2014-04-03 16:05 来源:linux.it.net.cn 作者:IT网
用一个CentOS虚拟机提供NAT服务。
参照了howtoforge上面的文章,发现本身并不复杂,但是几个基本概念必须搞清,不然看的就不太明白。
最重要的也就是这么两步:
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT
这里eth0是外部接口,eth1是内部接口。
然后把/proc/sys/net/ipv4/ip_forward内容改为1 就可以了。 这之前当然还要查一查iptables的规则,看看是否有和NAT规则冲突的,就把它改掉。
howtoforge网站没有对此做什么解释,所以设置好了也只是知其然不知其所以然。 后来查了文档,原来iptables规则中有三个表, filter,nat,mangle, 默认都是在filter表上操作,所以平时一般的规则修改不怎么用到nat表和mangle 表,也不会用到 -- table 选项,难怪一开始看到howtoforge的文章会感到没有头绪。
在Linux nat中,被转发的包实际经过了以下几个 表-链 的组合
1. mangle -- PREROUTING
2. nat -- PREROUTING ;用于外部访问内部网站的NAT
3. mangle -- FORWARD
4. filter -- FORWARD
5. mangle -- POSTROUTING
6. nat - POSTROUTING ;用于内部浏览外部的NAT
一般来说都是在 filter -- FORWARD 和 nat -- POSTROUTING 这两个组合中作规则的设定。所以在这里设置用eth0作为出口路由,对于进入eth1的转发包一律允许,当然也可以结合具体情况做一些过滤。
centOS本身的system-config-securitylevel工具不适合做这种配置,修改了nat以后也不要再用这个工具来检查配置了,好像是无法识别的。
filter 表里面有3个chain,FORWARD, INPUT 和 OUTPUT。
iptables的常见选项:
-p 指定协议 -s 指定源地址 -d 指定目的地址 -i 指定入接口 -o 指定出接口
-p 指定协议后,可接着用 --sport --dport 指定端口号 --syn 表示syn 包后面可接 -m limit --limit n/s 来限定每秒SYN数量。
扩展选项:
-m multiport --sports
端口号同逗号分隔,不一定是连续的
-m mulitport --dports
-m multiport --ports
-m --state 状态可以是 ESTABLISHED NEW RELATED INVALID 等
如果要让外部访问内部的某一个服务器如Web 服务器:
iptables -t nat -A PREROUTING -p tcp -i eth0 -d 外部ip --dport 80 --sport 1024:65535 -j DNAT --to 10.1.1.x:8080
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 10.1.1.x --dport 8080 --sport 1024:65535 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
(责任编辑:IT)
用一个CentOS虚拟机提供NAT服务。 参照了howtoforge上面的文章,发现本身并不复杂,但是几个基本概念必须搞清,不然看的就不太明白。 最重要的也就是这么两步: iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE iptables --append FORWARD --in-interface eth1 -j ACCEPT 这里eth0是外部接口,eth1是内部接口。 然后把/proc/sys/net/ipv4/ip_forward内容改为1 就可以了。 这之前当然还要查一查iptables的规则,看看是否有和NAT规则冲突的,就把它改掉。 howtoforge网站没有对此做什么解释,所以设置好了也只是知其然不知其所以然。 后来查了文档,原来iptables规则中有三个表, filter,nat,mangle, 默认都是在filter表上操作,所以平时一般的规则修改不怎么用到nat表和mangle 表,也不会用到 -- table 选项,难怪一开始看到howtoforge的文章会感到没有头绪。 在Linux nat中,被转发的包实际经过了以下几个 表-链 的组合 1. mangle -- PREROUTING 2. nat -- PREROUTING ;用于外部访问内部网站的NAT 3. mangle -- FORWARD 4. filter -- FORWARD 5. mangle -- POSTROUTING 6. nat - POSTROUTING ;用于内部浏览外部的NAT 一般来说都是在 filter -- FORWARD 和 nat -- POSTROUTING 这两个组合中作规则的设定。所以在这里设置用eth0作为出口路由,对于进入eth1的转发包一律允许,当然也可以结合具体情况做一些过滤。 centOS本身的system-config-securitylevel工具不适合做这种配置,修改了nat以后也不要再用这个工具来检查配置了,好像是无法识别的。 filter 表里面有3个chain,FORWARD, INPUT 和 OUTPUT。 iptables的常见选项: -p 指定协议 -s 指定源地址 -d 指定目的地址 -i 指定入接口 -o 指定出接口 -p 指定协议后,可接着用 --sport --dport 指定端口号 --syn 表示syn 包后面可接 -m limit --limit n/s 来限定每秒SYN数量。 扩展选项: -m multiport --sports 端口号同逗号分隔,不一定是连续的 -m mulitport --dports
-m multiport --ports
-m --state 状态可以是 ESTABLISHED NEW RELATED INVALID 等 如果要让外部访问内部的某一个服务器如Web 服务器: iptables -t nat -A PREROUTING -p tcp -i eth0 -d 外部ip --dport 80 --sport 1024:65535 -j DNAT --to 10.1.1.x:8080 iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 10.1.1.x --dport 8080 --sport 1024:65535 -m state --state NEW -j ACCEPT iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT (责任编辑:IT) |