firewalld 转发端口并且可以限制IP

本文介绍了如何在CentOS7.6系统中使用firewalld防火墙进行端口转发,以实现远程访问另一台服务器,并详细说明了如何设置IP限制,仅允许特定IP或IP段进行访问。步骤包括开启IP伪装、添加和删除端口转发规则以及重启防火墙。同时提供了两种不同的端口转发规则添加方法。

firewalld防火墙转发端口;

系统环境:centOS7.6系统;

原来设置好了端口转发,只是为了远程访问另一台服务器节省IP费用;奈何攻击不断;只好限制IP访问了,只允许某个IP可以远程;也可以是某个ip段;

注意:端口转发不允许添加accept和reject

第一步开启伪装IP:
firewall-cmd --permanent --add-masquerade --不限制IP
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=121.24.166.2 masquerade'          --限制IP,只允许本地某个IP或IP段访问

第二步添加转发规则,访问33389实际上是访问到了192.168.1.18的3389;只是为了远程windows服务器;

方法一
添加端口转发规则
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 forward-port port=33389 protocol=tcp to-port=3389 to-addr=192.168.1.18'

删除端口转发规则【删除时使用,添加时不用执行】
firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 forward-port port=33389 protocol=tcp to-port=3389 to-addr=192.168.1.18'


方法二
添加端口转发规则
firewall-cmd --add-forward-port=port=33389:proto=tcp:toaddr=192.168.1.18:toport=3389 --permanent

删除端口转发规则【删除时使用,添加时不用执行】
firewall-cmd --remove-forward-port=port=33389:proto=tcp:toaddr=192.168.1.18:toport=3389 --permanent


重启防火墙
firewall-cmd --reload

查看
firewall-cmd --list-all

<think>好的,我现在需要帮助用户解决如何使用firewalld配置本地端口转发到另一台服务器的SSH端口22的问题。首先,我得回顾一下用户提供的引用内容,看看有没有相关的配置方法。 用户提到了几个引用,其中引用[3]提到端口转发可以将流量从指定IP端口转发到不同计算机的端口,这正是用户需要的。引用[5]提到了使用rich rule配置DNAT,将50022端口转发到目标IP的22端口,这应该就是关键步骤了。另外,引用[4]提到需要开启IP伪装端口转发,所以需要先检查这些设置是否已配置。 首先,我需要确保IP转发已经开启。根据引用[4],需要修改sysctl.conf并启用ip_forward,然后使用firewall-cmd开启masquerade。用户可能已经做过这一步,但最好在步骤中包括这些,避免遗漏。 接下来,配置端口转发的具体命令。根据引用[5],使用rich rule的forward-port参数,指定本机端口、协议和目标地址及端口。例如,用户想将本地的50022转发到192.168.2.10的22端口,命令应该是添加一条富规则,端口为50022,协议tcp,目标地址192.168.2.10,目标端口22。同时需要永久生效并重新加载防火墙。 另外,引用[1]和[2]提到了不同的方法,比如使用--zone=external和--direct规则,但根据用户的问题,使用富规则可能更直接和容易管理,如引用[5]所示。 还需要提醒用户检查SELinux是否允许端口转发,以及防火墙是否开放了转发端口。例如,如果本机50022端口被防火墙阻止,即使转发规则正确,连接也会失败。所以可能需要添加对应的端口开放规则,或者确保所在区域允许该端口。 总结步骤应该是:1. 开启IP转发IP伪装;2. 添加富规则进行端口转发;3. 重新加载防火墙;4. 验证配置和测试连接。同时,给出示例命令,并解释每个参数的作用,比如--permanent表示永久生效,--reload使配置立即应用。 可能还需要注意用户的实际环境,比如目标服务器IP是否正确,本机是否有其他防火墙规则冲突,以及测试时的SSH命令是否正确使用转发后的端口。 最后,生成相关问题,比如如何测试端口转发是否成功,或者如何移除规则,以及处理可能出现的常见错误,如连接被拒绝或超时等。</think>### 使用 firewalld 配置本地端口转发到其他服务器的 SSH 端口 #### **步骤说明** 1. **开启 IP 转发伪装** firewalld 需启用 IP 伪装(masquerade)并确保系统内核允许 IP 转发: ```bash # 启用内核IP转发 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p # 启用firewalldIP伪装 firewall-cmd --add-masquerade --permanent firewall-cmd --reload ``` [^4] 2. **添加端口转发规则** 使用富规则(rich rule)配置 DNAT 转发,例如将本机 `50022` 端口转发至目标服务器 `192.168.2.10` 的 `22` 端口: ```bash firewall-cmd --permanent --zone=public --add-rich-rule=' rule family="ipv4" forward-port port="50022" protocol="tcp" to-port="22" to-addr="192.168.2.10" ' firewall-cmd --reload ``` [^5] 3. **验证规则** ```bash firewall-cmd --list-all --zone=public # 查看是否包含forward-port规则 ``` 4. **测试连接** ```bash ssh -p 50022 user@本机IP # 实际连接到目标服务器的22端口 ``` --- #### **关键参数解释** - `forward-port`: 指定转发端口(`port="50022"`)。 - `protocol="tcp"`: 仅转发 TCP 流量(SSH 使用 TCP)。 - `to-addr` 和 `to-port`: 目标服务器IP端口- `--permanent`: 永久生效,否则重启后规则丢失。 --- #### **注意事项** 1. **SELinux 配置** 若系统启用 SELinux,需确保允许端口转发: ```bash semanage port -a -t ssh_port_t -p tcp 50022 ``` 2. **防火墙区域选择** 规则需添加到接收流量的区域(如 `public` 或 `external`),需根据实际网络环境调整[^3]。 3. **端口开放** 若本机防火墙限制 `50022` 端口,需额外开放: ```bash firewall-cmd --permanent --add-port=50022/tcp firewall-cmd --reload ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

文痞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值