利用TCP Wrappers构建应用访问控制列表
最后更新于
最后更新于
TCP Wrappers也被称为tcp_wrappers。它是一个基于主机的网络访问控制列表系统,在Linux和BSD等系统上都有支持。最初的代码是由Wietse Venema在1990年编写的,在2001年,以类BSD的许可发布。TCP Wrappers的核心是名为libwrap的库,所有调用这个库的程序都可以利用libwrap提供的网络访问控制能力。在Linux系统中,我们可以使用ldd命令来判断一个程序是否调用了libwrap的库,示例
我们可以看到,OpenSSH的服务器端程序/usr/bin/sshd调用了libwrap。那么我们就可以使用TCP Wrappers来控制允许哪些主机或者禁止哪些主机访问sshd。
远程IP请求连接的时候,TCP Wrappers检查策略是先看/etc/hosts.allow中是否允许,如果允许就直接放行;如果没有,则再看/etc/hosts.deny中是否禁止,如果禁止,那么就禁止连接;否则允许连接。
我们可以使用如下的配置来仅仅允许指定的IP 111.111.111.111 访问sshd。
配置/etc/hosts.allow来限制sshd的访问
/etc/hosts.allow的配置语法如下:
使用TCP Wrappers时,不需要重新启动程序,修改/etc/hosts.allow和/etc/hosts.deny并保存后,对于所有新建立的TCP连接立即生效;对于已建立的连接则没有作用,此时需要手动把网络连接断掉,例如使用iptables或者使用kill命令终止对应的进程来强制远程重新建立连接。