深入分析Linux防火墙

除了来自这三台机器以外,还可以继续细化,告诉ipchains程序允许通过防火墙进入的接收程序必须要使用哪一种协议。用户可以使用-p(protocol,协议)标志。远程登录进程使用的是TCP协议。现在这条规则看起来像是:ipchains- Ainput-s192.156.12.1/255.255.255.252-pTCP还是不要按回车键。

围绕某个特定的协议建立一条规则的选择太多了,但是用户可以为你选定的进程指定其端口(port)来细化那条规则。用户可以把端口的名称加到规则的末尾,也可以用一个冒号引导该端口的端口号。从/etc/services文件中可以查到任何网络服务所使用的端口号。现在这条规则看起来是下列这两行文字中的某个样子:

ipchains-Ainput-s192.156.12.1/255.255.255.252-pTCP:23ALLOWipchains-Ainput-s192.156.12.1/255.255.255.252-pTCPTelnetALLOW

现在可以按下回车键了。用户在确实屏蔽了其他接入类型之前,这条规则实际上还是没有什么用处的。最好的解决方法(因为我们的目的是为用户所有希望允许的东西建立规则)是使用-P(policy)标志(注意是大写字母)屏蔽所有的输入,然后ipchains就会去检查特定的规则看看到底什么才能被允许进入。这样的一个策略语句如下所示:ipchains-PinputDENY

在重启动/关机之前保存数据包过滤规则:没有哪个配置文件是用来自动保存数据包过滤规则供你下次启动机器的时候使用的。因此,选择某种方法自己来完成这项工作就十分重要,否则下一次你就还得从头一点一滴地重新写出所有的规则。下面介绍一个保存数据包过滤规则的方法:先以root身份登录进入系统,再使用ipchains-save脚本程序把用户已经编写好的规则设置保存到一个文件中去,比如/root/ipchains-settings文件。输入“ipchains-save>/root/ipchains-settings”。

开机引导后恢复数据包过滤规则:用户在计算机重启动之后,必须恢复数据包过滤规则。请按照下面的方法完成这项任务:先以root身份登录进入系统,再使用ipchains-restore脚本程序在某个文件中检索用户已经编写好的规则,比如从文件/root/ipchains-settings 中恢复数据包过滤规则。如下所示,输入“ipchains-restore<>

如果要想实现代理防火墙功能,需要安装能够控制用户从某个网络的外部可以使用和不可以使用什么样的网络服务功能的软件。代理防火墙不允许有任何连接接入到它后面的机器上(当然也不是绝对的),不存在任何数据包过滤的效果,从接入连接的角度考虑,它就是一堵密不透风的砖墙。可以如下设置:

首先在/etc/inetd.conf文件中禁用任何你不打算使用的服务功能,方法是把它们改为注释语句(即在那些语句开头加上一个#符号)。任何一种服务都会为试图进入系统的那些人多打开一条通路,因此应该只使用你确实需要的服务。

接着编辑/etc/issue.net文件,删除其中关于在你的机器上运行的特定硬件和Linux发行版本的介绍信息。这些信息会在诸如Telnet之类的远程登录任务操作过程中显示在登录端的屏幕上。如果他们对屏幕上显示的安装方式熟悉的话,任何暴露了你机器上这些特殊信息的东西都会使那些试图闯入的人们了解应该去攻击哪些薄弱环节(如Sendmail8.7-8.8.2 for Linux这个漏洞)。

再接着把某些特殊的用户们分配到console用户组中,这样就是这帮人实际坐在服务器计算机前面时确实可以执行命令,但同时要禁止任何其他人调用这些命令。举例来说,如果需要强调安全性,那就应该只允许console用户组的成员可以挂装磁盘。

然后查看/etc/securetty文件,确定其中列出的设备都是真实存在的物理ttys(比如tty1到tty8)端口。这个文件限制了人们能够以根用户身份登录进入系统的位置。允许任何远端用户以根用户身份登录进入系统是极其危险的,因为这样做就为潜在的侵入者缩短了侵入超级用户帐户的过程。

最后是最好不设匿名帐户或来宾帐户(anonymouse & guest)如果一定要设,请在/etc/passwd中将其shell设为/bin/failure,使其不能访问任何shell。(注意:Linux 中是设为/bin/false)。打开chroot(如chroot -s),使其访问的文件限定在一定目录下。一定要保证在FTP服务器上唯一允许匿名用户进行写入操作的部分是/incoming目录。列出成功登录的记录清单如果想查看都有哪些人最近成功地登录进入了系统,可以使用last命令。如果想列出比缺省数目更多的记录,可以使用格式“last -nnumber”告诉last命令需要显示多少登录记录。如果这个命令执行失败,说明登录操作还没有被记录下来。为了确保它们能够被记录下来,请以根用户身份执行“touch/sar/log/wtmp”命令来建立日志记录文件。列出不成功登录的记录清单如果想查看都有哪些人最近没有成功地登录进入系统,可以使用lastb命令。和last命令相类似,如果你想列出比缺省数目更多的不成功尝试记录的话,可以使用“lastb -nnumber”格式。如果这个命令执行失败,说明不成功登录操作还没有被记录下来。为了确保它们能够被记录下来,请以根用户身份执行 “touch/var/log/btmp”命令来建立日志记录文件。

如果安全出现了漏洞,或者你认为已经出现了漏洞的话,就可以抓住这个机会从系统登录记录或者其他地方查找蛛丝马迹。系统会记录下每一次成功的登录操作和不成功的登录尝试操作。特别是那个“列出不成功的尝试登录记录清单”,它能够让你很快地查找出是否有人在千方百计地获取根用户权限或者猜试某个用户的口令字。

如果你使用的是shadow隐藏口令字软件,请检查/etc/passwd文件,看看其中是否禁用了 shadow隐藏口令字功能――如果是这样,口令字将会被保存在/etc/passwd文件里。Linux系统中的/etc/passwd文件是整个系统中最重要的文件,它包含了每个用户的信息(加密后的口令也可能存与/etc/shadow文件中)。它每一行分为7个部分,依次为用户登录名,加密过的口令,用户号,用户组号,用户全名,用户主目录和用户所用的Shell程序,其中用户号(UID)和用户组号(GID)用于Unix系统唯一地标识用户和同组用户及用户的访问权限。这个文件是用DES不可逆算法加密的,只能用John之类的软件穷举,因此,此文件成为入侵者的首要目标。通常黑客用FTP匿名登录后将passwd Get回去,就用John开始跑了。所以一定要把此文件设为不可读不可写。另注意,opasswd或passwd.old是passwd的备份,它们可能存在,如果存在,一定也要设为不可读不可写修改。进行以上设置必须root用户的权限,所以如果情况真的如上面所说的这样,你就应该知道在这台机器上黑客已经获得了root的操作权限。

检查是否有不熟悉的用户帐户拥有特殊的优先权:一个拥有高级工具和丰富经验的黑客能够替换某些重要的系统功能。用一台独立的计算机或者一台你相信没有遭到攻击的机器把诸如ls之类的命令备份到一张软盘上去,当然最好是将安装光盘再刻录一张,然后检查程序ls、find、ps和所有网络守护进程的系统版本中的日期与它们生成时的日期数据是否一致。

最后你应该经常到下面的地方去查看是否有提高安全性方面的建议和那些修补最新发现的系统漏洞的网站:如Root Shell (http://www.rootshell.com)、Computer Emergency Response Team(计算机紧急情况快速反应组――http://www.cert.com)和你机器上安装的Linux版本的软件服务商网页,并最好订阅一些最新系统漏洞的电子杂志。

人生伟业的建立 ,不在能知,乃在能行。

深入分析Linux防火墙

相关文章:

你感兴趣的文章:

标签云: