我试图弄清楚,是否可以确保如果用户使用浏览器并输入以“se”或“ru”结尾的域名,他们将被拒绝访问该网站。
PS:这是一项学校作业,我的老师要求我使用 tcp 包装器,因此不幸的是,下载一些可以实现该目的的模块是不可能的
答案1
不,这是不可能的。 (这可能是一个棘手的问题:-)。
TCP 包装器 (tcp_wrappers_7.6.tar.gz)
Wietse Venema 的网络记录器,也称为 TCPD 或 LOG_TCP。这些程序记录客户端主机名传入telnet、ftp、rsh、rlogin、finger 等请求。
为了获取网站,网络浏览器会发出传出请求。 (网络浏览器不会libwrap
出于非预期目的而滥用。)
答案2
TCP 包装器已经过时了。 Web 服务器(Apache 和其他)可能需要在编译时支持 TCP 包装器。 Apache 和 Nginx 有自己通常使用的方法和模块。
Web 服务器 Nginx 也不支持 TCP 包装器,但在此地址有一个支持它们的模块:https://github.com/sjinks/ngx_tcpwrappers。这也需要从源代码编译并且有严格的限制。
应该注意的是,TCP Wrappers 有几个您应该了解的特性:
最令人失望的是libwrap(实现TCP Wrappers功能的库)不是一个线程安全的库。换句话说,如果两个线程尝试同时使用 libwrap,结果可能会很奇怪。这是因为 libwrap 使用不可重入函数,如 strtok()、gethostbyname()、gethostbyaddr() 等。如果 nginx 是使用线程支持构建的(它还可以工作吗?),使用 libwrap 可能会导致性能损失(因为访问libwrap 函数必须被序列化)。如果 nginx 配置为不支持线程(这是 Linux 的默认设置),则一切正常。
动态 ACL 配置是有代价的:libwrap 将在每次请求时读取并解析 /etc/hosts.allow 和 /etc/hosts.deny;对于高负载项目来说这可能是一个问题。
所以最终使用tcpwrappers是不可行的。