前言
硬件WAF,好像是很高端,很神秘的樣子,而且很貴。今天向大家展示如何自己動手,diy一臺硬件WAF!
軟硬件需要
a、服務器一臺
b、系統:linux centos
c、軟件:ShareWAF
d、硬件需求:Bypass網卡
簡單說明:
a、使用linux系統,是為了在系統中搭建網橋,有了網橋,就可以實現硬件WAF的透明代理效果。
b、軟件用ShareWAF,ShareWAF是一款WAF軟件,可以在云端部署,也支持灌裝硬件(這一點很重要)。而且,防護功能不錯,目前最大支持同時保護256個網站。
c、Bypass網卡,主要是實現斷電、系統故障等情況下自動將硬件“變”成為網線,實現Bypass效果,達到各種問題下都不中斷業務功能,也就是實現高可用。
如果沒有Bypass網卡,或者不是很需要高可用,那么灌裝出來的硬件是一臺透明代理硬件WAF,只是不具備bypass功能。(一般情況下,除了銀行之類,別的單位很少能用著這種級別的高可用設備,因為還可以多機熱備嘛,所以,其實沒有bypass網卡也沒太大關系)。
準備工作
ETH1網口連通外網,并給其設置IP;
ETH2,ETH3為一雙Bypass網口,為做網橋使用;
ETH3口連接內網web服務器。
系統配置,實現透明代理
(完整詳細步驟,如果熟悉linux網絡操作命令的話,其中有些環節可以跳過)
關閉centos 7自帶防火墻
systemctl stop firewalld.servicesystemctl disable firewalld.service
安裝iptables
yum -y install iptablesyum -y install iptables-services
開啟iptables
service iptables start
清除Iptables自帶規則
iptables -F
安裝ifconfig
yum -y install net-tools.x86_64
安裝網橋
yum -y install bridge-utils
設置網橋
/sbin/modprobe bridge/usr/sbin/brctl addbr br0(設置網橋名為br0)/sbin/ifup enp4s0 (要加入網橋的網卡,通過ifconfig查看)/sbin/ifup enp5s0 (要加入網橋的網卡)
注:執行以上兩步之前最好將能通的網線插在網口上,否則執行時間會稍長,會顯示激活失敗。
如果以上步驟報錯:
無法創建 NMClient 對象GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: Method "GetManagedObjects" with signature "" on interface "org.freedesktop.DBus.ObjectManager" doesn't exist
這時,執行如下命令:
chkconfig NetworkManager offchkconfig network onservice NetworkManager stopservice network start/usr/sbin/brctl addif br0 enp4s0/usr/sbin/brctl addif br0 enp5s0
設置網橋IP (例:192.168.1.73 設置一個在內網網段的IP)
ifconfig br0 192.168.1.73 netmask 255.255.255.0
開啟網橋
/sbin/ip link set br0 up
查看
sudo brctl show
關閉
ifconfig br0 down
刪除 (刪除前先將網橋關閉)
sudo brctl delbr br0
在/etc/sysctl.conf下添加內容
vi /etc/sysctl.conf
將光標移至文字最后一行按o,右鍵選擇粘貼
net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-arptables = 1net.ipv4.ip_forward = 1net.ipv4.ip_nonlocal_bind = 1net.ipv4.conf.default.rp_filter = 0net.ipv4.conf.all.rp_filter = 0net.ipv4.conf.br0.rp_filter = 0
1.按esc 2.輸入 : 3.然后輸入 wq 回車
執行使生效
sysctl -p
如果報錯:
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: 沒有那個文件或目錄sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: 沒有那個文件或目錄sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-arptables: 沒有那個文件或目錄執行 modprobe br_netfilter再次執行sysctl -p
添加路由
/sbin/ip -f inet rule add fwmark 1 lookup 100/sbin/ip -f inet route add local default dev lo table 100
添加規則前,首先查內是否有其他規則
iptables -t 表名 -L
如果有其他規則,將其刪除
iptables -t 表名 -D 鏈名 第幾條規則
添加規則
iptables -t nat -A PREROUTING -d 192.168.1.20 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.73:80
說明:
192.168.1.20 web服務器IP
80 web服務端口
192.168.1.73 網橋IP
8080 ShareWAF端口
保存規則
service iptables save
以上,系統透明模式需要的設置已完成。為實現斷電或異常時Bypass功能,需向Bypass網卡或硬件廠家咨詢、索取其Bypass網卡相關程序、資料,如:“喂狗程序”、腳本等。
透明網橋配成功后。
安裝NodeJS
(ShareWAF運行依賴的環境)
yum -y install wgetmv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bakwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repoyum clean allyum makecachewget https://nodejs.org/dist/v8.11.1/node-v8.11.1-linux-x64.tar.xz --no-check-certificatetar -xvf node-v8.11.1-linux-x64.tar.xzmv node-v8.11.1-linux-x64 node-v8.11.1ln -s /root/node-v8.11.1/bin/node /usr/local/bin/nodeln -s /root/node-v8.11.1/bin/npm /usr/local/bin/npm
也可以從nodejs官網直接下載。
也可以用以下的方法:
sudo apt-get install nodejs-legacy sudo apt-get install npm sudo npm install -g n sudo n stable
安裝Share WAF
從ShareWAF官網,獲取ShareWAF程序包后,在其目錄下執行:
npm install
如在安裝過程中Express報錯,運行:npm config set strict-ssl false
如在安裝過程中Sqlite3報錯,運行:npm install sqlite3 –unsafe-perm
啟動Share WAF
nodejs ShareWAF
或
sudo node ShareWAF
ShareWAF啟動成功
到這里,基本就完成了,然后,就是進入ShareWAF后臺配置網站就可以了。
這樣一個硬件WAF,就完工了。
本文作者:w2sfoot,轉載注明來自FreeBuf.COM