最近公司需要搭建保护,公司网站的软件,于是选择了,OpenWAF+elk结合的搭建方式具体过程如下:
过程中参考连接有:
1.openwaf :
https://www.w3cschool.cn/openwaf/openwaf-8tr524ot.html)
2. ELK的帮助手册:
Docker Hub官网:https://hub.docker.com/r/sebp/elk/
Docker ELK使用文档:http://elk-docker.readthedocs.io/
下面开始正文:
一、安装openwaf
- Deb安装OpenWAF依赖
- cd /opt
- apt-get install wget git swig make perl build-essential zlib1g-dev libgeoip-dev libncurses5-dev libreadline-dev -y
- wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
- wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
- wget https://openresty.org/download/openresty-1.11.2.2.tar.gz
- tar -zxvf pcre-8.40.tar.gz
- tar -zxvf openssl-1.0.2k.tar.gz
- tar -zxvf openresty-1.11.2.2.tar.gz
- rm -rf pcre-8.40.tar.gz \
- openssl-1.0.2k.tar.gz \
- openresty-1.11.2.2.tar.gz
- PS:
- 1.1 OpenSSL 版本要求
- OpenResty 要求 OpenSSL 最低版本在 1.0.2e 以上,但 apt-get 安装 openssl 并不满足此版本,因此提供解决方法如下:
- 方法 1. apt-get 使用 backports 源安装 openssl,如 jessie-backports
- echo "deb http://mirrors.163.com/debian/ jessie-backports main" >> /etc/apt/sources.list
- apt-get update
- apt-get install -t jessie-backports openssl
- 方法 2. 下载 openssl 源代码,如 1.0.2k 版本
- wget -c http://www.openssl.org/source/openssl-1.0.2k.tar.gz
- tar -zxvf openssl-1.0.2k.tar.gz
- ./config
- make && make install
- 若用方法 1 和 方法 2 后, openssl version 命令显示的版本依旧低于 1.0.2e 版本,请求方法 3
- 方法 3. 编译 openresty 时指定 openssl 安装目录
- wget -c http://www.openssl.org/source/openssl-1.0.2k.tar.gz
- tar -zxvf openssl-1.0.2k.tar.gz
- 编译 openresty 时通过 --with-openssl=/path/to/openssl-xxx/ 指定 openssl 安装路径
- 本示例使用方法 3
- 1.2 pcre-jit
- OpenResty 依赖 PCRE ,但通过 apt-get 安装无法开启 pcre-jit,解决方法:
- 方法 1. 源码编译
- wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
- tar -zxvf pcre-8.40.tar.gz
- cd pcre-8.40
- ./configure --enable-jit
- make && make install
- 方法 2. 编译 openresty 时指定 openssl 安装目录
- wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
- tar -zxvf pcre-8.40.tar.gz
- 编译 openresty 时通过 --with-pcre=/path/to/pcre-xxx/ 指定 pcre 安装路径
- 本示例使用方法 2
- 安装 OpenWAF
- cd /opt
- git clone https://github.com/titansec/OpenWAF.git
- mv /opt/OpenWAF/lib/openresty/ngx_openwaf.conf /etc
- mv /opt/OpenWAF/lib/openresty/configure /opt/openresty-1.11.2.2
- mv /opt/OpenWAF/lib/openresty/* /opt/openresty-1.11.2.2/bundle/
- rm -rf /opt/OpenWAF/lib/openresty
- PS:
- 2.1 ngx_openwaf.conf
- ngx_openwaf.conf 是 OpenResty 的 [nginx](http://nginx.org/en/docs/) 配置文件
- 2.2 configure
- configure 是 OpenResty 的编译文件
- OpenWAF 修改了此文件,用于编译 OpenWAF 所依赖的第三方模块
- 编译 openresty
- cd /opt/openresty-1.11.2.2/
- ./configure --with-pcre-jit --with-ipv6 \
- --with-http_stub_status_module \
- --with-http_ssl_module \
- --with-http_realip_module \
- --with-http_sub_module \
- --with-http_geoip_module \
- --with-openssl=/opt/openssl-1.0.2k \
- --with-pcre=/opt/pcre-8.40 \
- make && make install
二、OpenWAF配置
1.简介:
- 发布应用,需要配置 OpenWAF 的接入规则,配置文件位置:/opt/OpenWAF/conf/twaf_access_rule.json
- OpenWAF的接入规则和nginx的配置结合,达到发布应用的目的
2.接入规则配置简要说明
- {
- "twaf_access_rule": [
- "rules": [ -- 数组,注意先后顺序
- {
- "ngx_ssl": false, -- nginx认证的开关
- "ngx_ssl_cert": "path", -- nginx认证所需PEM证书地址
- "ngx_ssl_key": "path", -- nginx认证所需PEM私钥地址
- "host": "www.baidu.com", -- 域名,正则匹配
- "port": 80, -- 端口号(缺省80)
- "path": "\/", -- 路径,正则匹配
- "server_ssl": false, -- 后端服务器ssl开关
- "forward": "server_5", -- 后端服务器upstream名称
- "forward_addr": "1.1.1.2", -- 后端服务器ip地址
- "forward_port": "8080", -- 后端服务器端口号(缺省80)
- "policy": "policy_uuid" -- 安全策略ID
- }
- ]
- }
- }
3.发布应用举例
- 接下来结合nginx配置举例讲解接入规则的使用
4.使用OpenWAF提供的nginx配置文件
- 如果用 OpenWAF 默认的 /etc/ngx_openwaf.conf 配置文件(默认监听 80 端口)
- 修改 /opt/OpenWAF/conf/twaf_access_rule.json 文件中第一条接入规则的"forward_addr"值
- 要防护的服务器为192.168.3.1:80,配置如下:
- "forward_addr": "19168.3.1"
- 要防护的服务器为22.22.22.22:8090,配置如下:
- "forward_addr": "22.22.22.22",
- "forward_port": 8090
- 此时启动nginx,进行访问即可
- 小提示:
- 启动nginx命令 /usr/local/openresty/nginx/sbin/nginx -c /etc/ngx_openwaf.conf
- 停止nginx命令 /usr/local/openresty/nginx/sbin/nginx -c /etc/ngx_openwaf.conf -s stop
- 默认SQLI,CC防护都是开启的,可以进行SQL注入或CC攻击,看防护效果
- 深入防护,深入测试,请看其他文档
5.使用自己原有的nginx配置
- 拥有自己的nginx配置,仅需以下两步即可体验OpenWAF防护
- nginx配置修改
在 nginx 的 http 级别添加如下两行:
include /opt/OpenWAF/conf/twaf_main.conf;
include /opt/OpenWAF/conf/twaf_api.conf;
要防护的 server 或 location 级别添加如下一行:
-
- include /opt/OpenWAF/conf/twaf_server.conf;
OpenWAF接入规则修改:
修改/opt/OpenWAF/conf/twaf_access_rule.json文件
将"state"值设为false即可。
2. conf/twaf_default_conf.json 中 twaf_log 模块
- "twaf_log": {
- "sock_type":"udp",
- "content_type":"JSON",
- "host":"192.168.39.18",
- "port":60099,
- ...
三、elk环境搭建
1、安装先决条件:
Elasticsearch至少需要单独2G的内存;
防火墙开放相关端口;
vm.max_map_count至少需要262144,附永久修改vm.max_map_count方法如下图:
执行命令:sysctl -p 查看
2、安装Docker ELK:
1、执行命令:docker pull sebp/elk 将镜像pull到本地来;
2、执行命令:docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -p 60099:60099 -it --name elk sebp/elk(-p是开启端口映射,由主机映射到docker)
3、进入容器:docker exec -it elk /bin/bash:
/etc/logstash/conf.d/02-beats-input.conf添加
udp { # udp 服务配置
port => 60099 # 表示日志服务器监听在 60099 端口
codec => "json" # 接收 json 格式信息
}
/etc/logstash/conf.d/30-output.conf将
output {
elasticsearch {
hosts => ["192.168.39.17:9200"]
……下的其余格式都删除
4、打开浏览器,输入:http://<your-host>:5601 点击创建
5、看到如下界面,到此安装结束
ps: