首页 > 系统相关 >iptables 端口转发设置

iptables 端口转发设置

时间:2023-09-14 11:57:09浏览次数:29  
标签:iptables opt prot target Chain destination 端口 source 转发

一、iptables命令

查看当前iptables的nat表内的规则

-t nat指定看nat表,不用-t默认为filter表

-L 列出表内所有规则,可以指定特定链

-n 使输出中的IP地址和端口以数值的形式显示

-v 输出详细化

--line 显示出每条规则在相应链中的序号

[root@localip hlcc_v11.1104_centos7]# iptables -t nat -nL --line
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8078 to:172.28.17.220:8078

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination   

可以看到NAT表有很多类型的链chain,每个链内有很多规则rule,不同的链代表的转发功能不一样

PREROUTING链的作用是在包刚刚到达防火墙时改变它的目的地址,是从外部连接过来时的转发OUTPUT链改变本地产生的包的目的地址,是本机连接时的转发

POSTROUTING链在包就要离开防火墙之前改变其源地址

想实现端口转发,必须编辑sysctl.conf配置文件开启内核转发,需要管理员权限

vim /etc/sysctl.conf

开启ipv4 forward

net.ipv4.ip_forward = 1

我们想实现端口转发,主要是用nat表的上面三个链实现该功能

-t 指定配置表

-A 链中添加规则

-D 删除链中规则

-C 修改链中规则

-j target 决定符合条件的包到何处去,

target模式很多

一、转发本机端口到本机其他端口

REDIRECT模式是防火墙所在的机子内部转发包或流到另一个端口,也就是所有接收的包只转发给本地端口它只能用在nat表的PREROUTING、OUTPUT链 ,并有一个--to-ports选项

通过PREROUTING链,将外网访问7000端口转发到本机80端口,此时本机访问7000并不进行转发

[root@localip hlcc_v11.1104_centos7]# iptables -t nat -A PREROUTING -p tcp --dport 7000 -j REDIRECT --to-ports 80
[root@localip hlcc_v11.1104_centos7]# iptables -t nat -nL --line
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:7000 redir ports 80

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         

 

二、分流本机端口到本机其他端口

通过PREROUTING链,将172.28.146.0/24网段访问7000端口的包转发到本机80端口,其他网段则正常访问7000端口

[root@localip hlcc_v11.1104_centos7]# iptables -t nat -A PREROUTING -p tcp -s 172.28.146.0/24 --dport 7000 -j REDIRECT --to-ports 80
[root@localip hlcc_v11.1104_centos7]# iptables -t nat -nL --line
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:7000 redir ports 80
2    REDIRECT   tcp  --  172.28.146.0/24      0.0.0.0/0            tcp dpt:7000 redir ports 80

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination  

三、删除指定规则

先使用-nL --line-number参数查看需要删除的规则ID,然后使用iptables -D 删除

[root@localip hlcc_v11.1104_centos7]# iptables -t nat -nL --line-number
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:7000 redir ports 80
2    REDIRECT   tcp  --  172.28.146.0/24      0.0.0.0/0            tcp dpt:7000 redir ports 80

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination 

需要删除NAT表的PREROUTING链里的num为1 的规则:1 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:7000 redir ports 80

[root@localip hlcc_v11.1104_centos7]# iptables -t nat -D  PREROUTING 1

再次查看

[root@localip hlcc_v11.1104_centos7]# iptables -t nat -nL --line-number
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    REDIRECT   tcp  --  172.28.146.0/24      0.0.0.0/0            tcp dpt:7000 redir ports 80

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination  

已删除

四、清空nat规则

