使用 iptables 进行端口转发

端口转发用来中转小鸡不错,iptables不仅支持单端口,连端口段也可以转发,同时TCP/UDP均可

特别注明:本地服务器 IP 未必是公网 IP ,像阿里云就是内网 IP ,请用 ipconfig 确认下走流量的网卡 IP 是外网还是内网。

第一步:开启系统的转发功能

vi /etc/sysctl.conf



net.ipv4.ip_forward=0

修改成

net.ipv4.ip_forward=1

编辑后使用命令让配置马上生效

sysctl -p

第二步: iptables 的命令

iptables -t nat -A PREROUTING -p tcp --dport [端口号] -j DNAT --to-destination [目标IP]
iptables -t nat -A PREROUTING -p udp --dport [端口号] -j DNAT --to-destination [目标IP]
iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [端口号] -j SNAT --to-source [本地服务器IP]
iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [端口号] -j SNAT --to-source [本地服务器IP]

第三步:重启 iptables 使配置生效(仅适合Centos6,7默认没有安装iptables防火墙,Debian/Ubuntu 不需要输入这个命令)

service iptables save
service iptables restart

扩展需求
多端口转发修改方案: ( 将本地服务器的 50000~65535 转发至目标 IP 为 1.1.1.1 的 50000~65535 端口 )

iptables -t nat  -A PREROUTING -p tcp -m tcp --dport 50000:65535 -j DNAT --to-destination 1.1.1.1
iptables -t nat  -A PREROUTING -p udp -m udp --dport 50000:65535 -j DNAT --to-destination 1.1.1.1
iptables -t nat  -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 50000:65535 -j SNAT --to-source [本地服务器IP]
iptables -t nat  -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 50000:65535 -j SNAT --to-source [本地服务器IP]

非同端口号修改方案:(使用本地服务器的 60000 端口来转发目标 IP 为 1.1.1.1 的 50000 端口)

iptables -t nat   -A PREROUTING -p tcp -m tcp --dport 60000 -j DNAT --to-destination 1.1.1.1:50000
iptables -t nat   -A PREROUTING -p udp -m udp --dport 60000 -j DNAT --to-destination 1.1.1.1:50000
iptables -t nat   -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 50000 -j SNAT --to-source [本地服务器IP]
iptables -t nat   -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 50000 -j SNAT --to-source [本地服务器IP]

查看 NAT 规则

iptables -t nat -vnL

删除 NAT 规则
通过上面的查看规则命令,查看规则后,确定你要删除的规则的顺序,下面的命令是删除第一个规则。

iptables -t nat -D POSTROUTING 1
iptables -t nat -D PREROUTING 1

保存 iptables 规则并开机自动配置(Debian / Ubuntu)

iptables-save > /etc/iptables-rules-ipv4

最后,我们需要编辑/etc/network/interfaces文件

vi /etc/network/interfaces

在最后加入下面一行

pre-up iptables-restore < /etc/iptables-rules-ipv4

 

 

Debian 使用 iptables-persistent 持久化 iptables 规则

RedHat系列下有比较好用的iptables管理工具,可以像控制服务进程一样来对防火墙进行管理及控制,Debian系发行版默认不开启iptables,当然也没有与之相关的能直接管理的工具了。

正常情况下,我们写入的iptables规则将会在系统重启时消失。即使我们使用iptables-save命令将iptables规则存储到文件,在系统重启后也需要执行iptables-restore操作来恢复原有规则。

当然,你也可以通过在network中的if.post.up.d中配置启动规则来达到开机自动启动iptables的目的。

这里我们有一个更好的iptables持久化方案,让防火墙规则重启后依旧有效。即使用iptables-persistent工具。

首先,安装iptables-persistent

$ sudo apt-get install iptables-persistent

iptables-persistent指令使用语法

  • Ubuntu 14.04

$ /etc/init.d/iptables-persistent

Usage: /etc/init.d/netfilter-persistent {start|restart|reload|force-reload|save|flush}

  • Ubuntu 16.04

$ /etc/init.d/netfilter-persistent

Usage: /etc/init.d/netfilter-persistent {start|restart|reload|force-reload|save|flush}

安装完后即可使用以下命令保存或载入规则:

  • Ubuntu 14.04

$ sudo invoke-rc.d iptables-persistent save

$ sudo invoke-rc.d iptables-persistent reload

或者

$ sudo /etc/init.d/iptables-persistent save

$ sudo /etc/init.d/iptables-persistent reload

  • Ubuntu 16.04

$ sudo netfilter-persistent save

$ sudo netfilter-persistent reload

通过iptables-persistent生成的规则默认将被存储在以下文件中

/etc/iptables/rules.v4

/etc/iptables/rules.v6

一键清除iptables规则

$ cat clear_iptables_rule.sh

#!/bin/bash

iptables -F

iptables -X

iptables -Z

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值