nginx web安全二

最近在分析nginx日志发现,有很多可以ip访问网站根目录,如下:

GET / - - 58.60.170.219 HTTP/1.1 [Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)]

GET / - - 58.60.170.219 HTTP/1.1 [Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)]

GET / - - 58.60.170.219 HTTP/1.1 [Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)]

GET / - - 58.60.170.219 HTTP/1.1 [Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)]

GET / - - 58.60.170.219 HTTP/1.1 [Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)]

GET / - - 58.60.170.219 HTTP/1.1 [Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)]

GET / - - 58.60.170.219 HTTP/1.1 [Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)]

GET / - - 58.60.170.219 HTTP/1.1 [Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)]

从00:00--6:00这个ip的记录已经达到10万条左右,如何解决此问题呢?

本来nginx上有相关模块limit_conn 100 及limit_req 12 burst 10做了一层限制,但是效果不是很明显。因为之前日志也有过类似ip,导致503错误很多,但这个ip并没有产生503错误很多,这说明limit模块配置不太合适。

limit具体参数的调整就不说了,但是对于limit_conn 100这个模块有些疑问:(1)同一时间有100个ip在访问(2)产生100个连接;请明白的具体说下,不胜感激!!

既然nginx无法完全限制,我们就换个思路,结合iptables限制特定时间内ip的连接数来实现。

iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --name httpuser --rcheck --seconds 60 --hitcount 20 -j DROP
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --name httpuser --set -j ACCEPT

测试过程:

当我把--hitcount设置为8时:

[[email protected] webbench-1.5]# ab -c 10 -n 20
-t 60  http://192.168.3.124/1.html

This is ApacheBench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.3.124 (be patient)

apr_socket_recv: Connection timed out (110)

Total of 8 requests completed

20个请求只有8个是成功的。

紧接着在60s内再发送请求:

[[email protected] webbench-1.5]# ab -c 10 -n 20 -t 60  http://192.168.3.124/1.html

This is ApacheBench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.3.124 (be patient)

apr_socket_recv: Connection timed out (110)

已经无法建立连接了,但过了60s后就可以正常测试了。

用netstat -ant |grep ESTABLISHED |grep 192.168.3.124:80|wc -l ,发现ESTABLISHED状态的个数在8个以内。

当将当--hitcount设置为20时,发现ESTABLISHED状态的个数在20以内,大致10个左右,而且网页访问速度也有提高。

还有一种写法是:

#iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --name httpuser --set
#iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 20 -j LOG --log-prefix 'HTTP attack:'
#iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 20 -j DROP

1.先插入INPUT链的最前面,对于80端口的新建连接,创建一个名为httpuser的清单( /proc/net/xt_recent/httpuser ),并且将记录加1

2.在INPUT链最后插入后,匹配第二条,在60s内新建的连接叨叨20,会开始记录日志(默认iptables日志写在/var/log/message下,我们可以设置将其分离,下面讲到),并有HTTP attack标识

3.在INPUT链最后插入后,继续匹配第三条,连接达到20后,后续新建的连接会被iptables drop掉。

但是这种写法适用于INPUT链默认规则为ACCEPT的,否则都会DROP,这点需要注意,建议用第一种方法。

另日志配置:

在/etc/rsyslog.conf中加入:

kern.=warn /var/log/kern-warn-log

防止日志过大,需要截断日志:

vim /etc/logrotate.d/syslog

/var/log/kern-warn-log

{

rotate 50

postrotate

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

endscript

}

ps:1.--rcheck --update --set 参数的区别,这里不多说了。

2.iptables和nginx配合使用,可以减少大量可疑ip的访问,不仅增加了安全性,也增加了nginx的抗并发数,一举两得啊

3.本次实验用ab和webbench测试发现,它们的每次request应该都是建立一个连接,这样才会符合我们iptables的设置,也符合测试中的request 成功数。这让我对ab和

webbench这两个工具又加深了认知。

时间: 2024-11-29 10:30:52

nginx web安全二的相关文章

构建高效安全的Nginx Web服务器

一 一.为什么选择Nginx搭建Web服务器 Apache和Nginx是目前使用最火的两种Web服务器,Apache出现比Nginx早. Apache HTTP Server(简称Apache)是世界使用排名第一的Web服务器软件, 音译为阿帕奇,是Apache软件基金会的一个开放源码Web服务器, 可以运行几乎所有的计算机平台,其次开放的API接口, 任何组织和个人都可以在它上面扩展和增加各种需要功能,达到为自己量身定制的功能. Nginx("engine x")是一个高性能的HTT

