tcp_wrapper过滤
1.1 wrap简介
wrap工作在内核空间和应用程序中间的库层次中。在内核接受到数据包准备传送到用户空间时都会经过库层次,对于部分(只是部分)应用程序会在经过库层次时会被wrap库文件阻挡下来检查一番,如果允许通过则交给应用程序。
1.2 查看是否支持wrapper
wrap只会检查tcp数据包,所以称为tcpwrapper。但还不是检查所有类型的tcp数据包,例如httpd就不支持。是否支持,可以通过查看应用程序是否依赖于libwrap.so库文件。(路径/lib64/libwrap.so)
[root@mail ~]# ldd $(which sshd) | grep wrap libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f110efb7000)
[root@mail ~]# ldd $(which vsftpd) | grep wrap libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f1e73185000)
[root@mail ~]# ldd $(which httpd) | grep wrap
说明sshd和vsftpd都支持wrap机制,而apache的httpd不支持。
当然上面grep不出结果只能说明不支持这样的动态链接的方式,有些应用程序可能静态编译进程序中了,如旧版本的rpc应用程序portmap。
是否将wrap功能静态编译到应用程序中,可以通过以下方式查看。
strings $(which portmap) | grep hosts
如果筛选出的结果中有hosts_access或者/etc/hosts.allow和/etc/hosts.deny这两个文件,则说明是支持的。后两个文件正是wrap访问控制的文件。
要注意的是,如果超级守护进程xinetd被wrap控制了,则其下的瞬时守护进程都受wrap控制。
1.3 配置文件格式
hosts.allow和hosts.deny两个文件的语法格式是一样的,如下:
daemon_list: client_list [:options]
【"daemon_list:"的表示方法】:程序名必须是which查出来同名的名称,例如此处的in.telnetd
1 2 3 4 | sshd: sshd,vsftpd, in .telnetd: ALL daemon@host: |
最后一项daemon@host指定连接IP地址,针对多个IP的情况。如本机有192.168.100.8和172.16.100.1两个地址,但是只想控制从其中一个ip连接的vsftpd服务,可以写"vsftpd@192.168.100.8:"。
【"client_list"的表示方法】
1 2 3 4 | 单IP:192.168.100.8 网段:两种写法: "172.16." 和10.0.0.0 /255 .0.0.0 主机名或域匹配:fqdn或 ".a.com" 宏:ALL、KNOWN、UNKNOWN、PARANOID、EXCEPT |
ALL表示所有主机;LOCAL表示和主机在同一网段的主机;(UN)KNOWN表示DNS是否可以解析成功的;PARANOID表示正解反解不匹配的;EXCEPT表示“除了”。
它们的语法可以man hosts_access。
tcpwrapper的检查顺序:hosts.allow --> hosts.deny --> 允许(默认规则)
例如sshd仅允许172.16网段主机访问。
hosts.allow: sshd: 172.16. hosts.deny: sshd: ALL
telnet服务不允许172.16网段访问但允许172.16.100.200访问。有几种表达方式:
表达方式一:
hosts.allow: in.telnetd: 172.16.100.200 hosts.deny: in.telnetd: 172.16.
表达方式二:
hosts.deny: in.telnetd: 172.16. EXCEPT 172.16.100.200
此法不能写入hosts.allow:"in.telnetd: 172.16.100.200 EXCEPT 172.16."
表达方式三:
hosts.allow: in.telnetd: ALL EXCEPT 172.16. EXCEPT 172.16.100.200 hosts.deny: in.telnetd: ALL
EXCEPT的最形象描述是“在其前面的范围内挖一个洞,在洞范围内的都不匹配”。所以hosts.allow中,ALL内有一个172.16的洞是不被allow的,在172.16中又有小洞172.16.100.200是被排除在172.16洞外的,所以172.16.100.200是被allow的。
注意:被EXCEPT匹配到的表示不经过此条规则的检查,而不是反意。例如在allows中指明一个EXCEPT,当有except中的主机被匹配到,表示的不是该主机被拒绝。而是跳过allow检测进入deny的检测。
【:options的表达方式】
:ALLOW
:DENY
:spawn
ALLOW和DENY可以分别写入deny文件和allow文件,表示在allow文件中拒绝在deny文件中接受。如allow文件中:
in.telnetd: 172.16. :DENY
spawn表示启动某程序的意思(/etc/inittab中的respawn表示重启指定程序)。例如启动一个echo程序。
in.telnetd: 172.16 :spawn echo "we are good $(date) >> /var/log/telnetd.log"
转载请注明出处:https://www.cnblogs.com/f-ck-need-u/p/7347987.html
如果觉得文章不错,不妨给个打赏,写作不易,各位的支持,能激发和鼓励我更大的写作热情。谢谢!

Linux系列文章:https://www.cnblogs.com/f-ck-need-u/p/7048359.html
Shell系列文章:https://www.cnblogs.com/f-ck-need-u/p/7048359.html
网站架构系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html
MySQL/MariaDB系列文章:https://www.cnblogs.com/f-ck-need-u/p/7586194.html
Perl系列:https://www.cnblogs.com/f-ck-need-u/p/9512185.html
Go系列:https://www.cnblogs.com/f-ck-need-u/p/9832538.html
Python系列:https://www.cnblogs.com/f-ck-need-u/p/9832640.html
Ruby系列:https://www.cnblogs.com/f-ck-need-u/p/10805545.html
操作系统系列:https://www.cnblogs.com/f-ck-need-u/p/10481466.html
精通awk系列:https://www.cnblogs.com/f-ck-need-u/p/12688355.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!