CentOS-5安装配置PowerDNS服务器

PowerDNS简介

PowerDNS是高性能的域名服务器,除了支持普通的BIND配置文件,PowerDNS还可以从MySQL,Oracle,PostgreSQL等的数据库读取数据。PowerDNS安装了Poweradmin,能实现Web管理DNS记录,非常的方便。本文我们以MySQL为后端数据库和Poweradmin网页管理DNS,在CentOS-5安装PowerDNS。

安装MySQL

  1. yum -y install mysql mysql-server

设置mysql开机自启并启动mysql

  1. chkconfig –levels 235 mysqld on
  2. /etc/init.d/mysqld start

修改mysql root密码:

  1. mysqladmin -u root password yourrootsqlpassword

安装PowerDNS

  1. yum -y install pdns pdns-backend-mysql

连接mysql:

  1. mysql -u root -p

创建powerdns数据库:

  1. CREATE DATABASE powerdns;

为PowerDNS创建powerdns数据库用户:

  1. GRANT ALL ON powerdns.* TO ‘power_admin’@’localhost’ IDENTIFIED BY ‘power_admin_password’;
  2. FLUSH PRIVILEGES;

请替换power_admin_password成自己的密码。
现在创建数据表:

  1. USE powerdns;
  1. CREATE TABLE domains (
  2. id INT auto_increment,
  3. name VARCHAR(255) NOT NULL,
  4. master VARCHAR(128) DEFAULT NULL,
  5. last_check INT DEFAULT NULL,
  6. type VARCHAR(6) NOT NULL,
  7. notified_serial INT DEFAULT NULL,
  8. account VARCHAR(40) DEFAULT NULL,
  9. primary key (id)
  10. );
  1. CREATE UNIQUE INDEX name_index ON domains(name);
  1. CREATE TABLE records (
  2. id INT auto_increment,
  3. domain_id INT DEFAULT NULL,
  4. name VARCHAR(255) DEFAULT NULL,
  5. type VARCHAR(6) DEFAULT NULL,
  6. content VARCHAR(255) DEFAULT NULL,
  7. ttl INT DEFAULT NULL,
  8. prio INT DEFAULT NULL,
  9. change_date INT DEFAULT NULL,
  10. primary key(id)
  11. );
  1. CREATE INDEX rec_name_index ON records(name);
  2. CREATE INDEX nametype_index ON records(name,type);
  3. CREATE INDEX domain_id ON records(domain_id);
  1. CREATE TABLE supermasters (
  2. ip VARCHAR(25) NOT NULL,
  3. nameserver VARCHAR(255) NOT NULL,
  4. account VARCHAR(40) DEFAULT NULL
  5. );

最后退出mysql shell:

  1. quit;

现在配置PowerDNS以使用mysql后端:

  1. vi /etc/pdns/pdns.conf

增加如下内容到pdns.conf

  1. […]
  2. #################################
  3. # launch        Which backends to launch and order to query them in
  4. #
  5. # launch=
  6. launch=gmysql
  7. gmysql-host=127.0.0.1
  8. gmysql-user=power_admin
  9. gmysql-password=power_admin_password
  10. gmysql-dbname=powerdns
  11. […]

设置PowerDNS自启动并立即启动PowerDNS。

  1. chkconfig –levels 235 pdns on
  2. /etc/init.d/pdns start

现在PowerDNS已经正常运行,下面我们为PowerDNS安装Poweradmin实现Web管理。

安装Poweradmin

Poweradmin运行在PHP环境中,我们现在配置Web环境。

  1. yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

设置apache自启动,并启动apache。

  1. chkconfig –levels 235 httpd on
  2. /etc/init.d/httpd start

Poweradmin还需要安装两个PEAR软件包。

  1. yum install php-pear-DB php-pear-MDB2-Driver-mysql

现在Poweradmin所需的环境已经配置完成,我们将把Poweradmin安装在目录/var/www/html,这是apache默认的文档根目录。
到https://www.poweradmin.org/trac/wiki/GettingPoweradmin找到最新的版本下载:

  1. cd /tmp
  2. wget https://www.poweradmin.org/download/poweradmin-2.1.5.tgz

然后安装在/var/www/html/poweradmin目录。

  1. tar xvfz poweradmin-2.1.5.tgz
  2. mv poweradmin-2.1.5 /var/www/html/poweradmin
  3. touch /var/www/html/poweradmin/inc/config.inc.php
  4. chown -R apache:apache /var/www/html/poweradmin/

