常见问题常见问题   搜索搜索   会员列表会员列表   团队团队   注册注册    个人资料个人资料   登录查看您的站内信件登录查看您的站内信件   登录登录 

基于OpenBSD的宽带上网共享和网络服务

 
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 安装-配置-优化-安全
阅读上一个主题 :: 阅读下一个主题  
作者 留言
wxjoshua
精神病


注册时间: 2002-09-06
文章: 569

文章发表于: Fri 2002-10-25 14:41:10    发表主题: 基于OpenBSD的宽带上网共享和网络服务 引用并回复

基于OpenBSD的宽带上网共享和网络服务



洪磊 "huxley"



前言

随着个人计算机的普及,对于家庭用户来说,拥有一台以上PC的已经不少了,我们希望能够方便地同时上网。一些规模较小的学校、科研单位、商业机构,由于难以负担足够IP地址的费用,对共享IP上网也有迫切的需要。

随着宽带上网的逐渐推广,多台计算机共享一个Internet高带宽的连接显得越来越有意义。比较常见的做法一是购买专门的网络地址翻译(下简称NAT)机,二是在一台网关计算机上安装NAT软件或者应用程序代理服务软件1,其他计算机通过这个网关上网。第一种方法虽然安装、维护比较简便,性能好,但是需要进行一定的设备投资,并且NAT机的功能相对比较单一,难以实现其他Internet服务。第二种方法,网关机的操作系统如果使用Windows 95/98则稳定性不佳,不适合长期开机;使用Windows NT/2000则对作为硬件配置要求相对较高。

于是手头有一台低配置PC机的用户可能会想到Linux,但是本文要介绍的是BSD。与Linux不同,BSD是AT&T UNIX的“后代”,它不象Linux那样发行版本众多,却有更好的性能、可靠性与安全性。

目前有3个源码开放的BSD版本:FreeBSD,NetBSD和OpenBSD。FreeBSD是用户数最多的版本,它的主要特点是性能好,Yahoo、ftp.cdrom.com等知名网站用的就是这个操作系统。NetBSD的特点是对各种硬件平台的广泛支持,它支持从手持设备到大型服务器的多种平台。OpenBSD的特点是安全性,在OpenBSD的网址,我们可以看到这样一句话:“三年来没有发现缺省安装的OpenBSD的一个远程安全漏洞!”,另外它支持的硬件平台也不少,不过目前还不支持SMP(对称多处理器)。



现在我们就以线缆(Cable)宽带接入为例,谈谈如何利用基于OpenBSD操作系统的网关机,使多台计算机共享一个线缆调制解调器(Cable Modem,下称CM)的Internet连接。



安装OpenBSD

我们先准备一下硬件:Pentium133 CPU,16M内存,1G硬盘,2块以太网卡。其实OpenBSD可以在低得多的配置上运行得很好,不过既然我们会开通一些网络服务,配置还是不要太低了。另外如果共享上网的客户机很多,可以适当增加内存。显卡、显示器、软驱、CDROM和键盘,仅仅在安装、配置的过程中需要,一旦系统投入运行,就都不需要了。

两点建议:(1) OpenBSD的分区工具的功能强大,但是易用性不大好(不如Linux),所以建议将整个硬盘全部分配给OpenBSD使用,不要和其他操作系统混用--不是不可以,而是分区比较麻烦。(2)网卡建议用常见的NE2000兼容网卡,比如Realtek RTL8029(AS)芯片的10M PCI卡。OpenBSD支持的网卡并不是很多,用名牌的网卡对于速度等方面并没有太大的帮助,万一兼容性有问题还要添麻烦。

OpenBSD有3种安装方式:CDROM安装,FTP安装和硬盘安装。如果PC的BIOS支持光盘启动的话,那么CDROM安装是最方便的,我们来看一下安装的主要过程。

