Thursday, April 23, 2009

css中中文字体(font-family)的英文名称

css中中文字体(font-family)的英文名称

Mac OS的一些:

华文细黑:STHeiti Light [STXihei]
华文黑体:STHeiti
华文楷体:STKaiti
华文宋体:STSong
华文仿宋:STFangsong
儷黑 Pro:LiHei Pro Medium
儷宋 Pro:LiSong Pro Light
標楷體:BiauKai
蘋果儷中黑:Apple LiGothic Medium
蘋果儷細宋:Apple LiSung Light
Windows的一些:

新細明體:PMingLiU
細明體:MingLiU
標楷體:DFKai-SB
黑体:SimHei
宋体:SimSun
新宋体:NSimSun
仿宋:FangSong
楷体:KaiTi
仿宋_GB2312:FangSong_GB2312
楷体_GB2312:KaiTi_GB2312
微軟正黑體:Microsoft JhengHei
微软雅黑体:Microsoft YaHei
装Office会生出来的一些:

隶书:LiSu
幼圆:YouYuan
华文细黑:STXihei
华文楷体:STKaiti
华文宋体:STSong
华文中宋:STZhongsong
华文仿宋:STFangsong
方正舒体:FZShuTi
方正姚体:FZYaoti
华文彩云:STCaiyun
华文琥珀:STHupo
华文隶书:STLiti
华文行楷:STXingkai
华文新魏:STXinwei

Thursday, April 2, 2009

div z-index

Div的层次问题,涉及到z-index,其实从字面上已经可以解释;z是从x、y以后的第三个轴,从网页上表现就是除了上下左右外的前后。规定这个属性,首先要求Div必须是浮动的(position:absolute;),值越大,Div越靠前;数值可以不连续。

Sunday, March 29, 2009

MySQL 索引文件损坏的提示信息 #1016 (errno: 145)

#1016 - Can't open file: 'table.MYI'. (errno: 145)

MySQL数据库中的表 "table" 的索引文件损坏。

可在sql语句模式下,先执行检查,再修复。

sql> check table `table`;

sql> repair table `table`;

Tuesday, March 24, 2009

linux 命令

查链接状态
netstat -anop

查所有SYN状态
netstat -an | grep SYN
netstat -an | grep SYN | wc -l

查当前连接数
ps aux | grep httpd | wc -l

查当前连接所占用内存数量
ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'

iptable统计与状态
iptables -L -nv

查看ip_conntrack状态
cat /proc/sys/net/ipv4/ip_conntrack_max
cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 5
#比较慢
cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr |awk '{x=x+$1}{print x}'
#比较慢

Monday, March 23, 2009

關於ip_conntrack: table full, dropping packet的問題
統報:
Apr 17 16:37:26 www kernel: printk: 135 messages suppressed.
Apr 17 16:37:26 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:26 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:33 www kernel: printk: 139 messages suppressed.
Apr 17 16:37:33 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:37 www kernel: printk: 60 messages suppressed.
Apr 17 16:37:37 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:52 www kernel: printk: 19 messages suppressed.
Apr 17 16:37:52 www kernel: ip_conntrack: table full, dropping packet.

有丟包現象

[root@www ~]# wc -l /proc/net/ip_conntrack
68463 /proc/net/ip_conntrack

[root@www ~]# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
65536

可調整以下參數:

echo 180 >
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
echo 262144 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
echo 120 > /proc/sys/net/ipv4/neigh/default/gc_stale_time
echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
echo 8192 > /proc/sys/net/ipv4/neigh/default/gc_thresh3

或vi /etc/sysctl.conf

net.ipv4.ip_conntrack_max = 655360
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

再sysctl -p

相關參數說明:

