zoukankan      html  css  js  c++  java
  • Docker 本地端口转公开端口 by iptables

    前言

    如果不是 Docker 而是其他程序的话,首先需要考虑的是直接把程序改改。

    如果程序确实不能改,那么确实可以使用 NAT 的方法进行处理。

    方法

    由于程序 bind 在了 127.0.0.1 上,因此程序只接受目的地址为 127.0.0.1 的包。

    于是需要作地址转换,做的是目的地址转化,也就是 DNAT,于是应该在 PREROUTING 里写。

    iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to 127.0.0.1:5555
    

    注意

    这里还有个特殊情况:因为根据 RFC,目的地址 127.0.0.1 的包,由于安全问题,是不允许从网络上收到的。从网络上收到的目的地址为 127.0.0.1 的包应该被丢弃。

    echo 1 > /proc/sys/net/ipv4/conf/eth0/route_localnet 
    

    所以需要上述命令改变这种行为。

    但是这可能会导致安全隐患,因为这样你的系统就可以处理从 eth0 进入的,目的地址为 127.0.0.1 的包。如果攻击者恶意构造这样的包的话,就可以直接访问到你机器上所有 bind 在 127.0.0.1 上的端口。而往往,多数的程序会默认这样的连接是来自于本机,可能权限检查和鉴定有所放宽。

    参考

    清华大学 TUNA 协会,坏人。

    (完)
  • 相关阅读:
    置换笔记
    7.23
    Conveyor Belts
    CF #134 A~D
    Blocks && Fixing the Great wall
    Kakuro
    Deadlock Detection
    关于KeyFile的破解,含注册机源代码
    BMP位图之代码实现
    BMP位图之8位位图(三)
  • 原文地址:https://www.cnblogs.com/itxdm/p/Docker_local_port_to_public_port_by_iptables.html
Copyright © 2011-2022 走看看