![iptables REDIRECT 范围](https://linux22.com/image/533183/iptables%20REDIRECT%20%E8%8C%83%E5%9B%B4.png)
我们通过非特权用户在非特权端口上运行 Web 应用程序。以 root 身份执行启动脚本,仅用于设置 iptables REDIRECT 规则,然后放弃特权并启动应用程序。
我正在尝试使用 NAGIOS 监控这个 web 应用程序,但是 nagios-plugins 中附带的默认“check_http”插件无法连接到端口 80 上的 web 服务器。NAGIOS 与 web 应用程序在同一主机上运行。
我想监控端口 80,因为这是用户的连接方式,所以我想确保它被充分转发等等。
NAGIOS 配置将主机的地址指定为其 eth0 私有 IP 地址。针对该 IP 地址运行 check_http 脚本将产生以下结果:
# libexec/check_http -H 192.168.20.15
连接被拒绝
HTTP 严重 - 无法打开 TCP 套接字
但是,如果我在本地指定环回地址,它就可以工作。
# libexec/check_http -H localhost
HTTP OK: HTTP/1.1 200 OK - 8007 bytes in 0.035 second response time|time=0.034517s;;;0.000000 size=8007B;;;0
从其他主机到此 Web 应用服务器上的 80 端口的连接工作正常。但我想了解为什么我无法通过eth0
而不是在 80 端口上本地监控它lo
。
除了 nat 表之外,我们的 iptables 规则是空的:
*nat
:PREROUTING 接受 [2036:252802]
:POSTROUTING 接受 [478669:34376409]
:OUTPUT 接受 [475605:34192517]
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 7999
-A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 7998
-A OUTPUT -d 127.0.0.1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 7999
-A OUTPUT -d 127.0.0.1 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 7998
提交
答案1
哦,等等。开玩笑的说,它在 lo 上是有效的,因为线路-A OUTPUT
将流量发送到目标端口。我猜这意味着这里的解决方案是为eth0
接口添加两个额外的 OUTPUT 线路-d
。
意思是复制包含 127.0.0.1 的行,并用 替换该地址192.168.20.15
。
没开玩笑...