TCP/IP网络安全
保护inetd
inetd配置中将很多服务设置为启用,当接收到来自网络的请求时,系统就会提供相应的服务。我们应该注意到,任何接收的网络连接都应该被视为对系统的潜在威胁。
将/etc/inetd.conf中不需要管理的项目注释掉
几乎所有情况下,除了那些明确要提供的(包括那些标记为"internal"的),可以注释掉文件中的所有服务,而不会造成功能上的损失。
对该文件改动后,不必重启linux,只要使用下面的命令重启inetd服务器即可:
killall -HUP inetd
/etc/services文件
/etc/inetd.conf中的文件名来自/etc/services文件。
如果某些连接不需要可以更改其端口号,有时也会改进系统的安全性。这样意味着如果用户要连接到系统必须要知道连接的端口号---这种功能较弱的安全方法通常被认为是较低级的安全(security of obscruity)。
值得注意的是:
/etc/services文件中包含的列表只影响inetd daemon管理的服务。
rdN.d中脚本独立启动的服务有可能不受该文件指定端口的约束。
如果对方使用端口扫描而不是用命令行连接,更改缺省端口并不会起什么作用。
适当使用TCP Wrappers
如果在/etc/inetd.conf文件中没有任何字段指向/usr/sbin/tcpd,而且系统中也没有/usr/sbin/tcpd二进制文件,则系统就没有受到TCP Wrappers的保护,应该立即升级。
TCP Wrappers
TCP Wrappers对于inetd管理的服务提供了一层绝对重要的安全保护。在安装有TCP Wrappers的系统中,对于进来的连接,比如telnet,inetd daemon不是简单的调用in.telnet daemon,而是调用/usr/sbin/tcpd,并将相应的服务in.telnet作为参数。/usr/sbin/tcpd根据一个规则列表检查请求者的身份,并决定是否允许连接。
一句话,TCP Wrappers提供了一种在请求登陆或者输入口令之前拒绝特定系统的输入连接的方法。
/etc/hosts.deny文件
/etc/sbin/tcpd两个配置文件之一,用来指定哪个远程系统应该被拒绝哪种服务请求。格式可参见hosts.deny(5)。如下:
daemon_list : client_list [ : shell_command ]
一些特殊字和通配符如下:
ALL 通配符:匹配任何主机名或服务名
KNOWN 通配符:匹配任何已知名字的用户或者任何已知名字和地址的
主机
LOCAL 通配符:匹配任何不包含"."的主机名
PARANOID 通配符:匹配任何名字与地址不符的主机名
UNKNOW 通配符:匹配任何身份不能确定的主机
EXCEPT 运算符:例:ALL EXCEPT in.ftpd
对于只想对局域网中的其他机器提供服务的系统,下面一行就足够了:
ALL:ALL
这意味着来自任何地方的任何主机的连接请求将被拒绝。
/etc/hosts.allow文件
该文件与/etc/hosts.deny文件格式相同,但目的相反。任何符合/etc/hosts.allow文件的输入连接请求都将被允许,取代/etc/hosts.deny的匹配规则。
例:
ALL:192.168.1.
In.ftpd:ALL EXCEPT UNKNOWN
In.telnetd: 192.168.0.1
其他技巧
触发规则时可选的shell命令。
5、使用tcpdchk和tcpdmatch
tcpdchk检查/etc/hosts.deny和/etc/hosts.allow文件并保证其中没有问题。
直接运行下面命令即可:
Tcpdchk
tcpdmatch工具核实规则并按照规则工作。语法如下:
Tcpdmatch daemon host
例:tcpdmatch in.telnetd 192.168.0.1