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 表名],如下图:

  Linux IPTABLES端口转发

  然后往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端口. 

  Linux IPTABLES端口转发

  

上一篇:Nginx + Tomcat 动静分离实现负载均衡(转)


下一篇:读书笔记 effective c++ Item 8 不要让异常(exceptions)离开析构函数