FreeBSD升级及优化全攻略 ──文 重庆.樊礼(梦飞)
欢迎转载﹐本文遵循GNU协议规则﹗
前言 2 升级源码树 3 安装cvsup 3 升级系统源码树及ports 3 重新编译内核 3 优化编译环境 3 升级操作系统 3 升级配置文件 4 重新编译内核 4 重新启动服务器 5 优化FREEBSD 5 检查升级情况 5 打开防火墙 5 优化内核参数 5 安装防火墙 6 安装数据库MYSQL 7 安装mysql40-server和mysql40-client 7 安装phpmyadmin 8 安装FTP服务器 9 安装ftp软件(使用pure-ftpd/) 9 安装pureftpd_php_manager 10 安装APACHE服务器 11 安装apache13-modssl 11 安装PHP语言 12 安装php 12 安装ZendOptimizer 12 安装APACHE其它整合软件 13 安装mod_bandwidth 13 安装mod_fastcgi 14 安装mod_gzip 14 安装mod_limitipconn 15 安装mod_perl 15 安装mod_throttle 16 安装mod_watch 16 安装APACHE第三方软件 17 安装限制每个虚拟主机的并发数软件 17 安装防止ddos攻击的软件 18 其它需要安装的软件﹔ 18 安装MRTG 19 安装net-snmp 19 安装mrtg 19 设置虚空间的mrtg和流量分析 19 安装BIND 9 20 安装bind9 20 安装邮件服务器 21 安装qmail邮件系统 21 安装WEBMIN和USERMIN 21 安装webmin 21 安装usermin 22 结束语 22
前言
FREEBSD系统是一种非常 UNIX、非常 Free、非常 BSD -- UNIX 的操作系统,因为它过UNIX化,太过专业化了,教很多新手无从下手学习。我也是从几年前开始学习FREEBSD,并且在王波写的<FREEBSD使用大全>指导下,正式使用FREEBSD的。在这段使用和管理过程中,自己也积累了不少文章和实战经验。为了让更多的朋友喜欢上FREEBSD,喜欢上UNIX,我特地做了几次升级和优化实例,结合自己管理服务器空间的经验写出此文,希望在此抛砖引玉。 本文的目的是使新手可以根据此文章的步骤和方法,架设一台专业,高效,安全的FREEBSD出来,并且可以立即投入实际运用,故文章中对运用及命令的使用多于理论化的知识点的描述,如果您不明白命令有何作用,建议您查查相关资料。 本文假设已经架设好或者新安装了一台FREEBSD系统主机。 本文中引用了很多FREEBSD官方站数据及网上数据,还有更多的是自己在实际工作中的经验,当然,里面的参数并不一定完全适合您,所以请您在使用时,尽可能根据您的实际需要调整一些参数,使您的SERVER的性能完全的发挥出来。本文只是一个总的线索,如果我要拆开来一个一个详细解释,我想会花更多的篇幅来写的,因为我忙着04年1月的自考,只写了实际中的运作情况,请各位朋友见谅。
升级源码树 安装cvsup 进入:/usr/ports/net/cvsup make clean make deinstall make install make clean 即可
升级系统源码树及ports 更新/usr/share/examples/cvsup目录下stand-cvsup和ports-cvsup文件,并执行cvsup –g –L2 standard-supfile和cvsup –g –L2 ports-cvsup两个文件,升级ports树﹔
重新编译内核 优化编译环境 更新/etc/make.conf文件,做适当的编译优化,我的CPU是Intel的: CPUTYPE=i686 CFLAGS= -O3 -pipe COPTFLAGS= -O3 -pipe
升级操作系统 进入/usr/src 执行make world 整个过程很久,需要2小时左右。
升级配置文件 执行mergemaster升级配置文件,在此过程中,需要按i以便系统执行升级﹔
重新编译内核 到/sys/i386/conf里面,cp GENERIC onlinecq,再vi onlinecq优化内核,注意加入下面的内容 #disable ctrl+alt+delete options SC_DISABLE_REBOOT
#quota limit options QUOTA
#ipfw support options IPFIREWALL options DUMMYNET options HZ=3000 options IPDIVERT options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=100 options IPSTEALTH options TCP_DROP_SYNFIN options IPFIREWALL_DEFAULT_TO_ACCEPT options ICMP_BANDLIM
options ACCEPT_FILTER_DATA options ACCEPT_FILTER_HTTP
#ipfilter support #options IPFILTER #options IPFILTER_LOG #options IPFILTER_DEFAULT_BLOCK
再执行: /usr/sbin/config onlinecq cd ../../compile/onlinecq make depend make make install
重新启动服务器 到此为止,服务器操作系统及内核升级成功 reboot
优化FREEBSD 检查升级情况 使用ssh进入系统,使用uname –a 可以查到是否升级成功﹔
打开防火墙 更新rc.conf里面的设置,加上: #enable_quotas="YES" #check_quotas="YES" firewall_enable="YES" firewall_script="/etc/rc.firewall" firewall_type="/etc/ipfw.rules" #create it! firewall_quiet="NO" firewall_logging_enable="YES" log_in_vain="NO" tcp_drop_synfin="NO" tcp_restrict_rst="YES" icmp_drop_redirect="YES"
优化内核参数 修改系统内核参数,实现微调:vi /etc/sysctl.conf kern.ipc.somaxconn=8192 kern.ipc.maxsockbuf=2097152 kern.maxfilesperproc=32768 kern.maxfiles=65536 kern.securelevel=-1 net.inet.tcp.sendspace=65536 net.inet.tcp.recvspace=32768 net.inet.udp.maxdgram=57344 net.inet.icmp.drop_redirect=1 net.inet.icmp.log_redirect=0 net.inet.ip.redirect=0 net.inet6.ip6.redirect=0 net.inet.icmp.icmplim=100 net.inet.tcp.always_keepalive=0 net.inet.tcp.delayed_ack=0 net.inet.tcp.log_in_vain=0 net.inet.udp.log_in_vain=0 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1 net.local.stream.sendspace=65535 net.local.stream.recvspace=32768 net.inet.ip.fastforwarding=1 vfs.vmiodirenable=1
安装防火墙 防火墙在上面已经编译入了内核,并且在上面的rc.conf里面已经打开了,所以在此只要设置一下即可! 允许所有IP通过,免得把自己给挡在外面了。 ipfw add all from any to any
其它规则根据实际情况来做,如果您想系统每次启动都使用上一次的规则,可以把这些内容加到: vi /etc/ipfw.rules 里面,语法规则同ipfw。
安装数据库MYSQL 安装mysql40-server和mysql40-client 进入/usr/ports/databases/mysql40-server 执行: make clean make deinstall make WITH_OPENSSL=yes WITH_LinuxTHREADS=yes BUILD_OPTIMIZED=yes install 或者使用下面可参考的编译参数:BUILD_STATIC=yes 编译成静态执行版本 make clean
更改mysql的root密码: mysqladmin –uroot –p password 123456
生成/etc/my.cnf,使用如下命令: vi /etc/my.cnf [client] #password = your_password port = 3306 socket = /tmp/mysql.sock
[mysqld] skip-innodb skip-locking skip-networking set-variable = port=3306 set-variable = socket=/tmp/mysql.sock set-variable = back_log=50 set-variable = connect_timeout=3 set-variable = key_buffer=128M set-variable = max_connections=1000 set-variable = max_allowed_packet=1M set-variable = net_buffer_length=8K set-variable = wait_timeout=3 set-variable = read_buffer_size=1M set-variable = sort_buffer_size=1M set-variable = table_cache=256 set-variable = myisam_sort_buffer_size=32M set-variable = log_slow_queries=/var/log/log_slow_queries.log #log-bin server-id = 1
[mysqldump] quick set-variable = max_allowed_packet=16M
[mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates
[isamchk] set-variable = key_buffer=20M set-variable = sort_buffer=20M set-variable = read_buffer=2M set-variable = write_buffer=2M
[myisamchk] set-variable = key_buffer=20M set-variable = sort_buffer=20M set-variable = read_buffer=2M set-variable = write_buffer=2M
[mysqlhotcopy] interactive-timeout
安装phpmyadmin 注意,此步骤需要在apache和php之后再执行 进入/usr/ports/databases/phpmyadmin 执行: make clean make deinstall make install make clean
新建立一个system的数据库备用。
安装FTP服务器 安装ftp软件(使用pure-ftpd/) 进入/usr/ports/ftp/pufe-ftpd 执行: make clean make deinstall make WITH_MYSQL=1 install 或者使用下面可参考的编译参数:WITH_LANG=simplified-chinese 使用简体中文语言包 make clean 配置pure-ftpd,主要需要做以下的工作: cp /usr/local/etc/pure-ftpd.conf.sample /usr/local/etc/pure-ftpd.conf cp /usr/local/etc/pureftpd-mysql.conf.sample /usr/local/etc/pureftpd-mysql.conf
再修改/usr/local/etc/pure-ftpd.conf的如下部份为: NoAnonymous yes MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf
再修改/usr/local/etc/pureftpd-mysql.conf的如下部份为您的设定值: # Mandatory : user to bind the server as. MYSQLUser demo # Mandatory : user password. You must have a password. MYSQLPassword demo # Mandatory : database to open. MYSQLDatabase demo
再进入使用mysql –uroot –p123456 进入mysql的文本方式﹔ 使用如下命令建立新表: use system; DROP TABLE IF EXISTS users; CREATE TABLE users ( User varchar(16) NOT NULL default '', status enum('0','1') NOT NULL default '0', Password varchar(64) NOT NULL default '', Uid varchar(11) NOT NULL default '-1', Gid varchar(11) NOT NULL default '-1', Dir varchar(128) NOT NULL default '', ULBandwidth smallint(5) NOT NULL default '0', DLBandwidth smallint(5) NOT NULL default '0', comment tinytext NOT NULL, ipaccess varchar(15) NOT NULL default '*', QuotaSize smallint(5) NOT NULL default '0', QuotaFiles int(11) NOT NULL default 0, PRIMARY KEY (User), UNIQUE KEY User (User) ) TYPE=MyISAM;
安装pureftpd_php_manager 下载pureftpd_php_manager.zip 解压并放到指定的目录里面,比如: /usr/local/www/data chmod –R 755 /usr/local/www/data/pureftpd_php_manager
再加入一个普通用户和一个群组,以供ftp使用: pw groupadd ftpusers pw useradd ftpuser –g ftpusers –s /sbin/nologin
记住他们的uid和gid号,备用!
进入并编辑pureftp.config.php文件 更改里面的如下行: $PUREFTP_CONFIG_FILE = '/usr/local/etc/pureftpd-mysql.conf';^M
$DefaultUser = "ftpuser"; # Default User Logon^M $DefaultPass = ""; # Default User Password^M $DefaultUid = "1002"; # Default User ID ( must be a re al user acct )^M $DefaultGid = "1001"; # Default Group ID ( must be a r eal group acct )^M $DefaultDir = "/home"; # Default User Dir ( use /./ at the end to chroot )^M $DefaultUL = "0"; # Default Upload Throttl e ( 0 disables it )^M $DefaultDL = "0"; # Default Download Throt tle ( 0 disables it )^M $Defaultip = "*"; # Default IP restriction s ( * = any IP )^M $DefaultQS = "200"; # Default Quota Size ( 0 disable s it )^M $Defaultcmt = ""; # Default Comment for us er^M ^M // UA^M $DefaultQF = "0"; # Default Quota Files ( 0 disabl
安装APACHE服务器 安装apache13-modssl 进入/usr/ports/www/apache13-modssl 执行: make clean make deinstall make WITH_APACHE_SUEXEC=yes APACHE_HARD_SERVER_LIMIT=1024 APACHE_PERF_TUNING=yes install 编译时带上suexec和优化。 Make clean
取消所有Options里面的Indexes,禁止浏览目录及文件。 设置KeepAlive Off 安装PHP语言 安装php 进入/usr/ports/www/mod_php4 执行: make clean make deinstall make install 编译常用的选项即可,一定记得选择上mysql和gd。 Make clean 安装完成后,在/usr/local/etc/apache/httpd.conf里面,加入如下内容: AddType application/x-httpd-php .php .php3 .php4 .phtml AddType application/x-httpd-php-source .phps
替换DirectoryIndex细节为: <IfModule mod_dir.c> DirectoryIndex index.html index.htm index.wml index.cgi index.shtml index.jsp index.js index.jp index.php4 index.php3 index.php index.phtml default.htm default.html home.htm </IfModule>
再cp php.ini-recommended /etc/php.ini 以及修改php.ini里面的参数 vi /etc/php.ini 修改下面两处为: register_globals = On magic_quotes_gpc = On
安装ZendOptimizer 先下载ZendOptimizer-2.1.0b-FreeBSD4.0-i386.tar.gz 再执行 tar zxvf ZendOptimizer-2.1.0b-FreeBSD4.0-i386.tar.gz cd ZendOptimizer-2.1.0b-FreeBSD4.0-i386 sh setup 即可完成傻瓜式的安装。 注意:此时您的php.ini配置文件,一般会移到 /usr/loca/Zend/etc/php.ini 并且底部会增加以下几行: [Zend] zend_optimizer.optimization_level=15 zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-2.1.0 zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-2.1.0 zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so
您可以根据需要,改变15为1023,来提升加速的等级。
安装APACHE其它整合软件 安装mod_bandwidth 进入/usr/ports/www/mod_bandwidth 执行: make clean make deinstall make install 编译完成后,一定记得 vi /usr/local/etc/apache/httpd.conf LoadModule bandwidth_module libexec/apache/mod_bandwidth.so AddModule mod_bandwidth.c
make clean
语法及作用: * BandWidthModule 该模块的开关,可以对每个Server进行配置
* BandWidthPulse 设定计时单位,MS(微秒),建议为:1000000 (1秒)
* BandWidth 可以针对特定来源的对象控制流,rate以字节为单位,但当rate为0时,为不限制流速。 例子:
BandWidth ecp.fr 0 BandWidth 138.195 0 BandWidth all 1024
* LargeFileLimit 当传送一个大于等于filesize KB大小的档时,设定一个最大流速(字节/秒),当rate 为0的时候,不限速。 例子: LargeFileLimit 200 3072 LargeFileLimit 1024 2048 以上例子设定小于200KB的档将不会被限制流速,大小在200K到1024K之间的档将会被 限速3072 B/s,大于1024KB的文件将会被限速2048 B/s.
* MinBandWidth 设定每个连接传送数据的基本带宽占用,以Byte为单位。默认值:256 B/s。 当rate设定为0时,使用默认带宽限制。 安装mod_fastcgi 进入/usr/ports/www/mod_ fastcgi 执行: make clean make deinstall make install 编译完成后,一定记得 vi /usr/local/etc/apache/httpd.conf LoadModule fastcgi_module libexec/apache/mod_fastcgi.so AddModule mod_fastcgi.c AddHandler fastcgi-script fcgi fcgi fpl
make clean
安装mod_gzip 进入/usr/ports/www/mod_gzip 执行: make clean make deinstall make install 编译完成后,一定记得 vi /usr/local/etc/apache/httpd.conf LoadModule gzip_module libexec/apache/mod_gzip.so AddModule mod_gzip.c
make clean
安装mod_limitipconn 进入/usr/ports/www/mod_limitipconn 执行: make clean make deinstall make install 编译完成后,一定记得 vi /usr/local/etc/apache/httpd.conf LoadModule limitipconn_module libexec/apache/mod_limitipconn.so AddModule mod_limitipconn.c
make clean
安装mod_perl 进入/usr/ports/www/mod_perl 执行: make clean make deinstall make install 编译完成后,一定记得 vi /usr/local/etc/apache/httpd.conf LoadModule perl_module libexec/apache/mod_perl.so AddModule mod_perl.c
make clean
安装mod_throttle 进入/usr/ports/www/mod_throttle 执行: make clean make deinstall make install 编译完成后,一定记得 vi /usr/local/etc/apache/httpd.conf LoadModule throttle_module libexec/apache/mod_throttle.so AddModule mod_throttle.c
make clean
安装mod_watch 进入/usr/ports/www/mod_watch 执行: make clean make deinstall make install 编译完成后,一定记得 vi /usr/local/etc/apache/httpd.conf LoadModule watch_module libexec/apache/mod_watch.so AddModule mod_watch.c
make clean
安装APACHE第三方软件 安装限制每个虚拟主机的并发数软件 mod_vhost_limit 安装: apxs -c mod_vhost_limit.c -o /path/to/libexec/mod_vhost_limit.so 在 httpd.conf 加入: LoadModule vhost_limit_module libexec/mod_vhost_limit.so AddModule mod_vhost_limit.c 配置: MaxClients 150 ExtendedStatus On NameVirtualHost * <VirtualHost *> ServerName server1 DocumentRoot /some/where/1 MaxVhostClients 100 </VirtualHost> <VirtualHost *> ServerName server2 DocumentRoot /some/where/2 MaxVhostClients 30 </VirtualHost> <VirtualHost *> ServerName server3 DocumentRoot /some/where/3 </VirtualHost> 其中: server1 被限制为 100 个并发线程数。 server2 被限制为 30 个并发线程数。 server3 没有被限制。
注:需 mod_status 的 ExtendedStatus On 支持!! 如超出限制的并发数在客户端就会出现503错误:
Service Temporarily Unavailable The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later. --------------------------------------------------------------------------------
Apache/1.3.27 Server at server1 Port 80
在 error_log 中将会有类似以下的错误提示: [Mon Jun 23 15:22:24 2003] [error] client access to server1 deferred, MaxVhostClients 100 exceeded
安装防止ddos攻击的软件 dosevasive1.8.tar.gz 安装方法:
tar zxvf mod_dosevasive.tar.gz cd dosevasive/ /usr/local/apache/bin/apxs -i -c mod_dosevasive.c vi /usr/local/apache/conf/httpd.conf 加入 LoadModule dosevasive_module libexec/mod_dosevasive.so AddModule mod_dosevasive.c <IfModule mod_dosevasive.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 </IfModule>
其它需要安装的软件﹔ 可选择安装的有: CPU温度监控软件 CPU负载监控软件 封包流量监控软件 ……
安装MRTG 安装net-snmp 进入/usr/ports/net/net-snmp 执行: make clean make deinstall make install make clean
安装mrtg 进入/usr/ports/net/mrtg 执行: make clean make deinstall make install make clean 设置虚空间的mrtg和流量分析 生成流量控制檔: /usr/local/sbin/apache2mrtg.pl /usr/local/etc/apache/httpd.conf > /usr/local/etc/apache/mod_watch.cfg 修改此文件,并且加如下头部信息:
WorkDir:/usr/local/www/data/mrtg Options[_]: growright,bits #Language: gb2312
#Title[^]: Traffic Analysis for PageTop[^]: <H1>Traffic Stats for OnlineCQ.COM User</H1><HR> #PageTop[$]: Contact QQ: 151482576<HR> PageFoot[^]: WWW.OnlineCQ.COM MSN: cqfanli@hotmail.com QQ:151482576
保证WorkDir目录可以被浏览器访问,并且目录存在!如果不是,您可以自己修改!
执行一下,看是否正确: /usr/local/sbin/mrtg /usr/local/etc/apache/mod_watch.cfg 如果有错误,多执行几次即可!
再将此加入到排程里面,15分钟自动执行一次: vi /etc/crontab */15 * * * * root /usr/local/bin/mrtg /usr/local/e tc/apache/mod_watch.cfg
安装BIND 9 安装bind9 这是一套域名解析系统,可以让您的SERVER做DNS SERVER,非常不错的! 进入/usr/ports/dns/bind9 make clean make deinstall make install make clean 然后再记得修改name.conf 等配置文件,具体的内容太复杂,建议看一下其它专门讲授这方面的书籍。
安装邮件服务器 安装qmail邮件系统 使用iceblood的安装包,傻瓜式的安装就可以了!注意第一次安装时,多看几遍它的说明,不要弄错了! 安装完成后,自己再加上qmailadmin,它可以让您在一台主机上面,开多个域名的企业邮局!
安装WEBMIN和USERMIN 安装webmin 先下载webmin最新版 再解压: tar zxvf webmin-1.100.tar.gz 进入目录开始安装: cd webmin-1.100 sh setup.sh
安装时使用它的默认设置即可,自己要设置好管理员密码,这一定要注意保密! 并且请设置为自动启动,以便以后可以通过此来管理。 安装完成后,可以通过如下方式访问: http://IP:10000/ 注意,默认埠是10000
安装usermin 先下载usermin最新版 再解压: tar zxvf usermin-1.030.tar.gz 进入目录开始安装: cd usermin-1.030 sh setup.sh
安装时使用它的默认设置即可。 安装完成后,可以通过如下方式访问: http://IP:20000/ 注意,默认埠是20000。 Usermin会自动和webmin整合的,使用webmin的管理员密码,并且可以在webmin里面启动它。
结束语 至此为止,一般可以实际运作的FREEBSD系统就建立起来了,您可以reboot一下,让最新的设置及软件生效。 如果在安装过程中出现错误,您可以先检查完错误,再接着安装下去。或者你可以选择你感兴趣的某些部份安装! 当然因为时间仓促,涉及到的知识太广,加上本人能力有限,其中错误在所难免,恳请各位读者提出来,大家共同提高,共同进步! 我的联络方式是: cqfanli@163.com
──文 重庆.樊礼(梦飞) 2003/12/30
附件: freebsd-update.pdf |