【问题标题】:iptables redirect 80 to 8080 but block public 8080 accessiptables 将 80 重定向到 8080 但阻止公共 8080 访问
【发布时间】:2020-08-24 11:42:44
【问题描述】:

我有一些 iptables 规则将端口 80 的请求重定向到我们的应用程序服务器 (GlassFish) 的 8080 端口(还有 SSL 端口,但为简单起见,我将它们排除在外)。

虽然我们的工作正常(我个人对此没有意见),但如果有人希望在 url 中指定端口 8080,它也对外界开放。已经规定8080端口应该关闭,不让外界访问,只开放80端口。

我不希望更改应用服务器上的监听器(因为使用端口 80,这似乎需要提升运行应用服务器的用户的权限)并且端口 8080 上的监听器需要知道源 IP数据包,因为应用程序会审核对应用程序的请求(即,我们不能将源 IP 地址更改为本地地址)。

当前iptables 配置如下。有谁知道是否有办法阻止公共互联网上的 8080,同时保留从端口 80 重定向到的数据包中的源 IP?

非常感谢。


    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD DROP

    # allow establishment of connections initialised by my outgoing packets
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    # accept anything on localhost
    iptables -A INPUT -i lo -j ACCEPT

    ################################################################
    #individual ports tcp 
    ################################################################
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

    #drop everything else
    iptables -A INPUT -j DROP

    ################################################################
    #Redirection Rules
    ################################################################
    # redirection rules (allowing forwarding from localhost)
    iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080

    # redirection http
    iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

【问题讨论】:

  • 您是否考虑过阻塞端口 8080 并在 httpd proxypass 上进行中继?
  • 感谢您的建议。目前此服务器上没有可用的 apache 或 mod_proxy(我知道它需要..?),但很明显,如果 iptables 或标准 Linux 软件包无法实现,那么我想这是需要研究的东西。

标签: http redirect port iptables


【解决方案1】:

我发现实现此目的的一种方法是在 mangle 表的 PREROUTING 链中使用 MARK 目标。

添加规则以标记要阻止的数据包:

iptables -t mangle -A PREROUTING -p tcp --dport 8080 -j MARK --set-mark 1

然后,在您允许端口 8080 之前,将其添加到 DROP 标记的数据包中:

iptables -A INPUT -m mark --mark 1 -j DROP

【讨论】:

  • 完美 - 我想知道单独使用 iptables 是否可行,但这很好用。谢谢。
  • 在我尝试时不允许 - 它告诉我我没有足够的声誉! ...我经常听到的东西。
  • 在我的特殊情况下,虽然 DROP 确实禁止访问端口 8080,但外部 nmap 扫描显示有一个 过滤 端口 8080。我的解决方案是用iptables -A INPUT -p TCP -m mark --mark 1 -j REJECT --reject-with tcp-reset代替iptables -A INPUT -m mark --mark 1 -j DROP
【解决方案2】:

我的处理方式略有不同。我将 443 转发到 3000(如上),但也将 3000 转发到 443。然后我允许 3000 上的流量,但在 443 上阻止它。过滤时,443 流量应该只来自端口 3000。

我正在使用 ufw,所以过滤器规则是使用该工具输入的。我在/etc/ufw/before.rules中添加了nat规则。

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3000

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 3000 -j REDIRECT --to-ports 443

【讨论】:

  • 这真是太聪明了。
【解决方案3】:

我知道这样做已经太晚了,但我想出了另一个对大多数人来说可能更直接的解决方案。

只需将端口 8080 重定向到另一个关闭的端口(例如 3000):

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 3000
iptables -A INPUT -p tcp --dport 3000 -j REJECT --reject-with tcp-reset

然后您可以在本地计算机的 8080 端口访问该应用程序,而 Internet 上的其他人可能只能看到端口 80 已打开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多