当前位置: 首页 > article >正文

将内部部署系统的端口暴露给外部访问,并且仅允许指定 IP 的服务器访问该端口

以下是实现将内部部署系统的端口暴露给外部访问,并且仅允许指定 IP 的服务器访问该端口的步骤和思路:

一、网络架构调整

  1. 防火墙设置

    • 大多数内部网络都有防火墙,首先需要在防火墙上打开所需的端口,但要限制访问该端口的 IP 地址范围。
    • 对于 Linux 系统,可以使用 iptables 或 firewalld 来配置防火墙规则;对于 Windows 系统,可以使用 Windows 防火墙。
  2. 路由器设置(如果有)

    • 如果内部系统位于一个通过路由器连接到外部网络的网络中,可能需要在路由器上进行端口转发设置。将外部网络的特定端口转发到内部系统的相应端口上,同时配置访问控制列表(ACL)限制仅允许指定 IP 的服务器访问。

二、使用 iptables 的实现步骤(适用于 Linux 系统)

# 假设要开放的端口是 8080,允许访问的外部 IP 是 203.0.113.10

# 首先确保 iptables 服务已启动
sudo systemctl start iptables

# 允许本地回环访问
sudo iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接和相关连接
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 允许指定 IP 访问端口 8080
sudo iptables -A INPUT -p tcp --dport 8080 -s 203.0.113.10 -j ACCEPT

# 拒绝其他 IP 访问端口 8080
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP

# 保存 iptables 规则
sudo iptables-save | sudo tee /etc/iptables/rules.v4

代码解释

  • sudo systemctl start iptables:启动 iptables 服务。
  • sudo iptables -A INPUT -i lo -j ACCEPT:允许本地回环接口的访问,确保本地进程可以正常通信。
  • sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT:允许已建立和相关的连接,以保证正常通信不受影响。
  • sudo iptables -A INPUT -p tcp --dport 8080 -s 203.0.113.10 -j ACCEPT:允许来自 203.0.113.10 的 TCP 连接访问端口 8080。
  • sudo iptables -A INPUT -p tcp --dport 8080 -j DROP:拒绝其他 IP 对端口 8080 的 TCP 连接。
  • sudo iptables-save | sudo tee /etc/iptables/rules.v4:保存 iptables 规则,确保重启后规则仍然有效。

三、使用 firewalld 的实现步骤(适用于 Linux 系统)

# 假设要开放的端口是 8080,允许访问的外部 IP 是 203.0.113.10

# 启动 firewalld 服务
sudo systemctl start firewalld

# 允许指定 IP 访问端口 8080
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" port protocol="tcp" port="8080" accept'

# 重新加载 firewalld 规则
sudo firewall-cmd --reload

代码解释

  • sudo systemctl start firewalld:启动 firewalld 服务。
  • sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" port protocol="tcp" port="8080" accept':添加一条永久的防火墙规则,允许来自 203.0.113.10 的 TCP 连接访问端口 8080。
  • sudo firewall-cmd --reload:重新加载 firewalld 规则,使新添加的规则生效。

四、Windows 防火墙设置

  1. 打开 Windows 防火墙高级设置。
  2. 创建一个新的入站规则:
    • 选择 “端口”,然后指定要开放的端口(例如 8080)。
    • 选择 “允许连接”,并在 “范围” 选项卡中指定允许访问的 IP 地址(例如 203.0.113.10)。

五、网络安全考虑

  1. IP 地址伪装风险:即使配置了 IP 限制,攻击者可能会尝试进行 IP 地址伪装,但这种情况在有状态的防火墙中通常难以成功,因为防火墙会检查连接的状态和源 IP 的合法性。
  2. 日志记录和监控
    • 配置日志记录,以便监控访问该端口的连接,一旦发现异常访问,可以及时采取措施。
    • 可以使用 iptables 的日志记录功能或 syslog 服务,对于 Windows 系统可以使用事件查看器等工具。

六、使用 VPN 或反向代理作为替代方案

  1. VPN 方案
    • 可以设置一个 VPN 服务器,外部服务器通过 VPN 连接到内部网络,然后访问内部系统。这样可以确保所有访问都通过安全的隧道进行,并且可以通过 VPN 服务器的用户认证和授权来控制访问。
  2. 反向代理方案
    • 在公司网络边缘部署一个反向代理服务器(如 Nginx、Apache),配置反向代理将外部请求转发到内部系统的端口,同时在反向代理服务器上配置访问控制,只允许指定 IP 的服务器访问。
# Nginx 配置示例
http {
    server {
        listen 80;
        server_name example.com;

        location / {
            allow 203.0.113.10;
            deny all;
            proxy_pass http://internal_system_ip:8080;
        }
    }
}

代码解释

  • listen 80;:监听端口 80。
  • server_name example.com;:服务器名称。
  • allow 203.0.113.10;:只允许 IP 为 203.0.113.10 的服务器访问。
  • deny all;:拒绝其他所有 IP 的访问。
  • proxy_pass http://internal_system_ip:8080;:将请求转发到内部系统的 8080 端口。

        通过上述的一种或多种方法,可以在确保安全性的前提下将内部系统的端口暴露给外部的指定 IP 服务器。可以根据系统的具体环境和需求,选择合适的方法和工具进行配置。


http://www.kler.cn/a/504668.html

相关文章:

  • 如何在Jupyter中快速切换Anaconda里不同的虚拟环境
  • 【容器逃逸实践】挂载/dev方法
  • C++基础入门
  • 【STM32-学习笔记-6-】DMA
  • Linux常用命令大全
  • 【JVM-2.3】深入解析JVisualVM:Java性能监控与调优利器
  • 线上资源访问本地数据-跨域问题总结
  • 在eNSp上telnet一下吧
  • ubuntu下安装Mysql 以及3306端口被占用解决方法
  • Kibana操作ES基础
  • 学习AI大模型的小白入门建议和具体的学习方法推荐
  • 【python】OpenCV—Extract Horizontal and Vertical Lines—Morphology
  • 【学习笔记】Macbook管理多个不同的Python版本
  • 初学者如何用 Python 写第一个爬虫?
  • 1.15学习
  • elementUI项目中,只弹一个【token过期提示】信息框的处理
  • Vue中nextTick实现原理
  • 鸿蒙心路旅程:HarmonyOS NEXT 心路旅程:技术、成长与未来
  • 探索文本相似性算法:解锁文本比对的奥秘
  • 数据结构-ArrayLIst-一起探索顺序表的底层实现
  • 二手车交易系统的设计与实现(代码+数据库+LW)
  • 抖音ip属地没有手机卡会显示吗
  • sql Server服务区cpu占用率高,原因分析
  • 【基于轻量型架构的WEB开发】课程 实验一 mybatis操作 Java EE企业级应用开发教程 Spring+SpringMVC+MyBatis
  • Java爬虫——使用Spark进行数据清晰
  • UnityDots学习(二)