|
发表于 2003-7-8 17:19:47
|
显示全部楼层
这是我上个月做邮件服务的手记,但是一直没有整理好,有记录上的小错:)
不敢拿出来献丑~:p
小型密集型部门级服务器--FreeBSD实现
版本v0.1 2003年6月22日
作者:nico
E-mail: nico@njfu.edu.cn
作者主页:http://www.wo-com.com
-------------------------------------------------------------------------------
一 部署准备
环境描述
-------------------------------------------------------------------------------
一个小型机房14台机器,共在一个c类100M以太网络中,通过Nat方式与Internet连通,在该网络环境中有Windows、 Freebsd 、Linux (Redhat Debian) 、Solaris 等类型的主机。
Network 202.119.209.0
Net mask 255.255.255.0
Gateway 202.119.209.1
nameserver 202.119.209.70
将部署之Server硬件资源
-------------------------------------------------------------------------------
CPU Celeron 400 MHZ
RAM 128 M
DISK 4GB
将部署之Server网络资源
-------------------------------------------------------------------------------
ip-addr:202.119.209.70
DomainName : www.nsn.com
Mail.nsn.com
计划提供之服务
-------------------------------------------------------------------------------
1. www服务
作为本实验环境的一个Web server,实现Webmail;
2. 域名解析服务 ;
解析域名 nsn.com ,作为本实验环境的Primary Name server;
3. 邮件服务
为本实验环境中的所有客户端(Windows、Linux 、FreeBSD、Solaris)提供POP3以及SMTP邮件服务;
4. FTP服务
为www管理员提供上传的途径、支持多用户FTP上传。
所需要之软件包
-------------------------------------------------------------------------------
操作系统:
FreeBSD 4.8release
www服务:
httpd-2.0.45.tar.gz
php-4.3.0.tar.gz
mysql-3.23.53.tar.gz
域名解析服务:
bind-9.2.0rc1.tar.gz
named.root
邮件服务:
qmail-1.03.tar.gz
qmail-103.patch
qmail-smtpd-auth-0.30.tar.gz
ucspi-tcp-0.88.nobase.patch
ucspi-tcp-0.88.tar.gz
checkpassword-0.90.tar.gz
cmd5checkpw-0.22.tar.gz
vpopmail-5.3.16.tar.gz
autorespond-2.0.0.tar.gz
ezmlm-0.53.tar.gz
ezmlm-idx-0.40.tar.gz
igenus_2_20030516_snap.tgz
qmailadmin-1.0.6.tar.gz
FTP 服务:
pure-ftpd-1.0.15.tar.gz
pureftpd_php_manager.zip
管理工具:
phpMyAdmin-2.5.0-php.zip
phpSysInfo-2.1.tar.gz
二 操作系统部署
约定
-------------------------------------------------------------------------------
在本文档中:
以“#”开始的语句为在root shell情况下执行的代码;
以“mysql>”开始的代码为在mysql下执行的代码;
以“//”开始的语句为注释
操作系统的安装与定制
-------------------------------------------------------------------------------
忽略 kernel configuration,等系统安装完毕以后再重新编译内核
安装类型选择developer
分区情况:
/ 300m
/boot 30m
/usr 1500m
/var 1300m
/tmp 700m
swap 256M
分区的注意点:
1. /tmp的大小很重要,当系统很繁忙的时候,就会频繁地访问/tmp,所以建议将/tmp单独作为一个分区;
2. /var作为一个单独的分区的原因是qmail的默认安装点是/var/qmail,所以当服务器投入使用的时候/var的访问量也必然不低。
3. swap为内存的1.5到2倍
安装freebsd的时候最好是跟着安装提示做,我个人认为freebsd的安装
程序不是很稳定,如果不按步就班地做,经常会出问题,尤其是fdisk
和disklabel那部分
安装时顺便将bash,lynx,unzip安装上
---------------------------------小参考--------------------------
bash
linux的标准shell,我觉得它比freebsd默认的tcsh友好,所以我比较喜欢使用
但是请不要将你的root的shell改成bash,因为这样可能导致root不能登陆,我只在
系统维护时使用它。
lynx
在没有图形界面时,是个不可缺少的浏览器,爱死它了
------------------------------------------------------------------
配置系统基本环境
------------------------------------------------------
添加用户
#pw useradd nico -g wheel
将用户加入wheel组是为了,能让用户使用su,成为root。freebsd默认的ssh策略是不让root登陆的,所以这个改动对远程管理非常有用。这样我就可以在我机器上对这个网络环境里面的服务器进行管理,不用到处跑了。
配置用户shell环境
vi ~/.cshrc
添加
alias ls ls -G
alias la ls -aG
alias lf ls -FAG
alias ll ls -lAG
alias rm rm -i
alias cp cp -i
alias mv mv -i
对cp,rm,mv分别设置别名,添加参数-i,是为了防止误删除和覆盖文件,这对于root来说就更是重要,如果root不小心将“rm –rf .”写成了“rm –rf /” 那么情况就会十分严重了,用了-i后就可以有个后悔的机会J
对ls添加-G是为了让终端能以彩色显示文件与目录,这样能更系统更人性化。
定制内核
-----------------------------------------------------
去除SCSI、RAID等不使用的功能,一精简内核,不做太多和太极端的优化。
三 关键子系统部署
-------------------------------------------------------------------------------
建立/tmp/software
#mkdir /tmp/software
以存放下载的软件
部署域名解析服务
-------------------------------------------------------------------------------
#tar zxvf bind-9.2.0rc1.tar.gz
#cd bind-9.2.0rc1
#./configure \
--prefix=/usr/local/named \
#make
#make install
#make clean
配置named
#cd /usr/local/named
#mkdir etc
#cd etc
创建 named.conf
// named.conf内容参考附件
#/usr/local/named/sbin/rndc-confgen > /usr/local/named/etc/rndc.conf
将rndc.conf文件里的key拷贝到named.conf,实现rndc对named的管理
#tail -n10 rndc.conf | head -n9 | sed -e s/#\ //g >> named.conf
配置名称数据库
#mkdir /var/namedb/
将准备好的db.202.119.209 localhost.rev nsn.com.zone拷贝到/var/namedb
//文件内容参考附件
启动named
#./named -gc ../etc/named.conf &
#/usr/local/named/sbin/rndc status
number of zones: 5
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
server is up and running
ok!named已经成功启动并运行了
设置启动运行
#ehco "/usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf &" >> /etc/rc.local
部署www服务
-------------------------------------------------------------------------------
安装mysql
-----------------------------------------------------
#tar zxvf mysql-3.23.53.tar.gz
#cd mysql-3.23.53
#./configure --prefix=/usr/local
#make && make install
#make clean
#pw groupadd mysql
#pw useradd mysql -g mysql -d /usr/local/mysql -s /sbin/nologin
#cd /usr/local/mysql
#mkdir var
#chown -R root:mysql .
#chown -R mysql:mysql var
#./bin/mysql_install_db
#./bin/safe_mysqld -u mysql
#./bin/mysqladmin -u root password 'mypassword'
#ln -s /usr/local/mysql/bin/mysql /bin/mysql
安装apache+php
-----------------------------------------------------
#tar zxvf httpd-2.0.45.tar.gz
#tar zxvf php-4.3.0.tar.gz
#cd httpd-2.0.45
#./configure \
--prefix=/usr/local/apache \
--enable-so \
--enable-shared=max \
#make
#make install
#make clean
#cd /tmp/software/php-4.3.0
#./configure \
--with-mysql=/usr/local/mysql \
--with-apxs2=/usr/local/apache/bin/apxs \
--enable-track-vars \
--enable-force-cgi-redirect \
--enable-pic \
--enable-inline-optimitation \
--enable-memory-limit \
--enable-bcmath \
--enable-calendar \
--enable-dbx \
--enable-dio \
--enable-mcal \
--with-config-file-path=/usr/local/apache/conf
#make && make install
#cd /usr/local/apache/conf
#cp /tmp/software/php-4.3.0/php.ini-dist ./php.ini
配置基本的服务器设置
-----------------------------------------------------
#pw groupadd apache
#pw useradd apache -g apache -s /sbin/nologin
建立web服务的目录
#mkdir /var/wwwroot
#mkdir /var/wwwroot/html
#mkdir /var/wwwroot/cgi-bin
建立邮件系统的web目录
#mkdir /var/mailwebroot
#mkdir /var/mailwebroot/html
#mkdir /var/mailwebroot/cgi-bin
#vi httpd.conf
设置主机信息,修改如下:
User apache
Group apache
ServerAdmin webmaster@nsn.com
ServerName www.nsn.com
DocumentRoot "/var/wwwroot/html"
设置虚拟主机,建立mail.nsn.com 和www.nsn.com的虚拟主机
详细见附件里面的配置文件
#apachectl start
#touch info.php
用phpinfo()测试一下,ok!
安装管理工具
-----------------------------------------------------
#mkdir /var/wwwroot/nsn_admin_page/
安装phpsys,phpmyadmin
#tar zxvf phpSysInfo-2.1.tar.gz
#unzip phpMyAdmin-2.5.0-php.zip
#mv phpSysInfo-2.1 /var/wwwroot/nsn_admin_page/phpsysinfo
#mv phpMyAdmin-2.5.0-php /var/wwwroot/nsn_admin_page/phpmyadmin
配置管理工具的安全
-----------------------------------------------------
设置/var/wwwroot/nsn_admin_page/管理的安全认证
<Directory "/var/wwwroot/html/nsn_admin_page">
Options Indexes
AllowOverride None
Order Allow,Deny
Allow from all
AuthType Basic
AuthName "nsn administration zone!"
AuthUserFile /var/wwwroot/.htUsers
AuthGroupFile /var/wwwroot/.htGroups
Require group administrator
</Directory>
#cd /var/wwwroot/
#touch /var/wwwroot/.htUsers
#touch /var/wwwroot/.htGroups
#chmod 600 .ht*
#chown -R apache:apache .
#/usr/local/apache/bin/htpasswd -c touch .htUsers administrator
#echo "administrtor:administrator" > .htGroups
防止未经过认证的人访问目录下的文件,保护管理工具的安全
部署邮件服务器
--------------------------------------------------------------------------------
安装Qmail
-----------------------------------------------------
添加qmail系统帐户
#pw groupadd nofiles
#pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
#pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
#pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
#pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
#pw groupadd qmail
#pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent
#pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent
#pw useradd qmails -g qmail -d /var/qmail -s /nonexistent
开始安装qmail
#tar zxvf qmail-1.03.tar.gz
#patch -p0 < qmail-103.patch //DNS补丁
#tar zxvf qmail-smtpd-auth-0.30.tar.gz
#cd qmail-smtpd-auth-0.30 //smtp验证补丁
#cp * ../qmail-1.03
#patch -d ../qmail-1.03 < auth.patch
#cd ../qmail-1.03
#make setup check
添加邮件别名
#cd /var/qmail/alias
#touch .qmail-postmaster .qmail-root .qmail-mailer-daemon
#chown alias:nofiles .qmail*
#chmod 600 .qmail*
设置Maildir
#/var/qmail/bin/maildirmake /etc/skel/
# echo ./Maildir/ > .qmail
#cd /var/qmail
#cp boot/home rc
#vi rc
将Mailbox改成Maildir,如下
------------------------------------------
exec env - PATH="/var/qmail/binPATH" \
qmail-start ./Maildir splogger qmail
-------------------------------------------
#chown qmaild:qmail rc
#chmod u+x rc
配置qmail与系统整合
#ln -s /var/qmail /usr/local/qmail
#cd /usr/sbin
#mv sendmail sendmail.bak
#ln -s /var/qmail/bin/sendmail .
#cd ../lib
#mv sendmail sendmail.bak
#ln -s /var/qmail/bin/sendmail .
安装
checkpassword-0.90.tar.gz
cmd5checkpw-0.22.tar.gz
ucspi-tcp-0.88.tar.gz
-----------------------------------------------------
#tar zxvf checkpassword-0.90.tar.gz
#tar zxvf cmd5checkpw-0.22.tar.gz
#tar zxvf ucspi-tcp-0.88.tar.gz
#cd ucspi-tcp-0.88
#make
#make setup check
#cd ../checkpassword-0.90
#make
#make setup check
#cd ../cmd5checkpw-0.22
#make
#make install
安装vpopmail
-----------------------------------------------------
#pw groupadd vchkpw
#pw useradd vpopmail -g vchkpw -s /sbin/nologin
#mysql>create database vpopmail
#mysql>grant all on vpopmail.* to vpopmail@localhost identified by 'yourpassword'
#tar zxvf vpopmail-5.3.16.tar.gz
#vi vmysql.h
填写好user和password
#./configure \
--enable-roaming-users=y \
--enable-default-domain=nsn.com \
--enable-mysql=y \
--enable-file-sync=n \
--enable-auth-logging=y \
--enable-passwd=n \
--enable-sqwebmail-pass=y \
--enable-defaultquota=10000000 \
--enable-ip-alias-dmain=n \
--enable-incdir=/usr/local/mysql/include/mysql \
--enable-libdir=/usr/local/mysql/lib/mysql
#make install-strip
#cd /home/vpopmail
#chmod +s bin/vchkpw
#echo ":allow" >> etc/tcp.smtp
#mkdir /etc/qmail
#touch smtp.sh pop.sh
#cp etc/tcp.smtp /etc/qmail
#cd /etc/qmail/
#tcprules tcp.smtp.cdb tcp.smtp <tcp.smtp
#home/vpopmail/bin/vadddomain mail.nsn.com
建立webmaster@nsn.com的帐户
启动qmail
#cp qmail /sbin
#qmail start
-----------------------------------------------------
#mkdir autorespond
#tar zxvf autorespond -C autorespond
#gcc -Wall -o autorespond autorespond.c
#cp autorespond /usr/local/sbin/
-----------------------------------------------------
mysql>create database ezmlm
mysql>grant all on ezmlm.* to ezmlm@localhost indentified by 'yourpassword'
#tar zxvf ezmlm-0.53.tar.gz
#tar zxvf ezmlm-idx-0.40.tar.gz
#cp -Rf ezmlm-idx-0.40 ezmlm-0.53
#patch -p0 < ezmlm-idx-0.53.400.unified_41.patch
#make mysql
修改conf-sqlld conf-sqlcc
#make clean
#mak name
#make ch_GB
#make setup
安装qmailadmin
-----------------------------------------------------
#tar zxvf qmailadmin-1.0.6.tar.gz
#cd qmailadmin-1.0.6
#./configure \
--enable-cgibindir=/var/mailwebroot/cgi-bin/ \
--enable-htmldir=/var/mailwebroot/html/ \
--enable-autoresponder-bin=/usr/local/sbin
#make
#make install-strip
#cp /tmp/software/qmail/en-us.txt /usr/local/share/qmailadmin/html/en
安装qmailadmin
-----------------------------------------------------
tar zxvf igenus_2_20030516_snap.tgz
mv /var/mailwebroot/igenus
mysql>use vpopmail;
mysql>create table address
(
id int(11) unsigned NOT NULL auto_increment,
pw_id int(5) unsigned NOT NULL default '0',
name varchar(64) NOT NULL default '' ,
email varchar(128) NOT NULL default '',
UNIQUE KEY id (id),
KEY pw_id (pw_id)
);
mysql>alter table vpopmail drop primary key;
mysql>alter table vpopmail add column pw_id int(5) NOT NULL primary key auto_increment;
将php.ini中的register_globals设置为on
修改httpd.conf
设置User和Group为下
User vpopmail
Group vchkpw
#vi config/config_inc.php
#mkdir /var/mailwebroot/temp
#cd /var/mailwebroot/
#chown vpopmail:vchkpw temp
#chmod 755 temp
#cd /var/mailwebroot/igenus
#cp add2addr.php add2card.php
部署FTP服务
-------------------------------------------------------------------------------
安装pureftpd
-----------------------------------------------------
#./configure \
--prefix=/usr/local/pureftpd \
--with-mysql=/usr/local/mysql \
--with-paranoidmsg \
--with-shadow \
--with-welcomemsg \
--with-uploadscript \
--with-quotas \
--with-cookie \
--with-pam \
--with-virtualhosts \
--with-virtualroot \
--with-diraliases \
--with-sysquotas \
--with-ratios \
--with-ftpwho \
--with-throttling
#make
#make check
#make install
#chmod u+x pure-config.pl
#cp pure-config.pl /usr/local/sbin/
#cp pure-ftpd.conf /usr/local/etc/
编辑pure-ftpd.conf
#unzip pureftpd_php_manager.zip
#cd pureftpd_php_manager
#mv pureftpd-mysql.conf.sample /usr/local/etc/pureftpd-mysql.conf
#cd ..
#cp -R pureftpd_php_manager /var/wwwroot/html/pureftpd_php_manager
#cd /var/wwwroot/html/pureftpd_php_manager
#vi pureftp.config.php
修改里面的设置
-------------------------------------------------------------------------------
######################
####### SETUP ########
######################
// 设置pureftpd-mysql.conf的位置,这个要注意,不要写错哦
$PUREFTP_CONFIG_FILE = '/usr/local/etc/pureftpd-mysql.conf';
// The location where all the Forms directed to. (Mayby no change needed)
$SELF_URL = 'index.php';
// The location of your pure-ftpdwho binary (set this to chmod 4711)
$FTP_WHO = "/usr/local/sbin/pure-ftpwho";
#######################
# DEFAULT NEW-USER PARAMS #
#######################
$DefaultUser = "ftpuser"; # 默认用户
$DefaultPass = "passwd"; # 默认初始用户密码
$DefaultUid = "2002"; # 默认的uid(设置为ftpusers的uid)
$DefaultGid = "2002"; # 默认的gid(设置为ftpusers的gid)
$DefaultDir = "/var/ftproot/ftpusershome"; # 默认的用户主目录
$DefaultUL = "0"; # 默认用户上传速率限制(KB/S)
$DefaultDL = "0"; # 默认用户下载速率限制(KB/S)
$Defaultip = "*"; # 设置用户可以从哪些IP登陆
$DefaultQS = "50"; # 用户默认的quota
$Defaultcmt = ""; # 默认备注信息
$DefaultQF = "0"; # 默认文件数目quota
$PWC = "55"; # Vorsatz fuerr Crypt Password
-------------------------------------------------------------------------------
删除多余的东西
rm -f history.txt pureftpd-mysql.conf.sample
好用apache进行身份验证
在mysql中添加FTP用户数据库
mysql>DROP TABLE IF EXISTS ftpd;
CREATE TABLE ftpd (
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;
mysql>grant all on ftpd.* to pureftpd@localhost identified by 'yourpassword'
编辑/usr/local/etc/pureftpd-mysql.conf
将刚才在mysql中新建的用户和密码加入其中,选项很简单,只要注意不要输错
#pw groupadd ftpusers
#pw useradd ftpusers -g ftpusers
启动
#/usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf
然后测试http://ip/pureftpd_php_manager/index.php
添加一个用户,然后用FTP客户端登陆,ok!
以后添加用户的时候就将用户的主目录设置为其Web主目录,即实现个人主页的自助上传。
实现口令的md5加密
编辑pureftpd-mysql.conf
将MYSQLCrypt的方法改成md5,如下
MYSQLCrypt md5
然后将mysql里ftp用户的密码都用md5加密
例如如果你的密码是"mypassword",在命令行下就可以
#mail# md5 -s mypassword
MD5 ("mypassword") = 34819d7beeabb9260a5c854bc85b3e44
那么mysql里ftp用户的密码植就应该是 34819d7beeabb9260a5c854bc85b3e44
部署总结
-------------------------------------------------------------------------------
完成了这次的部署以后,在实验网络内的客户就可以使用该主机提供的服务来实现Web 资源的访问,邮件的收发等事务。管理员也可以通过该主机提供的FTP服务更新Web站点;使用qmailadmin,以Web形式管理邮件系统;使用SSH远程管理服务器。提供网络服务的目的就是要使每个人的生活更方便和优质。
附录A 安装参数解析
-------------------------------------------------------------------------------
Apache
--prefix=/usr/local/apache \ //定义安装路径
--enable-so \ //支持DSO功能
--enable-shared=max \ //编译尽可能多的共享模块
PHP
#./configure \
--with-mysql=/usr/local/mysql \ //支持MySQL接口
--with-apxs2=/usr/local/apache/bin/apxs \ //生成apxs模块
--enable-track-vars \ //支持跟踪变量
--enable-force-cgi-redirect \ //强制执行CGI
--enable-pic \
--enable-inline-optimitation \ //支持内联函数优化
--enable-memory-limit \ //支持设置内存限制
--enable-bcmath \ //支持数学精度函数
--enable-calendar \ //支持日期转换
--enable-dbx \ //支持DBX
--enable-dio \ //支持直接I/O操作
--enable-mcal \ //支持MACL
--with-config-file-path=/usr/local/apache/conf //定义配置文件存放路径
Vpopmail
#./configure \
--enable-roaming-users=y \ //允许漫游用户
--enable-default-domain=nsn.com \ //设置默认域
--enable-mysql=y \ //支持MySQL接口
--enable-file-sync=n \ //支持文件写入同步
--enable-auth-logging=y \ //支持验证记录
--enable-passwd=n \ //使用密码验证
--enable-sqwebmail-pass=y \ //使用sqwebmail密码
--enable-defaultquota=10000000 \ //设置默认用户磁盘限额
--enable-ip-alias-dmain=n \ //支持IP别名
--enable-incdir=/usr/local/mysql/include/mysql \ //指定MySQLl的include位置
--enable-libdir=/usr/local/mysql/lib/mysql //指定MySQL的lib位置
Pure-ftpd
#./configure \
--prefix=/usr/local/pureftpd \ //定义安装路径
--with-mysql=/usr/local/mysql \ //开启MySQL接口
--with-paranoidmsg \ //不显示管理信息
--with-shadow \ //支持shadow口令验证
--with-welcomemsg \ //支持欢迎消息
--with-uploadscript \ //支持上传后执行指定脚本
--with-quotas \ //支持磁盘限额功能
--with-cookie \ //支持cookie
--with-pam \ //支持pam验证
--with-virtualhosts \ //支持虚拟主机
--with-virtualroot \ //支持虚拟目录
--with-diraliases \ //支持目录别名
--with-sysquotas \ //使用系统磁盘限额
--with-ratios \ //支持上传下载比率
--with-ftpwho \ //支持查看在线用户
--with-throttling //支持限制带宽
|
|