从CDROM启动后选择(I)nstall,对提示的“Specify terminal type”直接按回车采用默认值,系统会列出当前所有的硬盘并提问“Which disk is the root disk?”。注意对于IDE接口的硬盘,BSD给它的设备名是 wd0,wd1,……;对于SCSI接口的硬盘是 sd0,sd1,……。我们的PC有一个IDE硬盘,输入wd0并回车。系统提问“Do you want to use the *entire* disk for OpenBSD?”,输入yes并回车,系统会启动fdisk并将整个硬盘空间都分给BSD系统。输入write、quit,系统会保存分区设置并启动disklabel。Disklabel的作用是在fdisk建立的给BSD用的BIOS分区中,划分出不同的BSD分区。我们可以在disklabel的命令提示符“>”下,随时使用?命令显示帮助信息,使用p命令打印当前的BSD分区划分情况。为了不搞得太复杂,我们仅把它划分为一个“/”和一个swap分区。先用z命令把BSD分区清空,再用“a b”命令添加一个新分区,offset直接回车用缺省值,size输入“128M”(如果任务比较重而有足够的磁盘空间,也可以大一些比如256M甚至512M),FS type用缺省的“swap”。然后用“a a”命令添加一个新分区,offset用缺省值,size输入“*”使用全部剩余空间,FS type用缺省的“4.2BSD”。最后用w、q保存并退出disklabel。接着系统会提示更改mount point信息,看看wd0a和wd0b是不是分别mount到了“/”和“swap”,完成后输入done结束。如果一切正确就一直回车直到看到“Are you really sure that you're ready to proceed?”,输入“y”回车,系统就开始格式化硬盘了。格式化完毕,先不要进行网络配置。接着是设置root用户的口令。下面问要不要运行X Window System,这个图形用户界面对我们没有用,如果硬盘空间够的话,选上也可以。下一步就是正式开始安装了,系统会问从什么地方安装(我们这里是CDROM)、CDROM设备名、文件系统种类以及安装文件位置,全部用缺省值。接着系统列出全部安装包,可以输入一个“*”全部选上,再输入一个“done”开始安装。安装完毕后系统问“Extract more sets?”,直接回车跳过。下一步是设置时区,中国是在Asia下面,选择你所在的城市。最后系统会建立启动信息等等,直到看到“CONGRATULATIONS! You have successfully installed OpenBSD! ”说明安装已经成功,系统返回命令提示符下,输入“reboot”并回车,重新启动系统。



配置网络

重新启动后,用root用户和刚才设置的口令进入系统,键入“ifconfig -a”查看所有网络接口,我们会看到有诸如“ne3: …… media: Ethernet ……”这样的显示,针对不同的网卡OpenBSD会有不同的接口名,这里假设用的的是NE2000兼容网卡,命名为“ne”,后面的数字表示它插在第几号PCI槽(从AGP槽的那面开始数)。现在假设我们的两块网卡分别插在3号、4号PCI槽里,则它们的接口名分别是ne3、ne4。现在我们打算把ne4接到CM上,把ne3接到内部LAN的HUB上。

由于CM是通过DHCP来获得IP地址的,我们先把ne4设置成通过DHCP获得IP地址:

# echo dhcp > /etc/hostname.ne4

OpenBSD启动的时候发现hostname.ne4中的内容是“dhcp”,就会启动dhcp client去请求IP地址、子网掩码、网关地址、DNS地址等设置。可以手工调整dhcp client的配置,但是这里没有必要了。

然后我们设置连接内部LAN的ne3的网络设置(假设内部网络使用的是保留的IP地址192.168.0.x,子网掩码是255.255.255.0):

# echo "inet 192.168.0.1 255.255.255.0 NONE" > /etc/hostname.ne3

将ne3的IP地址设置为192.168.0.1,最后的那个NONE表示不指定网卡的media option。

为了在NAT机上可以正确进行DNS解析,我们还需要配置一下/etc/resolv.conf文件,举例来说:

# cat /etc/resolv.conf

nameserver 210.52.149.2

nameserver 202.96.209.133

lookup file bind