现在打开浏览器运行安装程序(如:http://devops.webres.wang/poweradmin/install或http://192.168.0.100/poweradmin/install)。
1、选择语言为英文,并点击Go to step 2
PowerDNS
2、点击“Go to step 3”到安装的第三步,填入数据库详细信息。输入root用户和密码,和输入Poweradmin的admin用户的密码。
PowerDNS
3、点击下一步,填入在安装powerdns那一步所创建的power_admin mysql用户的信息,并且填入域名服务器地址:
PowerDNS
4、下一步是需要执行mysql语句,我们不需要执行了,因为前面我们已经执行过了,直接点击下一步即可。
PowerDNS
5、继续点击下一步。
PowerDNS
6、现在poweradmin安装完成。
PowerDNS
7、为了安全,需要删除安装目录。

  1. rm -fr /var/www/html/poweradmin/install/

现在你可以进入http://devops.webres.wang/poweradmin或者http://192.168.0.100/poweradmin页面,输入用户admin和执行安装程序时设置的密码进入管理界面。

Linux环境用Sendmail架设Mail服务器

人们在互联网上最常使用的就是电子邮件了,很多企业用户也经常使用免费的电子邮件系统。今天我就给大家介绍一种在Red Hat Linux 9.0环境下运行的邮件服务器软件Sendmail.Sendmail作为一种免费的邮件服务器软件,已被广泛的应用于各种服务器中,它在稳定性、可移植性、及确保没有bug等方面具有一定的特色,且可以在网络中搜索到大量的使用资料。
  

一、安装Sendmail

  完全安装Red Hat Linux 9.0时,Sendmail就会自动内置,版本号为8.12.8-4.如果你不确定Linux是否已经安装有sendmail,可以输入以下命令查看:
 

  1.  [root@ahpeng root] rpm –qa grep sendmail

  如果确定没有安装,请在图形界面下依次选择单击“主菜单-系统设置-添加删除应用程序”,然后在打开的“软件包管理”窗口里选中“邮件服务器”选项,点“更新”后按照提示安装即可。
  另一种办法是:直接插入Linux第1张安装光盘,选择/RedHat/RPMS目录下的sendmail-8.12.8-4.i386.rpm安装包,之后运行[root@ahpeng RPMS] # rpm -ivh sendmail-8.12.8-4.i386.rpm即可开始安装,再用此方法在第3张安装光盘的同目录下依次安装sendmail-cf.8.12.8-4.i386.rpm、sendmail-doc. 8.12.8-4.i386.rpm.
  

二、启动Sendmail服务系统

  笔者建议使用带参数的Sendmail命令控制邮件服务器的运行:
  

  1. [root@ahpeng root]# sendmail -bd –q12h

  -b:设定Sendmail服务运行于后台。
  -d:指定Sendmail以Daemon(守护进程)方式运行。
  -q:设定当Sendmail无法成功发送邮件时,就将邮件保存在队列里,并指定保存时间。上面的12h表示保留12小时。
  此外,要检测Sendmail服务器是否正常运行,可以使用命令行:

  1. [root@ahpeng root]#  /etc/rc.d/init.d/sendmail status

  

三、配置Sendmail

  sendmail.cf的配置语法比较难懂,一般资料上都是采用m4宏处理程序来生成所需的sendmail.cf文件(使用m4编译工具一般不容易出错,还可避免某些带有安全漏洞的宏对服务器造成的破坏)。其配置文件位于/etc/mail/sendmail.cf,在创建的过程中还需要一个模板文件,Linux自带有一个模板文件,位于/etc/mail/sendmail.mc.故可以直接通过修改sendmail.mc模板来达到定制sendmail.cf文件的目的,而不必去死啃哪些难理解的配置命令。配置步骤为:
  第一步:用模板文件sendmail.mc生成sendmail.cf配置文件,并导出到/etc/mail/目录下,使用命令行:m4

  1. /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

  第二步:再用

  1. [root@ahpeng root] /etc/rc.d/init.d/sendmail restart

命令行重启sendmail.
  至此,邮件服务系统配置完成,已经正常工作。接下来就是创建具体的帐户了。

四、建立电子邮件新帐号

  此步骤相对简单,只需在Linux里新增一个用户即可。依次进入“主菜单-系统设置-用户和组群”选项,接着打开“Red Hat用户管理器”对话框,点“添加用户”按钮,在接着出现的“创建新用户”窗口中输入用户名及密码即可。
  创建mail使用帐号,命令行方式为:

  1. [root@ahpeng root]#adduser mailA -p Pass

表示创建了一个mailA的帐号,密码为Pass.
  

五、限制单个用户邮箱容量

  如果对用户的邮件容量不加限制,服务器的硬盘是不堪重负的。这可以使用“邮件限额”功能来实现:因为电子邮件的暂存空间是位于/var/spool/mail目录下的,所以只需通过磁盘配额设定每一个邮件帐户在此目录下能使用的最大空间即可。
  

六、单一用户设定多个邮件地址

  使用别名(alias)可以解决这个问题。别名是sendmail最重要的功能之一。它在aliases这个文本文件中定义,aliases文件的位置由sendmail.cf指定,一般位于/etc目录下。比如前面我们建立的mailA用户要拥有2个邮件地址:[email protected][email protected],可以这样设置:
  首先,新增一个账号mailC,然后用Linux的文本编辑器打开/etc/aliases,在里面加上dearpeter: mailC和truepeter: mailC这两个命令行;然后在命令窗口运行newaliases命令,以要求Sendmail重新读取/etc/aliases文件。如果正确无误,会出现一段回应消息,表示配置成功。这样就可以使用2个地址给mailC发信,而mailC则只需用其中一个账号就可接收寄给以上2个地址的所有邮件。
  经过以上步骤后,应该就可以用Outlook Express正常发送邮件了,但这时还不能用Outlook Express从服务器端收取邮件的,因为sendmail默认状态并不具备POP3功能,我们还得自己安装并启用它。
  1.POP3(IMAP)服务器安装。
  第一步:用以下命令行检查系统是否安装:
  

  1. [root@ahpeng root]# rpm -qa imap

  imap-2001a-18
  第二步:插入第2张安装光盘,使用下面的命令行开始安装:

  1.   [root@ahpeng root]#cd /mnt/cdrom/RedHat/RPMS
  2.   [root@ahpeng root]#rpm -ivh imap-2001a-18.i386.rpm

  2.启用POP3(IMAP)服务。
  POP3服务:请先修改/etc/xinetd.d/ipop3文件,将其中的disable=yes改为disable=no后保存;然后重新启动xinetd程序来读取这个修改过的配置文件,使之生效。
 

  1.  [root@ahpeng root]#/etc/rc.d/init.d/xinetd reload

  启动IMAP服务的步骤跟POP3一样,只不过IMAP的配置文件为/etc/xinetd.d/imap.
转自:http://linux.chinaitlab.com/server/731736.html

FTP出现500 OOPS: cannot change directory

cannot change directory:/home/***
ftp服务器连接失败,错误提示:
500 OOPS: cannot change directory:/home/*******
500 OOPS: child died
解决方法:
在终端输入命令:

  1. setsebool -P ftpd_disable_trans 1
  2. service vsftpd restart

就OK了!
原因:这是因为服务器开启了selinux,这限制了FTP的登录。

CentOS-5安装配置ExtMail Web邮件收发系统

本文参考http://wiki.extmail.org/extmail_solution_for_linux_centos-5,内容和病毒过滤不在本文之内,如需配置请参考官方文档。下面是在CentOS-5 32位系统的安装实录。

制作_yum_仓库

编译CentOS-Base.repo文件

  1. vi /etc/yum.repos.d/CentOS-Base.repo

加入如下内容:

  1. # EMOS-Base.repo
  2. #
  3. # Created by ExtMail Dev Team: http://www.extmail.org/
  4. #
  5. # $Id$
  6.  
  7. [EMOS-base]
  8. name=EMOS-Base
  9. baseurl=http://mirror.extmail.org/yum/emos/1.5/os/$basearch/
  10. gpgcheck=0
  11. priority=0
  12. protect=0
  13.  
  14. [EMOS-update]
  15. name=EMOS-Updates
  16. baseurl=http://mirror.extmail.org/yum/emos/1.5/updates/$basearch/
  17. gpgcheck=0
  18. priority=0
  19. protect=0

保存后,然后尝试执行一下yum list 等操作,看看是否已经成功;

配置mta-postfix

1、安装postfix

  1. # yum -y install postfix
  2. # yum remove sendmail

2、配置postfix

  1. # postconf -n > /etc/postfix/main2.cf
  2. # mv /etc/postfix/main.cf /etc/postfix/main.cf.old
  3. # mv /etc/postfix/main2.cf /etc/postfix/main.cf

编辑main.cf:

  1. # vi /etc/postfix/main.cf

增加如下内容:

  1. # hostname
  2. mynetworks = 127.0.0.1
  3. myhostname = mail.webres.wang
  4. mydestination = $mynetworks $myhostname
  5.  
  6. # banner
  7. mail_name = Postfix – by extmail.org
  8. smtpd_banner = $myhostname ESMTP $mail_name
  9.  
  10. # response immediately
  11. smtpd_error_sleep_time = 0s
  12.  
  13. # Message and return coolcode control
  14. message_size_limit = 5242880
  15. mailbox_size_limit = 5242880
  16. show_user_unknown_table_name = no
  17.  
  18. # Queue lifetime control
  19. bounce_queue_lifetime = 1d
  20. maximal_queue_lifetime = 1d

注:myhostname改为自己的。
设置postfix开机自启:

  1. # chkconfig postfix on

配置courier-authlib

1、安装Courier-Authlib

安装以下软件包:

  1. # yum -y install courier-authlib
  2. # yum -y install courier-authlib-mysql

删除并编辑/etc/authlib/authmysqlrc文件:

  1. # cat /dev/null >/etc/authlib/authmysqlrc
  2. # vi /etc/authlib/authmysqlrc

增加如下内容:

  1. MYSQL_SERVER            localhost
  2. MYSQL_USERNAME          extmail
  3. MYSQL_PASSWORD          extmail
  4. MYSQL_SOCKET            /var/lib/mysql/mysql.sock
  5. MYSQL_PORT              3306
  6. MYSQL_OPT               0
  7. MYSQL_DATABASE          extmail
  8. MYSQL_USER_TABLE        mailbox
  9. MYSQL_CRYPT_PWFIELD     password
  10. MYSQL_UID_FIELD         uidnumber
  11. MYSQL_GID_FIELD         gidnumber
  12. MYSQL_LOGIN_FIELD       username
  13. MYSQL_HOME_FIELD        homedir
  14. MYSQL_NAME_FIELD        name
  15. MYSQL_MAILDIR_FIELD     maildir
  16. MYSQL_QUOTA_FIELD       quota
  17. MYSQL_SELECT_CLAUSE     SELECT username,password,"",uidnumber,gidnumber,
  18.                         CONCAT(‘/home/domains/’,homedir),               
  19.                         CONCAT(‘/home/domains/’,maildir),               
  20.                         quota,                                         
  21.                         name                                           
  22.                         FROM mailbox                                   
  23.                         WHERE username = ‘$(local_part)@$(domain)’

修改authdaemonrc文件

  1. # vi /etc/authlib/authdaemonrc

修改如下内容:

  1. authmodulelist="authmysql"
  2. authmodulelistorig="authmysql"

或者使用如下命令直接修改:

  1. sed -i ‘s/authmodulelist=.*/authmodulelist="authmysql"/g’ /etc/authlib/authdaemonrc
  2. sed -i ‘s/authmodulelistorig=.*/authmodulelistorig="authmysql"/g’ /etc/authlib/authdaemonrc

2、启动courier-authlib:

  1. # service courier-authlib start

修改authdaemon socket目录权限

  1. # chmod 755 /var/spool/authdaemon/

配置maildrop

1、安装maildrop

  1. # yum -y install maildrop

配置master.cf 为了使Postfix支持Maildrop,必须修改/etc/postfix/master.cf文件,注释掉原来的maildrop的配置内容,并改为:

  1. maildrop   unix        –       n        n        –        –        pipe
  2.   flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}

