IPtables端口转发的设置:
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
然后使用iptables -t nat -L命令可以查看到在nat的表中的PREROUTING链生成了DNAT转发的规则。
命令解释:
-t:在后面添加对应的表。iptables一般的表有net、row、mangle、filter表,一般不加-t命令就是默认为filter表。
-A:表示追加写,后面接规则链(INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING )
-p:(protocol)通信使用到协议
-d:目标地址
--dport:目标端口,注意是两个小斜杠
-j: 添加对应的动作,DNAT表示端口转发的动作(此时需要对应nat表)
如果不加nat表的就会显示如下的错误: iptables: No chain/target/match by that name
在默认的filter表中是没有对应DNAT的动作的。
加上nat表后,查看是否设置成功:
端口转发的功能:
端口转发是用于外网访问内部局域网是的安全保护措施,通过路由器将局域网的内的某一个端口映射到外网上,可以使外网访通过这个开放的端口访问到内网的某一主机或者服务器,同时避免局域网内的主机遭受到攻击。
端口号的定义:
数据链路和IP中的地址,分别指的是MAC地址和IP地址。前者用来识别同一链路中不同的计算机,后者用来识别TCP/IP网络中互联的主机和路由器。在传输层中也类似的概念,那就是端口号。端口号用来识别同一台计算机中进行通信的不同应用程序。所以也可以叫它程序地址。在tcp/ip通信中,通常使用5个信息来识别一个通信。分别就是“源IP地址”、“目标IP地址”、“协议号”、“源端口号”、“目标端口号”、“源端口号”。只要其中某一项不同,则被认为是其他的通信。
端口号的确定:
在实际进行通信的时候,要事先确定端口号。确定端口号的方法分为两种:标准既定的端口号、时序分配法
标准既定的端口号:
这种方法是静态的方法。在HTTP、TELNET、FTP等广为使用的应用协议中所使用的的端口号就是固定的。这些端口号也被称为知名的端口号。知名端口号一般由0到1023的数字分配而成。应用程序应该避免使用知名的端口号进行既定目的之外的通信,以免产生冲突。除开这些端口,还有一些端口也被正式的注册。这些端口号就分布在1024到49151的数字之间。
时序分配法:
这种方法是动态的分配法。此时,服务端有必要确定监听端口号,但是接受服务的客户端没有必要确定端口号。
在这种方法下,客户端应用程序可以完全不用自己设置端口号,而全权交给操作系统进行分配。操作系统可以为每个应用程序分配互不冲突的端口号。根据这种动态分配的端口号机制,即使是同一个客户端程序发起的多个TCP连接,识别这些通信连接的5部分数字也不会全部相同。动态分配的端口号范围在49152到65535之间。
端口号与协议:
端口号由其使用的传输层协议决定。因此,不同的传输协议可以使用相同的端口号。
数据到达IP层后,会首先检查IP首部中的协议号,在传给相应协议的模块。如果是TCP则传给TCP模块、如果是UCP则传给UCP模块去做端口号的处理。即使是统一端口号,由于传输协议是各自独立进行处理,因此相互之间不会受到影响。
此外,知名的端口与传输层的协议并无关系,只要端口一致都将分配同一种程序进行处理。例如,53号端口在TCP与UDP中都用于DNS服务,而80端口用于HTTP通信。从目前来看,由于HTTP通信必须使用TCP,因此UDP的80端口并未投入使用。