|
![]() | 作者: xiaojun [xiaojun]
![]() |
登录 |
1. 配置网络界面 2. TCP/IP 介绍 3. Inetd, "超级"服务程序 4. 文件传输协议 5. 电子邮件 6. POP3 电子邮件 7. Windows 文件共享: SAMBA 8. Web Servers 9. 设置一个域名服务器 10. 路由/网关 11. 防火墙 12. IP 网络地址转化 1. 配置网络界面 一个网络界面就是一个使你能同你的网络通信的设备. 这些设备可以是一个网卡, 或者一个调制解调器, 或是其他各种各样的使你能够通信的设备. 这些设备需要进 行配置以便使网络能够认出你是谁. 这些界面将用TCP/IP网络协议来配置. 通常在 /etc/rc.conf里配置, 或者/etc/sysconfig如果你用2.2.1或更老的版本. 2. TCP/IP 介绍 2.1 IP - Internet 协议 2.2 TCP - 传输控制协议 TCP/IP 是FreeBSD用来进行网络通信的协议. 当然, TCP/IP也是整个Internet 用来通信的协议, 这意味着FreeBSD也能用在Internet上. 本章试图给你一个 TCP/IP协议的概貌和在一个TCP/IP网络上配置你的FreeBSD机器所需要了解的内容. 在我们向你对TCP/IP作足够的介绍以使你能把它运行起来的同时, 如果你在维 护一个FreeBSD网络(或者任何类似的TCP/IP网络), 几乎可以肯定你还要对TCP/IP 协议有更多的了解. TCP/IP是一个大的足够用一整本书来描述的协议, 并且需要很 多人来完成! (恕我直言)有本很好的关于这个主题的书就是Craig Hunt所写的 <<TCP/IP Network Administration>>.由O'Reilly and Associates 出版. 这本书 有对TCP/IP的更具深度的描述并且覆盖了很多本书仅简单涉及的UNIX通用服务程序. 这本书在涉及配置文件等的时候会显得有些过时, 但你仍能领会出其中的概念. 如 果你对(TCP/IP)协议本身很感兴趣的话, Richard Stivens写了从理论开始一直到 实践知识的整整三卷书. <<TCP/IP Illustrated>>已由Addison Wesley出版. 注意: 虽然FreeBSD也可以使用Apple-talk和IPX/SPX(Novell)协议, 但这并 不是FreeBSD所使用的标准协议,所以我们将把注意力集中到FreeBSD使 用的TCP/IP上.在本书的应用程序部分将看到如何使FreeBSD成为Apple 和Novell 文件/打印服务器的替代品 - 我们在那里将讨论如何打开适 当的协议. 关于TCP/IP首先你需要知道的是它实际上是一族协议. 这一族协议使我们能把数据 从一台计算机传到另一台 -- 一个源头到一个目标 -- 而不知道数据在这段旅途上走 过的确切的路径.有三个重要的部分你需要了解: IP, TCP, 和 UDP. 2.1 IP - Internet 协议 本质上说, IP 产生包(packets). 什么是一个包? 一个包是一个小的数据"单元" 或"包".看下面的例子能使我们很容易理解包是什么, 和IP怎样来制造包. 假设你 有200k的数据要通过Internet传给你的朋友. 你可以把这个文件想成是一个数据 的"流" - 这个文件有一个开始,和一个顺序的字节集合(这里是200K个字节)一直到 文件的末尾. 任何这样的连续性的数据集合被称作"流",由于数据据有方向性. 识 别数据流最关键的是集合里的字节存在次序. IP 所做的就是把这些连续的数据流断 开成为离散的包("packets")以使它们能够被独立发送. IP 把数据流切成一个个的包, 然后包装这些包以使它们适合在Internet上传送, 并且在包上标明源地址和目标地址. 2.2 TCP - 传输控制协议 有关IP刚才我所没有告诉你的是, 很古怪的说, IP 是不可靠的. IP 并不保证某 个包能到达目的地, 或者全部包到达后再按原来的顺序恢复成数据流. 这就是要有 TCP的原因. TCP 按正确的次序来还原包并且保证所有的包都到达目的地. 没有 TCP, IP几乎没有用! 我猜这就是为什么叫它们TCP/IP的原因!! :-) 有一个次序号藏在每个包的地址信息里. IP 发送每个包出去的时候递增次序号, 而TCP用这些次序号把到达的包按正确的次序重新装配起来. TCP 也用次序号来判 断是否有包丢失. 如果某个包没有出现(不正确的路由,等等原因)TCP会向源地址 请求再发一次这个包. 并且将保持重试直到所有的包凑成一个数据流. 因此,TCP 使得TCP/IP包传送机制"可靠". TCP还加入了IP所没有提供的另一层次上的功能: 端口. IP 地址标识出网络上的 每台计算机, 而TCP 端口号标识出每台计算机上提供的每种服务. 端口号使得你 能同时运行很多种服务, 并且有一种机制保证每个请求能得到正确的服务. Web 服务器也许是你最熟悉的一个例子. WWW服务程序通常运行在80端口上. IP地址 加端口号请求的标准形式是 IP:端口号 - 例如, 192.168.100:80 . TCP使我们 能够同时向同一IP地址的Web 服务程序和telnet 服务程序(端口23)发送包. 太棒了!根据记录, 端口号的范围是 0 - 65000. 所有小于1024的端口号是有限 制的,意味着只有root有权限开始一个监听端口号小于1024的服务程序. 所有大 于1024的则可被任何用户进程使用 - 不需要有root权限. 3. Inetd, "超级"服务程序 正如我们先前揭示的, 一个FreeBSD系统能同时运行很多程序 - 对于FreeBSD 网络服务程序来说也一样; 它将为你要提供的每一种服务运行一个程序. 问题是, 每个服务程序都会吃掉一大块内存 - 而内存总是宝贵的. 解决方案是在收到请求 后启动相应的服务, 而在发送完应答给产生请求的客户机后又终止它. 然而一个服 务怎么知道什么时候该醒来呢? 这就是有inetd的原因. 它叫做 Internet "超级服务程序" 因为它控制着很多一 台典型的UNIX主机上存在的服务程序. inetd 监视着所有到达服务器上的请求的端 口号. 当一个请求到达时, inetd 在/etc/services 里寻找服务的名字. 就象我们 能在下面看到的, services 文件是一个端口号和服务名称的简单映射: (图略) 在inatd知道了要启动的服务的名字后, 它会在它的配置文件, /etc/inetd.conf 里查找配置信息,配置文件看起来象这样: (图略) 该文件通常的格式是: ● 服务名称 ● socket 类型 ● 协议 ● {wait|nowait}[/max-child] ● 用户 ● 服务程序 ● 服务程序参数 现在用一个具体的例子来说明它们分别代表什么. telnet stream tcp nowait root /usr/libexec/telnetd telnetd 第一个字段,telnet,是服务的名称. 这个名字必须和/etc/services里找到 的名字精确匹配. 第二和第三个字段, stream tcp, 描述了该服务所产生的连接的类 型. 在这种情况下, tcp 将处理包的顺序以使下载的信息成为无差错的数据流. 本字 段另外仅有一个选项,dgram udp,指定用UDP,而不是TCP来处理包的顺序(TCP/IP 里所 谓的"不可靠"数据报(datagram)). 第四个字段,root,指定用来运行服务的用户ID. inetd所启动的大多数程序都以 "root"或"nobody"身份运行. 接下来的字段告诉inetd在哪能找到要运行的程序, 和 任何要求的参数(在这个telnet 的例子里, 没有任何参数). 注意: 通过inetd来运行程序的缺点是, 当一个服务被频繁的运行,可能一 秒一次,或甚至一秒数百次的时候用它(inatd)不是很有效率. 你会 问为什么? 通常用inatd来运行程序可以减小占用的内存数量, 但这 带来的惩罚是每当有请求到达的时候都必须"fork"程序. 简单的说, "fork" 意味着inetd要为服务启动新的进程. 我们不打算详细讨论 fork一个进程所需要的额外开销的技术细节. 而只是说会有一个额 外的开销, 而在一个繁忙的系统上这足以导致一个可观的延迟. 因 此一些服务以"deamons"形式而非"inetd"运行. 你决定如何运行一个 服务程序完全取决于你认为它的重要性. 如果性能是决定因素,使程 序成为一个daemon(即常驻内存). 如果想减少内存的开销,则通过inetd 运行程序. 典型的, FTP,finger,talk,POP3,和telnetd通过inetd服 务程序来运行,但web servers 和邮件发送server(通常是sendmail) 是daemons.象NCSA和Apache之类的web Server甚至会事先"pre-forking" 几份拷贝以消除请求的数量很多时forking产生的额外开销! 如果你 安装了一种新的服务, 附带的文档通常会告诉你最有效使用它的方法. 4. 文件传输协议 Not yet Scheduled 5. 电子邮件 Not yet Scheduled 6. POP3 电子邮件 Not yet Scheduled 7. Windows 文件共享:SAMBA 如果你用ports来安装,则它把所有东西都装在/usr/lcoal/samba/二进制文件放 在bin目录里. 配置文件位于lib/smb.conf 如果是用package,它会把东西装到/usr/local/sbin配置文件在 /usr/lcoal/etc/smb.conf. 要想知道如何创建smb.conf配置文件可以读smb.conf 的man page. 这份关于smb.conf的文档写的很好也很全面. 你有可能会放到配置 文件里的每样东西都包含在man page里了.要读它,只需输入: man smb.conf 使用testparm来检查你的配置文件. testparm 也会告诉你缺省的配置文件在 哪里. 不管你是如何安装samba的, 你需要修改你的/etc/rc.local文件以使Samba在 系统启动时启动. 在你的rc.local里加入这两行: /usr/lcoal/sbin/smbd -D /usr/local/sbin/nmbd -D 8. Web Servers Not yet Scheduled 9. 设置一个域名服务器 首先你要有一个有效的域名. 你需要在你注册域名的地方给出你的主域名 服务器的IP地址. INTERNIC或你上一级的DNS会把这些做好的. 如果你设置一个子域名, 你需要在你的域上建立一个映射指向那个域的主 域名服务器. 首先: 在/etc/sysconfig文件,或者是新的/etc/rc.conf,加入一行: namedflags="-b /etc/namedb.named.boot" 这将在系统启动时启动名字服务的Daemon, 并让它把/etc/namedb/named.boot 作为配置文件. 现在进入/etc/namedb/目录,然后输入: sh make-localhost 这将在目录里创建localhost.rev文件. 所有的本地传输都需要这个文件. 现在创建或编辑named.boot文件 ++++++++++++++NAMED.BOOT EXAMPLE ++++++++++++++++++++ ;semi colons comment out statments. ; sortlist 128.3.0.0 ; The sort list gives higher priority to certain domains in the case ;of multi-homed hosts. directory /etc/namedb ; this denotes the directory that named should look to find all of the ; source files. ; type domain source host/file backup file cache . named.root ; named keeps a cache of recently looked up hostname in the file mentioned. primary 0.0.127.IN-ADDR.ARPA localhost.rev ; this is the local host entry needs to be there. Usually automatic. primary Berkeley.EDU your.domain.zone primary 32.128.IN-ADDR.ARPA your.domain.rev ; These lines are a pair. They represent the primary domain you control ; The first one is your domain and the second is the reverse lookup table. ; You need to have each DNS entry entered in to both files. ; You will need a pair of primary lines for each primary domain that ; you administer. secondary Berkeley.EDU 128.32.130.11 128.32.133.1 ucbhosts.bak secondary 32.128.IN-ADDR.ARPA 128.32.130.11 128.32.133.1 ucbhosts.rev.bak ; These lines are a pair also. They represent the domains that you are ; interested in knowing about if their DNS goes down. Or you may just be ; the back up DNS for them. ; Instead of source files, you specify the host that is the primary DNS ; for that domain. You must also specify that filename that named will ; store the temporary table in. ; You need a pair of these lines for each of the Domains that you are ; a secondary DNS for. ++++++++++++++++++++++End Example Named.boot File++++++++++++++++++ 如果你有域"my.domain.com", IP地址的范围是10.20.40 - 10.20.40.255,并且 需要一个主域名服务器,你可以在named.boot文件里加入这几行: primary my.domain.com my.domain.com.zone primary 40.20.10.IN-ADDR.ARPA my.domain.com.rev 现在需要制造primary source文件. 创建一个名为/etc/named/your.domain.zone 的文件(替换成你实际的域名). 它必须和named.boot里的primary段指定的文件名 匹配. 这是一个这样的文件的例子: IN soa bbcc.ctc.edu. root.bbcc.ctc.edu. ( 28 ;serial 10800 ;refresh every 3 hours 900 ;retry every 15 minutes 604800 ;expire after a week 86400 ;minimum of a day ) IN NS bbcc.ctc.edu. IN NS ctc.ctc.edu. IN NS bb.cc.wa.us. bbcc.ctc.edu. IN A 134.39.180.254 mail IN CNAME bbcc.ctc.edu. www IN CNAME bbcc.ctc.edu. irc IN CNAME bbcc.ctc.edu. bigbend.ctc.edu. IN CNAME bbcc.ctc.edu. athena IN A 134.39.180.5 IN HINFO intel 586-133 winnt proto IN A 134.39.180.6 aries IN CNAME bb.cc.wa.us. sal IN A 134.39.180.8 dialup3 IN A 134.39.180.252 ;end of file. 5)现在要产生主反向解析(primary reverse lookup)文件. 创建一个叫 /etc/named/your.domain.rev的文件.(替换成你实际的域名) 它必须和named.boot里的primary段指定的文件名匹配. 这是一个例子: IN soa bbcc.ctc.edu. root.bbcc.ctc.edu. ( 28 ;serial 10800 ;refresh every 3 hours 900 ;retry every 15 minutes 604800 ;expire after a week 86400 ;minimum of a day ) 8 IN PTR sal.bbcc.ctc.edu. 252 IN PTR dialup.bbcc.ctc.edu. 10. 路由/网关 Not yet Scheduled 11. 防火墙 Not yet Scheduled 12. IP 网络地址转化 12.1. 1)装入核心模块 12.2. 2)设置NAT规则 12.3. 3)装入NAT规则 12.4. 4)在网络界面间允许路由 12.5. 5)到子网的静态路由 12.6. 6)确定你的网络界面已被配置 在装完IpFilter后,你需要改动这三个文件: /etc/rc.local /etc/sysconfig /etc/natrules 这是在FreeBSD 2.1.6-RELEASE上用ipfilter 3.1.4的测试. 12.1. 1)装入核心模块 如果你使用可装入的核心模块你必须编辑/etc/rc.local文件以使模块在 启动时被装入. 用这一行: modload /lkm/if_ipl.o 如果没有使用,跳过此步. 12.2. 2)设置NAT规则 产生一个叫/etc/natrules的文件并放入你的系统所需要的规则. 如果你要 使用整个10网络: map fxp0 10.0.0.0/8 -> 208.8.0.1/32 portmap tcp/udp 10000:65000 下面是命令每一部分的解释: map 开始命令. fxp0 是真实internet地址的界面 10.0.0.0 是要使用的子网 /8 子网掩码, 就是 255.0.0.0 208.8.0.1 所使用的真实IP地址 /32 子网掩码255.255.255.255, 仅使用此IP地址 portmap tcp/udp 10000:65000 整个网络都用此端口号来重定向tcp/udp调用. 12.3. 3)装入NAT规则 每次计算机重新启动时NAT规则都必须被装入. 在你的/etc/rc.local文件里 放入这行: ipnat -f /etc/natrules 要检查它是否已装入,以root身份运行: ipnat -ls 12.4. 4)在网络界面间允许路由 告诉核心路由这些地址. 在/etc/rc.conf里加入: Gateway=YES 或者在/etc/rc.local里加入: sysctl -w net.inet.ip.forwarding=1 12.5. 5)到子网的静态路由 现在要给子网加入静态路由.编辑你的/etc/rc.conf, 在一个旧一些的系统 上是/etc/sysconfig. static_routes="foo" route_foo="10.0.0.0 -netmask 0xf0000000 -interface 10.0.0.1" 12.6. 6)确定你的网络界面已被配置 我有两块Intel Ether Express Pro B网卡. 一块是208.8.0.1另一块是10.0.0.1 你需要在/etc/sysconfig里作如下配置: network_interfaces="fxp0 fxp1" ifconfig_fxp0="inet 208.8.0.1 netmask 255.255.255.0" ifconfig_fxp1="inet 10.0.0.1 netmask 255.0.0.0" 注意: 当一台客户机在虚拟网络上使用ftp时,要用passive模式. 否则在取目录列表时会超时. [此贴被 铁笔神算(xiaojun) 在 8月4日15时17分 编辑过] |
地主 发表时间: 8/4 15:2 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号