Linux IPTABLES端口转发
之前在Linux上用普通用户部署了一个Tomcat,然后将其server.xml中的端口配置为80端口,用普通用户运行就提示绑定端口失败(permission denied),google了一下,原来是Linux下,1024端口以下的,普通用户是无法使用的,只能通过Root用户来使用,这就造成一个问题,浏览器默认请求的端口是80,所以不需要用户在浏览器地址栏的地址后面加入端口,要是你自己的tomcat是8080端口,为了能正常访问,用户就不得不在地址后面添加上8080,这样就不行了,有什么方法可以解决这件事么?
用Linux的iptables来进行端口的转发,首先粗略来了解一下ipatbels:
iptables是Linux系统上的IP 信息包过滤系统,你就把它看成一个防火墙,可以对进出的数据包进行过滤。
iptabels以供有四张表和五条链:
4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。
filter:一般的过滤功能
nat:用于nat功能(端口映射,地址映射等)
mangle:用于对特定数据包的修改
raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能
5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。
PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARDING:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外转发
POSTROUTIONG:发送到网卡接口之前。
然后查看iptables中已有的规则:
iptables -L [-t 表名],如下图:
然后往nat表中添加一个端口转发,将80端口转发到8080端口之上
iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-port 8080
-t nat : 指出我要操作什么表.(不写就表示filter.默认是filter)
-A PREROUTING : A 添加的意思.表示我要在PREROUTING 中添加一个规则
–dport 80 : 如果请求80端口.
–to-port 8080 : 那么就转到8080端口.