authbind、privbind 还是 iptables REDIRECT(端口 80 到 8080)?

authbind、privbind 还是 iptables REDIRECT(端口 80 到 8080)?

我想在 Linux(Debian)上以非特权用户身份运行 Glassfish v3,但使其在端口 80 上可用。我目前正在使用 iptables 执行此操作:

iptables -t nat -I PREROUTING -p tcp -d x.x.x.x --dport 80 -j REDIRECT --to-port 8080

这可行,但我想知道:

  1. 如果与直接绑定到端口 80 相比,这会对性能产生任何重大影响
  2. 如果我可以让类似的设置也适用于 HTTPS(或者必须在 443 上运行)
  3. 如果有办法避免其他用户绑定到端口 8080(以防我的服务器崩溃) - 也许以某种方式永久阻止其他用户使用该端口?

...或者我是否应该改用 authbind/privbind?问题:到目前为止,我无法使其与 authbind 或 privbind 配合使用。

为了授权绑定,我将 asadmin 的最后一行编辑为:

exec authbind --deep "$JAVA" -Djava.net.preferIPv4Stack=true -jar ...

为了私钥绑定

exec privbind -u glassfish "$JAVA" -Djava.net.preferIPv4Stack=true -jar ...

(仅)使用这些设置,我可以成功执行create-domain --domainport 80。这证明 authbind 和 privbind 确实有效(脚本的 authbind 版本由 glassfish 用户调用;privbind 版本当然由 root 调用)。但是,在这两种情况下,启动域时都会出现以下异常(start-domain):

[#|2010-03-20T13:25:21.925+0100|SEVERE|glassfishv3.0|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=11;_ThreadName=FelixStartLevel;|Shutting down v3 due to startup exception : Permission denied: 80=com.sun.enterprise.v3.services.impl.monitor.MonitorableSelectorHandler@1fc25e5|#]

我还没有找到解决方案(在网上搜索后,似乎这不是那么容易?)但也许使用 iptables 的解决方案就足够好了 - 你怎么看?

谢谢,

克里斯

笔记:

对我来说,将 Apache 放在前面并不是一个好的解决方案 - 我计划使用 Comet,而且 Comet 在没有代理的情况下工作得更好。

答案1

我在生产中一直使用 NAT。虽然它更常用于在内部网和互联网之间进行转换,但以这种方式使用它也是完全可以接受的。我曾经在几乎相同的情况下做过类似的事情。话虽如此,还有其他选择。

应用服务器和 Web 服务器通常一起运行,因此将 Java 保留在 8080 和 8443 上是有意义的。更常见的情况是,人们可能会使用 Apache 作为代理,将某些请求转换为 Java,并从 Apache 实例提供静态内容。我明白您觉得这个解决方案不可接受,但必须说出来。

如果这没有涵盖您的问题,请随意阐述,我会进一步重复。

编辑1

别客气。NAT 不会影响 https 的正常运行,它会正常工作。

我无法想象你为什么会担心其他非特权用户绑定到 8080。你的情况有什么独特之处吗?

答案2

您的 privbind 问题可能是由于 HOME 设置为 root 导致的。我或任何从我手中接管 privbind 的人都会尝试在下一个版本中修复它(现在会有下一个版本...)

看看在命令行开头添加“HOME=~glassfish”(假设 bourne 派生的 shell)是否能解决问题(如果它仍然相关:毕竟自从这个问题被提出已经四年了......)

沙查尔

相关内容