HttpGuard
1. 단위 시간 내 단일 IP 의 방문 횟수 통계
2. 단위 시간 내 단일 UA 의 방문 횟수 통계 (기관차 대상)
능 동 방어
1.302 점프
2. js 점프
3. 쿠키 검증
앞의 두 개 는 할 말 이 없다. 아주 간단 하 다. 뒤의 세 가지 실현 방식 에 중심 을 두 고 말 하 자.
302 점프
302 점프 는 주로 방문 한 ip 에 대해 랜 덤 으로 302 점프 를 하 는데 점프 할 때 원시 url 뒤에 몇 개의 파 라 메 터 를 추가 합 니 다. 보통 캡 처 프로그램 이나 cc 공격 은 header 를 식별 하지 않 고 밸브 값 을 설정 합 니 다. IP 가 여러 번 점프 하지 않 을 때 그 를 제거 할 수 있 습 니 다.만약 에 점프 에 성공 하면 정상 적 인 사용자 라 고 볼 수 있 습 니 다. 그러면 저 희 는 쿠키 값 과 시 효 를 설정 할 수 있 습 니 다. 물론 쿠키 의 값 은 ip 과 일부 특수 매개 변 수 를 통 해 계산 되 기 때문에 다른 사람 이 해결 하지 못 하 게 할 수 있 습 니 다. 그리고 이 시효 내 에 사용 자 를 탐지 하지 않 습 니 다.
점프
사실 js 점프 도 위 와 비슷 하지만 점프 방식 은 js 를 통 해 이 루어 진다.요청 이 왔 을 때 간단 한 js 점프 를 토 해 낸 다음 에 원시 url 뒤에 파 라 메 터 를 추가 하면 다음 검증 같은 것 은 위의 302 점프 와 같 습 니 다.
쿠키 검증
쿠키 인증 은 사용자 가 처음 방문 할 때 쿠키 를 심 어 주 고 방문 횟수 를 기록 하 는 것 입 니 다. 만약 에 두 번 째 방문 에 쿠키 가 없 으 면 다시 쿠키 를 시도 할 수 있 습 니 다. 쿠키 전송 실패 횟수 가 특정한 밸브 값 보다 많 으 면 이 IP 를 제거 할 수 있 습 니 다.
github 프로젝트 주소:https://github.com/centos-bz/HttpGuard연락처 작성 자: admin \ # centos. bz 협찬 작가 지속 개발: 알 리 페 이 바코드 306972903 을 보고 HttpGuard 1 을 배치 하기 시 작 했 습 니 다. openresty 또는 nginx lua 를 설치 하려 면 HttpGuard 를 설치 하기 전에 openresty 또는 nginx lua 를 설치 해 야 합 니 다. 세 가지 방법 이 있 습 니 다.
cd /data/www
wget --no-check-certificate https://github.com/centos-bz/HttpGuard/archive/master.zip
unzip master.zip
mv HttpGuard-master waf
3. 인증 코드 이미 지 를 생 성 하 는 것 은 인증 코드 가 사용 자 를 식별 하 는 것 을 지원 하기 위해 저 희 는 먼저 인증 코드 이미 지 를 생 성 해 야 합 니 다.인증 코드 그림 을 만 들 려 면 시스템 에 phop 과 phop - gd 모듈 이 설치 되 어 있어 야 합 니 다.1, 편집 / data / www / waf / captcha / getImg. php 파일, 찾기
font 의 경 로 를 t1. tff 파일 로 정확하게 가리 키 십시오.2. getImg. php 파일 을 명령 행 으로 실행 합 니 다.
만 개의 그림 을 만 드 는 데 몇 분 이 걸 릴 것 같 습 니 다.
4. nginx. conf 설정 파일 을 수정 하여 http 블록 에 다음 코드 를 입력 하 십시오.
관련 경 로 를 수정 해 야 한 다 는 것 을 기억 하 세 요.
5. HttpGuardHttpGuard 를 설정 하 는 모든 설정 항목 은 config. lua 파일 에 있 습 니 다. 다음 글 에 따라 설정 파일 을 수정 하 십시오.https://www.lxconfig.com/thread-121-1-1.html
1. ASP HTML 등 다른 페이지 의 보호 설정
url - protect / 해당 파일 에 한 줄 추가 $ ... 하면 된다
2、limitReqModules = { state = "On" , maxReqs = 50 , amongTime = 10, urlProtect = baseDir.."url-protect/limit.txt" },
그 중에서 maxReqs 의 값 은 너무 작 으 면 안 되 고 너무 작 으 면 인증 을 해도 일부 그림 이 표시 되 지 않 습 니 다.
3. 모든 페이지 를 보호 할 때 www. xxx. com / 인증 코드 를 입력 한 후 www. xxx. com / favicon. ico 로 건 너 뛰 기
해결 방법:. ico 끝 페이지 보호
^(?!\.ico)*.$
Nginx 와 Lua
Posted on 2012-08-31
화운 사신 어록: 천하 의 무공 은 견고 하지 않 으 면 깨 지지 않 고 빠 르 기만 하면 깨 지지 않 는 다!Nginx 의 집 구경 솜 씨 는 속도 이 고 Lua 의 장기 이자 속도 이다. 이 두 가지 결합 은 속도 에 있어 유전자 적 인 장점 이 있다.
가장 먼저 Nginx, Lua 를 조합 한 것 은 OpenResty 입 니 다. ngx 가 있 습 니 다.lua 모듈, Lua 를 Nginx 에 삽입 하기;그리고 Tengine 에 도 ngx 가 포함 되 어 있 습 니 다.lua 모듈.이들 의 차이 점: OpenResty 는 Nginx 의 Bundle 이다.텐 진 은 엔 진 스 의 포크 다.특히 OpenResty 와 Tengine 은 모두 국민 스스로 만 든 프로젝트 로 전 자 는 주로 춘 형 과 효 철 이 개 발 했 고 후 자 는 타 오 바 오 가 관리 했다.
OpenResty 와 Tengine 중 어느 것 이 좋 고 어느 것 이 나 쁜 지 는 여러분 에 게 스스로 판단 하도록 남 겨 두 고 다음 과 같은 자 료 는 참고 할 수 있 습 니 다.
설치 하 다.
최신 버 전의 Nginx, LuaJIT, ngx 가 필요 합 니 다.devel_kit,ngx_lua 등 설치 파일.
Lua 나 LuaJIT 를 설치 해도 되 지만 효율 적 인 차원 에서 LuaJIT 를 설치 하 는 것 을 추천 합 니 다.
shell> wget http://luajit.org/download/LuaJIT-<VERSION>.tar.gz
shell> tar zxvf LuaJIT-<VERSION>.tar.gz
shell> cd LuaJIT-<VERSION>
shell> make
shell> make install
결 성 된 경로 에 설치 되 어 있 기 때문에 LuaJIT 에 대응 하 는 lib, include 는 모두 / usr / local 디 렉 터 리 에 있 습 니 다.
shell> export LUAJIT_LIB=/usr/local/lib
shell> export LUAJIT_INC=/usr/local/include/luajit-<VERSION>
다음은 Nginx 를 컴 파일 할 수 있 습 니 다.
shell> wget http://nginx.org/download/nginx-<VERSION>.tar.gz
shell> tar zxvf nginx-<VERSION>.tar.gz
shell> cd nginx-<VERSION>
shell> ./configure
--add-module=/path/to/ngx_lua \
--add-module=/path/to/ngx_devel_kit
shell> make
shell> make install
Nginx 를 시작 해 보 세 요. 운 이 좋 지 않 으 면 다음 과 같은 오류 가 발생 할 수 있 습 니 다.
cannot open shared object file: No such file or directory
이게 뭐야?ldd 명령 으로 볼 수 있 습 니 다:
shell> ldd /path/to/nginx
libluajit-<VERSION>.so => not found
이러한 문 제 는 보통 Idconfig 명령 을 사용 하면 해결 할 수 있 습 니 다.
shell> echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
shell> ldconfig
Nginx 를 다시 시작 해 보면 OK 가 될 거 예요.
활용 단어 참조
우 리 는 먼저 간단 한 프로그램 으로 온장 을 따뜻 하 게 합 니 다. 다음 코드 를 Nginx 설정 파일 nginx. conf 에 추가 하고 Nginx 를 다시 시작 한 다음 에 탐색 하면 효 과 를 볼 수 있 습 니 다.
location /lua {
set $test "hello, world.";
content_by_lua '
ngx.header.content_type = "text/plain";
ngx.say(ngx.var.test);
';
}
깊이 공부 중 ngxlua 에 앞서 춘 형 이 쓴 Nginx 튜 토리 얼 을 자세히 읽 어 보 는 것 을 권장 합 니 다.
여기 서 중요 한 것 은 Nginx 프로필 이 사용 하 는 언어 는 본질 적 으로 '프로 세 스 적' 이 아니 라 '성명 적' 입 니 다.Nginx 가 요청 을 처리 할 때 명령 의 집행 은 명령 을 정의 할 때의 물리 적 순서 에 의 해 결정 되 는 것 이 아니 라 명령 이 속 한 단계 에 달 려 있다. Nginx 가 자주 사용 하 는 단 계 는 rewrite 단계, access 단계, content 단계 등 이 있다.데모 코드 의 set 명령 은 rewrite 단계, content 에 속 합 니 다.by_lua 명령 은 content 단계 에 속 합 니 다. 두 명령 의 순 서 를 교환 해 보면 프로그램 이 정상적으로 작 동 할 수 있 습 니 다.
레 디 스 와 결합 해 좀 더 실전 적 인 예 를 들 어 보 겠 습 니 다.
우선, 우 리 는 Redis 프로필 config. json 을 만들어 야 합 니 다. 내용 은 다음 과 같 습 니 다.
{
"host": "<HOST>",
"port": "<PORT>"
}
그리고 설정 파일 을 분석 하 는 스 크 립 트 init. lua 를 만 들 었 습 니 다. 그 중에서 Lua CJSON 모듈 을 사 용 했 습 니 다.
local cjson = require "cjson";
local config = ngx.shared.config;
local file = io.open("config.json", "r");
local content = cjson.decode(file:read("*all"));
file:close();
for name, value in pairs(content) do
config:set(name, value);
end
설명: 코드 에 공유 메모리 가 사용 되 었 습 니 다. 요청 할 때마다 프로필 을 분석 할 필요 가 없습니다.
이 어 렌 더 링 내용 의 스 크 립 트 content. lua 를 만 들 고 Resty Redis 모듈 을 사 용 했 습 니 다.
ngx.header.content_type = "text/plain";
local redis = require "resty.redis";
local config = ngx.shared.config;
local instance = redis:new();
local host = config:get("host");
local port = config:get("port");
local ok, err = instance:connect(host, port);
if not ok then
ngx.log(ngx.ERR, err);
ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE);
end
instance:set("name", "laowang");
local name = instance:get("name")
instance:close();
ngx.say("name: ", name);
설명: Resty Redis 모듈 을 vendor 디 렉 터 리 에 두 고 나중에 Nginx 에서 통일 적 으로 설정 하 는 것 을 권장 합 니 다.
마지막 으로 Nginx 프로필 에 설정 해 야 합 니 다.
lua_shared_dict config 1m;
lua_package_path "/path/to/vendor/?.lua;;";
init_by_lua_file /path/to/init.lua;
server {
lua_code_cache off;
location /lua {
content_by_lua_file /path/to/content.lua;
}
...
}
설명: 디 버 깅 편 의 를 위해 lua 를 닫 았 습 니 다.code_cache, 생산 환경 이 라면 열 어야 합 니 다.
또한 CJSON 을 설치 할 때 Makefile 파일 에 있 는 파일 의 경 로 를 주의해 야 합 니 다.
PREFIX = /usr/local
LUA_INCLUDE_DIR = $(PREFIX)/include
LuaJIT 가 설치 되 어 있다 면 해당 디 렉 터 리 에 헤더 파일 을 복사 하 는 것 이 좋 습 니 다.
cp /usr/local/include/luajit-<VERSION>/* /usr/local/include/
…
제 가 최근 에 참여 한 프로젝트 는 웹 폴 링 에 사용 되 는 인 터 페 이 스 를 제 공 했 습 니 다. 모두 Nginx + Lua 로 이 루어 졌 습 니 다. 모두 10 여 대의 서버 만 있 지만 매일 수 십 억 번 의 요 구 량 을 제공 할 수 있 습 니 다. 도둑 라 라 의 강 함 입 니 다.
마지막 으로, 나 는 어떤 반 강 이 버클륨 큰 자라 의 큰 자라 인 23870 을 인용 합 시다: 루 아, 미혼 남성 프로그래머 의 최 애.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
서버에서 쿠키 만료 값 가져오기브라우저는 쿠키 만료를 처리하므로 쿠키의 만료 값을 서버에 전달하지 않습니다. 서버에서 쿠키의 만료 값을 얻으려면 일부 조정을 해야 합니다. 두 가지 방법이 있습니다. JSON 값으로 쿠키를 생성할 수 있습니다 다른...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.