ARP支持一個sysctl接口,可以用以配置全局參數或逐個網絡接口地進行配製。該sysctl
可以通過/proc/sys/net/ipv4/neigh/*/*文件或者使用sysctl(2)接口來訪問。系統中
每個接口都在/proc/sys/net/ipv4/neigh/.中有自己的目錄。 `default’目錄中的設置用於
所有新建的設備。 sysctl相關的時間是以秒為單位,除非特別聲明過.
IXDBA.NET社區論壇
anycast_delay
對IPv6相鄰請求信息的回复的最大延遲時間;目前還不支持anycast。缺省值為1秒。
app_solicit
這是在使用多路廣播探測(multicast probe)前,經過網絡連接送到用戶間隙ARP端口監控程序
的探測(probe)最大數目(見mcast_solicit )。缺省值為0。
base_reachable_time
一旦發現相鄰記錄,至少在一段介於base_reachable_time/2和
3*base_reachable_time/2之間的隨機時間內,該記錄是有效的。如果收到上層協議的肯定反
饋,那麼記錄的有效期將延長。缺省值是30秒。
delay_first_probe_time
發現某個相鄰層記錄無效(stale)後,發出第一個探測要等待的時間。缺省值是5秒。
gc_interval
收集相鄰層記錄的無用記錄的垃圾收集程序的運行週期,缺省為30秒。
gc_stale_time
決定檢查一次相鄰層記錄的有效性的周期。當相鄰層記錄失效時,將在給它發送數據前,再解析一
次。缺省值是60秒。
gc_thresh1
存在於ARP高速緩存中的最少層數,如果少於這個數,垃圾收集器將不會運行。缺省值是128。
gc_thresh2
保存在ARP高速緩存中的最多的記錄軟限制。垃圾收集器在開始收集前,允許記錄數超過這個數
字5秒。缺省值是512。
gc_thresh3
保存在ARP高速緩存中的最多記錄的硬限制,一旦高速緩存中的數目高於此,垃圾收集器將馬上
運行。缺省值是1024。
locktime
ARP記錄保存在高速緩存內的最短時間(jiffy數),以防止存在多個可能的映射(potential
mapping)時, ARP高速緩存系統的顛簸(經常是由於網絡的錯誤配置而引起)。缺省值是1
秒。
mcast_solicit
在把記錄標記為不可抵達的之前,用多路廣播/廣播(multicast/broadcast)方式解析地址的
最大次數。

缺省值是3。
proxy_delay
當接收到有一個請求已知的代理ARP地址的ARP請求時,在回應前可以延遲的jiffy(時間單位,見BUG)數目。這樣,以防止網絡風暴。缺省值是0.8秒。
proxy_qlen
能放入代理ARP地址隊列(proxy-ARP addresses)的數據包最大數目。缺省值是64。
IXDBA.NET技術社區
retrans_time
重發一個請求前的等待jiffy(時間單位,見BUG)的數目。缺省值是1秒。
ucast_solicit
詢問ARP端口監控程序前,試圖發送單探測(unicast probe)的次數。 (見app_solicit).缺省值是3秒。
unres_qlen
每個沒有被其它網絡層解析的地址,在隊列中可存放包的最大數目。缺省值是3.

http://blog.24reader.com/ken666/2009/02/23/%e9%97%9c%e6%96%bcip_conntrack-table-full-dropping-packet%e7%9a%84%e5%95%8f%e9%a1%8c/

ip_conntrack_max 不夠多dd-wrt nvram set ip_conntrack_max=8192nvram commit reboot

http://www.right.com.cn/forum/viewthread.php?tid=11273


把 /proc/sys/net/ipv4/ip_conntrack_max 的值加大.如:echo "32767" > /proc/sys/net/ipv4/ip_conntrack_max不過... 通常這個值也有數千, 也就是允許同時有上千個連線存在...你的機器同時有那麼多人連線嗎 ?沒看過正常使用下會超過原本的設定值 (依照你的 RAM 決定), 好像有出現的機器都有問題, 可能被入侵當成跳板在攻擊別人吧... 最好檢查一下....

http://phorum.study-area.org/index.php?topic=11617.msg53210

错误:
Apr 8 16:15:42 GATEWAY kernel: ip_conntrack: table full, dropping

packet.
Apr 8 16:15:47 GATEWAY kernel: printk: 3 messages suppressed.
Apr 8 16:15:47 GATEWAY kernel: ip_conntrack: table full, dropping

packet.
Apr 8 16:15:54 GATEWAY kernel: printk: 3 messages suppressed.
Apr 8 16:15:54 GATEWAY kernel: ip_conntrack: table full, dropping

packet.


IP_conntrack表示连接跟踪数据库(conntrack database),代表NAT机器跟踪连接

的数目,连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中的ip-

sysctl函数设置。每一个跟踪连接表会占用350字节的内核存储空间,时间一长就

会把默认的空间填满,那么默认空间是多少?在内存为64MB的机器上是4096,内存

为128MB是 8192,内存为256MB是16384,那末就能


==================================
现在通过/proc文档系统我们能够在运行时读取CONNTRACK_MAX的值。
在Linux kernel 2.4.23版本前,使用:
# cat /proc/sys/net/ipv4/ip_conntrack_max
在Linux kernel 2.4.23版本后,使用:
# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
(旧的 /proc/sys/net/ipv4/ip_conntrack_max是不建议使用的!)


在/proc/sys/net/ipv4/netfilter/ip_conntrack_max 里查看、设置。
例如:增加到81920,可以用以下命令:
echo "81920" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
那样设置是不会保存的,要重启后保存可以在/etc/sysctl.conf中加:
net.ipv4.netfilter.ip_conntrack_max = 81920
不过增大表可能造成性能下降。


echo 21600>

/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
那样设置是不会保存的,要重启后保存可以在/etc/sysctl.conf中加:
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established =21600
这个参数是连接超时,默认超时时间是5天,也就是432000秒,现在把它改成

21600,就是6小时,在6小时后清除掉无效的连接
对已经建立的连接无效,已经建立的超时连接会在5天期满以后自动清除掉


查看ip_conntrack前几位IP

cat /proc/net/ip_conntrack cut -d ' ' -f 10 cut -d '=' -f 2 sort uniq -c sort -nr head -n 5
察看有多少个跟踪
cat /proc/net/ip_conntrack cut -d ' ' -f 10 cut -d '=' -f 2 sort uniq -c sort -nr awk '{x=x+$1}{print x}'


http://blog.chinaunix.net/u/32831/showart_525559.html

在网上找了以下解决方法

vi /etc/sysctl.conf

net.ipv4.ip_conntrack_max = 655360
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

再sysctl -p

http://hi.baidu.com/%BF%B5%BD%A1/blog/item/001962d9bfdc8e2911df9bb9.html


系统报:
Apr 17 16:37:26 www kernel: printk: 135 messages suppressed.
Apr 17 16:37:26 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:26 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:33 www kernel: printk: 139 messages suppressed.
Apr 17 16:37:33 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:37 www kernel: printk: 60 messages suppressed.
Apr 17 16:37:37 www kernel: ip_conntrack: table full, dropping packet.
Apr 17 16:37:52 www kernel: printk: 19 messages suppressed.
Apr 17 16:37:52 www kernel: ip_conntrack: table full, dropping packet.

有丢包现象

[root@www ~]# wc -l /proc/net/ip_conntrack
68463 /proc/net/ip_conntrack

[root@www ~]# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
65536

可调整以下参数:

echo 180 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
echo 262144 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
echo 120 > /proc/sys/net/ipv4/neigh/default/gc_stale_time
echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
echo 8192 > /proc/sys/net/ipv4/neigh/default/gc_thresh3

或vi /etc/sysctl.conf

net.ipv4.ip_conntrack_max = 655360
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

再sysctl -p

相关参数说明:

ARP 支持一个 sysctl 接口,可以用以配置全局参数或逐个网络接口地进行配制。 该 sysctl 可以通过 /proc/sys/net/ipv4/neigh/*/* 文件或者使用 sysctl(2) 接口来访问。系统中每个接口都在 /proc/sys/net/ipv4/neigh/. 中有自己的目录。`default'目录中的设置用于所有新建的设备。 sysctl 相关的时间是以秒为单位,除非特别声明过.
anycast_delay
对 IPv6 相邻请求信息的回复的最大延迟时间; 目前还不支持 anycast。缺省值为1秒。
app_solicit
这是在使用多路广播探测(multicast probe)前, 经过网络连接送到用户间隙ARP端口监控程序的探测(probe) 最大数目(见 mcast_solicit )。 缺省值为0。
base_reachable_time
一旦发现相邻记录,至少在一段介于 base_reachable_time/2和3*base_reachable_time/2 之间的随机时间内,该记录是有效的。如果收到上层协议的肯定反馈, 那么记录的有效期将延长。 缺省值是30秒。
delay_first_probe_time
发现某个相邻层记录无效(stale)后,发出第一个探测要等待的时间。 缺省值是5秒。
gc_interval
收集相邻层记录的无用记录的垃圾收集程序的运行周期,缺省为30秒。
gc_stale_time
决定检查一次相邻层记录的有效性的周期。 当相邻层记录失效时,将在给它发送数据前,再解析一次。 缺省值是60秒。
gc_thresh1
存在于ARP高速缓存中的最少层数,如果少于这个数, 垃圾收集器将不会运行。缺省值是128。
gc_thresh2
保存在 ARP 高速缓存中的最多的记录软限制。 垃圾收集器在开始收集前,允许记录数超过这个数字 5 秒。 缺省值是 512。
gc_thresh3
保存在 ARP 高速缓存中的最多记录的硬限制, 一旦高速缓存中的数目高于此, 垃圾收集器将马上运行。缺省值是1024。
locktime
ARP 记录保存在高速缓存内的最短时间(jiffy数), 以防止存在多个可能的映射(potential mapping)时, ARP 高速缓存系统的颠簸 (经常是由于网络的错误配置而引起)。 缺省值是 1 秒。
mcast_solicit
在把记录标记为不可抵达的之前, 用多路广播/广播(multicast/broadcast)方式解析地址的最大次数。 缺省值是3。
proxy_delay
当接收到有一个请求已知的代理 ARP 地址的 ARP 请求时, 在回应前可以延迟的 jiffy(时间单位,见BUG)数目。 这样,以防止网络风暴。缺省值是0.8秒。
proxy_qlen
能放入代理 ARP 地址队列(proxy-ARP addresses)的数据包最大数目。缺省值是64。
retrans_time
重发一个请求前的等待 jiffy(时间单位,见BUG)的数目。缺省值是1秒。
ucast_solicit
询问ARP端口监控程序前,试图发送单探测(unicast probe)的次数。 (见 app_solicit). 缺省值是3秒。
unres_qlen
每个没有被其它网络层解析的地址,在队列中可存放包的最大数目。缺省值是3.

http://hi.baidu.com/kouzl/blog/item/27e63745ecf9ca388694733a.html

Tuesday, October 28, 2008

Linux下 Proftpd 的安装配置 记录

作者:白东(Albert Ding)

由于更换服务器,因此尝试了一下Proftpd,先到 Proftpd 看了文档,之前也听说Proftpd比较容易设置。

如下安装:

1. 下载 Proftpd,在网站首页就有链接,如果网站打不开,那就直接上它的ftp吧 ftp://ftp.proftpd.org;
2. 配置 Proftpd:
1. 由于习惯分散管理进行了这样的配置 (./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/run)
2. 将这些内容分散安装,如果 (./configure)什么参数也不要,那默认安装位置是:/usr/local,其他的也会分散到 /usr/local 中的相应目录中。
3. 编译和安装 (make / make install)
4. 设定开机自动启动文件 /etc/init.d/proftpd (具体内容见文后附录,同时注意修改 proftpd 文件的属性 chmod 755 /etc/init.d/proftpd )
5. 配置 Proftpd (/etc/proftpd.conf) (这里有非常详细的说明:http://www.proftpd.org/docs/directives/linked/configuration.html)



=========
附录:
=========

参考配置片断:
=========

ServerIdent off #不向客户端发送proftpd的版本信息,默认是打开的
DefaultRoot ~ #系统用户登陆后,以他们自己的目录为根,这样安全
DisplayLogin welcome.msg #显示登陆消息,需要在用户名的根目录中设定welcome.msg文件
DefaultChdir public_html #用户登陆后的默认文件夹,如果不设定这个,则是用户的根目录
AllowRetrieveRestart on #允许断点续传
AllowStoreRestart on

/etc/proftpd.conf 的脚本内容:
======================
(注意,如果你安装的位置不同,要记得修改下面的路径,主要是:FTPD_BIN 和 FTPD_CONF)
(注意,修改 proftpd 文件的属性: chmod 755 /etc/init.d/proftpd )

#!/bin/sh

# ProFTPD files
FTPD_BIN=/usr/sbin/proftpd
FTPD_CONF=/usr/etc/proftpd.conf
PIDFILE=/var/run/proftpd.pid

# If PIDFILE exists, does it point to a proftpd process?

if [ -f $PIDFILE ]; then
pid=`cat $PIDFILE`
fi

if [ ! -x $FTPD_BIN ]; then
echo "$0: $FTPD_BIN: cannot execute"
exit 1
fi

case $1 in

start)
if [ -n "$pid" ]; then
echo "$0: proftpd [PID $pid] already running"
exit
fi

if [ -r $FTPD_CONF ]; then
echo "Starting proftpd..."

$FTPD_BIN -c $FTPD_CONF

else
echo "$0: cannot start proftpd -- $FTPD_CONF missing"
fi
;;

stop)
if [ -n "$pid" ]; then
echo "Stopping proftpd..."
kill -TERM $pid

else
echo "$0: proftpd not running"
exit 1
fi
;;

restart)
if [ -n "$pid" ]; then
echo "Rehashing proftpd configuration"
kill -HUP $pid

else
echo "$0: proftpd not running"
exit 1
fi
;;

*)
echo "usage: $0 {startstoprestart}"
exit 1
;;

esac

exit 0

消息文件中能够使用的转义字符:
======================
(呵呵,顺手翻译了这个。)

%C 当前工作目录
%E 服务器管理员的邮箱地址
%F 文件系统剩余空间(bytes)
%f 文件系统剩余空间(units)
%i 本次上传的文件数量
%L 本机的主机名
%M 最大的连接数
%N 当前的连接数
%o 本次下载的文件数量
%R 客户端的主机名
%T 当前系统时间
%t 本次的文件交换数量(包括上传和下载)
%U 登陆的用户名
%u 通过 ident 协议识别的用户名
%V 虚拟主机的名称(如果有)
%x 用户组的名称
%y 当前连接中该用户组的数量
%z 当前连接中该用户组允许的最大数量

Tuesday, August 19, 2008

Qmail openssl stunnel ssl pop3 995 smtp 465 配置 安装

转载请注明出处,作者:Albert Ding, 白东

服务器在境外,GFW很烦,因此给qmail邮件服务器增加了ssl链接方式。而这方面的中文资料很少,尤其是使用stunnel的,所以升级了后,写了这篇手记。

按之前的qmail vpopmail的方式安装好。我的服务器原来就安装qmail,一切工作正常,仅仅打了smtp验证的补丁。

如果是这样,那就可以直接升级。

需要安装下面两个软件:

1. openssl (http://www.openssl.org)
# cd openssl-0.9.8e
# ./config
# make
# make test
# make install
# openssl version
OpenSSL 0.9.8e 23 Feb 2007
2. stunnel (http://www.stunnel.org)
# ./configure --sysconfdir=/etc --localstatedir=/var --sharedstatedir=/var --sbindir=/sbin
# make
# make install
# stunnel -version
stunnel 4.20 on i686-pc-linux-gnu with OpenSSL 0.9.8e 23 Feb 2007
Threading:PTHREAD SSL:ENGINE Sockets:POLL,IPv4
Global options
debug = 5
pid = /usr/local/var/run/stunnel/stunnel.pid
RNDbytes = 64
RNDfile = /dev/urandom
RNDoverwrite = yes
Service-level options
cert = /etc/stunnel/stunnel.pem
ciphers = ALL:!ADH:+RC4:@STRENGTH
key = /etc/stunnel/stunnel.pem
session = 300 seconds
sslVersion = SSLv3 for client, all for server
TIMEOUTbusy = 300 seconds
TIMEOUTclose = 60 seconds
TIMEOUTconnect = 10 seconds
TIMEOUTidle = 43200 seconds
verify = none

stunnel 配置的时候主意设定一下安装路径 /sbin/stunnel /etc/stunnel 主要的两个。

安装好后,建立两个文件

/etc/stunnel/pop3.conf
# /etc/stunnel/pop3.conf
cert = /var/qmail/control/servercert.pem
exec = /var/qmail/bin/qmail-popup
execargs = qmail-popup your.domain.com /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir

/etc/stunnel/smtp.conf
# /etc/stunnel/smtp.conf
cert = /var/qmail/control/servercert.pem
exec = /var/qmail/bin/qmail-smtpd
execargs = qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true

建立qmail服务器证书(反正是自己签发证书,想多长时间都可以,这里设定10年,呵呵):

# cd /var/qmail/control
# openssl req -new -x509 -nodes -out servercert.pem -days 3650 -keyout servercert.pem

需改服务器证书文件servercert.pem的文件属性:

# ln -s /var/qmail/control/servercert.pem clientcert.pem
# chown -R vpopmail:qmail /var/qmail/control/clientcert.pem /var/qmail/control/servercert.pem
# chmod 600 servercert.pem #这个很重要哦

建立pop3和smtp ssl的run文件

# mkdir -p /var/qmail/supervise/qmail-pop3ds/log /var/qmail/supervise/qmail-smtpds/log /var/log/qmail/pop3ds /var/log/qmail/smtpds

/var/qmail/supervise/qmail-pop3ds/run
#!/bin/sh
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
exec /usr/local/bin/softlimit -m 20000000 \
/usr/local/bin/tcpserver -H -R -v -l "$LOCAL" -c "$MAXSMTPD" 0 995 \
/sbin/stunnel /etc/stunnel/pop3.conf 2>&1
/var/qmail/supervise/qmail-pop3ds/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
/var/log/qmail/pop3ds
/var/qmail/supervise/qmail-smtpds/run
#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`

