TCPD 与使用 IPFWADM 来设定防火墙内容摘要: 本文扼要地介绍, 在系统里设定 inetd 服务, 以增进系统安全的方法, 我们把焦点放在 IPFWADM 这个系统管理工具, 以及 inetd 服务的设定上面。 ---------------------------------------------------------------- 首先, 我们必须厘清什麽是 inetd。 简单地说, inetd 是一个伺服程式, 用以控制主机连上网路时, 所提供的各项服务。 您有可能会遇到一部电脑, 其预设状况并未设定好 inetd 来控制所有的服务, 因此, 第一件事, 便是找出 /etc/inetd.conf 档案, 并检查有哪些现存的服务由它控制 ( 也就是没有 "#" 符号开头的那几行内容 )。 给您的第一个忠告就是, 除非真的需要这项服务, 不然千万别启动它, 那些从未使用的伺服程式里, 可能藏有臭虫, 避免有人利用此类漏洞入侵的最好方法, 就是不要用它。 假设读者手边有一份 inet.conf 档案的内容, 接下来我就解译一下里头的意义。 举例来说, 下面这一行:
第一个字是所提供的服务名称 ( 本例中指的是 "ftp", 我们可以另外在 /etc/services 档案里, 查出它所连结的是哪一个埠号 )。 第二个栏位是所开启的 socket 类型,它可以是: stream ( 如本例即是 )、 dgram、 raw、 rdm、 或 seqpacket。 接下来的栏位是所使用的通讯协定, 您必须先在 /etc/protocols 档案中宣告, 在前例中, 我们假定您已经在此档里宣告了 TCP 通讯协定。 在通讯协定之後, 接著是 wait/nowait 的栏位。 除了 datagram (dgram) 类型之外的 socket, 其他都应该是 nowait, 至於 datagram 类型的 socket, 如果伺服程式支援多执行绪, 那麽我们应该设定 nowait, 如果伺服程式仅支援单一执行绪, 那麽请设定为 wait。 原因是多执行绪系统, 当其收到连线要求时, 它会启动一个新的 process, 然後再把原本的 socket 释放掉, 让 inetd 可以继续 listen 其他的连线要求, 因此要使用 nowait。 在单一执行绪系统的场合, 则需要设定为 wait, 因为伺服程式会一直守著同一个 socket, 而不能另外产生 process 以供连结。 除此之外, 还有一些格式上的变化, 我们可以写成 nowait.50 -- 代表短时间内, 最多可以启动 50 个伺服程式 ( 从另一个角度来看, 或者可以说, 是接受这麽多个连线要求 )。 其预设值是 40 个。 第五个栏位, 指明了伺服程式, 是以哪位使用者的名称来执行, 在这个例子中, ftp 是以 root 这个使用者名称来执行。 第六个以及接下来的栏位, 便是执行的程式与其所接的参数了。 在我们的例子当中, 伺服程式 tcpd 被启动, 後头接了伺服程式 in.ftpd 与 -l -a 为参数。 接下来, 我们就要来谈谈最有趣的部份, TCPD 的设定问题。 嗯, tcpd 是个用来过滤连线要求的伺服程式, 它会根据哪个伺服程式即将被启动, 来决定做哪些事, 以向提出这些连线要求的 IP 位址, 做出回应的动作。 而究竟会怎麽做决定, 则视 /etc/hosts.allow 与 /etc/hosts.deny 这两个档案如何设定。 原则上, /etc/hosts.deny 档案是用来指定拒绝向哪些主机提供服务, 而 /etc/hosts.allow 档案则是用来指定允许向哪些 机提供服务。 这两个档案的设定格式如下:
上述的 DAEMON, 可以是想要启动的伺服程式名称, 如前例中所示的 in.ftpd, 或者是 ALL 这个字, 它代表著所有的伺服程式。 IP 可以是某个特定的 IP, 或是某个 URL, 或是某一范围的 IP ( 或 URL ), 或者是等一下会解释到的万用字。 为了能够指定某一范围的 IP 位址, 例如说, 我们可以这样写: `123.32, 这个表示方式, 代表了 123.32.XXX.XXX 的所有 IP, 同样地, 像 `.ml.org 可以用来指定某一范围的 URL, 它代表所有 ml.org 底下的子网路。 以 IP/MASK 之格式来指定某一范围的 IP, 则是更为传统的方法, 举例来说, 从 127.0.0.0 到 127.0.255.255, 此一范围的 IP 可被指定为 127.0.0.0/255.255.0.0 前面提到的万用字有: ALL 代表档案里, 所有可能的数值都是允许的LOCAL 会符合到所有名称里没有 ^?^?的主机UNKNOWN 代表所有名称或 IP 位址为未知的主机KNOWN 代表所有名称及 IP 位址均为已知的主机PARANOID 代表所有名称与 IP 位址并不一致的主机 前面提到的选项有: 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 客户端使用者的名称 %% 这是表示 % 这个字元 配合这些扩充字元与选页, 您已经可以做很多事了, 例如, 我知道有人设定成, 一旦有人想要经由 telnet 连进他的主机, 便自动送出一个 teardrop 攻击 :) 上一篇:MODEM]调制解调器的安装与配置 下一篇:虚拟服务器实现方法(动态均衡) 更多相关文章
|
推荐文章
精彩文章
|