简介
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
官方地址 http://tengine.taobao.org/
特性
- 继承Nginx-1.6.2的所有特性,兼容Nginx的配置;
- 动态模块加载(DSO)支持。加入一个模块不再需要重新编译整个Tengine;
- 支持SO_REUSEPORT选项,建连性能提升为官方nginx的三倍;
- 同时支持HTTP v2协议和SPDY v3协议,可同时使用两种协议;
- 流式上传到HTTP后端服务器或FastCGI服务器,大量减少机器的I/O压力;
- 更加强大的负载均衡能力,包括一致性hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;
- 输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便;
- 支持设置proxy、memcached、fastcgi、scgi、uwsgi在后端失败时的重试次数
- 动态脚本语言Lua支持。扩展功能非常高效简单;
- 支持管道(pipe)和syslog(本地和远端)形式的日志以及日志抽样;
- 支持按指定关键字(域名,url等)收集Tengine运行状态;
- 组合多个CSS、JavaScript文件的访问请求变成一个请求;
- 自动去除空白字符和注释从而减小页面的体积
- 自动根据CPU数目设置进程个数和绑定CPU亲缘性;
- 监控系统的负载和资源占用从而对系统进行保护;
- 显示对运维人员更友好的出错信息,便于定位出错机器;
- 更强大的防攻击(访问速度限制)模块;
- 更方便的命令行参数,如列出编译的模块列表、支持的指令等;
- 可以根据访问文件类型设置过期时间;
- ……
安装编译工具
yuminstall jemalloc jemalloc-devel -y
或者
yumgroupinstall "Development Tools" "Server PlatformDeveopment"
建立nginx程序用户
groupadd-r www
useradd-r -g www www -c "Web user" -d /dev/null -s /sbin/nologin
安装依赖工具
Openssl:
cd/usr/local/src
wgethttp://www.openssl.org/source/openssl-1.0.1c.tar.gz
tar-zxvf openssl-1.0.1c.tar.gz
zlib:
cd/usr/local/src
wgethttp://zlib.net/zlib-1.2.8.tar.gz
tar-zxvf zlib-1.2.8.tar.gz
pcre:
cd/usr/local/src
tarzxvf pcre-8.30.tar.gz
1下载luajit2.0并安装
推荐使用lujit2.0以上做lua支持
ngx_lua如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。
http://luajit.org/download.html
wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
make && make install
所以lib和include是直接放在/usr/local/lib和usr/local/include
2.源码安装Tengine
下载源码
wget http://tengine.taobao.org/download/tengine-2.1.2.tar.gz
tar xf tengine-2.1.2.tar.gz /usr/local/src/
./configure\
--user=www --group=www\
--prefix=/usr/local/nginx\
--with-http_stub_status_module\
--with-http_ssl_module\
--with-http_concat_module\
--with-http_spdy_module\
--with-http_gzip_static_module\
--with-ipv6\
--with-http_sub_module\
--with-ld-opt=-ljemalloc\
--with-openssl=/usr/local/src/openssl-1.0.1c\
--with-pcre=/usr/local/src/pcre-8.30\
--with-zlib=/usr/local/src/zlib-1.2.8\
--with-http_lua_module\
--with-luajit-inc=/usr/local/include/luajit-2.0\
--with-luajit-lib=/usr/local/lib \
ln -s/usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
查看 nginx -V
安装ngx_lua_waf模块
防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
防止svn/备份之类文件泄漏
防止ApacheBench之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器
屏蔽异常的网络请求
屏蔽图片附件类目录php执行权限
防止webshell上传
git clone https://github.com/loveshell/ngx_lua_waf.git
cp -r ngx_lua_waf/ /usr/local/nginx/conf/waf
请提前新建/usr/local/nginx/logs/hack/目录攻击日志,并赋予nginx用户对该目录的写入权限。
mkdir-p /usr/local/nginx/logs/hack/
chown-R www:www /usr/local/nginx/logs/hack/
chmod-R 755 /usr/local/nginx/logs/hack/
使用说明:
nginx安装路径假设为:/usr/local/nginx/conf/
把ngx_lua_waf下载到conf目录下,解压命名为waf
在nginx.conf的http段添加
lua_package_path "/usr/local/nginx/conf/waf/?.lua"; lua_shared_dict limit 10m; init_by_lua_file /usr/local/nginx/conf/waf/init.lua; access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
配置config.lua里的waf规则目录(一般在waf/conf/目录下)
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
绝对路径如有变动,需对应修改
然后重启nginx即可
配置文件详细说明:
RulePath = "/usr/local/nginx/conf/waf/wafconf/" --规则存放目录 attacklog = "off" --是否开启攻击信息记录,需要配置 logdir logdir = "/usr/local/nginx/logs/hack/" --log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限 UrlDeny="on" --是否拦截url访问 Redirect="on" --是否拦截后重定向 CookieMatch = "on" --是否拦截cookie攻击 postMatch = "on" --是否拦截post攻击 whiteModule = "on" --是否开启URL白名单 ipWhitelist={"127.0.0.1"} --ip白名单,多个ip用逗号分隔 ipBlocklist={"1.0.0.1"} --ip黑名单,多个ip用逗号分隔 CCDeny="on" --是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;) CCrate = "100/60" --设置cc攻击频率,单位为秒. --默认1分钟同一个IP只能请求同一个地址100次 html=[[Please go away~~]] --警告内容,可在中括号内自定义 备注:不要乱动双引号,区分大小写
检查规则是否生效
部署完毕可以在其他机器尝试如下命令:
curl http://xxxx/test.php?id=../etc/passwd 返回"Please go away~~"字样,说明规则生效。