【问题标题】:Can not connect with a simple http server(tcp connection) on oracle compute instance(oci), ssh connection works well无法与 oracle 计算实例(oci)上的简单 http 服务器(tcp 连接)连接,ssh 连接运行良好
【发布时间】:2022-07-30 06:43:02
【问题描述】:

我正在使用oracle cloud创建一个http服务器来学习,所以我是新手。感谢您的帮助!

实例信息

Image: Canonical-Ubuntu-20.04-2022.02.15-0
Shape: VM.Standard.E2.1.Micro

已在子网(7500 端口)上添加入口规则: Picture of subnet

Source      IP Protocol Source Port Range Destination Port Range  Allows 
0.0.0.0/0   TCP         All                7500                   TCP traffic for ports: 7500

使用python创建http服务器:

python3 -m http.server 7500 &

正在显示:

ubuntu@tcp-server:~$ Serving HTTP on 0.0.0.0 port 7500 (http://0.0.0.0:7500/) ...  

调用lsof -i 返回

COMMAND    PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python3   1806            root    3u  IPv4  33281      0t0  TCP *:7500 (LISTEN)

ufw 上允许 7500 端口:

ufw Status: active

To                          Action        From
                  
7500                       ALLOW       Anywhere                  
7500 (v6)                  ALLOW       Anywhere (v6)  

但我无法访问 public_Ip_address:7500。

使用远程登录:

sudo telnet 152.69.123.118 7500

返回:

Trying 152.69.123.118...  

并没有连接

提前致谢!

【问题讨论】:

    标签: oracle server instance


    【解决方案1】:

    原因来自于 iptables 设置:

    sudo nano /etc/iptables/rules.v4

    添加这句话: -A INPUT -p tcp -m state --state NEW -m tcp --dport 7500 -j ACCEPT

    然后:

    须藤苏

    iptables-restore/iptables/rules.v4

    完成!

    来自 oci 的 ubuntu 映像已被 oracle 修改,默认设置已接受有限的端口。 因此我们必须手动打开端口。

    【讨论】:

      【解决方案2】:

      在 oci 上使用新的 ubuntu 映像时需要注意一些重要的属性。为了便于讨论,防火墙和iptables 是同义词 默认情况下

      1. 有 4 个链标准 INPUT、FORWARD、OUTPUT 和 InstanceServices

      2. OUTPUT 将有 1 条规则

      InstanceServices  all  --  *      *       0.0.0.0/0            169.254.0.0/16
      

      InstanceServices 目标 169.254.XXX.YYY 指向 oci 服务,如 bootvolume 等 ...

      1. FORWARD 拒绝所有

      2. 你的默认输入链看起来像

      1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
      2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
      3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
      4    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp spt:123
      5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
      6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited 
      

      这仅允许 NTP 使用 ssh 和 udp 端口​​ 123

      为端口 7500 创建一个规则并将其与 ssh 的现有 tcp 规则放在一起

      sudo iptables -I  INPUT 6  -p tcp -m tcp --dport 7500 -j ACCEPT
      

      现在INPUT链是

      1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
      2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
      3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
      4    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp spt:123
      5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
      6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:7500
      7    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
      

      只要我们有正确的 VCN 路由表条目、安全列表条目或 tcp 7500 的网络安全组条目,您就可以通过实例防火墙到达目标端口 7500

      备注
      真正重要的是不要删除 OUTPUT 链中的 InstanceServices 规则,也不要删除 InstanceServices 链
      如果你是 iptables 的新手并且你做了类似的事情,就会发生这种情况

      iptables -F
      iptables -X
      

      学习 iptables 是值得的,但是 firewalld 更容易。
      oci不推荐ufw

      你的 iptable 规则不会survive 重新启动,除非你坚持它们

      这些问题在子标题 Essential Firewall Rules 下有充分的记录 here

      【讨论】:

        猜你喜欢
        • 2020-06-03
        • 2014-09-12
        • 2023-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-06
        • 2014-11-09
        • 1970-01-01
        相关资源
        最近更新 更多