注意:flags前面有“两个空格”

配置main.cf 由于maildrop不支持一次接收多个收件人,因此必须在main.cf里增加如下参数:

  1. # vi /etc/postfix/main.cf
  1. maildrop_destination_recipient_limit = 1

2、测试maildrop对authlib支持

  1. # maildrop -v

看是否出现以下内容:

  1. maildrop 2.1.0 Copyright 1998-2005 Double Precision, Inc.
  2. GDBM/DB extensions enabled.
  3. Courier Authentication Library extension enabled.
  4. Maildir quota extension enabled.
  5. This program is distributed under the terms of the GNU General Public
  6. License. See COPYING for additional information.

配置apache

1、安装httpd

  1. # yum -y install httpd

2、虚拟主机设置

编辑httpd.conf文件:

  1. # vi /etc/httpd/conf/httpd.conf

在最后一行加上:

  1. NameVirtualHost *:80
  2. Include conf/vhost_*.conf

编辑 vhost_extmail.conf

  1. # vi /etc/httpd/conf/vhost_extmail.conf

里面定义虚拟主机的相关内容:

  1. # VirtualHost for ExtMail Solution
  2. <VirtualHost *:80>
  3. ServerName mail.webres.wang
  4. DocumentRoot /var/www/extsuite/extmail/html/
  5.  
  6. ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/
  7. Alias /extmail /var/www/extsuite/extmail/html/
  8.  
  9. ScriptAlias /extman/cgi/ /var/www/extsuite/extman/cgi/
  10. Alias /extman /var/www/extsuite/extman/html/
  11.  
  12. # Suexec config
  13. SuexecUserGroup vuser vgroup
  14. </VirtualHost>