[root@hlcc ~]# iptables -t nat -F
[root@hlcc ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (0 references)
target     prot opt source               destination         
[root@hlcc ~]# 

 

五、本机端口转发到后端其他服务器的服务端口

DNAT:目的地址转换,将指定端口的入向过来的数据包里的目标IP和端口设置为后向服务器IP和端口,只能用在nat表的PREROUTING和OUTPUT链,--to-destination选项

SNAT:源地址转换,将目标地址为后向服务器IP的出向数据包里的源地址修改为转发服务器IP地址,后向服务器是不能直接回包到客户端的,所以需要改为转发服务器的P地址。
只能用在nat表的POSTROUTING链,--to-source选项

1、通过PREROUTING链,将访问本机的7000端口入向数据包的目标地址修改为172.28.17.220的8078端口

[root@localip hlcc_v11.1104_centos7]# iptables -t nat -A PREROUTING -p tcp --dport 7000 -j DNAT --to-destination 172.28.17.220:8078
[root@localip hlcc_v11.1104_centos7]# iptables -t nat -nL --line      
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    DNAT       tcp  --  0.0.0.0/0            172.28.17.230        tcp dpt:7000 to:172.28.17.220:8078

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
[root@localip hlcc_v11.1104_centos7]# 

 

2、通过POSTROUTING链,将目标地址为172.28.17.220:8078端口出向数据包的源地址修改为转发服务器IP

[root@localip hlcc_v11.1104_centos7]# iptables -t nat -A POSTROUTING --dst 172.28.17.220 -p tcp --dport 8078 -j SNAT --to-source 172.28.17.230
[root@localip hlcc_v11.1104_centos7]# iptables -t nat -nL --line
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    DNAT       tcp  --  0.0.0.0/0            172.28.17.230        tcp dpt:7000 to:172.28.17.220:80

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    SNAT       tcp  --  0.0.0.0/0            172.28.17.220        tcp dpt:8078 to:172.28.17.230
[root@localip hlcc_v11.1104_centos7]# 

如果不添加POSTROUTING链的SNAT规则,那么在后端服务器上收到的数据包的源IP地址不是转发服务器的地址,而是客户端的地址,这样服务端回包的时候不能回到转发服务器上。

 iptables的端口转发,不会在转发服务器上建立连接,而是客户端和后向服务器端直连,只不过修改数据包的地址而已。在转发服务器上看不到连接。

标签:iptables,opt,prot,target,Chain,destination,端口,source,转发
From: https://www.cnblogs.com/sky-cheng/p/16087283.html

相关文章

  • linux下端口被占用及解除方法
    linux下端口被占用及解除方法1、查看端口是否被占用:netstat-anp|grep8888//查看8888端口的占用情况出现如下情况说明被占用:2、查看占用此端口的进程PIDlsof-i:2001结果如下:3、杀死进程kill-94110#4110为进程ID至此端口已解除占用啦......
  • Nginx同一个端口代理前后端
    server{listen8080;server_namelocalhost;location/{proxy_passhttp://192.168.9.163:8899;}location/api/{rewrite^/api/(.*)$/$1break;proxy_pass......
  • 【Linux】阿里云linux服务器,开放一个端口
    服务器如何开通一个端口您好,1,首先,如果使用的是云服务器ECS,需要在安全组中放行需要开通的端口,操作方法请参见添加安全组规则。如果使用的是轻量应用服务器,需要在防火墙中放行需要开通的端口,操作方法请参见轻量应用服务器防火墙。2,其次,需要在服务器内部确保对应的服务已经启动,并且......
  • tomcat 怎么设置多个端口号
    今天呢傻逼经理为了***难我让我在一个tomcat下面给不同的页面设置不同的端口号按照以往的话开发中一般就是一个项目对应一个端口号然后我当时就有点蒙给他怼过去了mad傻呗经理不懂装懂又爱装逼我去你大爷的然后呢我就当着他的面百度啊为了不让别人帮我还把所有人......
  • iptables简述及命令示例
    iptables:在Linux系统中,iptables不仅仅是一个服务或守护进程,它实际上是内核空间的一部分,用于处理网络包过滤和网络地址转换。这意味着,即使iptables服务没有运行,内核模块仍然会按照当前的iptables规则来处理网络数据包。iptables.service或者iptables-services通常用于......
  • Jmeter ServerAgent 修改端口,linux
     编辑serverAgent.sh,在后面加上  --udp-port端口--tcp-port端口比如  参考:https://blog.csdn.net/lemon_linaa/article/details/89963904......
  • ORACLE Enterprise Manager Database Express(OEM-express)配置端口和启动方法
    1.问题之前一直进不去ORACLEEnterpriseManagerDatabaseExpress,显示的是localhost拒绝了访问,经过查阅知道是没有配置相应端口。2.解决方法转载自:https://blog.csdn.net/wshjx0001/article/details/1224660151.首先查看监听状态,如果监听没有启动需要先启动监听2.在SQLpl......
  • 从开放端口到内网笔记
    起因:同事A扫公司内网,发现某同事,6379端口开放---redis 看了看80端口也开放,还在玩pikachu经过同意开始我的测试,找到pikachu中的文件上传靶场---上传前端js校验禁掉直接上shell连接随便翻了翻几个盘发现这个C++目录有个1.exe2023年3月16日上传的,看来被已经被搞了好久了,还没发现......
  • linux(centos7)安装防火墙firewalld及开放端口相关命令
    安装firewalld防火墙命令:yuminstallfirewalld  安装完成,查看防火墙状态为notrunning,即未运行,输入命令开启:  添加开放端口:   防火墙相关命令: 查看防火墙状态systemctlstatusfirewalld.service 打开防火墙systemctlstartfirewalld.service 关闭......
  • win2003系统system占用80端口的解决办法
    本人一直都是用APMServ在winxp中搭建本地服务器测试网站,但最近换了win2003系统,结果本来在XP正常使用的APMServ启动时死活都提示80端口被占用,换成8080端口,虽然提示服务启动了,但是本地网站却打不开,在cmd中用命令查找时,发现提示system占用了80端口。如何查看端口在win03的cmd命令窗口......