Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5376277
  • 博文数量: 1144
  • 博客积分: 11974
  • 博客等级: 上将
  • 技术积分: 12312
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-13 20:06
文章存档

2017年(2)

2016年(14)

2015年(10)

2014年(28)

2013年(23)

2012年(29)

2011年(53)

2010年(86)

2009年(83)

2008年(43)

2007年(153)

2006年(575)

2005年(45)

分类: LINUX

2006-02-04 17:04:03

服务器托管一般性设置


本文讲述的是针对BSD系统作为生产系统托管到IDC中时进行的一般性安全、性能方面的设置。希望对那些喜欢使用BSD的朋友有所帮助。限于篇幅的原因,文中没有就具体问题展开的太多,有需要更深了解相关内容的朋友请自行查找相关的资料。限于本人知识的局限错误之处在所难免,希望大家批评指正。



作者:LLZQQ
联系:
适用:普通用户
来源:


文档目录:

1. 硬件平台选择

2. 系统与版本选择

3. 软件版本选择

4. 操作系统性能优化

5. 软件性能与安全设置

6. 操作系统安全设置

7. PF防火墙设置

8. 服务器远程管理

9. 服务器负载均衡

10.结束语






1. 硬件平台的选择

BSD操作系统发展到现在已经可以支持多种硬件平台。其中是NETBSD在这方面做的尤其引人瞩目。从硬件架构上考虑,作为一般使用者联系性价比一般推荐使用X86构架的硬件的平台安装BSD。在X86构架硬件上BSD系列操作系统都有不俗的性能表现,而且价格能被大家认同。经济上比较宽松的朋友购买品牌服务器应是上策。
对于预算比较少的朋友可以考虑一下DIY服务器。DIY服务器首要采用质量上乘的服务器机箱,良好的散热设计、充沛的电源供给是保证DIY服务器成功的关键。其次在大多数时候有必要采用服务器专用主板来搭建硬件系统。细心的朋友会发现服务器专用主板上CUP、内存条的排列是和PC主板不一样的,这是一种促进散热的设计。另外服务器主板上大量采用耐高温和长寿命的固态电容,这样的主板长时间连续工作不会出现电容的爆裂和爆浆现象从而造成服务器停机。目前质量有保障的服务器专用主板生产商有泰安和超微。大家在购买时可以留心一下。
网卡也是服务器的一个核心部件,没有它服务器提供服务器也就无从谈起了。在100M接入的情况下1000M网卡比100M网卡可以提供更好的网络性能,但价格也高出不少。这里推荐使用INTEL或3COM公司的产品,这两家的产品都被广大的使用者证明性能和稳定性是一流的,只是大家注意现在市场上假货比较多。
其他硬件如存储系统这里就不多说了,根据自己的预算酌情购买便是。

2. 系统与版本选择

在BSD家族中有三个重要分支:FREEBSD、OPENBSD、NETBSD,三个分支各有见长。FREEBSD以性能出众见长,OPENBSD以系统安全见长,NETBSD以兼容硬件多见长。实际上随着时间的推移这三个系统的各项技术指标之间的差距正在减小,各自的相互借鉴加快了这种趋势。从目前使用的用户数量看:FREEBSD>OPENBSD>NETBSD。考虑到NETBSD的用户数量相对较少,在下面个章节中主要针对FREEBSD和OPENBSD两个BSD分支展开。
具体到每个BSD分支推荐使用各自的稳定版本而不是当前版本,因为稳定版本是为生产服务的,当前版本只是一个技术过渡产品,很多系统BUG和系统安全漏洞都有待发现和修正。即使是使用稳定版本也会发现系统BUG和系统安全漏洞,只是比当前版本频率要低的多。通常我们新安装的版本并不是稳定版。我们要把它修正为一个稳定版本(stable)。到本文完成时FREEBSD的最新的稳定版本是6.0-stable,OPENBSD的稳定版本是3.8,NETBSD的稳定版本是3.0。下面简单列出BSD系统升级到稳定版本的步骤。

2.1 FREEBSD-6.0更新到稳定版

首先安装FreeBSD的系统源代码和Ports

# mount -t cd9660 /dev/acd0 /mnt/
# cd /mnt/6.0-RELEASE/ports
# ./install.sh

# cd /mnt/6.0-RELEASE/src
# ./install.sh all

更新FreeBSD的系统源代码以及Ports

# cd /usr/share/examples/cvsup
# vi standard-supfile
*default host=cvsup4.FreeBSDChina.org
*default release=cvs tag=RELENG_6

# cvsup -g -L 2 /usr/share/examples/cvsup/standard-supfile
# cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile

编译生成新的系统二进制文件

# cd /usr/src
# make buildworld
# make installworld
# reboot

    现在,你的系统已经是最新的了。注意新的系统升级完成之后一些原先安装的软件最好重新安装,否则很容易引发一些意想不到的问题。

2.2 OPENBSD-3.8系统更新

# cd /home/pub
# wget
# wget
# wget

# cd /usr
# tar zxvf /home/pub/ports.tar.gz                        //安装ports
# cd /usr/src
# tar zxvf /home/pub/src.tar.gz                                //安装系统代码
# tar zxvf /home/pub/sys.tar.gz                                //安装内核代码

通过cvsup得到最新的代码。

# pkg_add cvsup-16.1g-no_x11.tgz
# vi cvsup-supfile
============+===========+==============
# Defaults that apply to all the collections
*default release=cvs
*default delete use-rel-suffix
*default umask=002
*default host=openbsd.csie.nctu.edu.tw
*default base=/usr
*default prefix=/usr

# If your network link is T1 or faster, comment out the following line.
*default compress
#OpenBSD-all
OpenBSD-src
OpenBSD-www
OpenBSD-ports
#OpenBSD-x11
#OpenBSD-xf4
============+===========+==============

执行cvsup

# cvsup -g -L 2 cvsup-supfile

编译生成新的二进制文件

# cd /usr/src
# rm -r /usr/obj/*
# make obj && make build


3. 软件版本选择

我们在选择软件版本的时候常常陷入两难的境地,比较新的版本往往在性能上有所改进而且也许还加进了诱人的新功能。但新版本最致命的是你没办法知道它是否存在设计缺陷或安全方面的问题(因为没有足够长时间和足够多的人使用验证)。所以在把它用在生产环境之前需要非常慎重,即使你有勇气采用新发布的软件。从我个人来说不推荐使用版本比较新的尤其是新发布的软件版本。著名的WEB主机软件:APACHE做的就比较好,它有两个版本些列:稳定版本系列和新功能版本系列,这样的两条产品线方便了用户在两者中作出选择。总之用户在选择软件版本时要根据自己的实际情况,如果你部署的应用是非常关键的就一定要使用稳定成熟的版本,虽然这样的选择有时会带来一定程度上性能损失。
在FREEBSD系统上,官方推荐使用PORTS方式安装需要的软件包。这个做的好处是一方面简化了用户安装软件的过程,另一方面也可以在一定程度上保证了软件运行时的稳定和安全性(ports系统中会包含已发现软件的补丁,同时为提高软件的运行效率专门定制了软件编译参数),同时卸载通过PORTS安装的软件包也很容易。经常同步升级你的PORTS树对于软件的正确安装也是非常重要的,如果你发现每个软件包不能通过PORTS安装或在编译过程中出错,你首先应该考虑到的是升级同步PORTS树,如果还是不行再考虑其他的因素。
在OPENBSD系统上,我个人不推荐使用PORTS树来安装软件包,因为在每个OPENBSD的镜像站点上都有和PORTS中的软件相对应的二进制包。通过下载或远程安装这些编译好了的二进制包可以大大缩短软件的编译时间。无论新手还是老手,这种软件安装的方法无疑都是很合适的。OPENBSD的系统安全是一个完整的体系,这里面包含系统基本的二进制文件和用户后来安装的软件包。为了不破坏这个安全体系不推荐用户自行在系统上通过软件源码来编译安装软件,除非你要使用的软件找不到官方提供的现成的二进制安装包。

4. 操作系统性能优化

操作系统的优化首先要做的是系统内核的优化,通常优化系统内核的侧重点是简化系统内核同时如果有必要还可以把一些系统功能外部实现添加到内核中。通过内核优化一方面减小了内核体积,另一方面通过内核的精简还可以提高系统的安全性。这里列出FREEBSD和OPENBSD的内核优化编译过程。

4.1 FREEBSD内核优化编译

在上文中系统代码树已经更新了,这里就不再重复了

# cd /usr/src/sys/i386/conf
# mv /home/upload/MYCONFIG ./       //这里是我做好的内核配置文件
# chmod 644 MYCONFIG
# chown root:wheel MYCONFIG
# config MYCONFIG
# cd /usr/src
# make cleandepend
# make buildkernel KERNCONF=MYCONFIG
# make installkernel KERNCONF=MYCONFIG
# reboot

4.2 OPENBSD内核优化编译

在上文中系统代码树已经更新了,这里就不再重复了

# cd /usr/src/sys/arch/i386/conf
# mv /home/upload/MYCONFIG ./       //这里是我做好的内核配置文件
# /usr/sbin/config MYCONFIG
# cd /usr/src/sys/arch/i386/compile/MYCONFIG
# make clean
# make depend
# make

# cp /bsd /bsd.old
# cp bsd /bsd
# reboot

如果编译的新核心启动失败,尝试启动旧内核

boot> bsd.old

操作系统的优化另一个方面要做的工作是提高系统的网络性能,毕竟操作系统是通过网络向外提供服务的,下面列出我现在使用的网络优化参数。

4.3 FREEBSD网络优化

# vi /etc/sysctl.conf
=========+===========+===========+============
net.inet.ip.check_interface=1
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
net.inet.tcp.recvspace=65535
net.inet.tcp.sendspace=65535
kern.ipc.somaxconn=32768
kern.ipc.maxsockbuf=2097152
net.inet.ip.redirect=0
net.inet.icmp.icmplim=100
net.inet.tcp.always_keepalive=1
net.inet.tcp.delayed_ack=1
net.inet.udp.maxdgram=65535
net.local.stream.sendspace=65535
net.local.stream.recvspace=65535
kern.maxfiles=65536
kern.maxfilesperproc=65536
net.inet.udp.checksum=1
net.inet.tcp.msl=7500
net.inet.tcp.syncookies=1
kern.securelevel=0
net.inet.icmp.bmcastecho=0
net.inet.icmp.maskrepl=0
=========+===========+===========+============
# vi /boot/loader.conf
=========+===========+===========+============
kern.maxdsiz="536870912"                //这参数在你的内存小于512M时没必要设置
kern.ipc.maxsockets="4008"
kern.ipc.nmbclusters="32768"
kern.ipc.nmbufs="65535"
kern.ipc.nsfbufs="2496"
net.inet.tcp.tcbhashsize="2048"
=========+===========+===========+============

4.3 OPENBSD网络优化

# vi /etc/sysctl.conf
=========+===========+===========+============
kern.maxproc=65535
kern.maxfiles=65535
kern.somaxconn=2048
kern.maxclusters=32768
net.inet.tcp.recvspace=65535
net.inet.tcp.sendspace=65535
net.inet.udp.recvspace=65535
net.inet.udp.sendspace=32768
=========+===========+===========+============
上面各个参数的含义参看这里,这里就不写了:




5. 软件性能与安全设置

操作系统的优化还要做各个软件部分的性能优化,关于软件性能优化设计的内容很多,这里拿APACHE2+MYSQL+PHP为例简单说明一下。

5.1 APACHE性能与安全

# vi /usr/local/etc/apache2/httpd.conf
=========+===========+===========+============

StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 2000
MaxClients 1500
MaxRequestsPerChild 0                //这个数值不要改动,保持为“0”更好些


AddDefaultCharset GB2312
ServerTokens Prod                    //安全设定
ServerSignature Email                //安全设定

基于安全考虑如果用不到目录索引去掉下面一句中的“Indexes”:
Options Indexes FollowSymLinks
=========+===========+===========+============

有些网站设计者想限制下载用户所用的IP连接网站的并发连接数,这里有两种途径来做这件事:使用APACHE的模块mod_limitipconn和使用防火墙来作都可以做到。因为防火墙的处理IP连接的效率要大大高于APACHE本身所以使用防火墙做起来性能要好很多。下面简单说一下两者的做法。

5.2 使用MOD_LIMITIP限制IP连接数

# wget
# tar –zxvf mod_limitipconn-0.22.tar.gz
# cd mod_limitipconn-0.22
# vi Makefile
修改相关路径适应你的系统
# make install