注意:把ServerName修改成自己的。
设置apache开机启动并重启apache

  1. # chkconfig httpd on
  2. # service httpd restart

配置webmail-extmail

1、安装ExtMail

  1. # yum -y install extsuite-webmail

2、编辑webmail.cf

  1. # cd /var/www/extsuite/extmail
  2. # cp webmail.cf.default webmail.cf
  3. # vi webmail.cf

主要变动的内容见下:

  1. SYS_MYSQL_USER = extmail
  2. SYS_MYSQL_PASS = extmail
  3. SYS_MYSQL_DB = extmail

更新cgi目录权限 由于SuEXEC的需要,必须将extmail的cgi目录修改成vuser:vgroup权限:

  1. # chown -R vuser:vgroup /var/www/extsuite/extmail/cgi/

配置管理后台-extman

1、yum安装ExtMan

  1. # yum -y install extsuite-webman

更新cgi目录权限 由于SuEXEC的需要,必须将extman的cgi目录修改成vuser:vgroup权限:

  1. # chown -R vuser:vgroup /var/www/extsuite/extman/cgi/

链接基本库到Extmail

  1. # mkdir /tmp/extman
  2. # chown -R vuser:vgroup /tmp/extman

注意事项:
由于RedHat发行版中包含了一个叫tmpwatch的工具,该工具会定期扫描/tmp/下的文件,如果这些文件很久都没被使用,将被删除,因此如果后台长期不使用,/tmp/extman目录有可能被tmpwatch删除,所以要么定期登陆后台,要么修改 webman.cf将临时目录修改到另一个地方。此处暂以/tmp/extman默认值为例。

2、安装mysql数据库

  1. # yum -y install mysql mysql-server

3、数据库初始化

启动Mysql

  1. # service mysqld start
  2. # chkconfig mysqld on

导入mysql数据库结构及初始化数据,root密码默认为空

  1. # mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sql
  2. # mysql -u root -p < /var/www/extsuite/extman/docs/init.sql

注意事项:
上述导入初始化SQL时,默认的uidnumber/gidnumber都是1000,这和vuser:vgroup 的uid/gid一致,是因为maildrop投递时会从数据库里取uidnumber/gidnumber,而在master.cf里已经定义好了投递时的运行身份(vuser:vgroup),所以这两个字段的内容必须为1000,否则将出现投递错误,例如报0×06等错误。

4、设置虚拟域和虚拟用户的配置文件

  1. # cd /var/www/extsuite/extman/docs
  2. # cp mysql_virtual_alias_maps.cf /etc/postfix/
  3. # cp mysql_virtual_domains_maps.cf /etc/postfix/
  4. # cp mysql_virtual_mailbox_maps.cf /etc/postfix/
  5. # cp mysql_virtual_sender_maps.cf /etc/postfix/

配置main.cf:

  1. # vi /etc/postfix/main.cf

增加以下内容:

  1. # extmail config here
  2. virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
  3. virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
  4. virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
  5. virtual_transport = maildrop:

重启postfix :

  1. # service postfix restart

5、测试authlib

  1. # /usr/sbin/authtest -s login [email protected] extmail

结果如下:
Authentication succeeded.

Authenticated: [email protected] (uid 1000, gid 1000)
Home Directory: /home/domains/extmail.org/postmaster
Maildir: /home/domains/extmail.org/postmaster/Maildir/
Quota: 104857600S
Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0
Cleartext Password: extmail
Options: (none)

这样表明ExtMan的正确安装,数据库也正确导入,courier-authlib能正确连接到mysql数据库

最后访问http://mail.webres.wang/extmail/,如无意外,将看到webmail的登陆页,不过此时还没有加正式的用户,所以不能登陆,包括[email protected]也不行。必须要登陆到http://mail.webres.wang/extman/ 里增加一个新帐户才能登陆。

ExtMan的默认超级管理员帐户:[email protected],初始密码:extmail*123*,登陆成功后,建议将密码修改,以确保安全。

6、配置图形化日志

启动mailgraph_ext

  1. # /usr/local/mailgraph_ext/mailgraph-init start

启动cmdserver(在后台显示系统信息)

  1. # /var/www/extsuite/extman/daemon/cmdserver –daemon

加入开机自启动:

  1. # echo "/usr/local/mailgraph_ext/mailgraph-init start" >> /etc/rc.d/rc.local
  2. # echo "/var/www/extsuite/extman/daemon/cmdserver -v -d" >> /etc/rc.d/rc.local