20步打造最安全的Nginx Web服务器

转自:http://www.open-open.com/solution/view/1319455592515 Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱 (IMAP/POP3)代理服务器.它运行在UNIX,GNU /linux,BSD 各种版本,Mac OS X,Solaris和Windows.根据调查统计,6%的网站使用Nginx Web服务器.Nginx是少数能处理C10K问题的服务器之一.跟传统的服务器不同,Nginx不依赖线程来处理请求.相反,它使用了更多的可扩展

实现最安全的Nginx Web服务器

原文地址:http://www.phpthinking.com/archives/414 Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器.它运行在UNIX,GNU/Linux,BSD各种版本,Mac OS X,Solaris和Windows.根据调查统计,6%的网站使用Nginx Web服务器.Nginx是少数能处理C10K问题的服务器之一.跟传统的服务器不同,Nginx不依赖线程来处理请求.相反,它使用了更多的可扩展的事件驱动(异步)架构.Ng

ZabbixAPI+django+nginx简单的二次开发实例(三)

接上一篇博文 ZabbixAPI+django+nginx简单的二次开发实例(二) 步骤三,站点架构部分 本部分用到的软件 1,Nginx:接受访问请求,应答静态页面,转发动态请求至uwsgi 2,uwsgi:应答动态请求 3,Django:处理后台数据 4,supervisor:管理进程 首先安装Nginx yum install epel-release yum install python-devel nginx 修改配置文件 vim /etc/ngnix/ngnix.conf user

ZabbixAPI+django+nginx简单的二次开发实例(五)

接上一篇博文 ZabbixAPI+django+nginx简单的二次开发实例(四) 步骤五,图形展示 写一个RRDtool图形展示的脚本,由于要和view.py联动,我放在了appname的文件夹下 cd /API/web/pos/moniter vim rrddraw.py #!/usr/bin/env python #coding=utf-8 import rrdtool #ping的图形 def itemping(data): pngname = str(data['pname']) #图

nginx web+反向代理 的配置介绍

user  www;   #定义Nginx运行的用户和用户组 worker_processes  2;  #nginx进程数,建议设置为等于CPU总核心数. #error_log  logs/error.log;     全局错误日志定义类型 #error_log  logs/error.log  notice; #error_log  logs/error.log  info; #pid        logs/nginx.pid;    进程文件 events {  工作模式与连接数上限 w

如何构建日均千万PV Web站点(二) 之~缓存为王~

随着网站业务的不断发展,用户的规模越来越大:介于中国无比蹩脚复杂的网路环境:南电信:北联通:中间竟然只用一条链路进行互联通信!有研究表明,网站访问延迟和用户流失率正相关,网站访问速度越慢,用户越容易失去耐心而离开.为了提高更好的用户体验,留住用户,网站需要加速网站访问速度.如今主要的手段只有使用CDN和反向代理了:此时网站的架构应该是这样的: 1.使用CDN和缓存服务器:CDN和反向代理的基本原理都是缓存数据,区别就在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网

Nginx Web 服务详解

一.初识Nginx软件 Nginx是一款非常优秀的web服务软件,不但可以做web服务软件,还可以做反向代理负载均衡和前端业务的缓存服务 作为web服务软件Nginx是一个支持高性能高并发的web服务软件,它具有很多优秀的特性,作为web服务器与apache相比nginx可以支持更多的并发连接访问,但占用的资源却更少,效率更高,在功能上也强大了许多 作为反向代理或负载均衡服务在反向代理或负载均衡反面nginx可以作为web服务.php等动态服务及Memcached缓存代理服务,它具有类似专业反向

Nginx Web 基础入门

目录 Nginx Web 基础入门 静态WEB软件 两种方式部署Nginx 如何升级nginx或者添加功能 使用systemd管理nginx nginx相关配置文件 nginx的配置文件详解 虚拟主机配置方案 方式1:基于IP(很少用) 方式2:基于端口(公司用,用于测试环节) 方式3:基于域名(生产环节) Nginx Web 基础入门 nginx简述 Nginx是一个开源且高性能.可靠的Http Web服务.代理服务. 开源: 直接获取源代码 高性能: 支持海量并发 可靠: 服务稳定 我们为什