OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

在OpenBSD环境下搭建各种服务器的相关讨论。

版主: lionuxchenjun天地乾坤

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 leo » 2012-04-23 16:06

OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb(chroot环境)探讨

遗留问题,目前不能在chroot环境里用femail外发论坛email地址验证邮件,欢迎有经验的朋友请跟贴指教,有关postgresql的优化,请参阅none兄的帖子,http://www.gobsd.org/showthread.php?t=3198&page=2 , 他的实际应用经验是“大大的”,:), 希望可以对我们这些初学者不吝赐教。:D

(受none兄煽动,实际上跑论坛程序,数据库也不会太大,体会不出postgresql稳定和高性能的优势,我在自己的Intel(R) Pentium(R) 4 CPU 1300MHz , 1.2 G内存的老机器上跑了一个几十万个帖子的phpbb论坛,居然还凑合能运行。)

设置packages的“路径”:

代码: 全选

# export PKG_PATH=ftp://gobsd.org/pub/OpenBSD/snapshots/packages/i386/
安装postgreaql数据库

代码: 全选

# pkg_add postgresql-server postgresql-client postgresql-docs
postgresql-server-9.1.3:postgresql-client-9.1.3: ok                                                
useradd: Warning: home directory `/var/postgresql' doesn't exist, and -m was not specified         
postgresql-server-9.1.3: ok                                                                        
postgresql-docs-9.1.3: ok                                                                          
The following new rcscripts were installed: /etc/rc.d/postgresql
See rc.d(8) for details.
Look in /usr/local/share/doc/pkg-readmes for extra documentation.
建议大家继续操作前最好自行阅读一下上面提到的随机文件,因为我的机器是首次安装postgresql,所以必须建立默认数据库:

代码: 全选

# su - _postgresql
$ mkdir /var/postgresql/data
$ initdb -D /var/postgresql/data -U postgres -E UTF8 -A md5 -W
The files belonging to this database system will be owned by user "_postgresql".
This user must also own the server process.

The database cluster will be initialized with locale C.
The default text search configuration will be set to "english".

fixing permissions on existing directory /var/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 40
selecting default shared_buffers ... 28MB
creating configuration files ... ok
creating template1 database in /var/postgresql/data/base/1 ... ok
initializing pg_authid ... ok
Enter new superuser password: 这里输入你的密码
Enter it again: 再输入一次
setting password ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating collations ... not supported on this platform
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

Success. You can now start the database server using:

    postgres -D /var/postgresql/data
or
    pg_ctl -D /var/postgresql/data -l logfile start

$ 
因为每个人的具体要求不同,关于数据库性能优化和允许ssl连接的设置请自行参阅相关文档或请在gobsd.org论坛上单独开贴讨论,这里就不涉及了。
我的修改是:在/etc/sysctl.conf里加上下列三句:

代码: 全选

kern.seminfo.semmni=256
kern.seminfo.semmns=2048
kern.shminfo.shmmax=100663296
如果你的服务器较忙,最好为_postgresql用户和进程设置自己的登陆级别,在/etc/login.conf里加上如下的内容(可能你需要根据自己的情况调整):————如果你为_postgresql设置了单独的登陆级别,则在 /etc/rc.conf.local里面的这句就不能要了:"postgresql_user=mypgsqluser"

代码: 全选

postgresql:\
	:openfiles-cur=1024:\
	:tc=daemon:
重建login.conf.db,

代码: 全选

# [ -f /etc/login.conf.db ] && cap_mkdb /etc/login.conf


设置postgresql随机启动,

代码: 全选

# echo 'postgresql_user=mypgsqluser' >> /etc/rc.conf.local
# echo 'pkg_scripts="postgresql"' >> /etc/rc.conf.local
安装php:

代码: 全选

# pkg_add php-5.3.10
php-5.3.10:libiconv-1.14: ok                                                                       
php-5.3.10:libxml-2.7.8p5: ok                                                                      
php-5.3.10:gettext-0.18.1p1: ok                                                                    
php-5.3.10:femail-0.98: ok                                                                         
php-5.3.10:femail-chroot-0.98p0: ok                                                                
php-5.3.10: ok                                                                                     
--- +femail-chroot-0.98p0 -------------------
By default, femail will use `localhost' for smtphost.  Make sure to
review FAQ Section 10.16 discussing name resolution with httpd(8)'s
default chroot(2).

Additionally, one may create a custom femail.conf; see femail(8).

If you're using femail with PHP inside a chroot jail, be aware that
PHP's built-in "mail" function uses popen(), which requires /bin/sh.
--- +php-5.3.10 -------------------
To enable the php-5.3 module please create a symbolic
link from /var/www/conf/modules.sample/php-5.3.conf
to /var/www/conf/modules/php.conf.

ln -s /var/www/conf/modules.sample/php-5.3.conf \
        /var/www/conf/modules/php.conf

The recommended php configuration has been installed
to /etc/php-5.3.ini.
# ln -s /var/www/conf/modules.sample/php-5.3.conf \
>         /var/www/conf/modules/php.conf
为了安全起见,我们的web服务器将运行在chroot的环境里,而PHP内置的mail需要使用popen(),为保证功能正常,

代码: 全选

# cp -p /bin/sh /var/www/bin/sh
为了保证postgresql可以运行在chroot环境里,我们需要设置一下配置文件:将 /var/postgresql/data/postgresql.conf 里的下列参数修改一下,并去掉前面的#:

代码: 全选

unix_socket_directory = '/var/www/tmp'
如果您先安装的php,或者系统已经在 /var/www/ 设置了tmp的链接,可能postgresql会工作不正常,我的方法是先删除这个目录,再重新手动建立一个,如果有更好的方法请提供。

代码: 全选

# rm -rf /var/www/tmp
# mkidr /var/www/tmp
# chown _postgresql:_postgresql /var/www/tmp
# chmod 755 /var/www/tmp
为了shell上去备份和还原数据库,还需要做一下链接:

代码: 全选

# ln -s /var/www/tmp/.s.PGSQL.5432 /tmp
# ln -s /var/www/tmp/.s.PGSQL.5432.lock /tmp
也可以试试这样:

代码: 全选

# ln -s /var/www/tmp/.s.PGSQL.5432 /tmp/.s.PGSQL.5432
# ln -s /var/www/tmp/.s.PGSQL.5432.lock /tmp/.s.PGSQL.5432.lock
因为OpenBSD每天会自动清空 /tmp 目录(具体时间详FAQ),所以也可以自行用crontab加上定时任务。否则就需要总是手动添加。



安装PHP扩展

代码: 全选

pkg_add php-bz2-5.3.10 php-curl-5.3.10 php-xsl-5.3.10 php-soap-5.3.10 php-pgsql-5.3.10 php-mcrypt-5.3.10 php-gd-5.3.10 php-pgsql-5.3.10
php-bz2-5.3.10:bzip2-1.0.6: ok                                                                     
php-bz2-5.3.10: ok                                                                                 
php-curl-5.3.10:libidn-1.24: ok                                                                    
php-curl-5.3.10:curl-7.25.0: ok                                                                    
php-curl-5.3.10: ok                                                                                
php-xsl-5.3.10:libgpg-error-1.10: ok                                                               
php-xsl-5.3.10:libgcrypt-1.4.6p1: ok                                                               
php-xsl-5.3.10:libxslt-1.1.26p3: ok                                                                
php-xsl-5.3.10: ok                                                                                 
php-soap-5.3.10: ok                                                                                
php-pgsql-5.3.10: ok                                                                               
php-mcrypt-5.3.10:libmcrypt-2.5.8p1: ok                                                            
php-mcrypt-5.3.10:libltdl-2.4.2: ok                                                                
php-mcrypt-5.3.10: ok                                                                              
php-gd-5.3.10:png-1.5.10: ok                                                                       
php-gd-5.3.10:jpeg-8c: ok                                                                          
php-gd-5.3.10:t1lib-5.1.2: ok                                                                      
php-gd-5.3.10: ok                                                                                  
--- +php-bz2-5.3.10 -------------------
You can enable this module by creating a symbolic
link from /etc/php-5.3.sample/bz2.ini to
/etc/php-5.3/bz2.ini.

ln -fs /etc/php-5.3.sample/bz2.ini \
        /etc/php-5.3/bz2.ini
--- +php-curl-5.3.10 -------------------
You can enable this module by creating a symbolic
link from /etc/php-5.3.sample/curl.ini to
/etc/php-5.3/curl.ini.

ln -fs /etc/php-5.3.sample/curl.ini \
        /etc/php-5.3/curl.ini
--- +php-gd-5.3.10 -------------------
You can enable this module by creating a symbolic
link from /etc/php-5.3.sample/gd.ini to
/etc/php-5.3/gd.ini.

ln -fs /etc/php-5.3.sample/gd.ini \
        /etc/php-5.3/gd.ini
--- +php-mcrypt-5.3.10 -------------------
You can enable this module by creating a symbolic
link from /etc/php-5.3.sample/mcrypt.ini to
/etc/php-5.3/mcrypt.ini.

ln -fs /etc/php-5.3.sample/mcrypt.ini \
        /etc/php-5.3/mcrypt.ini
--- +php-pgsql-5.3.10 -------------------
You can enable this module by creating a symbolic
link from /etc/php-5.3.sample/pgsql.ini to
/etc/php-5.3/pgsql.ini.

ln -fs /etc/php-5.3.sample/pgsql.ini \
        /etc/php-5.3/pgsql.ini
--- +php-soap-5.3.10 -------------------
You can enable this module by creating a symbolic
link from /etc/php-5.3.sample/soap.ini to
/etc/php-5.3/soap.ini.

ln -fs /etc/php-5.3.sample/soap.ini \
        /etc/php-5.3/soap.ini
--- +php-xsl-5.3.10 -------------------
You can enable this module by creating a symbolic
link from /etc/php-5.3.sample/xsl.ini to
/etc/php-5.3/xsl.ini.

ln -fs /etc/php-5.3.sample/xsl.ini \
        /etc/php-5.3/xsl.ini
自己根据提示做好链接

修改apache配置文件以支持PHP语法。(参以前的教程)
修改 /var/www/conf/httpd.conf 文件中的下列内容:
将原内容:

代码: 全选

DirectoryIndex index.html
修改为:

代码: 全选

DirectoryIndex index.php
并删除或改名index.html文件;

如果两个文件全需要,则修改为:

代码: 全选

DirectoryIndex index.php index.html
让apache开机自动启动,在 /etc/rc.conf.local里加上

代码: 全选

httpd_flags=""
重新启动系统。