使用方法: 等待大约15分钟左右,如果邮件系统有一定的流量,即可登陆到extman里,点“图形日志”即可看到图形化的日志。具体每天,周,月,年的则点击相应的图片进入即可。

配置cyrus-sasl

1、安装cyrus-sasl

删除系统的cyrus-sasl:

  1. # rpm -e cyrus-sasl –nodeps

安装新的支持authdaemon的软件包

  1. # yum -y install cyrus-sasl cyrus-sasl-plain

2、配置main.cf文件

Postfix的SMTP认证需要透过Cyrus-SASL,连接到authdaemon获取认证信息。
编辑main.cf

  1. # vi /etc/postfix/main.cf

增加如下内容:

  1. # smtpd related config
  2. smtpd_recipient_restrictions =
  3.         permit_mynetworks,
  4.         permit_sasl_authenticated,
  5.         reject_non_fqdn_hostname,
  6.         reject_non_fqdn_sender,
  7.         reject_non_fqdn_recipient,
  8.         reject_unauth_destination,
  9.         reject_unauth_pipelining,
  10.         reject_invalid_hostname,
  11.  
  12. # SMTP sender login matching config
  13. smtpd_sender_restrictions =
  14.         permit_mynetworks,
  15.         reject_sender_login_mismatch,
  16.         reject_authenticated_sender_login_mismatch,
  17.         reject_unauthenticated_sender_login_mismatch
  18.  
  19. smtpd_sender_login_maps =
  20.         mysql:/etc/postfix/mysql_virtual_sender_maps.cf,
  21.         mysql:/etc/postfix/mysql_virtual_alias_maps.cf
  22.  
  23. # SMTP AUTH config here
  24. broken_sasl_auth_clients = yes
  25. smtpd_sasl_auth_enable = yes
  26. smtpd_sasl_local_domain = $myhostname
  27. smtpd_sasl_security_options = noanonymous

3、编辑smtpd.conf文件

  1. # vi /usr/lib/sasl2/smtpd.conf

确保其内容为:

  1. pwcheck_method: authdaemond
  2. log_level: 3
  3. mech_list: PLAIN LOGIN
  4. authdaemond_path:/var/spool/authdaemon/socket

重新启动postfix:

  1. # service postfix restart

4、测试SMTP认证

通过以下命令获得[email protected]的用户名及密码的BASE64编码:

  1. # perl -e ‘use MIME::Base64; print encoolcode_base64("[email protected]")’

内容如下:
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==

  1. # perl -e ‘use MIME::Base64; print encoolcode_base64("extmail")’

内容如下:
ZXh0bWFpbA==
然后本机测试:

  1. # telnet localhost 25

其过程如下:
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
220 mail.extmail.org ESMTP Postfix – by extmail.org
ehlo demo.domain.tld << 输入内容
250-mail.extmail.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUScoolcodeS
250-8BITMIME
250 DSN
auth login << 输入内容
334 VXNlcm5hbWU6
cG9zdG1hc3RlckBleHRtYWlsLm9yZw== << 输入内容
334 UGFzc3dvcmQ6
ZXh0bWFpbA== << 输入内容
235 2.0.0 Authentication successful
quit << 输入内容
221 2.0.0 Bye
最后出现235 Authentication Successful 表明认证成功了。

配置courier-imap

1、安装Courier-imap

默认的courier-authlib及courier-imap都会增加系统自启动设置,因此下一次服务器启动将自动启动相应的authlib及POP3服务

  1. # yum -y install courier-imap

配置courier-imap
由于Courier-imap的IMAP目录是按UTF-7编码的,ExtMail目前还没有正式支持IMAP目录,因此需要屏蔽IMAP,只提供pop3服务。而就目前的使用情况来看,IMAP使用的非常少,绝大部分OutLook/Foxmail用户都习惯使用POP3而非IMAP。

  1. # vi /usr/lib/courier-imap/etc/imapd

修改内容如下:

  1. IMAPDSTART=NO
  1. # vi /usr/lib/courier-imap/etc/imapd-ssl

修改内容如下:

  1. IMAPDSSLSTART=NO

然后重新启动courier-imap:

  1. # service courier-imap start

测试POP3 请按如下步骤输入pop3命令测试其是否正常工作,注意蓝色的信息是我们输入到POP3服务器的(请首先登录extman自行建立[email protected]用户,密码:extmail)

  1. # telnet localhost 110

其过程如下:
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
+OK Hello there.
user [email protected] << 输入内容
+OK Password required.
pass extmail << 输入内容
+OK logged in.
list << 输入内容
+OK POP3 clients that break here, they violate STD53.
.
quit << 输入内容
+OK Bye-bye.
Connection closed by foreign host.

最后说明

至此,ExtMail的安装配置基本完成,如想配置内容,病毒过滤请到官方网站学习配置。登录extmail系统后台后,请及时修改密码或者用户名。最后需要确认的是,是否已经设置好邮件域名的MX记录或者A记录,这样才能正常收取邮件。

FAQ

1、64位系统可能安装不上courier-imap。请参考http://hahayong.blog.51cto.com/231965/530016

为Linux MySQL数据库设置磁盘限额

因为MySQL数据库本身没有磁盘限额的功能,我们可以限制Linux自带的quota工具为mysql进行磁盘限额。
1、首先需要为/home自动挂载一个分区,并且设置为quota磁盘格式。我们以用户foo为例,设置foo的磁盘限额。具体如何设置请参考Linux Quota基础教程
2、在foo主目录创建一个存放数据库的dbs目录,并设置此目录的所有权为mysql:foo,权限为3755。

  1. mkdir /home/foo/dbs
  2. chown mysql:foo /home/foo/dbs
  3. chmod 3755 /home/foo/dbs

