使用iptables实现端口转发

    建站之初,并没有安装诸如nginx之类的WEB服务器,而是直接把servlet容器暴露于公网之上。如果要能正常方便的访问网站,就要让servlet容器直接监听80端口。由于在LINUX下要监听80端口要有ROOT权限,这个我不大喜欢,因为我用Tomcat做为我的servlet容器,这个容器我还经常重启,所以选择使用linux上的iptables做端口路由策略。通过如下命令就可以将80端口的请求转发到8080端口了,这样以来,我就可以用个普通用户来启停Tomcat.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

通过如下命令查看iptables的其他信息:

[root@xxx conf]# iptables -t nat -L -n --line-numbers
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 redir ports 8080 
2    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 redir ports 8080 
Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

    通过如下命令就可以删除上面查询结果中的对应编号。

iptables -t nat -D PREROUTING 1

    如下命令查询iptables的配置

[root@xxx conf]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
Generated by iptables-save v1.4.7 on Fri May 30 09:01:08 2014
*nat
:PREROUTING ACCEPT [9:416]
:POSTROUTING ACCEPT [28:2044]
:OUTPUT ACCEPT [28:2044]
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 
COMMIT
# Completed on Fri May 30 09:01:08 2014
# Generated by iptables-save v1.4.7 on Fri May 30 09:01:08 2014
*filter
:INPUT ACCEPT [982114:228280847]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1070304:475728003]
COMMIT

    如果想添加只有本机可以访问8080端口,执行以下脚本就可以了

iptables -A INPUT -s 127.0.0.1 -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP

    上面脚本的含义是放开本机访问8080端口,关闭其它机器对8080端口的请求