第一、二行列出了两个不同的DNS服务器的IP,第三行表示先从/etc/hosts文件中查找,如果失败再到DNS服务器查找。

NAT大概的运作方式是这样的:假设内部网络上的计算机A需要访问Internet,则A把数据包发送到网关机N,N收到A的数据包后,把请求者的IP地址换成自己,然后发送到目的地去。收到目的地发来的回答后,N再把它转发到A机。NAT是在低层次起作用的,与在高层次起作用的代理比如应用层代理(常见的有HTTP proxy等)相比,对于A机来说,它不用将自己的应用程序设置成使用代理(有的应用程序并不支持代理),除了无法从外部直接连接到A机之外,所有的使用都和直接连接Internet一样。

下面我们来配置NAT:

修改 /etc/rc.conf

ipfilter=YES

ipnat=YES

修改 /etc/sysctl.conf

net.inet.ip.forwarding=1

再修改配置防火墙规则,现在我们先不设置任何复杂规则,仅仅允许所有的信息通过:

# cat /etc/ipf.rules

pass in from any to any

pass out from any to any

然后是NAT规则:

# cat /etc/ipnat.rules

map ne4 192.168.0.0/24 -> ne4/32 portmap tcp/udp 10000:60000

map ne4 192.168.0.0/24 -> ne4/32

这些规则表示将内部网的IP地址192.168.0.x 、子网掩码为255.255.255.0,映射到ne4网络接口上去。第一行是映射TCP和UDP的,第二行是映射其他协议的。



现在所有的配置都完成了,把CM和ne4连接好,并把内部LAN的HUB连接到ne3上,键入reboot重启动。将内部LAN上的计算机的网卡接口的IP设置成 192.168.0.2,192.168.0.3……,子网掩码为255.255.255.0,网关为192.168.0.1,DNS服务器为ISP提供的DNS服务器的IP(比如210.52.149.2,202.96.209.133),根据需要可能需要重启动。试试看是不是已经可以上Internet了?



进一步的配置

下面介绍一下在我们刚才构筑的基于OpenBSD的NAT网关机的基础上,进一步设置一些网络服务的方法。值得注意的是:从安全性考虑,不是必要的服务就不要开!



1. 远程登录

OpenBSD缺省安装后,启动的服务很少。telnet服务是缺省关闭的,因为telnet是明文的协议,有被窃听的危险。OpenBSD打开了ssh服务,这是一个加密的远程登录服务。为了使用这个服务,必须在客户机上安装支持ssh协议的终端软件。在Windows操作系统下,可以用SecureCRT。安装完终端软件后,建立到服务器192.168.0.1的连接,注意使用standard SSH。



2. 串口终端

对于这个NAT服务器来说,我们可以不要显卡、显示器和键盘。但是如果配置网络出了问题,远程登录无法连接到服务器就比较麻烦了--因为我们已经把服务器的显示系统和键盘都去掉了。所以有必要建立一个比较保险的连接途径。我们可以通过串口终端的方式,连接到服务器。

a) echo -P > /boot.config 这个目的是告诉boot模块,如果发现键盘不存在,就进入serial console模式;

b) 修改 /etc/ttys,将tty00的status改为on,后面可以加上secure(允许root从serial console登录)--这里假设你用的是COM1口;如果你没有那种标准的null modem线,而只有那种RX、TX、地三根线的串口电缆,就再加上一个 softcar;

c) 在COM1上接终端,或者接到另一台电脑,比如运行Windows的PC,随便安装一个支持串口终端方式的软件,比如Hypertermial、Netterm、SecureCRT,新建立一个session,用串口协议,速率9600,data 8, parity none, stopbit 1,flow control XON/XOFF(假设用的是softcar);

d) 重启OpenBSD的机器,不要忘记拔掉键盘!

如果觉得9600bps的速率太慢,可以在 /etc/ttys中设置,并且将终端或者终端仿真软件的速率设置成相同的就可以了。举个例子:

tty00 "/usr/libexec/getty std.57600" vt100 on secure softcar



3. WEB服务

将/etc/rc.conf中,找到httpd_flags=NO,将NO去掉,下次启动的时候WEB服务就打开了。WEB服务的缺省根目录是/var/www,配置文件是/var/www/conf/httpd.conf。



4. 匿名FTP服务

首先要增加一个用户名ftp,但是为了安全原因,这个用户不允许登陆,仅仅作为匿名FTP使用:

a) echo /usr/bin/false >> /etc/shells

这是允许/usr/bin/false作为用户的shell

b) 添加一个用户ftp,属于ftp组,HOME为/home/ftp,注意将该用户的shell设置为/usr/bin/false,这样ftp用户就不能登陆到系统了。

再建立一些目录:

c) mkdir /home/ftp/pub

chmod 555 /home/ftp/pub

这个目录对所有人都是只读的,提供下载。

d) mkdir /home/ftp/incoming

chmod 777 /home/ftp/incoming

这个目录对所有人都是可写的2,提供上传和下载。

然后是设置ftpd的启动:

e) 编辑/etc/rc.conf,找到ftpd_flags,修改为ftpd_flags="-DllUSA"。

这些参数将使得ftpd作为守护进程启动,只允许匿名FTP,并且会将详细的连接、使用情况记录到/var/log/ftpd和/var/log/xferlog中。

最后,还有一些信息文件可以修改:

f) /etc/ftpwelcome

当用户使用ftp客户端软件连接到服务器后,显示的欢迎信息。

g) .message

/home/ftp下面的任何目录里都可以有这个文件,用户进入这个目录后就会显示这个文件的内容。



5. 动态域名解析

一般宽带接入商不一定提供固定IP给用户,每次开机动态分配的IP都有可能不同。为了方便外界连接,最好有一个动态的域名解析。Internet上提供免费域名解析的服务商很多,这里我们以hammernode为例介绍一下如何配置动态域名解析。

首先是申请一个免费的域名。访问hammernode的主页http://www.hn.org,点击Create an Account申请一个帐号。具体过程并不复杂,这里从略。假设申请到的用户名是someuser,那么我们就有了一个someuser.hn.org的域名。

然后我们要设置OpenBSD在启动获得DHCP分配的IP地址后,自动去更新someuser.hn.org对应的IP地址,我们可以在/etc/rc.local的末尾运行一个程序来完成这个更新。

# Register someuser.hn.org with IP address of ne4 interface

if [ -x /usr/local/sbin/hn-register.pl ]; then

/usr/local/sbin/hn-register.pl &

fi

在服务器关机的时候,有必要将someuser.hn.org动态域名关闭,不知情的使用者连接到别的主机上去,修改/etc/rc.shutdown,在末尾加上:

# Turn off someuser.hn.org IP address

if [ -x /usr/local/sbin/hn-turnoff.pl ]; then

/usr/local/sbin/hn-turnoff.pl

fi

上面的hn-register.pl和hn-turnoff.pl是根据

http://www.technopagan.org/software/hammernode.pl

改写的,这是一段用perl写的简单程序(必须先安装perl的package)。 hn-register.pl是连接到服务器,提供用户名和密码后,服务器会根据探测到的IP地址,自动进行注册,5分钟之内会生效。Hn-turnoff.pl是将IP地址注册为指定的0.0.0.0。



6. 电子邮件服务sendmail

一般来说sendmail服务需要一个固定的IP,但是由于服务器一般是常开的,所以我们还是可以运行sendmail服务的。这里有一个难点,就是一般免费的动态域名注册服务都是进行域名->IP的正向解析,而IP->域名的反向解析不能实现。但是sendmail服务启动的过程中却会使用gethostbyaddr取得域名,才能正常使用。为此我们必须做一点手脚:

a) 再次访问hammernode的主页,点击Modify your Account,输入someuser和用户名,在Primary MX前面打钩。

b) 检查/etc/rc.conf中,sendmail_flag=NO。因为我们不能在ne4通过DHCP得到IP之前启动sendmail。

