一般,Linux操作系统都自带tcp_wrappers-libs包,利用tcp_wrappers规则,配合防火墙,可以很好的启动加固Linux系统的作用。

如何知道程序是否支持调用tcp_wrappers规则呢?可以用ldd命令查询程序是否支持tcp_wrappers,例如:
ldd /usr/sbin/sshd | grep libwrap
如果有结果出来,那么该程序就是支持tcp_wrappers的。
tcp_wrappers利用/etc/hosts.allow和/etc/hosts.deny这两个文件来控制各类访问。记住,allow的优先级比deny高!
需要记住的是:

  1. 在allow和deny文件中,每个服务只能添加一条规则!
  2. 任何对于hosts.allow 和 hosts.deny文件的修改都是立即生效的!

语法规则:
daemon : client [:option1:option2:…]
例如,允许abc.com访问ssh,拒绝所有其他的ssh访问hosts.allow:
sshd:.abc.com
hosts.deny:
sshd:ALL

拒绝来自xyz.com和192.168.1.0网段的ftp访问
hosts.denyvsftpd:192.168.1.,.xyz.com
把访问失败的记录写入日志:
vsftpd : 192.168.1. , .xyz.co.in : spawn /bin/echo  `/bin/date` access denied >> /var/log/vsftpd.log : deny
通过spawn命令,还可以把每次失败登录给管理员发邮件通知。

客户端部分可以有一下通配符可用:
ALL:匹配所有服务
LOCAL:匹配所有不含点(.)的主机,例如localhost
KNOWN:匹配可以被解析的主机
UNKNOWN:可以被反向解析的主机
PARANOID:正反向都不可以被解析的主机

示例:
ALL : 123.12.
匹配所有在123.12.0.0网络的主机。注意,有个点.在后面。
ALL : 192.168.0.1/255.255.255.0
ip地址/子网掩码能够在规则中使用。
sshd : /etc/sshd.deny
如果客户端列表以slash开头(/),会被看做一个文件名.在上一条规则中, TCP wrappers 查阅sshd.deny文件来监视所有sshd连接。
sshd : ALL EXCEPT 192.168.0.15
只允许IP地址192.168.0.15 ssh连接,拒绝其他所有连接。
可以使用allow和deny命令来改变连接的定义(即allow文件里面写拒绝,deny写允许)
in.telnetd : 192.168.5.5 : deny
in.telnetd : 192.168.5.6 : allow

Shell命令
使用如下两个选项可以组合数个shell命令:
spawn 本选项可以把一个shell命令作为子进程运行,例如:
sshd : 192.168.5.5 : spawn /bin/echo `/bin/date` from %h >> /var/log/ssh.log : deny
每当此条规则被匹配时, 当前时间和客户端主机名 %h 将被追加到 ssh.log 文件。
twist 本选项用于替换指定命令的请求。例如,你想发送通知到被进驻ssh登录你服务器的主机时,你可以使用如下选项:
sshd : client1.xyz.com : twist /bin/echo “You are prohibited from accessing this service!!” : deny
总之,使用spawn和twist可使用如下表达式:
%a — 客户端IP地址。
%A — 服务端IP地址。
%c — 提供多样的客户端信息。例如用户名和主机名或者用户名和IP地址。
%d —守护进程的名字。
%h — 客户端主机名 (如果主机名不可用,则提供IP地址).
%H —  服务端住主机名 (如果主机名不可用,则提供IP地址).
%n — 客户端主机名.如果不可用,显示反向解析名. 如果主机名和地址不匹配,显示正反向解析都不行。
%N —  服务端主机名.如果不可用,显示反向解析名. 如果主机名和地址不匹配,显示正反向解析都不行。
%p — 守护进程ID。
%s — 显示大量服务端信息,诸如守护进程和主机名和IP地址。
%u — 客户端用户名. 如果不可用,反向解析信息被显示。

利用tcp_wrappers来加固Linux

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注