Ubuntu环境下的iptables的端口转发配置实例

Ubuntu环境下的iptables的端口转发配置实例
作者:雨水, 日期:2016-2-19,CSDN博客: http://blog.csdn.net/gobitan

打开转发开关
要让iptables的端口转发生效,首先需要打开转发开关
方法一:临时打开,重启后失效
$sudo su
#echo 1 >/proc/sys/net/ipv4/ip_forward

方法二:永久打开,重启依然有效
编辑/etc/sysctl.conf文件,将net.ipv4.ip_forward=1前面的#注释去掉,保存文件,然后执行sudo sysctl -p使其生效

典型使用场景举例
场景一:目标机的22端口外网没有打开,通过本地端口转发实现通过其他端口访问ssh的22端口
案例:125.69.67.213机器的22端口未对外开放,但开放了3000~4000之间的端口,因此通过3000端口转发到22实现ssh登录
sudo iptables -t nat -A PREROUTING -p tcp -i eth0 -d 125.69.67.213 --dport 3000 -j DNAT --to 125.69.67.213:22
这个属于本机端A端口转发到本机的B端口

场景二:将内网的22端口映射到外网的一个端口,实现SSH直接登录,不用跳转
案例:192.168.2.61为外网机,192.168.2.70为内网机,如果不做映射,需要先登录到61,再登录到70.做如下映射之后,可直接通过外网机的3003登录到内网机
sudo iptables -t nat -A PREROUTING -d 192.168.2.61 -p tcp --dport 3003 -j DNAT --to-destination 192.168.2.70:22
sudo iptables -t nat -A POSTROUTING -d 192.168.2.70 -p tcp --dport 22 -j SNAT --to 192.168.2.61
注:(1) 本例中也可以通过SecureCRT的自动登录实现。

场景三:在外网直接访问内网的MySQL数据库
案例:很多时候数据库在内网机,外网不能直接访问,但做运维的时候可能需要通过图形界面工具直接连上去。做端口映射就可以解决这个问题。例如:将外网机192.168.2.61的3001端口转发到内网机192.168.2.70的MySQL的3306端口
sudo iptables -t nat -A PREROUTING -d 192.168.2.61 -p tcp --dport 3001 -j DNAT --to-destination 192.168.2.70:3306
sudo iptables -t nat -A POSTROUTING -d 192.168.2.70 -p tcp --dport 3306 -j SNAT --to 192.168.2.61

iptables其他常见操作
查看当前iptables的所有规则
sudo iptables -L
或者
sudo iptables-save

iptables规则保存到文件
sudo sh -c "iptables-save > /etc/iptables.rules"

从文件恢复iptables的规则
sudo iptables-restore /etc/iptables.rules

开机启动加载iptables规则
注:配置的规则系统默认重启后就失效,因此做开机启动时加载iptables的配置也有必要。
在/etc/network/interfaces的末尾添加如下一行: 
pre-up iptables-restore < /etc/iptables.rules

如果想在关机的时候自动保存修改过的iptables规则,可添加如下行
post-down iptables-save > /etc/iptables.up.rules

参考资料:



### 如何在Ubuntu系统中监听端口 对于在Ubuntu系统上配置服务以监听特定端口,通常涉及几个方面的工作。如果要设置Docker容器内的Nginx服务器来监听低于1024的特权端口(例如HTTPS的标准端口443),则需要特别注意权限问题[^3]。 当希望应用程序监听任何端口时,在命令行工具`netcat`的帮助下可以简单测试端口监听功能: ```bash nc -lvp 8080 ``` 上述命令会让`netcat`监听本地机器上的8080端口。这里的选项 `-lv` 表示启用监听模式并显示详细信息;而 `p` 后跟指定的端口号表示程序应该绑定到该端口。 然而,对于小于1024的端口来说,默认情况下只有root用户才有权访问这些所谓的“特权”端口。因此,为了使非特权用户运行的服务能够监听此类低编号端口,有几种方法可供选择: - **更改启动参数**:某些应用允许通过配置文件调整其默认行为,从而可以在不改变进程身份的情况下让它们安全地绑定至较低端口。 - **使用iptables重定向流量**:可以通过防火墙规则将高编号端口接收到的数据包转发给目标低编号端口。这使得实际处理请求的应用无需直接占用敏感资源即可实现对外提供服务的目的。 - **提升执行权限**:临时赋予必要的最小化权限范围,比如利用Linux capabilities机制仅授予bind capability而不是完全切换成超级管理员账户操作。 最后一种情况适用于像Docker这样的环境,其中可能确实有必要作为root运行整个容器实例以便简化内部组件之间的交互过程。 #### 使用Python创建简单的HTTP服务器监听端口的例子 下面是一个非常基础的例子,展示了怎样用几行Python代码建立一个简易Web服务器,并让它监听自定义端口: ```python from http.server import SimpleHTTPRequestHandler, HTTPServer def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler, port=8080): server_address = ('', port) httpd = server_class(server_address, handler_class) print(f'Starting httpd server on {port}') httpd.serve_forever() if __name__ == "__main__": from sys import argv if len(argv) == 2: run(port=int(argv[1])) else: run() ``` 此脚本接受可选命令行参数用于设定不同的监听端口,默认会尝试打开8080端口。请注意,如果打算监听<1024的端口,则需确保有足够的权限去这样做,或者考虑采用前面提到的技术手段绕过这一限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gobitan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值