[Linux 安全] 使用 tcp_wrappers 来管理 Linux 计算机的访问
转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2007/10/17/linux-drop-host.html
前言:
如果你已经将一些可能造成侵入的服务关掉之后,下一步要作什么呢?当然就是限制联机进来计算机啰!通常,若你有开启 http 或 mail 的情况下,在 apache 与 sendmail 的设定文件中限制联机的计算机,可能会造成一些网域无法登入,当然,除非你只对内部开放,否则的话,通常是不在该服务下关闭某一网域的计算机的!但是 telnet 这个服务就不是这样啰!基本上,我们并不希望有任何人以 telnet 登入我们的主机,(除非你有架设 BBS)因为如果你开放 telnet 的话,那等于是请所有的人进入你的主机中,窃取你的数据,甚至以你的主机为中继站去攻击别人!因此,最好限制每一台主机可以联机的网域才好.
限制联机的范围:
其 实,你服务的项目除了 Proxy, WWW 与 e-mail 等之外,若要使用 Telnet 或其它的联机软件连上你的主机的话,应该是要经过你的控管的,所以,限制适当的联机网络是有其必要性的.通常,我都只设定我上网工作(Windows 平台)的那部机器,及可能会使用到的外部网络的机器,让他可以登入这部主机,其它的就将之deny(取消)掉!基本上,要设定联机范围的程序与档案有几 个:
tcp_wrappers 套件文件
/etc/hosts.allow /etc/hosts.deny
简单的说, hosts.allow 与 hosts.deny 这两个档案就是在限制 /etc/inetd.conf 这个档案中,所允许的服务内容啦!
(1. 察看是否具有 tcp_wrappers 套件:
要使联机计算机的设定启动,以使用 /etc/hosts.allow 与 /etc/hosts.deny 档案的话,需要这一套软件『tcp_wrappers』,要察看你的 Linux 主机内是否有这一套软件的话,请使用:
rpm -q tcp_wrappers 或者 rpm -qa | grep tcp
如果有这套软件的话,自然就会显示出来,如果没有的话,请放入你的 Linux 光盘片,将 rpm 档案装上去吧!
( 2. 设定允许登入的计算机 (/etc/hosts.allow):
其实很简单,只要修改 /etc/hosts.allow(如 果没有此档,请自行以 vi 编辑)这这档案即可,例如,我家里的计算机中,我的内部网域(局域网络)是 192.168.1.0/255.255.255.0,这样的网域代表计算机 IP 在于 192.168.1.1 – 192.168.1.255 之间!所以,我就将 /etc/hosts.allow 这个档案的内容设定成为如此:
in.telnetd: 192.168.1.0/255.255.255.0, .ncku.edu.tw : Allow
加入 .ncku.edu.tw 的原因是因为我人在成大,所以加入此行的话,可以使我在成大连上我家里的 Linux 主机.
( 3. 设定不许登入的计算机 (/etc/hosts.deny):
由 于正常的情况下, Linux 会先判断 hosts.allow 这个档案,这个档案中的计算机如果设定为可联机的话,则 hosts.deny 就不会被使用,因此,设定好了 hosts.allow 之后,将 /etc/hosts.deny 设定为『所有计算机都不许登入』的情况,如下所示:
in.telnetd: ALL : Deny
这样一来,基本的防护措施就有了(不用重新开机就自动执行了!).
记录限制登入的主机 IP
通 常我们会希望如果有人尝试登入我们的系统时,系统不但可以将他摒弃在外,并且可以将他的尝试记录下来!这时,我们可以藉由 /etc/hosts.deny 来达成这个目标!在这个档案中(当然,您的 /etc/hosts.allow 必须已经先完成编辑了!),你可以这样输入:
# vi hosts.deny in.telnetd: ALL : spawn (echo Security notice from host `/bin/hostname`; \ echo; /usr/sbin/safe_finger @%h ) | \ /bin/mail -s “%d-%h security” root & \ :fukai ( /bin/echo -e “\n\nWARNING connection not allowed. Your attempt has been logged. \n\n\n警告您尚未允许登入,您的联机将会被纪录,并且作为以后的参考\n\n “. )
在上面的例子中,黄色的 root 部分,可以写成你的个人账号或者其它 e-mail ,以免很少以 root 身份登入 Linux 主机时,容易造成不知道的情况,另外,最后几行为同一行.如此一来,当未经允许的计算机尝试登入你的主机时,他的画面就会显示上面的最后一行,并且将他的 IP 寄到 root (或者是你自己的信箱)那里去!
allow 不管 hosts.allow 与 hosts.deny 档案里的设定为何, 符合此一设定条件者, 都接受其连线要求. 这个选项设定, 应该置於该行的最後面.
deny 类似上面的选项设定, 不过, 它是用来指定拒绝连线的条件.
spawn 当收到连线要求时, 会启动一个命令壳的指令, 譬如说, 可以在每次有人想要从外面, 连进我的机器时, 执行一个哔声通知.
twist 这个和 spawn 选项类似, 不过, 当命令壳指令执行完毕後, 连线状态便会中断. 此一选项, 同样必须置於设定行的最後面.
上述的最後两个选项, 还可以配合适当的扩充字符给 tcpd 使用, 这些扩充字符有:
%a 客户端主机的位址 %c 客户端的资讯 ( 可能是像 user@machine, 或是其他由客户端所得的信息) %d %h 在可以取得的情况下, 这会代表客户端的名称或 IP 位址 %n 客户端的名称 %p 服务器的 PID %s 服务器上的信息 ( 例如 daemon@machine 或只有 daemon 之资讯, 视情况而定 ) %u 客户端使用者的名称 %% 这是表示 % 这个字符


















