简单的 Linux 程序可以接受任何 HTTP/HTTPS 请求并返回单个页面吗?

简单的 Linux 程序可以接受任何 HTTP/HTTPS 请求并返回单个页面吗?

我有一个用作路由器的 Linux 机器。有一个 NIC 连接到互联网 (WAN),一个 NIC 连接到 8 端口 GbE 交换机 (LAN),还有一个 NIC 连接到 Linksys 无线 N 路由器 (WLAN)。所有设备之间的路由都运行正常。

我已完全禁用无线路由器上的安全功能,但 WLAN NIC 已设置防火墙,因此它仅接受 DNS 查询和 PPTP VPN 连接。目前 HTTP/HTTPS 流量和其他所有内容均被阻止。

我想运行某个程序来监听 WLAN NIC 的 80/443 端口,并且对于非 VPN 连接,对于任何 HTTP/HTTPS 请求,它都会返回一个显示“未经身份验证”的网页并解释如何登录 VPN。透明代理似乎是我所需要的,但我的所有搜索似乎都将我引向 Squid,它已在我的服务器上运行,对于这个简单的任务来说似乎有点大材小用。

是否有一个更简单、轻量级的程序可以做到这一点,或者我应该忍受并运行两个 Squid 实例(或弄清楚如何配置它)?

或者,我所做的整个 VPN 操作是否完全是无稽之谈,我应该只在无线路由器上启用加密?

答案1

只要您有 netcat 和 shell,就无需安装任何花哨的 HTTP 服务器、代理或 Perl 模块:

$ while true ; do (echo -e 'HTTP 1.0 200 OK\r\n\r\n'; cat static.html ) | nc -q0 -l -p 80 ; 完成

这是原始 netcat 的用法。GNU netcat 略有不同,但您可以使用相同的原理。至于 HTTPS,您可以使用“openssl s_server”的相同技巧。

答案2

正如其他人提到的,您可以设置一个简单的 Web 服务器来监听 http/https 请求。选择您最喜欢的,有很多可供选择。我会用 apache 来做,但只是因为这是我最熟悉的。

一旦 Web 服务器存在,您将需要添加如下所示的 iptables 规则来拦截流量并将其发送到您的本地 Web 服务器。

/sbin/iptables -t nat -A PREROUTING -p tcp -i {wlanif} --dport 80 -j REDIRECT --to-ports 80
/sbin/iptables -t nat -A PREROUTING -p tcp -i {wlanif} --dport 443  -j REDIRECT --to-ports 443

答案3

如果页面完全静态,我会使用晚礼服,内核 Web 服务器。它速度极快,稳定,并且对于静态内容非常可靠。但我不确定它是否可以处理 SSL 流量,因此您可能需要让它将该内容代理回已加载证书的服务器,因为听起来您这台机器上没有证书。

答案4

您应该直接在 Linux 路由器盒中使用小型 Web 服务器。无需使用 Squid 将流量转发到另一个 Web 服务器...

除了已经建议的lighttpd,我建议你看看HTTPi,这是一个用 Perl 编写的非常小的 Web 服务器。

您还可以查看本文在 LinuxJournal 中,它使用大约 20 行代码使用 Python 创建了一个 Web 服务器。

因为您只想提供单个静态页面,所以不要考虑更复杂的东西......

相关内容