# vi /usr/local/etc/apache2/httpd.conf
=========+===========+===========+============

                        //设置要控制的目录
MaxConnPerIP 3                       //限制单IP最大进程数
NoIPLimit image/*                    //非限制的文件类型


MaxConnPerIP 1
OnlyIPLimit audio/mpeg video         //可选限制的文件类型


=========+===========+===========+============

5.2 使用PF防火墙限制IP连接数

# vi /etc/pf.conf
加上下面一句,每个IP最多可以同时建立3个连接:
pass in on $ext_if proto tcp to $web_server port www flags S/SA keep state \
(max 2000, source-track rule, max-src-nodes 1000, max-src-states 3)

5.3 使用PF防火墙如果用户恶意短时间内发起多个连接就BLOCK掉这个IP一段时间。

# vi /etc/pf.conf
加上下面一句,每个IP最多可以同时建立3个连接,如果连接超过了3个这个IP地址就会被BLOCK一段时间:
table persist
block in quick on $ext_if inet proto tcp from to $web port 80
pass in quick on $ext_if proto tcp from any to $web port 80 flags S/SA \
keep state (max-src-conn 100, max-src-conn-rate 3/1, max-src-states 3 \
overload flush)

APACHE2.x在不修改源码的情况下,可以允许设置2万多个用户连接,一般来说这个数值绝对够用了。APACHE1.x在这种情况下最多允许256个用户访问,显然在大多数时候256显得太小了,需要修改源码来增加这个数值,以适应我们的需要。修改的方法很简单,在源码中找到httpd.h然后:

# vi httpd.h
=========+===========+===========+============
#define HARD_SERVER_LIMIT 256          //把256改为你需要的
=========+===========+===========+============

5.4 MYSQL性能与安全

如果你的MYSQL服务不需要和其他主机通信只是在本机上使用的话,这样设定一下很有必要:

# vi /etc/my.conf

[mysqld]
bind-address = 127.0.0.1              //加上这个设定

下面是MYSQL的几个常用的提高性能的设定,注意这个设置是针对2G内存设置的。

# vi /etc/my.conf
===========+===========+===========+============
[mysqld]
skip-innodb
skip-bdb
skip-name-resolve
skip-locking
#log-bin
set-variable = key_buffer=512M
set-variable = max_allowed_packet=4M
set-variable = table_cache=1024
set-variable = thread_cache=64
set-variable = join_buffer_size=32M
set-variable = sort_buffer=32M
set-variable = record_buffer=32M
set-variable = max_connections=512
set-variable = wait_timeout=120
set-variable = interactive_timeout=120
set-variable = max_connect_errors=30000
set-variable = long_query_time=1
set-variable = max_heap_table_size=256M
set-variable = tmp_table_size=128M
set-variable = thread_concurrency=8
set-variable = myisam_sort_buffer_size=128M
===========+===========+===========+============

还有一种提高数据库性能的方案就是在单机上运行多个MYSQL服务(每个服务监听不同的端口),这种方案对服务器硬件要求较高。

5.5 PHP性能与安全

如果下面的安全设定可能使你的某些PHP程序不能运行,酌情增减一下

# vi php.ini
===========+===========+===========+============
file_uploads=Off
register_globals = Off
safe_mode = On
display_errors = Off
disable_functions = passthru, exec, system, phpinfo, \
popen, chroot ,scandir ,chgrp , chown ,escapeshellcmd, escapeshellarg, \
shell_exec ,proc_open,proc_get_status
===========+===========+===========+============

6.  操作系统安全设置

6.1 FREEBSD安全设置

删除登陆时出现的系统信息提示

# > /etc/motd
# touch /etc/COPYRIGHT
# ee /etc/rc.conf
update_motd="NO"

关闭一些不安全的服务

# vi /etc/rc.conf

sendmail_enable="NONE"
nfs_server_enable="NO"
nfs_client_enable="NO"
portmap_enable="NO"
syslogd_enable="YES"
syslogd_flags="-ss"
icmp_drop_redirect="YES"
clear_tmp_enable="YES"
inetd_enable="NO"

禁止一般用户查看系统日志

# chmod g-w,o-r /var/log/*
# chmod 600 /etc/syslog.conf
# chmod 600 /etc/newsyslog.conf

为了防止cracker利用rootkit工具通过后门进入系统,对/bin,/sbin进行安全保护

# chflags schg /bin/*
# chflags schg /sbin/*

把系统的核心的运行层次设置为最安全的层次

# sysctl -w kern.securelevel=2

打开磁盘配额

# vi /etc/rc.conf
enable_quotas="YES"
check_quotas="YES"

禁止一般用户使用crontab,建立/etc/cron/allow文件把需要使用的用户放进去

# echo root > /var/cron/allow
# chmod 600 /var/cron/allow

6.2 OPENBSD安全设置

屏蔽登陆时的系统信息

# > /etc/motd
# vi /etc/rc           //这里注释掉了MOTD相关的行
============================== rc ===========================
# patch /etc/motd
#if [ ! -f /etc/motd ]; then
#       install -c -o root -g wheel -m 664 /dev/null /etc/motd
#fi
#T=`mktemp /tmp/_motd.XXXXXXXXXX`
#if [ $? -eq 0 ]; then
#       sysctl -n kern.version | sed 1q > $T
#       echo "" >> $T
#       sed '1,/^$/d' < /etc/motd >> $T
#       cmp -s $T /etc/motd || cp $T /etc/motd
#       rm -f $T
#fi
============================== rc ===========================

停用SENDMAIL

# vi /etc/rc.conf
sendmail_flags=NO

修改计划任务
# vi /etc/daily
找到下面代码
===========+===========+===========+============
sh /etc/security 2>;&1 >; $OUT
if [ -s $OUT ]; then
mail -s "$host daily insecurity output" root < $OUT
fi
===========+===========+===========+============
修改如下
===========+===========+===========+============
sh /etc/security 2>;&1 >; $OUT.TMP
if [ -s $OUT.TMP ]; then
echo "$host daily insecurity output" >; $OUT
cat $OUT.TMP >;>; $OUT
rm $OUT.TMP
/usr/libexec/mail.local root >; $OUT
fi
===========+===========+===========+============

# crontab –e
将下面三行:
===========+===========+===========+============
30 1 * * * /bin/sh /etc/daily 2>;&1 | tee /var/log/daily.out | mail - s "`/bin/hostname` daily output" root
30 3 * * 6 /bin/sh /etc/weekly 2>;&1 | tee /var/log/weekly.out | mail -s "`/bin/hostname` weekly output" root
30 5 1 * * /bin/sh /etc/monthly 2>;&1 | tee /var/log/monthly.out | mail -s "`/bin/hostname` monthly output" root
===========+===========+===========+============
修改如下:
===========+===========+===========+============
30 1 * * * /bin/sh /etc/daily 2>;&1 | tee /var/log/daily.out | /usr/libexec/mail.local root
30 3 * * 6 /bin/sh /etc/weekly 2>;&1 | tee /var/log/weekly.out | /usr/libexec/mail.local root
30 5 1 * * /bin/sh /etc/monthly 2>;&1 | tee /var/log/monthly.out | /usr/libexec/mail.local root
===========+===========+===========+============

禁用由inetd启动的程序

# vi /etc/sysctl.conf
inetd=NO

禁止一般用户查看系统日志

# chmod g-w,o-r /var/log/*

为了防止cracker利用rootkit工具通过后门进入系统。对/bin,/sbin进行安全保护

# chflags schg /bin/*
# chflags schg /sbin/*

把系统的核心的运行层次设置为最安全的层次

# sysctl -w kern.securelevel=2

7. 防火墙设置

    防火墙是用户访问服务器的第一道屏障,简单有效的规则设计是防火墙设置的基本要求。在BSD系统中常用的防火墙有IPFILTER、IPFW、PF,现在PF防火墙在FREEBSD、OPENBSD、NETBSD中都可以运行了。之所以大家都用PF防火墙,我想是和PF防火墙不俗的表现有必然的联系。下面列出我的PF防火墙规则,供大家参考。

# vi /etc/pf.conf
===========+===========+===========+============
ext_if = "{ fxp0 }"
loop = "lo0"
noroute = "{ 127.0.0.1/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 255.255.255.255/32 }"
ports = "{ 20, 21, 22, 25, 53, 80, 110 }"
web = "{127.0.0.1}"

set block-policy return
set optimization aggressive
set loginterface fxp0
set skip on lo0

scrub in all
rdr on $ext_if proto tcp from any to $ext_if port 80 -> $web port 80

antispoof for $ext_if inet

block all
block return
block in quick on $ext_if os NMAP
block in quick on $ext_if from $noroute to any
block out quick on $ext_if from any to $noroute

pass in on $ext_if proto tcp from any to $web port 80 flags S/SA synproxy state

pass quick on $loop all
pass in quick on $ext_if proto {tcp,udp} from any to any port $ports keep state
pass in quick proto tcp from any to any port 55000 >< 56000 keep state
pass out quick on $ext_if all keep state
===========+===========+===========+============
FREEBSD系统给我们提供了一个很好用的PF服务启动教本

# /etc/rc.d/pf start | stop | reload | restart

但是在OPENBSD系统上没有这样一个教本,启动PF服务是有/etc/rc这个公用教本实现的,用户在管理PF服务是就不是很方便了,下面给出一个独立PF启动教本:

# /etc/rc.d/pf.sh

===========+===========+===========+============
#!/bin/sh
# made by llzqq
# 02/08/ 2005
# pf startup scripts

case "$1" in

start)  
        if ifconfig pflog0 >/dev/null 2>&1; then
        ifconfig pflog0 up
        pflogd ${pflogd_flags}
        fi      

        if [ -f /etc/pf.conf ]; then
        /sbin/pfctl -e -F all -f /etc/pf.conf
        fi      
        ;;      

stop)   
        /sbin/pfctl -d -F all
        /usr/bin/pkill pflogd
        /sbin/ifconfig pflog0 down
        ;;      
*)      
        echo "$0 start | stop"
        ;;      

esac
exit 0  
===========+===========+===========+============

# chmod 555 /etc/rc.d/pf.sh
# /etc/rc.d/pf.sh start | stop

在上面的规则中我把外面访问的80端口定向到了本机回环地址(127.0.0.1),当服务器器遭到DOS攻击时不会使APACHE服务因处理大量连接而崩溃。那些不正常的半连接都由PF防火墙来处理。这样在对付DOS时效率上会高一些。
另外在高负载服务器上,可以考虑关闭防火墙的日志服务(pflog),这样可以显著降低服务器负担。

8. 服务器远程管理

服务器和它的管理者一般情况下是不在一块的,这就涉及到了服务器远程管理问题。目前都是通过SSH加密协议远程登陆到服务器上进行管理的。当管理员需要与服务器进行文件传输的时候首先想到的应该是通过SFTP进行传输。我在使用SFTP服务进行文件传输时发现个问题,就是传输速度总是不理想,很难超过1M/S。后来想想也难怪,通过SFTP服务进行传输时无论服务器端还是客户端都要进行高度数据加密和数据解密工作,这个应该是导致SFTP传输速度慢的根本原因。这里我向大家推荐使用FTP+SSL/TSLZ这种方式进行文件传输,速度上非常接近普通的FTP传输。这种方式的数据加密级别没有SFTP高,对加密级别没特殊要求的朋友不妨试试。关于FTP+SSL/TLS的配置文档详见这里

有时候我们在通过SSH登陆时会出现很长的延时才能连接到服务器上,这个现象尤其在高版本SSH服务器上比较严重。其原因归纳起来主要是由于SSH服务器在验证用户登陆时有反解析用户IP地址的操作,这需要一定的时间来完成,对登陆用户来说就是长时间的等待。解决这个问题也很简单,首先在/etc/ssh/sshd_config中禁用DNS解析,并且在/etc/hosts文件中添加登陆用户的IP和主机名信息即可。简单操作如下:

# vi /etc/ssh/sshd_config
UseDNS no
# vi /etc/hosts
221.62.x.x        llzqq
# reboot

SSH的KEY验证方式被认为比PASSWORD验证起码高一个安全级。而且PASSWORD不可能设置的很长,所以总有密码被猜出的事件发生。因此使用KEY验证方式登陆就非常必要了。KEY验证方式登陆需要客户端软件支持这种登陆验证方式。我习惯使用SecureCRT作客户端。下面简单说明使用SecureCRT用KEY方式验证登陆SSH服务器。

SecureCRT生成的key和sshd不兼容需要转换才能使用,key.pub为SecureCRT生成的pubkey

# ssh-keygen -X -f key.pub > key.pub2

# mkdir ~/.ssh
# touch ~/.ssh/authorized_keys
# cat key.pub2 >> ~/.ssh/authorized_keys
# rm freebsd.pub*


# vi /etc/ssh/sshd_config

===========+===========+===========+============
Port 22
Protocol 2

PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
===========+===========+===========+============

好了,现在可以使用SecureCRT用KEY方式验证登陆SSH服务器了。


9. 服务器负载均衡

服务器负载均衡到现在已经有很多成熟的技术实现,本文介绍两种成本低,容易实现的方案。一种是利用防火墙的IP地址重定向技术(rdr),另一种大家可能不是很成熟悉就是DNS负载均衡技术。
在BSD系统中IPF和PF防火墙都可以利用IP地址重定向技术实现服务器的负载均衡。具体操作也很简单。这种技术多用于为没有公网IP地址的多个服务器提供负载均衡这种情况。使用这种技术的好处是你只需要一个公网IP就可以了(本文中是:221.35.21.2),如下面例子:

使用pf防火墙实现服务器负载均衡:

web_servers = "{ 10.0.0.10, 10.0.0.11, 10.0.0.12, 10.0.0.13 }"
rdr on $ext_if proto tcp from any to any port 80 -> $web_servers \
round-robin sticky-address

使用ipfilter防火墙实现服务器负载均衡:

web_servers = "{ 10.0.0.10, 10.0.0.11, 10.0.0.12, 10.0.0.13 }"
rdr $ext_if 221.35.21.2/32 port 80 -> $web_servers port 80 tcp round-robin

IPFW防火墙没有使用过不知能否实现类似上面的技术。

要使用DNS服务器负载均衡技术,首先要自己建立自用DNS服务器(因为目前在公用DNS服务器上这个功能都没有开放),还要有合法的域名(这个可能是废话)。在你的DNS服务器上和你域名对应的ZONE文件中添加多个(具体是几个要看你要负载均衡的实际主机数)域名记录。比如你申请了域名home.com,而且你有3台需要负载均衡的主机,他们的IP地址分别是221.35.21.2,221.35.21.3,221.35.21.4。下面是ZONE文件中的设置:

# vi home.com
===========+===========+===========+============
$TTL 12h
$ORIGIN com.
@        IN        SOA        ns.home.com.        root.home.com.(
        2005121013 ;        Serial
        3600 ;                Refresh ( seconds )
        900 ;                Retry ( seconds )
        68400 ;                Expire ( seconds )
        12h ) ;                Minimum TTL for Zone ( seconds )
        ;
@                       IN                NS                      ns.home.com.
www                IN                A                221.35.21.2
www                IN                A                221.35.21.3
www                IN                A                221.35.21.4
===========+===========+===========+============

上面是在你自己的DNS服务器上的设置,你还需要登陆域名提供商提供的域名管理后台那里修改关于home.com这个域名的NS记录为你自己的DNS服务器。所有设置完成后DNS负载均衡就做好了,从此互联网上的用户每次访问时解析到的IP都时不一样的,而且他解析到每个IP的几率是相同的,也就是说实现了三台主机的负载均衡。
以上简单介绍了使用防火墙和DNS服务器来实现多网络主机的负载均衡。对比一下,用防火墙实现的负载均衡在网络流量很大时防火墙本身会成为性能上的瓶颈,而采用DNS的负载均衡技术不存在这个问题。

10.结束语

就目前国内的网络状况看,南方电信和北方网通之间的网络互通是个突出的问题。而且有些朋友在国内和国外都托管了服务器想分别为国内外的用户提供服务器,但怎样实现就近访问两台服务器也是个比较头痛的问题。现在第三方DNS策略解析服务已经有了,关于这方面的技术问题文中没有提及,有这方面需求的朋友不妨和我取得联系。

[ 本帖最后由 llzqq 于 2006-2-1 08:48 编辑 ]


: [我的内核配置文件,供参考] (2006-1-22 13:33, 4.84 K)
该附件被下载次数 143


: [本贴的pdf文档] (2006-1-22 18:44, 219.95 K)
该附件被下载次数 188
阅读(1633) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~