当前位置:Linux教程 - Linux综合 - TCPD 与使用 IPFWADM 来设定防火墙

TCPD 与使用 IPFWADM 来设定防火墙

  内容摘要: 本文扼要地介绍, 在系统里设定 inetd 服务, 以增进系统安全的方法, 我们把焦点放在 IPFWADM 这个系统管理工具, 以及 inetd 服务的设定上面。 ---------------------------------------------------------------- 首先, 我们必须厘清什麽是 inetd。 简单地说, inetd 是一个伺服程式, 用以控制主机连上网路时, 所提供的各项服务。 您有可能会遇到一部电脑, 其预设状况并未设定好 inetd 来控制所有的服务, 因此, 第一件事, 便是找出 /etc/inetd.conf 档案, 并检查有哪些现存的服务由它控制 ( 也就是没有 "#" 符号开头的那几行内容 )。 给您的第一个忠告就是, 除非真的需要这项服务, 不然千万别启动它, 那些从未使用的伺服程式里, 可能藏有臭虫, 避免有人利用此类漏洞入侵的最好方法, 就是不要用它。 假设读者手边有一份 inet.conf 档案的内容, 接下来我就解译一下里头的意义。 举例来说, 下面这一行: FTP stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a 第一个字是所提供的服务名称 ( 本例中指的是 "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: IP[: OPTION1 [: OPTION2 ]] 上述的 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 类似上面的选项设定, 不过, 它是用来指定拒绝连线的条件。
[1] [2] 下一页 

spawn 当收到连线要求时, 会启动一个命令壳的指令, 譬如说, 可以在每次有人想要从外面, 连进我的机器时, 执行一个哔声通知。 twist 这个和 spawn 选项类似, 不过, 当命令壳指令执行完毕後, 连线状态便会中断。 此一选项, 同样必须置於设定行的最後面。 上述的最後两个选项, 还可以配合适当的扩充字元给 tcpd 使用, 这些扩充字元有: %a 客户端主机的位址 %c 客户端的资讯 ( 可能是像 user@machine, 或是其他由客户端所得的资讯 ) %d %h 在可以取得的情况下, 这会代表客户端的名称或 IP 位址 %n 客户端的名称 %p 伺服程式的 PID %s 伺服端的资讯 ( 例如 daemon@machine 或只有 daemon 之资讯, 视情况而定 ) %u 客户端使用者的名称 %% 这是表示 % 这个字元 配合这些扩充字元与选页, 您已经可以做很多事了, 例如, 我知道有人设定成, 一旦有人想要经由 telnet 连进他的主机, 便自动送出一个 teardrop 攻击 :) 附注: teardrop 是一种 Dos ( Denial of Service, 会造成系统重新开机, 或重新起始化的攻击方式 )。 它是因为 TCP 封包重组时的臭虫而起, 多数的作业系统都有这个问题 ( 或者说, 以往的作业系统是如此, 因为许多的核心程式已经针对此问题, 加以修正了 ), 在 InterNet 上的资料, 是透过 TCP/IP 通讯协定来传送 ( 此一通讯定, 在其他类型的网路上也可以看到, 譬如像 intranet 就是 ), 实际上, 它是两种通讯协定: TCP 负责将资料, 加以分割成一段段的封包, 然後再把它传给 IP 通讯协定, 由它送往目的地; 一旦资料送达目的主机後, TCP 通讯协定会检查, 是否所有封包都完整, 然後再将它们重组成原本的资料。 然而, 上述 ( 以及许多根据此一原理 ) 的攻击方式, 利用多数的作业系统, 在重组封包之前, 不会检查封包过小的问题, 因此, 这样的机器在重组封包後, 就会发生错乱的状况。 显然地, 对此在下并不确定怎样才是完整的解释, 因此欢迎大家提出各式批评与指教。 好的, 经过上述的简短解释後, 让我们继续... 范 例: #hosts.allow ALL: 127.0.0.1 # 允许 localhost 进入做所有事 in.ftpd: ALL: spawn (wavplay /usr/share/sounds/intruder.wav & ) # 让所有人都可以透过 ftp 进入, # 但会启动一个声音档 ( 因此它可以警告我 ) in.telnetd: ALL: twist ( teardrop %h %h ) # 所有人想要透过 telnet 的话, # 送回一个 teardrop 的攻击 #fin #hosts.deny ALL: `.bsa.org # 禁止来自 bsa.org 网域的所有连线 in.fingerd: ALL # 禁止所有的 fingerd 服务 :) #fin 关於 tcpd, 我想说的就是这些了, 因为所学有限, 可能讲得不够好。 在下的建议是, 试著去实验一些设定项目, 并且熟读线上手册 ( tcpd, host_acess(5) 的 manual pages ), 相信读者可以学得比我所教的还要多。 接下来, 让我们进入 I PFWADM 工 具程式的部分。 首先, 不可或缺的是, 要把核心程式中, 有关 IP Firewalling 的支援加入 ( Networking -> Network firewalls + IP: firewalling )。 接下来, 重新编译及系统重新开机後, 我们就准备好可以使用这个工具了。 IPFWADM 可以让我们管理某些程式 ( 这些应用程式, 并不限於我在本文中所介绍的 ), 其 TCP、 UDP、 ICMP 封包的进出状况。 简单地说, 管理员可以规定哪些封包才允许进入, 可以指定的条件包括: 来自於某个 IP、 或某段 IP 范围的主机, 哪一个特定的埠号, 哪一种特定的通讯协定, 或是上述各种条件的组合... 同样地, 对於准备送往主机外的封包, 我们也可以具有相同程度的管理控制。 ipfwadm 有几种主要的参数: -A 指定记录 (accounting) 之处理方式 -I 指定准备进入主机内的封包 (incoming packets) 之处理方式 -O 指定准备送往主机外的封包 (outgoing packets) 之处理方式 -F 指定封包转送 (forwarding) 之处理方式 -M 用来进行 IP masquareding 的管理 本文中, 我只打算介绍 -I 与 -O 参数, 它们两者都具有相同的语法。 这些参数的选项有: -a 在表单後面加进一个或多个处理方式 -i 在表单前面加入一个或多个处理方式 -d 从表单里面删除一个或多个处理方式 <