if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpds/run
exit 1
fi

if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi

exec /usr/local/bin/softlimit -m 20000000 \
/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u 89 -g 89 0 465 \
/sbin/stunnel /etc/stunnel/smtp.conf 2>&1
/var/qmail/supervise/qmail-smtpds/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpds

将执行文件链接到/service中:

# chmod 755 /var/qmail/supervise/qmail-pop3ds/run /var/qmail/supervise/qmail-pop3ds/log/run /var/qmail/supervise/qmail-smtpds/run /var/qmail/supervise/qmail-smtpds/log/run
# chown -R qmaill /var/log/qmail/pop3ds/ /var/log/qmail/smtpds/
# cd /service
# ln -s /var/qmail/supervise/qmail-pop3ds/ qmail-pop3ds
# ln -s /var/qmail/supervise/qmail-smtpds/ qmail-smtpds

修改qmailctl文件:

/var/qmail/bin/qmailctl #这个文件编写的有点复杂,我还有个更简单的,我回头贴出来。
#!/bin/sh
# Description: the qmail MTA
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
case "$1" in
start)
echo "Starting qmail..."
echo " qmail-send"
if svok /service/qmail-send ; then
svc -u /service/qmail-send /service/qmail-send/log
else
echo " qmail-send supervise not running"
fi
echo " qmail-smtp"
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
else
echo " qmail-smtpd supervise not running"
fi
echo " qmail-smtp ssl"
if svok /service/qmail-smtpds ; then
svc -u /service/qmail-smtpds /service/qmail-smtpds/log
else
echo " qmail-smtpd ssl supervise not running"
fi
echo " qmail-pop3d"
if svok /service/qmail-pop3d ; then
svc -u /service/qmail-pop3d /service/qmail-pop3d/log
else
echo " qmail-pop3d supervise not running"
fi
echo " qmail-pop3d ssl"
if svok /service/qmail-pop3ds ; then
svc -u /service/qmail-pop3ds /service/qmail-pop3ds/log
else
echo " qmail-pop3d ssl service not running"
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo " qmail-smtpd"
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo " qmail-smtpd ssl"
svc -d /service/qmail-smtpds /service/qmail-smtpds/log
echo " qmail-send"
svc -d /service/qmail-send /service/qmail-send/log
echo " qmail-pop3d"
svc -d /service/qmail-pop3d /service/qmail-pop3d/log
echo " qmail-pop3d ssl"
svc -d /service/qmail-pop3ds /service/qmail-pop3ds/log
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
svstat /service/qmail-smtpds
svstat /service/qmail-smtpds/log
svstat /service/qmail-pop3d
svstat /service/qmail-pop3d/log
svstat /service/qmail-pop3ds
svstat /service/qmail-pop3ds/log
qmail-qstat
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Pausing"
echo " qmail-send"
svc -p /service/qmail-send
echo " qmail-smtpd"
svc -p /service/qmail-smtpd
echo " qmail-smtpd ssl"
svc -p /service/qmail-smtpds
echo " qmail-pop3d"
svc -p /service/qmail-pop3d
echo " qmail-pop3d ssl"
svc -p /service/qmail-pop3ds
;;
cont)
echo "Continuing"
echo " qmail-send"
svc -c /service/qmail-send
echo " qmail-smtpd"
svc -c /service/qmail-smtpd
echo " qmail-smtpd ssl"
svc -c /service/qmail-smtpds
echo " qmail-pop3d"
svc -c /service/qmail-pop3d
echo " qmail-pop3ds"
svc -c /service/qmail-pop3ds
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo "* Stopping qmail-smtpd ssl."
svc -d /service/qmail-smtpds /service/qmail-smtpds/log
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send /service/qmail-send/log
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
echo "* Restarting qmail-smtpd ssl."
svc -u /service/qmail-smtpds /service/qmail-smtpds/log
echo "* Restarting qmail-pop3d."
svc -t /service/qmail-pop3d /service/qmail-pop3d/log
echo "* Restarting qmail-pop3ds."
svc -t /service/qmail-pop3ds /service/qmail-pop3ds/log
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp.cdb echo "Reloaded /etc/tcp.smtp." ;; help) cat <<1520.11887344591214@your.domain.com>
user albert
+OK
pass albert
+OK
list
+OK
1 2734
2 31807
3 34957
4 20644
5 27798
6 26584
.
quit
4. # openssl s_client -connect localhost:465
(执行后,会有大段的证书相关的信息,这里省略,只复制来最后一行,然后测试就和telnet localhost 25 一样了)
220 your.domain.com ESMTP
5. openssl s_client -connect localhost:995
(执行后,会有大段的证书相关的信息,这里省略,只复制来最后一行,然后测试就和telnet localhost 110 一样了)
+OK <1872.1188791523434@your.domain.com>
6. 查看主要的日志,包括:
1. /var/log/qmail/current
2. /var/log/qmail/pop3d/current
3. /var/log/qmail/pop3ds/current
4. /var/log/qmail/smtpd/current
5. /var/log/qmail/smtpds/current
6. 另外你也可以在/etc/stunnel/smtp.conf 和 pop3.conf 文件中加入下面两个设置内容,以生成详细的调试日志。
debug = 7
output = /var/log/qmail/stunnel.log

可能遇到的问题:

1. 如果你是用复制,那你需要很小心了,因为有的时候文件的换行在你复制到telnet客户端软件的时候会有可能变了,因为dos格式和unix格式有差别。尤其注意运行文件第一行的声明后的换行。
2. tcpserver: fatal: no IP address for your.domain.com
表示端口已经被其它进程占用,要么你停掉那个进程,要么换个端口。
3. Wrong permissions on /var/qmail/control/servercert.pem
servvercert.pem文件属性设置为600即可
4. /etc/stunnel/smtp.conf文件中最后的" /bin/true"不能忘记,否则客户端会提示验证不通过。
5. ssl证书问题,因为我们是自己签发的证书,所以客户端会提示,两个办法:1、购买权威机构签发的证书(非常贵,国内很多是国内范围的便宜价格,国际范围的就不一样了)。2、将serercert.pem文件重命名为 .crt 或 .cer 格式。然后在IE的Internet Options中导入,要选择自动。
6. 454 oops, unable to write pipe and I can't auth (#4.3.0)
老版本的smtp验证补丁中,你需要加上域名,才可以验证。就是在/etc/stunnel/smtp.conf文件中的qmail-smtpd后面。这样:
execargs = qmail-smtpd your.domain.com /home/vpopmail/bin/vchkpw /bin/true
可以参考这个网页的说明 http://www.fehcom.de/qmail/smtpauth.html