我们这里用一个常见的应用——phpbb3来测试一下postgresql数据库,将下载好的文件解压后放到OpenBSD的默认的web服务器根目录 /var/www/htdocs 里:

先重新建立一个初始化数据库:

代码: 全选

# su - _postgresql
先为phpbb建立一个专用的数据库和role(用户):

代码: 全选

$ psql -d template1 postgres
Password for user postgres: 
psql (9.1.3)
Type "help" for help.

template1=# create database phpbb3;
template1-# create role leo with superuser login password 'gobsd.org';
template1-# \q
$ exit
#
处理目录权限

代码: 全选

chmod 777 /var/www/htdocs/{cache,files,store,config.php,images/avatars/upload}


其余的web服务器设置请看以前的讨论,这里略了,我实际操作时没有问题,就是在域名设置时要有些注意的地方。
如果您有问题请跟贴讨论。

php邮件功能设置探讨:(目前没有解决的问题)
安装php时,自动安装了femail,这个package可以工作在chrooted环境下,但是我们还需要配置一下,其配置文件为 /etc/femail.conf
我的内容:

代码: 全选

# cat /etc/femail.conf
smtphost = localhost
myname = www.gobsd.org
此外,因为工作在chrooted环境下,修改 /etc/php-5.3.ini 里面的这里:

代码: 全选

; sendmail_path ="/var/www/bin/femail -t -i"
修改为

代码: 全选

sendmail_path ="/bin/femail -t -i"

代码: 全选

;sendmail_from = me@example.com
修改为

代码: 全选

sendmail_from = leo@gobsd.org
再将:

代码: 全选

# cp /bin/sh /var/www/bin
# cp /etc/resolv.conf /var/www/etc/resolv.conf
# cp /etc/hosts /var/www/etc/hosts
如果你也设置了resolv.conf.tail,也要拷贝过去。


遗留问题,目前不能在chroot环境里用femail外发论坛email地址验证邮件,有知道的朋友请跟贴说明,查询 /var/www/logs/error_log, 显示:“femail: remote host refuses our greeting” ,不知道是哪里配置的问题,是否当垃圾邮件拒收了,看来邮件服务器这块还真要琢磨一下了。


有关postgresql的优化,请参阅none兄的帖子:
http://www.gobsd.org/showthread.php?t=3198&page=2
他的实际应用经验是“大大的”,:),希望可以对我们这些初学者,不吝赐教。

有问题欢迎来 http://www.gobsd.org/newthread.php?do=newthread&f=5 探讨。

f5b
锆 Zr
帖子: 643
注册时间: 2011-10-22 20:43

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 f5b » 2012-04-23 21:26

之前一直在freebsd上面测试phpbb
leo能否尝试将phpbb commit到ob的ports里面去?

chroot 环境php外发邮件,本周我会在drupal7上面测试,drupal7可以用sqlite做数据库了,维护简单。
看cvs 邮件说sqlite3 已经跑进base里面了。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 leo » 2012-04-23 21:42

f5b 写了:之前一直在freebsd上面测试phpbb
leo能否尝试将phpbb commit到ob的ports里面去?

chroot 环境php外发邮件,本周我会在drupal7上面测试,drupal7可以用sqlite做数据库了,维护简单。
看cvs 邮件说sqlite3 已经跑进base里面了。
drupal7是不是phpbb类似?全是php写的?
我自己暂时还不想这样做,主要是不想上“贼船”,呵呵、而且也没有看过porter的手册,f5b兄有能力可以试试,这样JR里也有了一个porter。:)

f5b
锆 Zr
帖子: 643
注册时间: 2011-10-22 20:43

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 f5b » 2012-05-03 21:54

