Nginx App Protect - Part 1

2020-07-14 18:00:57

manfred

     一提到 Nginx 大家的脑海中会联想到哪些特点?性能强悍,部署灵活,扩展性强亦或是瑞士军刀...? 没错! 自从2004年发布至今 Nginx 可以说是圈粉无数。在过去的几年中Web 应用的世界里出现了许多新的名词, Container,Kubernetes,Pod,Microservice,API...  而 Nginx 也伴随着这些新技术的出现变得 " 无处不在 " 


    下面这张示意图列举了几个 nginx 常见的使用场景:

      1. nginx 可以作为均衡负载器为一组 web 服务器做流量分发

      2. nginx 可以作为API Gateway 讲 API call 路由到对应的 Endpoints

      3. nginx 可以作为 Kubernetes (k8s)中的 Ingress Controller 将流量路由到特定的 pod

      4. nginx 可以作为一个 Pod 中多个容器的反向代理(sidecar proxy )

      5. 最后 nginx 也可以作为传统的 web 服务器


    



    不过上面这些例子还仅仅是nginx的本职工作而已,nginx还有很多好帮手 -动态模块(dynamic modules) Nginx 通过加载各种动态模块就可以扩展许多额外的功能。 如果举个"栗子"的话,Nginx是一台性能强大的智能手机而动态模块类似于它的应用商店。


    当然这些模板有些是开源免费的有些也是商业收费的。就像 Nginx 也一样细分为两个版本: 一般我们在 LINUX 中拿来即用的版本是 开源版或者是社区版;而商业版被称为 Nginx Plus。 商业版与社区版本相比提供了专业的技术支持以及许多开源版没有的高级功能。 我们今天的主角 Nginx App Protect 就是一款基于 Nginx 商业版的 Web 应用防火墙解决方案,可以将 Nginx Plus 秒变成 具有Web 应用安防能力的神器。


    可能有些小伙伴会问:为什么听上去 Nginx APP Protect 非常像 Modsecurity?它们有什么区别吗?Modsecurity确实也是一款可以在 Nginx 上的 WAF,但是它却是是由第三方进行维护支持。而 Nginx App Protect 可是 Nginx "血统纯正"的亲儿子,它的开发维护完全自主而且提供很好的技术支持。强大的 F5 WAF 为其背后做技术支撑,并提供了强大的安全功能。大家可以通过下面的链接了解到 Nginx App Protect 的功能列表以及它和 Modsecurity 的详细对比:  https://www.nginx.com/products/nginx-app-protect/#compare-versions 


    我们后续会用几篇文章向大家介绍 Nginx App Protect 的部署模式,也会对其功能做详细介绍。在这篇文章中我们先帮助大家能够很快搭建一台 Nginx App Protect。由于 Nginx App Protect 基于 Nginx Plus,所以您需要由 Nginx Plus 的授权。当然Nginx 官方提供了 30 天的试用期,所以您可以通过这个链接申请测试版:  https://www.nginx.com/free-trial-request/


    申请测试版后, nginx 会将激活的证书和 key 文件发送到您的邮箱。接下来就是要准备 Base 系统。目前 Nginx App Protect 可以安装在 Centos 7.4 以上 或者是 Debian 9 分支的 Linux 服务器上,而  NGINX Plus 的要求是 Release 19 后的版本



    我们使用 Centos 7.4 来举例子,假设我们现在有一台纯净的 Centos 7.4 的linux 服务器.


    1. 首先我们在 Centos 中创建目录用来存放 Nginx Plus 的激活证书和密钥:

sudo mkdir -p /etc/ssl/nginx


    2. 随后将测试申请到的  nginx-repo.key 和  nginx-repo.crt 放到  /etc/ssl/nginx/ 中

    3.  安装必要的软件包

sudo yum install ca-certificates epel-release wget

    4. 下载并使用 Nginx Plus 的 软件源

sudo wget -P /etc/yum.repos.d https://cs.nginx.com/static/files/nginx-plus-7.repo

    5. 最后一条命令完成 nginx app protect 和 nginx plus 的安装

yum install app-protect


* 安装完成后可以查看 Nginx Plus 的版本:sudo nginx -v

* 在测试中建议关闭 Centos 的 SELINUX:sudo setenforce 0


app protect 安装完毕后,我们需要编辑它的配置文件 nginx.conf 加载 app protect 动态模块.这个通过 load_module 一句话就可以完成,目前我们仅仅在默认的 nginx.conf 中加入这条配置语句,并没有修改其他的配置


user nginx; worker_processes auto; load_module modules/ngx_http_app_protect_module.so; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }

然后我们在默认的 server 配置文件中开启 app protect 功能,并利用 proxy_pass 将流量反向代理到后端的一台服务器上( IP 172.16.0.11 ,端口30237)


server { listen 80 default_server; server_name localhost; proxy_http_version 1.1; app_protect_enable on; app_protect_security_log_enable on; location / { client_max_body_size 0; default_type text/html; proxy_pass http://172.16.0.11:30237$request_uri; } }

万事俱备! 就这么简单的几步我们的 Nginx App Protect 已经可以开始工作了。  我们启动 Nginx 服务: sudo systemctl start nginx 并向Web 服务器提交一个测试 payload: http://10.155.216.3/login.php?id=%3Cscript%3E


 可以看到恶意请求已经可以被阻挡啦!




在这篇文章中,我们先简单介绍下 App Protect 并完成基本的安装。在后续的文章里,我们还会向大家介绍 App Protect 一些使用技巧和高级功能。

如果有任何问题也欢迎大家留言交流 !









发布评论 加入社群

发布评论

一加一不等于二 2020-10-28 14:49:13 0

相关文章

Login

手机号
验证码
© 2019 F5 Networks, Inc. 版权所有。京ICP备16013763号-1