ngx_lua_waf 安装说明文档

作者github地址:
https://github.com/loveshell/ngx_lua_waf

ngx_lua_waf是我一个基于ngx_lua的web应用防火墙。
代码很简单,开发初衷主要是使用简单,高性能和轻量级。
现在开源出来.其中包含我们的过滤规则。如果大家有什么建议和想fa,欢迎和我一起完善。


用途:
用于过滤post,get,cookie方式常见的web攻击
防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
防止svn/备份之类文件泄漏
防止ApacheBench之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器[separator]
屏蔽异常的网络请求
屏蔽图片附件类目录php执行权限
防止webshell上传


正文:
1 下载luajit 2.0并安装
http://luajit.org/download.html
直接使用源码make && make install
所以lib和include是直接放在/usr/local/lib和usr/local/include

wget http://luajit.org/download/LuaJIT-2.0.3.tar.gz
tar -zxvf LuaJIT-2.0.3.tar.gz
cd LuaJIT-2.0.3
make
make install
cd ../



2 下载nginx源码解压
wget  http://nginx.org/download/nginx-1.7.6.tar.gz
注意版本号,如果机子上已经装了nginx,不想升级的话,请使用/usr/local/nginx/sbin/nginx -v 来查看版本号tar -zxvf  nginx-1.2.7.tar.gz

wget http://nginx.org/download/nginx-1.7.6.tar.gz


3  下载ngx_devel_kit解压
https://github.com/simpl/ngx_devel_kit/tags

wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz --no-check-certificate
tar -zxvf  v0.2.19


4  下载nginx_lua_module解压
https://github.com/chaoslawful/lua-nginx-module/tags

wget https://github.com/openresty/lua-nginx-module/archive/v0.9.13rc1.tar.gz --no-check-certificate
tar -zxvf v0.9.13rc1


5 进入nginx源码文件夹

tar -zxvf nginx-1.7.6.tar.gz
cd nginx-1.7.6


6 导入环境变量,编译


export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/soft/ngx_devel_kit-0.2.19 --add-module=/root/soft/lua-nginx-module-0.9.13rc1 --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"
make -j2
make install


7 请提前新建/data/logs/hack/目录攻击日志,并赋予nginx用户对该目录的写入权限。
www账户是跑nginx和php-fpm

mkdir -p /data/logs/hack/
chown -R www:www /data/logs/hack/
chmod -R 755 /data/logs/hack/


8 安装ngx_lua_waf模块


wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip --no-check-certificate
unzip master
cd ngx_lua_waf-master/
mkdir /usr/local/nginx/conf/waf
mv * /usr/local/nginx/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/"

绝对路径如有变动,需对应修改
注意:waf.lua一定要放在/usr/local/nginx-help/conf/waf.lua 已经他的子目录.否则会报500错误.


/usr/local/nginx/sbin/nginx -t



ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'

9 过滤配置说明:
过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割
    global是全局过滤文件,里面的规则对post和get都过滤
    get是只在get请求过滤的规则
    post是只在post请求过滤的规则
    whitelist是白名单,里面的url匹配到不做过滤
    user-agent是对user-agent的过滤规则

为了不返回一些无用给用户直接把注入测试防护返回信息改为http 403状态,修改/usr/local/nginx-help/conf/init.lua

  function check()
      ngx.header.content_type = "text/html"
      --ngx.print("403")
      ngx.exit(403)
  end

注意:每次更改waf.lua代码需要把nginx reload一下!
Tags: ,

SSH登录的安全性设置 不指定

jed , 2013-6-19 12:50 , 服务器技术 , 评论(0) , 阅读(113106) , Via 本站原创
改之前先建立一个登录的用户

1,只允许某个IP登录,拒绝其他所有IP
在 /etc/hosts.allow 写:
sshd: 192.168.1.207
在 /etc/hosts.deny 写:
sshd: ALL

2,禁止某个用户通过ssh登录
在/etc/ssh/sshd_conf添加
AllowUsers 用户名
或者
AllowGroups 组名
或者
DenyUsers 用户名
3、修改默认端口:默认Port为22,并且已经注释掉了;修改是把注释去掉,并修改成其它的端口。
4、禁止root用户远程登陆:修改PermitRootLogin,默认为yes且注释掉了;修改是把注释去掉,并改成no。
5、PermitEmptyPasswords   no不允许空密码用户login
TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员,地址:http://code.google.com/p/gperftools/。与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高MySQL服务器在高并发情况下的性能,降低系统负载。
为MySQL添加TCMalloc库的安装步骤(Linux环境):
1、64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。


wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz
tar zxvf libunwind-0.99-alpha.tar.gz
cd libunwind-0.99-alpha/
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install


2、安装google-perftools:


wget http://gperftools.googlecode.com/files/gperftools-2.0.tar.gz
tar zxvf gperftools-2.0.tar.gz
cd gperftools-2.0
./configure
make && make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig


3、修改MySQL启动脚本(根据你的MySQL安装位置而定):


vi /usr/local/mysql/bin/mysqld_safe


在# executing mysqld_safe的下一行,加上:

export LD_PRELOAD=/usr/local/lib/libtcmalloc.so


保存后退出,然后重启MySQL服务器。
4、使用lsof命令查看tcmalloc是否起效:

/usr/sbin/lsof -n | grep tcmalloc


如果发现以下信息,说明tcmalloc已经起效:

mysqld    10847   mysql  mem       REG        8,5  1203756   20484960 /usr/local/lib/libtcmalloc.so.0.0.0


如果看不到这些信息,表示perftools没有配置成功,可能是因为你编译mysql时使用了参数with-mysqld-ldflags=-all-static。


Tags: ,
1:load Average
   1.1:什么是Load?什么是Load Average?
   Load 就是对计算机干活多少的度量(WikiPedia:the system Load is a measure of the amount of work that a compute system is doing)
   简单的说是进程队列的长度。Load Average 就是一段时间(1分钟、5分钟、15分钟)内平均Load。【参考文章:unix Load Average Part1:How It Works】

iptables清空规则 不指定

jed , 2012-3-3 09:41 , 服务器技术 , 评论(0) , 阅读(4501) , Via 本站原创
可以通过/sbin/iptables -F清除所有规则来暂时停止防火墙: (警告:这只适合在没有配置防火墙的环境中,如果已经配置过默认规则为deny的环境,此步骤将使系统的所有网络访问中断)

如果想清空的话,先执行
/sbin/iptables -P INPUT ACCEPT
然后执行
/sbin/iptables -F
通过iptables -L 看到如下信息


同时需要保存,并重启服务
/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables restart
Tags:

网站排障分析常用的命令 不指定

jed , 2012-1-15 01:21 , 服务器技术 , 评论(0) , 阅读(2794) , Via 本站原创
整理一些常用分析网站的小命令方便大家排障,内容均来源于网络。
系统连接状态篇:
1.查看TCP连接状态

netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn

netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' 或
netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'
netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'

netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn

netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c


2.查找请求数请20个IP(常用于查找攻来源):
服务器上的一些统计数据:

1)统计80端口连接数


netstat -nat|grep -i "80"|wc -l

1

2)统计httpd协议连接数


ps -ef|grep httpd|wc -l

1

3)、统计已连接上的,状态为“established'


netstat -na|grep ESTABLISHED|wc -l

2

4)、查出哪个IP地址连接最多,将其封了.



netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r +0n

netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r +0n



最直接的方法如下:



netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'



LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70  (活动连接数,实际正在处理的请求数量,最有意义的一个字段)
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122

状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

也就是说,这条命令可以把当前系统的网络连接状态分类汇总。
Tags: , ,
安装步骤:
  (系统要求:Linux 2.6+ 内核,本文中的Linux操作系统为CentOS 5.3,另在RedHat AS4上也安装成功)

一、获取相关开源程序:
  1、【适用CentOS操作系统】利用CentOS Linux系统自带的yum命令安装、升级所需的程序库(RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包,进行安装):


sudo -s
LANG=C
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

Tags: , , ,

mysql字符集编码转换 不指定

jed , 2009-4-27 15:32 , 数据库技术 , 评论(0) , 阅读(2485) , Via 本站原创
启动mysql,登陆mysql以后,通过如下命令显示当前mysql所用编码。
>show variables like 'character%'; #执行编码显示
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

在mysql中的my.cnf中修改如下设置:
找到客户端配置[client] 在下面添加
default-character-set=utf8 默认字符集为utf8
在找到[mysqld] 添加
default-character-set=utf8 默认字符集为utf8

旧数据升级办法
以原来的字符集为latin1为例,升级成为utf8的字符集,
编码转换步骤:
1、导出旧数据:
mysqldump -uroot -p --default-character-set=latin1 --set-charset=utf8 --skip-opt 数据库>old.sql
2、转换sql编码:

iconv -t utf-8 -f gb2312 -c old.sql > new.sql
在这里,假定原来的数据默认是gb2312编码。

3、导入新数据库:
mysql -uroot -p --default-character-set=gbk -f 新数据库<new.sql
附:
查看mysql支持的编码:

SHOW VARIABLES LIKE 'character_set_%';

SHOW VARIABLES LIKE 'collation_%';

查看文件编码命令:

file 文件名

常用网址 不指定

jed , 2008-7-7 15:21 , 站长建站 , 评论(0) , 阅读(3062) , Via 本站原创
http://nightshadow.ys168.com/

有一些实用的小工具。

http://www.icgz.com/bbs/黑刀联盟

好多破解软件,攻击软件等。

http://www.myipneighbors.com/

查询一个主机上的其他网站或者查看某一虚拟主机有多少网站
Tags: ,
分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]