--- +femail-chroot-0.98p0 ------------------- By default, femail will use `localhost' for smtphost. Make sure to review FAQ Section 10.16 discussing name resolution with httpd(8)'s default chroot(2). Additionally, one may create a custom femail.conf; see femail(8). If you're using femail with PHP inside a chroot jail, be aware that PHP's built-in "mail" function uses popen(), which requires /bin/sh.


根据以上提示做以下设置就能让chroot的php外发邮件了

http://www.openbsd.org/faq/faq10.html#httpdchroot

Name Resolution: httpd(8) inside the chroot(2) will NOT be able to use the system /etc/hosts or /etc/resolv.conf. Therefore, if you have applications which require name resolution, you will need to populate /var/www/etc/hosts and/or /var/www/etc/resolv.conf in the chroot(2) environment. Note that some applications expect the resolution of "localhost" to work.

也就是复制hosts和resolv.conf文件到/var/www/etc目录
最后把/bin/sh 也复制到/var/www/bin目录

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 leo » 2012-05-03 21:57

这个早就做了,还是不行,网上说要设置一下mx纪录,最近也设置了,但是还没有尝试,不知道是否也要设置一下sendmail或者禁用sendmail?

查看apache的错误信息。

代码: 全选

# cat /var/www/logs/error_log
femail: remote host refuses our greeting

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 leo » 2012-05-03 22:01

现在把老机器上测试论坛得帖子刷成了100多万,老机器有点吃不消了,呵呵。
postgresql得数据库功能确实比较强劲,但是我没有在本地试过mysql可以到多少,也不敢断言。:)

none
铁 Fe
帖子: 67
注册时间: 2012-02-29 11:41

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 none » 2012-05-04 4:50

还真没玩过chroot方式,也没试过pkg_add postgresql-server呢,都是以前用过linux而遗留下来的坏习惯
最近一直在外面游荡,没环境测试这种好玩的方式,回去一定试试看
对于 /var/www/tmp 的问题,是否可以不删除,改权限实现呢
# chmod a+rw, a+t /var/www/tmp

f5b
锆 Zr
帖子: 643
注册时间: 2011-10-22 20:43

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 f5b » 2012-05-04 7:48

leo 写了:这个早就做了,还是不行,网上说要设置一下mx纪录,最近也设置了,但是还没有尝试,不知道是否也要设置一下sendmail或者禁用sendmail?

查看apache的错误信息。

代码: 全选

# cat /var/www/logs/error_log
femail: remote host refuses our greeting

sorry,昨晚匆匆回复时没有看你1楼的文章。
昨晚在drupal 7上测试成功php外发邮件的环境说明

0、4月26日的snapshot amd64
1、默认pkg安装没有/etc/femail.conf文件,我也没有添加此文件。
2、默认pkg安装的/etc/php-5.3.ini文件我没有修改过,该文件中sendmail_path
sendmail_from都是;开头(不设置)
3、也就是我只做了3件事
# cp /bin/sh /var/www/bin
# cp /etc/resolv.conf /var/www/etc/resolv.conf
# cp /etc/hosts /var/www/etc/hosts

看你的log说明,应该指的是被外部邮件服务器拒绝的意思。

我的环境如下
机器域名是 sub.xxx.xxx
在durpal 7上的外发邮件设置那from为 do-no-reply@sub.xxx.xxx



题外话,
1、说说/var/www/tmp目录
没有研究过postgresql
/var/www/tmp是给php做很多临时用途的,不如给postgreql另外弄个目录?

2、/var/www/conf/httpd.conf不应直接编辑
如果安装了php,可以
# ln -fs /var/www/conf/modules.sample/php-5.3.conf /var/www/conf/modules/php.conf

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 leo » 2012-05-04 10:13

none 写了:还真没玩过chroot方式,也没试过pkg_add postgresql-server呢,都是以前用过linux而遗留下来的坏习惯
最近一直在外面游荡,没环境测试这种好玩的方式,回去一定试试看
对于 /var/www/tmp 的问题,是否可以不删除,改权限实现呢
# chmod a+rw, a+t /var/www/tmp
改日试试,多谢。
f5b 写了:sorry,昨晚匆匆回复时没有看你1楼的文章。
昨晚在drupal 7上测试成功php外发邮件的环境说明

0、4月26日的snapshot amd64
1、默认pkg安装没有/etc/femail.conf文件,我也没有添加此文件。
2、默认pkg安装的/etc/php-5.3.ini文件我没有修改过,该文件中sendmail_path
sendmail_from都是;开头(不设置)
3、也就是我只做了3件事
# cp /bin/sh /var/www/bin
# cp /etc/resolv.conf /var/www/etc/resolv.conf
# cp /etc/hosts /var/www/etc/hosts

看你的log说明,应该指的是被外部邮件服务器拒绝的意思。

我的环境如下
机器域名是 sub.xxx.xxx
在durpal 7上的外发邮件设置那from为 do-no-reply@sub.xxx.xxx



题外话,
1、说说/var/www/tmp目录
没有研究过postgresql
/var/www/tmp是给php做很多临时用途的,不如给postgreql另外弄个目录?

2、/var/www/conf/httpd.conf不应直接编辑
如果安装了php,可以
# ln -fs /var/www/conf/modules.sample/php-5.3.conf /var/www/conf/modules/php.conf
也可能是测试的环境不同所致,我也把自己的系统说的详细一些,这样便于交流和有的放矢地找出问题所在:
根据系统的提示看着像被外部邮件服务器拒绝联系,具体原因我到目前为止还真不清楚。——因为觉得没有实际意义,所以一直没有琢磨过邮件服务器这一块,而且以前的论坛设置这里也是忽略的,看来是躲不过去了,必须面对。:D

我的系统是i386, 单内核,所以使用的是snapshot的bsd内核。
关于1:
请教f5b兄的apache是否运行在chroot里?如果不是的话,好像是没有必要使用femail, 也许直接用sendmail就可以了。——抱歉,我依然是猜测,没有测试过。
此外,关于单独设置一个目录给postgresql的问题,我没有考虑过,但是因为系统一直没有出现其他问题,希望这个和邮件无法外发无关。

此外关于问题2:
莫非是我的文件设置的有问题, 我再仔细看看。

关于3,我们的做法一样。


关于题外话:
1. 请教一般什么情况下,PHP会用到 /tmp 目录(不管是否chroot)
2. 对,根据系统提示,似乎是应该针对这个文件进行修改,我改日再试试。

多谢回复!

f5b
锆 Zr
帖子: 643
注册时间: 2011-10-22 20:43

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 f5b » 2012-05-04 11:43

leo 写了:改日试试,多谢。



也可能是测试的环境不同所致,我也把自己的系统说的详细一些,这样便于交流和有的放矢地找出问题所在:
根据系统的提示看着像被外部邮件服务器拒绝联系,具体原因我到目前为止还真不清楚。——因为觉得没有实际意义,所以一直没有琢磨过邮件服务器这一块,而且以前的论坛设置这里也是忽略的,看来是躲不过去了,必须面对。:D

我的系统是i386, 单内核,所以使用的是snapshot的bsd内核。
关于1:
请教f5b兄的apache是否运行在chroot里?如果不是的话,好像是没有必要使用femail, 也许直接用sendmail就可以了。——抱歉,我依然是猜测,没有测试过。
此外,关于单独设置一个目录给postgresql的问题,我没有考虑过,但是因为系统一直没有出现其他问题,希望这个和邮件无法外发无关。

此外关于问题2:
莫非是我的文件设置的有问题, 我再仔细看看。

关于3,我们的做法一样。


关于题外话:
1. 请教一般什么情况下,PHP会用到 /tmp 目录(不管是否chroot)
2. 对,根据系统提示,似乎是应该针对这个文件进行修改,我改日再试试。

多谢回复!

可以考虑将外发邮件发到其他邮件系统,然后看看log,例如qq.com的邮箱,如果你有的话。看看是否某个邮件系统把你的ip列入黑名单了?

我也是运行chroot的apache,收到邮件的原始信息如下(ip域名等有改动)

代码: 全选

Received: from sub.xxx.xxx (unknown [1.2.3.4])
    by newmx66.qq.com (NewMx) with SMTP id 
    for <someone@qq.com>; Thu, 03 May 2012 21:47:17 +0800
X-QQ-SSF: 44000000000000000046464
X-QQ-mid: mx74t1464en
Received: from sub.xxx.xxx (www@localhost [127.0.0.1])
    by sub.xxx.xxx (8.14.5/8.14.5) with ESMTP id q43DlH4640
    for <someone@qq.com>; Thu, 3 May 2012 21:47:17 +0800 (CST)
Received: (from anonymous@localhost, uid 67)
          by sub.xxx.xxx (femail 0.97)
          03 May 2012 13:47:17 +0000
Date: Thu, 03 May 2012 13:47:17 +0000
Message-Id: <464661.4105.femail@sub.xxx.xxx>
To: someone@qq.com
Subject: Account details for 33 at sub.xxx.xxx (approved)
X-PHP-Originating-Script: 0:system.mail.inc
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed; delsp=yes
Content-Transfer-Encoding: 8Bit
X-Mailer: Drupal
Sender: do-not-reply@sub.xxx.xxx
From: do-not-reply@sub.xxx.xxx
/var/www/tmp 会被很多软件用到,不仅仅是php,具体我也不清楚怎么用的

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 leo » 2012-05-04 12:00

f5b 写了:可以考虑将外发邮件发到其他邮件系统,然后看看log,例如qq.com的邮箱,如果你有的话。看看是否某个邮件系统把你的ip列入黑名单了?

我也是运行chroot的apache,收到邮件的原始信息如下(ip域名等有改动)

代码: 全选

Received: from sub.xxx.xxx (unknown [1.2.3.4])
    by newmx66.qq.com (NewMx) with SMTP id 
    for <someone@qq.com>; Thu, 03 May 2012 21:47:17 +0800
X-QQ-SSF: 44000000000000000046464
X-QQ-mid: mx74t1464en
Received: from sub.xxx.xxx (www@localhost [127.0.0.1])
    by sub.xxx.xxx (8.14.5/8.14.5) with ESMTP id q43DlH4640
    for <someone@qq.com>; Thu, 3 May 2012 21:47:17 +0800 (CST)
Received: (from anonymous@localhost, uid 67)
          by sub.xxx.xxx (femail 0.97)
          03 May 2012 13:47:17 +0000
Date: Thu, 03 May 2012 13:47:17 +0000
Message-Id: <464661.4105.femail@sub.xxx.xxx>
To: someone@qq.com
Subject: Account details for 33 at sub.xxx.xxx (approved)
X-PHP-Originating-Script: 0:system.mail.inc
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed; delsp=yes
Content-Transfer-Encoding: 8Bit
X-Mailer: Drupal
Sender: do-not-reply@sub.xxx.xxx
From: do-not-reply@sub.xxx.xxx
/var/www/tmp 会被很多软件用到,不仅仅是php,具体我也不清楚怎么用的
刚设置了一个QQ邮箱,系统依然是显示:

代码: 全选

# cat /var/www/logs/error_log 
femail: remote host refuses our greeting
femail: remote host refuses our greeting
一周前查过一些国外的黑名单列表,我的IP地址不在里面。
我估计90%以上是设置的问题,因为用了一个php的外发脚本也不行,同样的错误提示,所以肯定不是phpbb的问题。

请教,主机名一定要设置为sub吗?还是可以任意设置一个,然后做一个mx纪录就可以了指向本地就可以了?

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 leo » 2012-05-04 12:12

也可能是域名那里的mx设置的不对,第一次玩......

刚设置完,24小时后再看看,不行再上来请教各位。

none
铁 Fe
帖子: 67
注册时间: 2012-02-29 11:41

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 none » 2012-05-04 13:54

leo 写了: 关于题外话:
1. 请教一般什么情况下,PHP会用到 /tmp 目录(不管是否chroot)
在session默认开启的情况下,PHP一运行基本就用到/tmp了,此外应该有很多情况下要用/tmp,没深究过,我知道的有上传文件、生成临时文件函数、用XML会用到/tmp

f5b
锆 Zr
帖子: 643
注册时间: 2011-10-22 20:43

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 f5b » 2012-05-04 14:46

leo 写了:刚设置了一个QQ邮箱,系统依然是显示:

代码: 全选

# cat /var/www/logs/error_log 
femail: remote host refuses our greeting
femail: remote host refuses our greeting
一周前查过一些国外的黑名单列表,我的IP地址不在里面。
我估计90%以上是设置的问题,因为用了一个php的外发脚本也不行,同样的错误提示,所以肯定不是phpbb的问题。

请教,主机名一定要设置为sub吗?还是可以任意设置一个,然后做一个mx纪录就可以了指向本地就可以了?
sub.xxx.xxx仅仅是我的一个普通的FQDN
我没有做任何mx记录指向sub.xxx.xxx这台机器或ip

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 leo » 2012-05-04 17:58

查了一下,我的IP地址反解出的域名不是我使用的域名,估计问题在这里了,可能要找ISP单独申请了,可惜我没有出静态IP地址的费用,不知道人家是否给处理。:p

不过大家的怎么没有问题?难道你们可以免费获得PTR?

摘一篇:
http://www.cnblogs.com/yooplmqj/archive ... 63798.html
做反向解析(PTR):
在垃圾邮件泛滥的今天,垃圾邮件给我们的生活、工作、学习带来了极大的危害。由于SMTP服务器之间缺乏有效的发送认证机制,即使采用了垃圾邮件识别阻拦技术效果仍旧一般,再者垃圾邮件识别阻拦技术主要是在收到信件后根据一定条件进行识别的,需要耗费大量服务器资源,如果能在信件到达服务器之前就采取一定手段,这样就能大大提高服务器效率了。因此,目前许多邮件服务器如sina.com,hotmail.com,yahoo.com.cn等等都采用了垃圾邮件识别阻拦技术+IP反向解析验证技术以更好的阻拦垃圾邮件。
我们先来了解一下什么是IP反向解析。其实作过DNS服务器的朋友一定会知道DNS服务器里有两个区域,即“正向查找区域”和“反向查找区域”,反向查找区域即是这里所说的IP反向解析,它的作用就是通过查询IP地址的PTR记录来得到该IP地址指向的域名,当然,要成功得到域名就必需要有该IP地址的PTR记录。
那么IP反向解析是怎么被应用到邮件服务器中来阻拦垃圾邮件的呢?我们来看看下面一个例子:
某天,阿Q到A公司拜访,他递上一张名片,名片上写着他来自“黑道杀人俱乐部”以及电话号码等信息,A公司觉得应该对阿Q的来历做个简单调查,于是打电话到阿Q名片上的电话号码所属电信局进行查实,如果电信局告诉A公司其电话号码不属于“黑道杀人俱乐部”,则A公司将拒绝阿Q的拜访,如果其电话号码的确属于“黑道杀人俱乐部”,A公司可能接受阿Q的拜访也可能进一步查实,于是就打电话到“黑道杀人俱乐部”所属注册机构查询,如果得到的答复确认该俱乐部确有此电话号码,则A公司将接受阿Q的拜访,否则仍将拒绝阿Q的拜访。
这个例子中,阿Q好比是我们的邮件服务器,A公司是对方邮件服务器,“黑道杀人俱乐部”就是我们邮件服务器与对方邮件服务器通信时所使用的HELO域名(不是邮件地址@后的域名),名片上的电话号码就是我们邮件服务器出口的公网IP地址。A公司对阿Q进行调查的过程就相当于一个反向解析验证过程。由此看出,反向解析验证其实是对方服务器在进行的,如果我们没有做反向解析,那么对方服务器的反向解析验证就会失败,这样对方服务器就会以我们是不明发送方而拒收我们发往的邮件,这也就是我们排除其它原因后(如被对方列入黑名单、没有MX记录、使用的是动态IP地址等等)在没做反向解析时无法向sina.com、homail.com发信的原因。
那么我们应当如何顺利做好反向解析?首先要有固定公网IP地址、可用域名(最好不要被其它服务所用),例如您有lunch-time.com的域名,您可以要求您的域名注册商为您添加一个okmail.lunch-time.com的域名  并将其A记录指向您的SMTP服务器出口公网IP地址,如:220.112.20.18,接着请与您的固定IP所属ISP联系要求为您的IP反向解析至okmail.lunch-time.com。完成后别忘了将您的SMTP服务器的HELO域名改为okmail.lunch-time.com,这样才可以达到目的。
另:
1、做好反向解析后发往sina.com的信件有可能会被转至“不明邮件夹”中,此时请您与sina.com联系,要求为您解决该问题。
2、查看反向解析是否成功,可用如下命令:nslookup –qt=ptr yourIP,从返回的信息中您可以看到反向解析的结果。
3、一定要有固定公网IP地址以及真实可用域名。同时要注意反向解析的域名的A记录一定要指向该IP!
4、对于有多个固定公网IP地址的,只要做主要出口IP的反向解析即可,不管您有多少SMTP服务器,只要是通过该IP连接至外网就将这些SMTP服务器的HELO域名改成IP反向解析之域名即可。(和这些SMTP服务器上的地址域是无关的)

附:
反向解析不管域名注册商的事。
反向解析只在收邮件时才会用到(发邮件时不用)
比如你在万网注册域名。www.sunwen.net。然后做了一个mx指向某个邮件服务器222.222.222.222。这个叫正向解析。
什 么叫反向解析呢。比如你用 xxx@sunwen.net 这个邮箱给我的邮箱 123@163.com 发了一封信。 163邮件服务器接到这封信会查看这封信的信头文件,这封信的信头文件会显示这封信是由哪个IP地址发出来的。然后根据这个IP地址进行反向解析,如果反 向解析到这个IP所对应的域名是sunwen.net。那么就接受这封邮件。如果反向解析发现这个IP没有对应到sunwen.net,那么就拒绝这封邮件。

如果不设置DNS反向解析将无法向sina等邮箱发送邮件而且发至yahoo,hotmail等的邮件虽然不会被退回但是可能会被直接送至垃圾邮件箱!
假设服务器IP是211.147.9.106 1) 首先您要知道这个IP的反向域名解析是由哪台DNS服务器负责的。
您可以用这个网页查询反向域名解析信息 http://www.dnsstuff.com/tools/ptr.ch?ip=211.147.9.106
(把这个ip地址换成你自己的ip地址之后直接粘贴至ie地址栏即可)看最后一段
Details: ns.cnc.ac.cn.(an authoritative nameserver for 147.211.in-addr.arpa.,
which is in charge of the reverse DNS for 211.147.9.106) says that there are no PTR records for 211.147.9.106.
To get reverse DNS set up for 211.147.9.106, you need to speak to your Internet provider.
You could also check with sun@cnnic.cn., who is in charge of the 147.211.in-addr.arpa. zone.
大概意思是您需要跟ns.cnc.ac.cn联系,ns.cnc.ac.cn负责211.147.9.106的反向域名解析。 2) 然后您可以要求您的IP提供商,也就是您的主机托管商,如果你的企业用户有固定IP,你应该找电信。要他们跟ns.cnc.ac.cn联系,给您的这个 IP加上反向域名解析记录,一般将这个IP反向解析成您的邮件服务器对应的mx记录。

PS:
什么叫反向解析呢。比如你用 xxx@31896.net 这个邮箱给我的邮箱 123@163.com 发了一封信。 163邮件服务器接到这封信会查看这封信的信头文件,这封信的信头文件会显示这封信是由哪个IP地址发出来的。然后根据这个IP地址进行反向解析,如果反 向解析到这个IP所对应的域名是31896.net。那么就接受这封邮件。如果反向解析发现这个IP没有对应到31896.net,那么就拒绝这封邮件。 也许说到这里你还不是很明白。
你用过foxmail的特快专递没有?比如你在你的电脑中设置好foxmail的特快专递。注意,foxmail的特快专递是不需要设置smtp服务器的。因为这个时候是用你自己的电脑做smtp服务器。那么你用你自己的电脑,并以 xxx@31896.net的名义给我的邮箱 123@163.com 发了一封信。很显然,这封信的信头显示的IP地址是你电脑的IP地址。那么163的邮件服务器反向解析这个IP。当然你的电脑的IP没有对应到 31896.net。那么163邮件服务器就认为这是一封垃圾邮件并拒收。

如果你做自己建立过Exchange服务器就会知道,完成之后默认情况下可以给163,yahoo之类发邮件。但是发邮件给Sina就不行,这是你联系一 下sina的postmaster,他就会邮件提示告诉你,因为你的邮件服务器没有做反向解析~~~所以邮件在sina服务器无法通过验证。

f5b
锆 Zr
帖子: 643
注册时间: 2011-10-22 20:43

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 f5b » 2012-05-05 10:09

leo 写了:查了一下,我的IP地址反解出的域名不是我使用的域名,估计问题在这里了,可能要找ISP单独申请了,可惜我没有出静态IP地址的费用,不知道人家是否给处理。:p

不过大家的怎么没有问题?难道你们可以免费获得PTR?

摘一篇:
http://www.cnblogs.com/yooplmqj/archive ... 63798.html

刚刚又测试了,php发送邮件到hotmail的邮箱,hotmail接受后就直接放到junk目录去了,必须自己标记safe,以后才会正常接收。
sub.xxx.xxx机器没有做反向解析。

国内做反向解析不知道怎么操作,是否方便?
邮件发送服务器做反向解析能大大提高邮件发送成功率(减少拦截可能)
如果反解成其他机器,那肯定无法发送邮件出去,是这样吧?

个人观察qq邮箱:
很多正常收到的邮件,查看邮件原文,尝试以下方式求反解。发现很多都没有结果,甚至有些反解到其他域名上去了。
nslookup -qt=ptr ip

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 leo » 2012-05-05 10:27

f5b 写了:刚刚又测试了,php发送邮件到hotmail的邮箱,hotmail接受后就直接放到junk目录去了,必须自己标记safe,以后才会正常接收。
sub.xxx.xxx机器没有做反向解析。

国内做反向解析不知道怎么操作,是否方便?
邮件发送服务器做反向解析能大大提高邮件发送成功率(减少拦截可能)
如果反解成其他机器,那肯定无法发送邮件出去,是这样吧?

个人观察qq邮箱:
很多正常收到的邮件,查看邮件原文,尝试以下方式求反解。发现很多都没有结果,甚至有些反解到其他域名上去了。
nslookup -qt=ptr ip
我是用下面的命令操作的,这里假设我的IP地址是11.22.33.44,域名是gobsd.org:

代码: 全选

# nslookup -query=ptr 11.22.33.44
Server:         192.168.1.254
Address:        192.168.1.254#53

Non-authoritative answer:
44.33.33.11.in-addr.arpa     name = 11-22-33-44.speed.cicril1.sbcglobal.net.

Authoritative answers can be found from:

这里的name按照上面摘录文章的描述似乎应该是gobsd.org才对。因为发邮件一直没有成功过,我也不清楚具体的原因,如果设置/理解得不对请大家指教。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 leo » 2012-05-05 17:26

none 写了:还真没玩过chroot方式,也没试过pkg_add postgresql-server呢,都是以前用过linux而遗留下来的坏习惯
最近一直在外面游荡,没环境测试这种好玩的方式,回去一定试试看
对于 /var/www/tmp 的问题,是否可以不删除,改权限实现呢
# chmod a+rw, a+t /var/www/tmp
尝试了一下,未成功,关键还是目录权限的授予(www或者_postgresql或者两者都可以兼顾),是大家一起来试试吧,我也希望可以不用这种修改方式,毕竟可能会影响PHP的一些功能。
none 写了:在session默认开启的情况下,PHP一运行基本就用到/tmp了,此外应该有很多情况下要用/tmp,没深究过,我知道的有上传文件、生成临时文件函数、用XML会用到/tmp
我的测试论坛目前不开放上传头像和附件,暂时看起来这样操作还没有问题,当然也许以后会发现一些。

希望大家一起来探讨。
==================================
不好意思,原来有些偷懒了,又尝试可一下,看这里
http://www.gobsd.org/showpost.php?p=7529&postcount=23

f5b
锆 Zr
帖子: 643
注册时间: 2011-10-22 20:43

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 f5b » 2012-05-05 17:48

leo 写了:我是用下面的命令操作的,这里假设我的IP地址是11.22.33.44,域名是gobsd.org:

代码: 全选

# nslookup -query=ptr 11.22.33.44
Server:         192.168.1.254
Address:        192.168.1.254#53

Non-authoritative answer:
44.33.33.11.in-addr.arpa     name = 11-22-33-44.speed.cicril1.sbcglobal.net.

Authoritative answers can be found from:

这里的name按照上面摘录文章的描述似乎应该是gobsd.org才对。因为发邮件一直没有成功过,我也不清楚具体的原因,如果设置/理解得不对请大家指教。

nslookup -qt=ptr ip 是在Windows中的命令:)

OpenBSD中
# host gobsd.org
gobsd.org has address 174.120.207.131
gobsd.org mail is handled by 0 gobsd.org.


# nslookup www.gobsd.org
Server: 202.96.128.143
Address: 202.96.128.143#53

Non-authoritative answer:
www.gobsd.org canonical name = gobsd.org.
Name: gobsd.org
Address: 174.120.207.131

# nslookup gobsd.org
Server: 202.96.128.143
Address: 202.96.128.143#53

Non-authoritative answer:
Name: gobsd.org
Address: 174.120.207.131

# nslookup -query=ptr 174.120.207.131
Server: 202.96.128.143
Address: 202.96.128.143#53

Non-authoritative answer:
131.207.120.174.in-addr.arpa name = stats.frog.arvixe.com.

Authoritative answers can be found from:
207.120.174.in-addr.arpa nameserver = ns3.arpa.networklayer.com.
207.120.174.in-addr.arpa nameserver = ns4.arpa.networklayer.com.
ns3.arpa.networklayer.com internet address = 67.228.254.26
ns3.arpa.networklayer.com has AAAA address 2607:f0d0:0:15:1100::1
ns4.arpa.networklayer.com internet address = 67.228.255.26
ns4.arpa.networklayer.com has AAAA address 2607:f0d0:0:15:2100::1

# host frog.arvixe.com
frog.arvixe.com has address 174.120.207.130
# host stats.frog.arvixe.com
stats.frog.arvixe.com has address 174.120.207.131

-------
看起来,
如果174.120.207.131反向解析是stats.frog.arvixe.com.
&
如果一般邮件服务器拒绝反向解析结果(stats.frog.arvixe.com)与hello源(gobsd.org)不一致的邮件。

那么gobsd.org([url=http://www.gobsd.org%EF%BC%89%E8%BF%99%E5%8F%B0%E6%9C%BA%E5%99%A8%E5%B0%B1%E4%B8%8D%E8%83%BD%E9%80%9A%E8%BF%87localhost%E7%9B%B4%E6%8E%A5%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%EF%BC%88hello]www.gobsd.org[/url])这台机器就不能通过localhost直接发送邮件(hello gobsd.org方式),除非搞定反向解析或relay到其他邮箱中。

relay的话可以考虑将@gobsd.org邮箱托管到google,这样relay到leo@gobsd.org可让论坛发出的帖子回复通知邮件看起来就是leo@gobsd.org发出的。

不知道以上描述是否正确?

f5b
锆 Zr
帖子: 643
注册时间: 2011-10-22 20:43

回复: OpenBSD+Apache 1.3+php 5.3.10+postgresql+phpbb (chroot环境探讨)

帖子 f5b » 2012-05-05 17:59

所谓的搞定反向解析有两种

1、反向解析174.120.207.131就是gobsd.org,邮件系统最好是这样。

2、清空174.120.207.131的反向解析(清空也就等于没有反解,发送出去的邮件经常还会被当作垃圾邮件处理,就像上述sub.xxx.xxx的服务器一样)

没有反向解析的例子
# nslookup -query=ptr 1.2.3.4
Server: 202.96.128.143
Address: 202.96.128.143#53

** server can't find 4.3.2.1.in-addr.arpa.: NXDOMAIN

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 29 访客