(出处:http://www.sheup.com)


上一页 [1] [2] 

接下来, 让我们进入 I PFWADM 工 具程式的部分。 首先, 不可或缺的是, 要把核心程式中, 有关 IP Firewalling 的支援加入 ( Networking -> Network firewalls + IP: firewalling )。 接下来, 重新编译及系统重新开机後, 我们就准备好可以使用这个工具了。 IPFWADM 可以让我们管理某些程式 ( 这些应用程式, 并不限於我在本文中所介绍的 ), 其 TCP、 UDP、 ICMP 封包的进出状况。 简单地说, 管理员可以规定哪些封包才允许进入, 可以指定的条件包括: 来自於某个 IP、 或某段 IP 范围的主机, 哪一个特定的埠号, 哪一种特定的通讯协定, 或是上述各种条件的组合... 同样地, 对於准备送往主机外的封包, 我们也可以具有相同程度的管理控制。 ipfwadm 有几种主要的参数: -A 指定记录 (accounting) 之处理方式 -I 指定准备进入主机内的封包 (incoming packets) 之处理方式 -O 指定准备送往主机外的封包 (outgoing packets) 之处理方式 -F 指定封包转送 (forwarding) 之处理方式 -M 用来进行 IP masquareding 的管理 本文中, 我只打算介绍 -I 与 -O 参数, 它们两者都具有相同的语法。 这些参数的选项有: -a 在表单後面加进一个或多个处理方式 -i 在表单前面加入一个或多个处理方式 -d 从表单里面删除一个或多个处理方式 <

(出处:http://www.sheup.com)


上一页 [1] [2] [3]