c) 将原先的/etc/hosts保存到另一个文件中

cp /etc/hosts /etc/hosts.fixed

d) 在/etc/rc.local的末尾添加这些内容:

# Set hosts

if [ -e /etc/hosts.fixed ]; then

cp /etc/hosts.fixed /etc/hosts

/sbin/ifconfig ne4|grep "inet "|awk '{print($2," someuser someuser.hn.org");}' >> /etc/hosts

fi

# Start sendmail

/usr/sbin/sendmail -bd -q15m

第一部分是将ne4的IP和域名加hosts中。前文说到,在resolv.conf里我们有

lookup file bind

这一句,所以系统会先到hosts文件去进行域名解析。这样,gethostbyaddr就能够成功了。

e) 在/etc/rc.shutdown的末尾添加这些内容:

# Set hosts back

if [ -e /etc/hosts.fixed ]; then

cp /etc/hosts.fixed /etc/hosts

fi

这样做是在关机前恢复原来的hosts文件,这一步不是必需的。

f) 在/etc/mail/sendmail.cf中找到这样一行:

#Dj$w.Foo.COM

在这行的后面加一行:

Djsomeuser.hn.org

这样设置以后,下一次重启的时候,sendmail就可以工作了。从其他地方发一封email到root@someuser.hn.org,过一段时间看看,是不是root用户收到了一封信?



7. IP防火墙

在这台网关机上,我们可以设置基于IP过滤的防火墙,规则配置文件是/etc/ipf.rules。比如我们如果修改一下这个文件:

# cat /etc/ipf.rules

pass in quick on ne4 proto icmp from any to any icmp-type echorep

block in quick on ne4 proto icmp from any to any icmp-type redir

block in quick on ne4 proto icmp from any to any

block in quick on ne4 proto icmp from any to any icmp-type echo

pass in from any to any

pass out from any to any

第一行是允许内部LAN上的机器ping外部的IP得到的应答进入,第二到第四行是禁止其它的ICMP包进入,这样Internet上的机器就无法ping通OpenBSD机的IP地址了。最后的两行是允许其它的信息包进出。

上面的规则只是举例说明防火墙的设置,它并不是一个很严格的规则,对这方面有兴趣的朋友可以参考http://www.obfuscation.org/ipf/,那里有详细的IP过滤的资料。





基于OpenBSD的宽带上网共享和网络服务就介绍这些,OpenBSD的官方网站是www.openbsd.org,配置、使用中有什么问题可以去那里寻找答案,也欢迎探讨:huxley@kali.com.cn,请不要发广告邮件给我!



注:

1 NAT与应用程序代理工作在TCP/IP的不同层次上,前者的好处是对应用程序基本透明,后者的好处是能够进行基于内容的过滤,但是需要应用程序支持代理并进行正确的设置,并且系统开销比较大,对服务器的配置要求比较高。

2 OpenBSD 2.8的发行版中,ftpd有一个漏洞,如果匿名FTP提供可写的目录,必须打一个补丁,否则有被黑掉的可能性。

_________________
I have a dream:I want to travel the world.
返回页首
阅览会员资料 发送站内信件 浏览发表者的主页 Yahoo Messenger MSN Messenger
从以前的文章开始显示:   
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 安装-配置-优化-安全 论坛时间为 北京时间
1页/共1

 
转跳到:  
不能发布新主题
不能在这个论坛回复主题
不能在这个论坛编辑自己的文章
不能在这个论坛删除自己的文章
不能在这个论坛发表投票


Powered by phpBB 2023cc © 2003 Opensource Steps; © 2003-2009 The FreeBSD Simplified Chinese Project
Powered by phpBB © 2001, 2005 phpBB Group
Protected by Project Honey Pot and phpBB.cc
silvery-trainer
The FreeBSD China Project 网站: 中文计划网站 社区网站
The FreeBSD China Project 版权所有 (C) 1999 - 2003 网页设计版权 著作权和商标