免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3132 | 回复: 9
打印 上一主题 下一主题

[FreeBSD] Web 服务器实战笔记:Nginx + PHP-FPM + MariaDB in Jail [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-03-03 00:01 |只看该作者 |倒序浏览
本帖最后由 fender0107401 于 2016-03-03 09:57 编辑

根据本人实际安装服务器过程,新增一篇 Wiki,欢迎指正交流。

运行某基于 php + mysql 的 CMS 系统提供新闻等内容服务,无论坛等互动功能。

主要思路:


FreeBSD:笔者熟悉,zfs 提供数据容错和读取并发性能,jial 提供隔离环境

ZFS-Mirror:获得数据的容错性,并利用快照功能进行备份、恢复和回滚

Jail:隔离Web服务软件环境

sshd:只允许密钥登录

sftp:取代ftp,提供安全上传环境

ipfw:防火墙提供网络安全

nginx + php-fpm + mariadb:提供web服务,独立 php 池

awstats:定时运行生成静态页面提供访问分析

全部采用 pkg 安装官方包,方便日后维护

详细内容见请前往:FreeBSD China Wiki

评分

参与人数 1可用积分 +10 信誉积分 +10 收起 理由
fender0107401 + 10 + 10 非常好。

查看全部评分

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
2 [报告]
发表于 2016-03-03 16:52 |只看该作者
支持一下楼主,写的很不错!

里面有几个小问题,我仔细斟酌一下再说。

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
3 [报告]
发表于 2016-03-03 20:51 |只看该作者
sftp:取代ftp,提供安全上传环境


这个可以取消了,教你一个大招
http://blog.chinaunix.net/uid-20685819-id-5195708.html

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
4 [报告]
发表于 2016-03-04 11:19 |只看该作者
以下内容仅代表个人意见,仅供参考:

1、ipfw部分有几个地方最好稍微改一下:
     (1)服务器尽量不要用keep-state,稍微繁忙一点就会受不了,如果真想用状态规则,必须调整最大上限net.inet.ip.fw.dyn_max,默认的实在是太小了。
     (2)icmp部分,只允许type 0,8即可,基于icmp攻击的是很常见的。
     (3)log部分可以加大一些,5条太少了,如果想做分析用,至少要十万级别,并且要定时重置,不重置的话,后几天的日志里可能会没有数据。

2、php-fpm配置部分感觉有点多余,示例就不错了,php一般不做虚拟机,新建一个目录应该没多大必要,反倒nginx使用虚拟机的机率大一些,像某些Linux发行版那样新建一个vhost目录是一个不错的主意。另外FreeBSD的日志一般放在/var/log下面,一些Linux一般习惯放在/opt里。网站的根目录,我本人的习惯,更喜欢在根新建一个www目录

论坛徽章:
0
5 [报告]
发表于 2016-03-04 12:42 |只看该作者
回复 3# shang2010


sftp 是给网站内容管理员使用的。使用 sftp 可以用 filezilla 等支持 sftp 的 FTP 图形客户端,对于计算机知识可怜的内容管理员来说方便操作,而且没有 FTP 明文传输的风险。

   

论坛徽章:
0
6 [报告]
发表于 2016-03-04 15:21 |只看该作者
本帖最后由 Siroh 于 2016-03-04 15:24 编辑
lsstarboy 发表于 2016-03-04 11:19
以下内容仅代表个人意见,仅供参考:

1、ipfw部分有几个地方最好稍微改一下:


谢谢您的指正。
1、关于 ipfw 的部分,的确如您所言,动态规则在大量访问的时候会产生性能问题。现已经修改为静态规则,敬请再次指教。log 只针对外连接,用于监控应用访问外部主机,只要是正常情况,记录量不会太大,而且通过 newsyslog.conf 来限制 log 文件的大小。
2、php-fpm 连接池隔离,主要考虑以后,在该台服务上可能另外存在两三个虚拟主机,防止这些虚拟主机 php 互相干扰。
3、我一般不同虚拟主机产生各自的 log,放在网站根目录的同级目录中。
4、我的原则是,不相信应用所声称的道德,能预防的,只要性能损失在可接受的范围内,一定加以预防。

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
7 [报告]
发表于 2016-03-04 18:08 |只看该作者
看得出来你是非常认真严谨的,非常值得学习。

ipfw的规则中,logamount 0用起来很不错,还可以再进一步,把一些规则合并起来,这样可以减少规则数量,相对来说能提高点性能,比如对内的可以直接写:
ipfw add allow tcp from me to any 80,123,22,9922,443 in via $out-if

php-fpm隔离你考虑的很周道了,隔离也可以用chroot来做。

网站log放在根目录下才不安全,一不小心就会被下载到,日志类的东东,最好放在除了root都访问不到的地方。你的配置中,php的opendir是:php_admin_value['open_basedir'] = /opt/www/$pool ,虽然nginx指定的是root /opt/www/$server_name/html,但是用php的话,还是可以跑到/opt/www/domain_name.com里面的。
另外nginx配置中,还有几处都可以改为$server_name,配置会更通用。

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
8 [报告]
发表于 2016-03-04 18:14 |只看该作者
另外关于log的问题,由于nginx原生不支持syslog(不知道现在是不是支持了,以前版本需要用第三方模块),日志属主也应该是www,也不是很安全。我的做法是在宿主机上用nginx做反向代理,分发到各虚拟机,这样访问信息就记录到宿主机中,虚拟机中只记录error就可以了。而且宿主机上可以做一定的日志检查规则,同时触发防火墙,来过滤掉一些明显的攻击行为,同时还可以加上一级小缓存。

论坛徽章:
0
9 [报告]
发表于 2016-03-04 22:16 |只看该作者
回复 7# lsstarboy

感谢指正。

1、也考虑过 ipfw 合并端口写规则,后来还是决定分开写,用 ipfw -a list 显示个符合各规则的包数量,可以为异常流量排查提供一些线索。性能上损失应该不大。
2、log 是与 html 同级的,不可能被下载的。
3、open_basedir 设置为 html 上级目录,是因为 hack 了 CMS 程序,把一些重要数据放到 html 目录之外,以防止被客户端下载。
4、nginx 配置可以用 $server_name 的地方都用了,是实际验证过的。ssl_certificate、ssl_certificate_key、access_log、error_log 这几个地方是不能使用 $server_name 这种变量格式的。猜测 nginx 启动时就要这几个参数启用 ssl,打开日志,而这时候 server 还没有开始初始化,$server_name 不可用。
5、nginx 使用 syslogd 的问题,已经得到一些提示,在进一步学习研究之后再看。目前想到临时一个办法,在虚拟主机目录之外保存日志文件,这样 php 进程和 sftp 上传用户都不能读取和修改。

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
10 [报告]
发表于 2016-03-04 22:30 |只看该作者
log和html是同级的没错,但是open_dir却是他俩共同的上一级,被PHP抓到的可能性很大。
$server_name 那几个我还真没验证过
6楼给的方法就是保存到虚拟机之,宿主机只有一个nginx,并且不需要多余的模块,被攻的可能性就很小了,相对来说还是比较安全的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP