近日个人的几个小站总是被攻击,于是准备寻找一款WAF来抵挡一下。
首先尝试了modsecurity 和 naxsi ,功能是有了,但因为需要在每一台服务器上安装agent,没有管理界面,策略也不能统一维护,感觉后面维护起来不怎么方便。
继续在网上闲逛中,在无意中看到了Janusec Application Gateway (Janusec应用网关),其无agent的网关式架构设计令我眼前一亮。
根据其介绍,只需要安装一次,就可以作为基础设施供后续复用扩展,业务的服务器上不需要安装agent,且能够为证书私钥提供加密保护。
原理式这样的:
Janusec工作在反向代理模式,收到请求后,会先检查合法性,如果是攻击行为(Web攻击如SQL注入、XSS等,或CC攻击),就会拦截下来;如果是正常的访问请求,就会放行。我决定安装体验一番。
首先,找到Janusec网关的快速入门介绍:https://www.janusec.com/cn/quick-start/
然后根据介绍的步骤进行安装:
步骤 1: 下载
$cd ~
$wgethttps://www.janusec.com/download/janusec-latest.tar.gz
$tar zxf ./janusec-latest.tar.gz
步骤 2: 安装
请切换到root用户并运行 install.sh , janusec应用网关将安装在目录: /usr/local/janusec/
$su
#cd janusec-0.9.3
#./install.sh
选择 1. Master Node
, 然后安装程序会:
- 将所需文件复制到
/usr/local/janusec/
- 将服务配置文件复制到系统服务目录
- 将Janusec应用网关服务设置为自动启动,但首次安装时不会启动,需要在配置完成后手工启动一次.
步骤 3: 配置
PostgreSQL没有包含在发布包中,需要自行准备PostgreSQL数据库、用户名 、口令,可参考运维管理中的PostgreSQL安装。
现在我们假设您已经安装好了PostgreSQL,且数据库已创建,用户名和口令已准备好。
然后编辑 /usr/local/janusec/config.json
:
{
“node_role”: “master”,
“master_node”: {
“admin_http_listen”: “:9080”,
“admin_https_listen”: “:9443”,
“database”: {
“host”: “127.0.0.1”,
“port”: “5432”,
“user”: “your_postgresql_user
”,
“password”: “your_postgresql_password
”,
“dbname”: “janusec
”
}
},
“slave_node”: {
“node_key”: “”,
“sync_addr”: “”
}
}
步骤 4: 启动网关并测试
#systemctl start janusec.service
打开浏览器(比如Chrome),使用如下地址:
http://
网关IP地址
:9080/
这是Janusec应用网关的第一个管理地址(后面可启用安全的管理地址)。
默认用户名:admin
默认口令:J@nusec123
配置数字证书
如果仅使用HTTP,不使用HTTPS,可跳过此步骤;但强烈建议配置证书并启用HTTPS。
使用浏览器打开 http://您的网关IP地址
:9080/ 并添加一张数字证书。
如果您还没有数字证书,可以从Let's Encrypt
申请免费的数字证书。
使用记事本打开两个证书文件(我的证书是从Let's Encrypt
申请的,一个文件名是fullchain.pem,是公开的证书文件;另一个是privkey.pem,是保密的私钥文件),将其内容复制到Web管理控制台。
配置Web应用 (必选)
使用浏览器打开 http://网关IP地址
:9080/ 并添加一个应用.
填写应用名称、实际服务器的 IP:端口
等信息。
修改DNS或Hosts (必选)
生产环境,需要将修改DNS将您的域名指向网关地址。
测试环境,可直接修改您本地电脑的hosts文件: C:\Windows\System32\drivers\etc\hosts
.
验证
配置完成后,验证网关是否正常工作。
打开浏览器,访问: http://your_domain_name
/
或
https://your_domain_name
/ .
如果可以正常访问,表明网关已正常工作。
WAF验证
安装配置好之后,就来检验一下WAF(Web应用防火墙)是否工作正常。
使用如下测试用例:
http://domain_name/.svn/entries
http://domain_name/test?id=1 and 1=1
这时,立即看到了阻断效果:
后面的使用就比较简单了,我的WAF选型就此告一段落。
如果有不清楚的地方,也可参考官方网站上的说明:https://www.janusec.com/cn/ 。