如果你有问题,可以联系我。msn: amtding # msn 。com


下面是那个简单的qmailctl文件。(这里把我的行前缩进给弄没了,你自己加吧。:( )

#!/bin/sh

# chkconfig: 2345 80 30
# description: the qmail MTA

PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH

SERVICES=" /service/qmail-send \
/service/qmail-send/log \
/service/qmail-smtpd \
/service/qmail-smtpd/log \
/service/qmail-smtpds \
/service/qmail-smtpds/log \
/service/qmail-pop3d \
/service/qmail-pop3d/log \
/service/qmail-pop3ds \
/service/qmail-pop3ds/log"

case "$1" in
start)
echo "Starting qmail"
svc -u ${SERVICES}

if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
svc -d ${SERVICES}
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat ${SERVICES}
qmail-qstat
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Pausing qmail"
svc -p ${SERVICES}
;;
cont)
echo "Continuing qmail"
svc -c ${SERVICES}
;;
restart)
echo "Restarting qmail"
svc -d ${SERVICES}
svc -u ${SERVICES}
;;
cdb)
/usr/local/bin/tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp chmod 644 /home/vpopmail/etc/tcp.smtp* echo "Reloaded /home/vpopmail/etc/tcp.smtp." ;; help) cat <
stop -- stops mail service (smtp connections refused, nothing goes out)
start -- starts mail service (smtp connection accepted, mail can go out)
pause -- temporarily stops mail service (connections accepted, nothing leaves)
cont -- continues paused mail service
stat -- displays status of mail service
cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- schedules queued messages for immediate delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
queue -- shows status of queue
alrm -- same as doqueue
flush -- same as doqueue
hup -- same as reload
HELP
;;
*)
echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|paus e|cont|cdb|queue|help}"
exit 1
;;
esac

exit 0