最近公司需要搭建保護,公司網站的軟件,於是選擇了,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: