tcp_wrappers(2)hosts.allow hosts.deny配置
在 Linux 的 TCP Wrappers 中,/etc/hosts.allow
和 /etc/hosts.deny
文件的配置语法非常相似,用于定义访问控制规则。
1.基本语法
配置文件中的每条规则通常遵循以下格式:
服务名: 客户端列表 [: 选项]
1.1组成部分
服务名:
- 指定受控的网络服务,通常是守护进程的名称(如
sshd
、vsftpd
、telnetd
)。 - 可以使用
ALL
表示所有支持 TCP Wrappers 的服务。 - 服务名通常是二进制文件的名称,而不是配置文件中的服务名。
- 指定受控的网络服务,通常是守护进程的名称(如
客户端列表:
- 定义允许或拒绝访问的客户端,可以是 IP 地址、主机名、网络段、通配符等。
- 多个客户端可以用逗号分隔(如
192.168.1.10, 10.0.0.0/8
)。
选项(可选):
- 用于执行特定操作,例如记录日志、运行脚本等。以冒号
:
开头。
- 用于执行特定操作,例如记录日志、运行脚本等。以冒号
2.客户端列表的表示方法
客户端可以以多种形式指定,支持灵活的匹配方式:
单个 IP 地址:
- 示例:
192.168.1.10
- 匹配特定的客户端 IP。
- 示例:
网络段(CIDR 表示法):
- 示例:
192.168.1.0/24
- 匹配整个子网(这里是 192.168.1.0 到 192.168.1.255)。
- 示例:
主机名:
- 示例:
example.com
- 匹配特定主机名(需要 DNS 解析支持)。
- 示例:
域名:
- 示例:
.example.com
- 匹配以
.example.com
结尾的所有主机名(如www.example.com
、mail.example.com
)。
- 示例:
通配符:
ALL
: 匹配所有客户端。LOCAL
: 匹配没有.
的主机名(通常是本地主机)。EXCEPT
: 用于排除某些客户端。例如ALL EXCEPT 192.168.1.10
表示除了192.168.1.10
外的所有客户端。
IP 通配符:
- 示例:
192.168.
- 匹配以
192.168.
开头的所有 IP 地址(如192.168.1.10
、192.168.2.20
)。
- 示例:
3.可选选项
选项以冒号 :
分隔,可以添加在规则后面,用于增强功能。常用选项包括:
记录日志:
severity 级别
: 将访问记录到指定级别的日志。- 示例:
: severity info
(记录到 info 级别的日志)。
拒绝消息:
deny
: 明确拒绝连接(通常用于/etc/hosts.deny
)。- 示例:
: deny
。
执行命令:
spawn 命令
: 在匹配规则时执行指定命令。- 示例:
: spawn /bin/echo "Access from %h" >> /var/log/access.log
%h
表示客户端主机名。%c
表示客户端信息%d
服务名
自定义返回消息:
twist 命令
: 返回自定义响应并关闭连接。- 示例:
: twist /bin/echo "Go away!"
4.配置示例
/etc/hosts.allow
示例
允许特定 IP 访问 SSH:
sshd: 192.168.1.10
只允许192.168.1.10
访问 SSH。允许本地网络访问所有服务,并记录日志:
ALL: 192.168.1.0/24 : severity info允许特定域名访问 FTP:
vsftpd: .example.com
/etc/hosts.deny
示例
拒绝所有客户端访问 Telnet:
telnetd: ALL拒绝除特定 IP 外的所有访问:
sshd: ALL EXCEPT 192.168.1.10拒绝访问并记录尝试:
ALL: ALL : spawn /bin/echo “Denied %c from %h” >> /var/log/denied.log%c
表示客户端地址,%h
表示主机名。
组合使用
通常的策略是:
- 在
/etc/hosts.allow
中定义允许的访问。 - 在
/etc/hosts.deny
中拒绝所有其他访问。
例如: /etc/hosts.allow
:
sshd: 192.168.1.0/24, 10.0.0.5/etc/hosts.deny
:
ALL: ALL
这表示只允许192.168.1.0/24
和10.0.0.5
访问 SSH,其他所有连接都被拒绝。
5.注意事项
规则顺序:
- TCP Wrappers 先检查
/etc/hosts.allow
,再检查/etc/hosts.deny
。 - 一旦匹配到规则,后续规则将被忽略。
- TCP Wrappers 先检查
大小写敏感:
- 服务名和选项区分大小写,需与实际守护进程名称一致。
测试配置:
- 修改配置后无需重启服务,规则即时生效。
- 可用
tcpdchk
(如果安装了)检查语法错误:1
tcpdchk -v
局限性:
- 只适用于支持
libwrap
的服务。 - 不支持复杂的条件逻辑,建议结合防火墙使用。
- 只适用于支持