• Linux 服务器 Firewalld 防火墙配置端口转发


    0 背景

    业务应用系统的web容器无法更改IP地址,例如临时SSH端口,但是不想修改SSH配置;例如某些服务web服务需要通过公共IP进行统一访问;例如外网访问内网资源等;例如快速调整web容器的端口而不需要更改服务的任何配置等。

    流量转发命令语法为:

    firewalld-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

    1.开启防火墙

    • 初始化防火墙

    systemctl status firewalld

    systemctl enable firewalld

    systemctl restart firewalld

    systemctl status firewalld

    • 查看防火墙配置端口转发之前的状态

    firewall-cmd --state

    firewall-cmd --list-all

    • ipv4 端口转发

    配置系统配置文件开启 ipv4 端口转发

    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

    sysctl -p

    • 开启 IP 伪装

    firewall-cmd --add-masquerade --zone=public --permanent

    firewall-cmd --reload

    2.内网服务器端口转发

    将 server1 10.10.7.1:111 端口 转发 至 server2 10.10.7.2:222端口

    操作命令如下:

    # firewall-cmd --list-all

    # firewall-cmd -add-forward-port=port=111:proto=tcp:toport=222:toaddr=10.10.7.2 --zone=public --permanent

    # firewall-cmd --reload

    # firewall-cmd --list-all

    3. 本地服务器内部端口转发

    将server-1 10.10.7.1:8443端口 转发 至 server-1 10.10.7.1:443

    操作命令如下:

    # firewall-cmd --list-all

    # firewall-cmd --add-forward-port=port=8443:proto=tcp:toport=443 --zone=public --permanent

    # firewall-cmd --reload

    # firewall-cmd --list-all

    执行成功前,原来的浏览器地址是:https://10.10.7.1

    执行成功后,新的浏览器地址是:https://10.10.7.1/accounts/login/ 和https://10.10.7.1:8433/accounts/login/

    有些情况是需要加上URL后缀地址,才能访问,直接访问IP:PORT会显示禁止访问或者403等。

    特殊情况说明

    通过以上方法firewall-cmd配置本地端口转发,例如将server-1 10.10.7.1:8443 端口转发至 server-1 10.10.7.1:443 ,在其他机器使用浏览器或者使用curl或者wget是正常的。但是在本地服务器使用curl或者wget就是提示failed: Connection refused.

    为了解决这个问题,因为firewall-cmd-not-allowing-loopback-redirect,故需要执行这个命令:

    # firewall-cmd --permanent --direct --add-rule ipv4 nat OUTPUT 0 -p tcp -o lo --dport 8443 -j REDIRECT --to-ports 443

    # firewall-cmd --reload

    # firewall-cmd --list-all

     这时候,我们看到规则没有很大变化,但是我们在本地机器执行curl或者wget已经正常显示了。

    参考文章:1445918 – firewalld does not allow port forwarding on localhost

    4. 删除端口转发

    # firewall-cmd --list-all

    移除 将本地端口8443 转发 本地端口80

    # firewall-cmd --remove-forward-port=port=8443:proto=tcp:toport=443--zone=public --permanent

    移除 将本地端口1111 转发10.10.7.2 的222端口

    # firewall-cmd -remove-forward-port=port=111:proto=tcp:toport=222:toaddr=10.10.7.2 --zone=public --permanent

    # firewall-cmd --reload

    # firewall-cmd --list-all

    5. 删除 IP 伪装

    firewall-cmd --list-all

    firewall-cmd --remove-masquerade --zone=public --permanent

    firewall-cmd --reload

    firewall-cmd --list-all

  • 相关阅读:
    (二)centos7案例实战——Nexus3伺服仓库服务器搭建
    golang 獲取 prometheus數據
    在Express框架使用ORM模型访问关系型数据库
    dubbo telnet使用
    JPA 查询的类型
    JAVA问题总结1(框架理解 + 注解问题)
    静态路由配置案例
    Java--SpringBoot使用@Transactional注解添加事务
    y56.第三章 Kubernetes从入门到精通 -- 业务镜像版本升级及回滚(二九)
    自动驾驶算法详解(7):特斯拉Tesla决策规划算法Planning解析上
  • 原文地址:https://blog.csdn.net/qq_29277155/article/details/126126009