3、现在把 /var/lib/mysql的所有foo的数据库文件移到/home/foo/dbs目录。

  1. mkdir /root/backup
  2. cp -avr /var/lib/mysql/* root/backup
  3. mv /var/lib/mysql/database-name /home/foo/dbs/
  4. chown -Rf mysql:foo /home/foo
  5. chmod -Rf 3755 /home/foo
  6. ln -s /var/lib/mysql/database-name /home/foo/dbs/database-name -v

之后重启mysql数据库服务器:

  1. /etc/init.d/mysqld restart

Linux Quota基础配置

Quota介绍

这篇文章将介绍Linux的一个重要工具-Quota,使用Quota能对某一分区下指定用户或用户组进行磁盘限额。这里要说明的是,限额不是针对用户主目录,而是针对这个分区下的用户或用户组。Quota通过限制用户的blocks或者inodes起到限额的作用。

Quota配置

1、首先我们需要设置分区的Quota档案格式,只要在 /etc/fstab 里头增加了 usrquota, grpquota 就可以。如下,对分区/和/home启用quota磁盘格式。

  1. /dev/VolGroup00/LogVol04 /
  2. ext3 defaults,usrquota,grpquota 1 1
  3. LABEL=/boot /boot ext3 defaults 1 2
  4. devpts /dev/pts devpts gid=5,mode=620 0 0
  5. tmpfs /dev/shm tmpfs defaults 0 0
  6. /dev/VolGroup00/LogVol00 /home
  7. ext3 defaults,usrquota,grpquota 1 2
  8. proc /proc proc defaults 0 0
  9. sysfs /sys sysfs defaults 0 0
  10. /dev/VolGroup00/LogVol02 /tmp ext3 defaults 1 2
  11. /dev/VolGroup00/LogVol03 /var ext3 defaults 1 2
  12. /dev/VolGroup00/LogVol01 swap swap defaults 0 0

2、重新挂载/和/home文件系统激活quota。

  1. mount -o remount /
  2. mount -o remount /home

3、初始化quota数据库,运行quotacheck -cug 命令之后,在每个挂载分区根目录下你会发现生成了aquota.user aquota.group两个文件,这两个文件记录了对分区限额的信息。
初始化quota数据库:

  1. quotacheck -cug /
  2. quotacheck -cug /home/

检测是否已经生成:

  1. ls -al /aquota*
  2. -rw——- 1 root root 6144 May 26 17:15 /aquota.group
  3. -rw——- 1 root root 6144 May 26 17:15 /aquota.user
  4. ls -al /home/aquota*
  5. -rw——- 1 root root 7168 May 26 17:16 /home/aquota.group
  6. -rw——- 1 root root 7168 May 26 17:16 /home/aquota.user

4、开启一个定时任务,用来定时扫描quota空间。最好设置在深夜执行,如下:

  1. #MIN (0-59) HOUR (0-23)
  2. DoM (1-31) MONTH (1-12) DoW (0-7) CMD
  3. 0 1 * * 0 quotacheck -vug /
  4. 20 1 * * * quotacheck -vug /home

5、启用文件系统的quota支持。最简单的方法是重启计算机,你也可以使用quotaon命令而不需要重启计算机。
使用quotaon激活:

  1. quotaon /home
  2. quotaon /

检查是否激活成功:

  1. quotaon -p /home
  2. group quota on /home (/dev/mapper/VolGroup00-LogVol00) is on
  3. user quota on /home (/dev/mapper/VolGroup00-LogVol00) is on
  4. quotaon -p /
  5. group quota on / (/dev/mapper/VolGroup00-LogVol04) is on
  6. user quota on / (/dev/mapper/VolGroup00-LogVol04) is on

设定用户或用户组磁盘限额

在为用户设置限额时,需要知道几个术语:
soft :这是最低限制容量的意思,使用者在宽限期间之内,他的容量可以超过 soft ,但必需要宽限时间之内将磁盘容量降低到 soft 的容量限制之下!
hard :这是『绝对不能超过』的容量!跟 soft 相比的意思为何呢?通常 hard limit 会比 soft limit 为高,例如网络磁盘空间为 30 MB ,那么 hard limit 就设定为 30MB ,但是为了让使用者有一定的警戒心,所以当使用空间超过 25 MB 时,例如使用者使用了 27 MB 的空间时,那么系统就会警告使用者,让使用者可以在『宽限时间内』将他的档案量降低至 25 MB ( 亦即是 soft limit )之内!也就是说, soft 到 hard 之间的容量其实就是宽限的容量啦!可以达到针对使用者的『警示』作用!
宽限时间:那么宽限时间就可以很清楚的知道含意是什么了!也就是当您的使用者使用的空间超过了 soft limit ,却还没有到达 hard limit 时,那么在这个『宽限时间』之内,就必需要请使用者将使用的磁盘容量降低到 soft limit 之下!而当使用者将磁盘容量使用情况超过 soft limit 时,『宽限时间』就会自动被启动,而在使用者将容量降低到 soft limit 之下,那么宽限时间就会自动的取消啰!
1、使用edquota编辑用户限额

  1. edquota thirt

2、设置如下:

  1. Disk quotas for user thirt (uid 500):
  2. Filesystem                 blocks soft hard inodes soft hard
  3. /dev/mapper/VolGroup00-LogVol04 0 0 0 0 0 0
  4. /dev/mapper/VolGroup00-LogVol00 88 92160 102400 13 0 0

解释:
filesystem:这个是那个 partition 的意思!
blocks:这个是目前使用者 thirt ( uid 500 )在 /dev/mapper/VolGroup00-LogVol00 这个 filesystem (参考上面一个信息),所耗掉的磁盘容量,也就是目前的使用掉的空间啦!单位是 Kbytes 喔!这个信息是 quota 程序自己计算出来的,所以请不要修改他!
soft 与 hard :这个是目前的 test 在这个 filesystem 之内的 quota 限制值!至于 soft 与 hard 的意思就如同上面提的那个意思!当 soft 与 hard 数值为 0 的时候,表示『没有限制』的意思!而数值的单位仍是 Kbytes 喔!
inodes :是目前使用掉 inode 的状态,也是 quota 自己计算出来而得到的,所以不要去变更他。一般而言, inode 不容易控制,所以您可以不必去限制 inode 呢!
3、设置过期时间
设置/ 文件系统的默认过期时间:

  1. edquota -f / -t
  1. Grace period before enforcing soft limits for users:
  2. Time units may be: days, hours, minutes, or seconds
  3. Filesystem Block grace period Inode grace period
  4. /dev/mapper/VolGroup00-LogVol04 7days 7days

设置/home文件系统过期时间:

  1. edquota -f /home -t
  1. Grace period before enforcing soft limits for users:
  2. Time units may be: days, hours, minutes, or seconds
  3. Filesystem Block grace period Inode grace period
  4. /dev/mapper/VolGroup00-LogVol00 7days 7days

4、验证设置
打印所有限额信息

  1. repquota -a

打印单个用户限额信息

  1. quota thirt

DDoS deflate – Linux下防御/减轻DDOS攻击

前言

互联网如同现实社会一样充满钩心斗角,网站被DDOS也成为站长最头疼的事。在没有硬防的情况下,寻找软件代替是最直接的方法,比如用iptables,但是iptables不能在自动屏蔽,只能手动屏蔽。今天要说的就是一款能够自动屏蔽DDOS攻击者IP的软件:DDoS deflate。

DDoS deflate介绍

DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址,在检测到某个结点超过预设的限 制时,该程序会通过APF或IPTABLES禁止或阻挡这些IP.

DDoS deflate官方网站:http://deflate.medialayer.com/

如何确认是否受到DDOS攻击?

执行:

  1. netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n

执行后,将会显示服务器上所有的每个IP多少个连接数。

以下是我自己用VPS测试的结果:

li88-99:~# netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
1 114.226.9.132
1 174.129.237.157
1 58.60.118.142
1 Address
1 servers)
2 118.26.131.78
3 123.125.1.202
3 220.248.43.119
4 117.36.231.253
4 119.162.46.124
6 219.140.232.128
8 220.181.61.31
2311 67.215.242.196
每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。
安装配置DDoS deflate

1、安装DDoS deflate

  1. wget http://www.inetbase.com/scripts/ddos/install.sh   //下载DDoS  deflate
  2. chmod 0700 install.sh    //添加权限
  3. ./install.sh             //执行

2、配置DDoS deflate

下面是DDoS deflate的默认配置位于/usr/local/ddos/ddos.conf ,内容如下:

  1. ##### Paths of the script and other files
  2. PROGDIR="/usr/local/ddos"
  3. PROG="/usr/local/ddos/ddos.sh"
  4. IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list"  //IP地址白名单
  5. CRON="/etc/cron.d/ddos.cron"    //定时执行程序
  6. APF="/etc/apf/apf"
  7. IPT="/sbin/iptables"
  8.  
  9. ##### frequency in minutes for running the script
  10. ##### Caution: Every time this setting is changed, run the script with –cron
  11. #####          option so that the new frequency takes effect
  12. FREQ=1   //检查时间间隔,默认1分钟
  13.  
  14. ##### How many connections define a bad IP? Indicate that below.
  15. NO_OF_CONNECTIONS=150     //最大连接数,超过这个数IP就会被屏蔽,一般默认即可
  16.  
  17. ##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
  18. ##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
  19. APF_BAN=1        //使用APF还是iptables。推荐使用iptables,将APF_BAN的值改为0即可。
  20.  
  21. ##### KILL=0 (Bad IPs are’nt banned, good for interactive execution of script)
  22. ##### KILL=1 (Recommended setting)
  23. KILL=1   //是否屏蔽IP,默认即可
  24.  
  25. ##### An email is sent to the following address when an IP is banned.
  26. ##### Blank would suppress sending of mails
  27. EMAIL_TO="root"   //当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可
  28.  
  29. ##### Number of seconds the banned ip should remain in blacklist.
  30. BAN_PERIOD=600    //禁用IP时间,默认600秒,可根据情况调整

用户可根据给默认配置文件加上的注释提示内容,修改配置文件。

查看/usr/local/ddos/ddos.sh文件的第117行

  1. netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST

修改为以下代码即可!

  1. netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sed -n ‘/[0-9]/p’ | sort | uniq -c | sort -nr > $BAD_IP_LIST

喜欢折腾的可以用Web压力测试软件测试一下效果,相信DDoS deflate还是能给你的VPS或服务器抵御一部分DDOS攻击,给你的网站更多的保护。
转自:http://www.vpser.net/security/ddos-deflate.html

Linux安装PHP加速器Xcache

XCache 是一个又快又稳定的 PHP opcoolcode 缓存器. 经过良好的测试并在大流量/高负载的生产机器上稳定运行. 经过(在 linux 上)测试并支持所有现行 PHP 分支的最新发布版本, 如 PHP_4_3 PHP_4_4 PHP_5_0 PHP_5_1 PHP_5_2 HEAD(6.x), 并支持线程安全/Windows. 与同类 opcoolcode 缓存器相比更胜一筹, 比如能够快速跟进 PHP 版本.下面介绍如何安装配置。
1、安装xcache

  1. wget http://xcache.lighttpd.net/pub/Releases/1.3.2/xcache-1.3.2.tar.gz
  2. tar -zxvf xcache-1.3.2.tar.gz
  3. cd xcache-1.3.2
  4. phpize
  5. ./configure –enable-xcache
  6. make
  7. make install

2、配置xcache
打开php.ini文件,增加如下代码:

  1. [xcache-common]
  2. ; change me – 64 bit php => /usr/lib64/php/modules/xcache.so
  3. ; 32 bit php => /usr/lib/php/modules/xcache.so
  4. zend_extension = /usr/lib64/php/modules/xcache.so
  5.  
  6. [xcache.admin]
  7. xcache.admin.auth = On
  8. xcache.admin.user = "mOo"
  9. ; xcache.admin.pass = md5($your_password)
  10. xcache.admin.pass = ""
  11.  
  12. [xcache]
  13. xcache.shm_scheme =        "mmap"
  14. xcache.size  =               32M
  15. xcache.count =                 1
  16. xcache.slots =                8K
  17. xcache.ttl   =              3600
  18. xcache.gc_interval =         300
  19.  
  20. ; Same as aboves but for variable cache
  21. ; If you don’t know for sure that you need this, you probably don’t
  22. xcache.var_size  =            0M
  23. xcache.var_count =             1
  24. xcache.var_slots =            8K
  25. xcache.var_ttl   =             0
  26. xcache.var_maxttl   =          0
  27. xcache.var_gc_interval =     300
  28.  
  29. ; N/A for /dev/zero
  30. xcache.readonly_protection = Off
  31.  
  32. xcache.mmap_path =    "/dev/zero"
  33.  
  34. xcache.cacher =               On
  35. xcache.stat   =               On

注意修改zend_extension = /usr/lib64/php/modules/xcache.so为正确的路径。
详情的配置说明:http://xcache.lighttpd.net/wiki/XcacheIni

Apache web服务器压力测试工具ab(apache benchmark)

以前安装好APACHE总是不知道该如何测试APACHE的性能,现在总算找到一个测试工具了。就是APACHE自带的测试工具AB(apache benchmark).在APACHE的bin目录下。
格式: ./ab [options] [http://]hostname[:port]/path
参数:
-n requests Number of requests to perform
//在测试会话中所执行的请求个数。默认时,仅执行一个请求
-c concurrency Number of multiple requests to make
//一次产生的请求个数。默认是一次一个。
-t timelimit Seconds to max. wait for responses
//测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-p postfile File containing data to POST
//包含了需要POST的数据的文件.
-T content-type Content-type header for POSTing
//POST数据所使用的Content-type头信息。
-v verbosity How much troubleshooting info to print
//设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。
-w Print out results in HTML tables
//以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-i Use HEAD instead of GET
// 执行HEAD请求,而不是GET。
-x attributes String to insert as table attributes
//
-y attributes String to insert as tr attributes
//
-z attributes String to insert as td or th attributes
//
-C attribute Add cookie, eg. ‘Apache=1234. (repeatable)
//-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复。
-H attribute Add Arbitrary header line, eg. ‘Accept-Encoding: gzip’
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
//-P proxy-auth-username:password 对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-h Display usage information (this message)
//-attributes 设置 属性的字符串. 缺陷程序中有各种静态声明的固定长度的缓冲区。另外,对命令行参数、服务器的响应头和其他外部输入的解析也很简单,这可能会有不良后果。它没有完整地实现HTTP/1.x; 仅接受某些’预想’的响应格式。 strstr(3)的频繁使用可能会带来性能问题,即, 你可能是在测试ab而不是服务器的性能。
参数很多,一般我们用 -c 和 -n 参数就可以了. 例如:
./ab -c 1000 -n 1000 http://127.0.0.1/index.php
这个表示同时处理1000个请求并运行1000次index.php文件.
#/usr/local/xiaobai/apache2054/bin/ab -c 1000 -n 1000 http://127.0.0.1/index.html.zh-cn.gb2312
This is ApacheBench, Version 2.0.41-dev apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests

Server Software: Apache/2.0.54
//平台apache 版本2.0.54
Server Hostname: 127.0.0.1
//服务器主机名
Server Port: 80
//服务器端口
Document Path: /index.html.zh-cn.gb2312
//测试的页面文档
Document Length: 1018 bytes
//文档大小
Concurrency Level: 1000
//并发数
Time taken for tests: 8.188731 seconds
//整个测试持续的时间
Complete requests: 1000
//完成的请求数量
Failed requests: 0
//失败的请求数量
Write errors: 0

Total transferred: 1361581 bytes
//整个场景中的网络传输量
HTML transferred: 1055666 bytes
//整个场景中的HTML内容传输量
Requests per second: 122.12 [#/sec] (mean)
//大家最关心的指标之一,相当于 LR 中的 每秒事务数 ,后面括号中的 mean 表示这是一个平均值
Time per request: 8188.731 [ms] (mean)
//大家最关心的指标之二,相当于 LR 中的 平均事务响应时间 ,后面括号中的 mean 表示这是一个平均值
Time per request: 8.189 [ms] (mean, across all concurrent requests)
//每个请求实际运行时间的平均值
Transfer rate: 162.30 [Kbytes/sec] received
//平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
Connection Times (ms)
min mean[+/-sd] median max
Connect: 4 646 1078.7 89 3291
Processing: 165 992 493.1 938 4712
Waiting: 118 934 480.6 882 4554
Total: 813 1638 1338.9 1093 7785
//网络上消耗的时间的分解,各项数据的具体算法还不是很清楚
Percentage of the requests served within a certain time (ms)
50% 1093
66% 1247
75% 1373
80% 1493
90% 4061
95% 4398
98% 5608
99% 7368
100% 7785 (longest request)
//整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于1093 毫秒,60% 的用户响应时间小于1247 毫秒,最大的响应时间小于7785 毫秒
由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数
转自:http://blog.chinaunix.net/space.php?uid=12318776&do=blog&cuid=537944