婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > nginx ip黑名單動態封禁的例子

nginx ip黑名單動態封禁的例子

熱門標簽:百度地圖標注公司位置要多少錢 山東企業外呼系統公司 濮陽好的聯通400電話申請 地圖標注黃河的位置 虛假地圖標注 承德地圖標注公司 靈圖uu電子寵物店地圖標注 400電話號碼辦理多少錢 地圖標注如何改成微信號

網站被惡意請求,拉黑IP是重要的手段,如果每次拉黑都要到nginx上配置,未免太low了;我們需要更方便的控制nginx IP黑名單。

1.方案

黑名單持久化到mysql (常見的方案是redis,但不利于控制,如:不同的IP設置不同的有效期、IP的CRUD、統計等等);

通過lua-nginx-module,在nginx中開辟一塊內存(lua_shared_dict),lua將黑名單定期從mysql全量刷新至lua_shared_dict;

所有請求,都要到與lua_shared_dict中的IP check一下。

2.安裝

2.1 安裝luajit

cd LuaJIT-2.0.5
make
make install PREFIX=/usr/local/luajit

2.2.安裝nginx時,將lua模塊編譯進去

export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.1
 
./configure --prefix=/nginx \

--with-ld-opt="-Wl,-rpath,/usr/local/luajit/lib" \

--add-module=/opt/ngx_devel_kit-0.3.1rc1 \

--add-module=/opt/lua-nginx-module-0.10.14rc3
 
make -j2
make install
ln -s /nginx/sbin/nginx /usr/sbin/nginx

3.配置

3.1 nginx配置

http {
  server_tokens off;
  lua_package_path "/usr/local/lib/lua/?.lua;;";
  lua_shared_dict ip_blacklist 4m;
}
 
server {
  set $real_ip $remote_addr;
  if ( $http_x_forwarded_for ~ "^(\d+\.\d+\.\d+\.\d+)" ) {
    set $real_ip $1;
  }
 
  # 管理信息,訪問該URL可以查看nginx中的IP黑名單信息
  location /get-ipblacklist-info {
    access_by_lua_file conf/lua/get_ipblacklist_info.lua;
  }
 
  # 同步URL,通過定時任務調用該URL,實現IP黑名單從mysql到nginx的定時刷新
  location /sync-ipblacklist {
   access_by_lua_file conf/lua/sync_ipblacklist.lua;
  }
 
  # 生產域名配置,所有需要IP黑名單控制的location,都要包含以下語句
  location / {
   access_by_lua_file conf/lua/check_realip.lua;
  }
 
}

nginx服務器配置以下crrontab

* * * * * /usr/bin/curl -o /dev/null -s http://127.0.0.1/sync-ipblacklist > /dev/null 2>&1

3.2 lua腳本

sync_ipblacklist.lua

local mysql_host = "ip of mysql server"
local mysql_port = 3306
local database = "dbname"
local username = "user"
local password = "password"
 
-- update ip_blacklist from mysql once every cache_ttl seconds
local cache_ttl  = 1
local mysql_connection_timeout = 1000
 
local client_ip  = ngx.var.real_ip
local ip_blacklist  = ngx.shared.ip_blacklist
local last_update_time = ip_blacklist:get("last_update_time");
 
if last_update_time == nil or last_update_time < ( ngx.now() - cache_ttl ) then
 
 local mysql = require "resty.mysql";
 local red = mysql:new();
 
 red:set_timeout(mysql_connect_timeout);
 
 local ok, err, errcode, sqlstate = red:connect{
     host = mysql_host,
     port = mysql_port,
     database = database,
     user = username,
     password = password,
     charset = "utf8",
     max_packet_size = 1024 * 1024,
    }
 if not ok then
 ngx.log(ngx.ERR, "mysql connection error while retrieving ip_blacklist: " .. err);
 else
 new_ip_blacklist, err, errcode, sqlstate = red:query("select ip_addr from ip_blacklist where status = 0 order by create_time desc limit 10000", 100)
 if not new_ip_blacklist then
  ngx.log(ngx.ERR, "bad result. errcode: " .. errcode .. " sqlstate: " .. sqlstate .. " err: " .. err);
  return
 end
 
 ip_blacklist:flush_all();
 for k1, v1 in pairs(new_ip_blacklist) do
  for k2, v2 in pairs(v1) do
  ip_blacklist:set(v2,true);
  end
 end
 
 ip_blacklist:set("last_update_time", ngx.now());
 end
end
 
ngx.say("sync successful");

get_ipblacklist_info.lua

-- 調用URL查看黑名單信息
-- 1萬IP消耗不到1.5M ngx.shared內存
-- 獲取所有KEY會堵塞別的正常請求對ngx.shared內存的訪問,因此只能取少數key展示
require "resty.core.shdict"
ngx.say("total space: " .. ngx.shared.ip_blacklist:capacity() .. "<br/>");
ngx.say("free space: " .. ngx.shared.ip_blacklist:free_space() .. "<br/>");
ngx.say("last update time: " .. os.date("%Y%m%d_%H:%M:%S",ngx.shared.ip_blacklist:get("last_update_time")) .. "<br/>");
ngx.say("first 100 keys: <br/>");
ngx.say("--------------------------<br/>");
ip_blacklist = ngx.shared.ip_blacklist:get_keys(100);
for key, value in pairs(ip_blacklist) do
 ngx.say(key .. ": " .. value .. "<br/>");
end

check_realip.lua

if ngx.shared.ip_blacklist:get(ngx.var.real_ip) then
 return ngx.exit(ngx.HTTP_FORBIDDEN);
end

3.3 數據庫設計

CREATE TABLE `ip_blacklist` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `ip_addr` varchar(15) COLLATE utf8mb4_bin DEFAULT NULL,
 `status` int(11) DEFAULT '0' COMMENT '0: valid 有效, 1: invalid 失效',
 `effective_hour` decimal(11,2) DEFAULT '24' COMMENT '有效期,單位:小時',
 `ip_source` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '黑名單來源',
 `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
 `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 `remark` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '備注',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
 
 
CREATE PROCEDURE proc_ip_blacklist_status_update()
-- 將過期的IP狀態改為失效
begin 
 update ip_blacklist
 set status=1
 where date_add(create_time,INTERVAL effective_hour hour) < now();
 commit;
end;
 
 
CREATE EVENT job_ip_blacklist_status_update
ON SCHEDULE EVERY 1 MINUTE
ON COMPLETION PRESERVE
ENABLE
DO
call proc_ip_blacklist_status_update();

4 CRUD

黑名單產生有手工的方式,也有自動的方式,或者兩者兼有。

自動的方式有通過python分析elk日志,將惡意IP自動寫入mysql,這是個大話題,這里不涉及。

手工的方式可以人肉查看elk請求日志,發現惡意IP,手工填入mysql,這里推薦一個開源的CRUD工具,用戶體驗很nice(比直接navicat好多了),當然也可以自己寫……

項目地址:https://github.com/jonseg/crud-admin-generator

項目的強大之處在于,所有表都幫你生成菜單,然后這些表的CRUD就直接用了。

具體操作見官方說明,就不贅述了。

以上這篇nginx ip黑名單動態封禁的例子就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

標簽:德宏 上海 福州 安康 樂山 泰安 鷹潭 淮安

巨人網絡通訊聲明:本文標題《nginx ip黑名單動態封禁的例子》,本文關鍵詞  nginx,黑名單,動態,封禁,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《nginx ip黑名單動態封禁的例子》相關的同類信息!
  • 本頁收集關于nginx ip黑名單動態封禁的例子的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    一区二区欧美精品| 国产三级精品三级| 精品久久久网站| 中文一区二区在线观看| 亚洲va在线va天堂| jlzzjlzz国产精品久久| 制服丝袜日韩国产| 亚洲天堂网中文字| 国产精品1024久久| 日韩视频免费观看高清在线视频| 一区二区三区在线影院| 国产成人精品亚洲日本在线桃色| 91精品国产欧美一区二区| 亚洲狼人国产精品| 北条麻妃一区二区三区| 久久久精品免费网站| 美国毛片一区二区三区| 欧美女孩性生活视频| 亚洲精品欧美二区三区中文字幕| 国产99久久久精品| 久久久国产一区二区三区四区小说| 视频一区二区欧美| 欧美日韩国产片| 亚洲一区免费在线观看| 欧洲精品在线观看| 亚洲乱码国产乱码精品精小说| 9i看片成人免费高清| 国产欧美日韩亚州综合| 国产成人av一区二区三区在线 | 日韩成人精品视频| 91丨九色丨蝌蚪丨老版| 国产精品久久久久婷婷| 丰满少妇在线播放bd日韩电影| 久久综合狠狠综合久久综合88| 免费黄网站欧美| 欧美tk—视频vk| 激情国产一区二区| 国产午夜精品一区二区三区视频| 国产伦精一区二区三区| 久久一区二区视频| 懂色av一区二区三区免费观看 | 91精品国产美女浴室洗澡无遮挡| 亚洲成人av一区| 欧美肥胖老妇做爰| 毛片av中文字幕一区二区| 日韩一区二区三区四区五区六区 | 久久精品免费在线观看| 国产成人av一区| 日韩一区日韩二区| 欧美日韩电影在线播放| 美国十次了思思久久精品导航| www激情久久| av在线不卡观看免费观看| 亚洲免费观看高清完整版在线观看| 日本高清不卡一区| 久久狠狠亚洲综合| 亚洲欧洲日韩在线| 69av一区二区三区| 国产成人免费在线观看| 亚洲午夜久久久久久久久电影网| 正在播放亚洲一区| 成人综合在线观看| 五月天一区二区三区| 久久精品免视看| 在线观看网站黄不卡| 欧美a级一区二区| 久久精品人人做| 欧美视频在线不卡| 国产精品18久久久久久久久 | 精品国产乱码久久久久久久| 国产精品亚洲一区二区三区妖精| 最新日韩av在线| 日韩精品在线网站| 色成年激情久久综合| 久久se这里有精品| 亚洲一区二区免费视频| 国产欧美一区二区在线| 欧美日韩国产成人在线免费| 国产91丝袜在线18| 美腿丝袜亚洲一区| 亚洲视频香蕉人妖| 26uuu欧美| 在线成人高清不卡| 91免费看片在线观看| 国产精品一区二区黑丝| 全部av―极品视觉盛宴亚洲| 亚洲欧洲日本在线| 精品国内片67194| 欧美在线免费观看视频| 懂色av噜噜一区二区三区av| 老司机精品视频线观看86 | 国产精品成人免费| 日韩欧美一级精品久久| 欧美在线免费视屏| 97久久人人超碰| 国产一区不卡视频| 奇米影视7777精品一区二区| 亚洲综合久久久| 日本一区二区免费在线| 精品国产免费一区二区三区香蕉| 欧美日韩一区视频| 在线看日韩精品电影| 91麻豆视频网站| 91在线免费播放| 成人激情小说乱人伦| 国产福利91精品一区二区三区| 久久精品国产99国产精品| 日本成人超碰在线观看| 午夜国产精品影院在线观看| 洋洋成人永久网站入口| 亚洲无线码一区二区三区| 亚洲综合色成人| 亚洲不卡在线观看| 午夜精品久久久久影视| 五月婷婷激情综合| 奇米精品一区二区三区在线观看| 免费在线视频一区| 久久er精品视频| 国产精品伊人色| 国产jizzjizz一区二区| 成人的网站免费观看| 91亚洲资源网| 色婷婷亚洲综合| 欧美日韩在线播| 欧美人狂配大交3d怪物一区 | 麻豆精品一区二区| 九色|91porny| 国产高清一区日本| av午夜一区麻豆| 在线观看成人小视频| 91麻豆精品91久久久久同性| 精品国产乱码久久久久久浪潮| 国产亚洲综合在线| 亚洲欧美日韩在线不卡| 视频一区免费在线观看| 国产一区二区三区四区五区入口| 成人免费看视频| 欧洲精品一区二区三区在线观看| 555夜色666亚洲国产免| 久久综合九色欧美综合狠狠| 亚洲人成伊人成综合网小说| 日韩高清一区二区| 成人开心网精品视频| 欧美色爱综合网| 精品国产乱码久久久久久1区2区 | 国产精品福利影院| 亚洲成人av电影| 国产成人免费视频| 欧美日韩高清一区二区不卡| 精品999在线播放| 亚洲精品老司机| 久久精品999| 欧洲av一区二区嗯嗯嗯啊| 欧美一区二区三区在线观看| 中文av字幕一区| 日本不卡视频在线观看| av一二三不卡影片| 欧美精品aⅴ在线视频| 国产精品午夜在线| 午夜精品国产更新| 国产精品一区二区免费不卡| 欧美日韩一级片网站| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国产亚洲精品aa| 亚洲精品高清视频在线观看| 狠狠网亚洲精品| 精品视频色一区| 国产欧美一区二区精品性色超碰| 一区二区三区四区五区视频在线观看 | 精品国精品自拍自在线| 亚洲影院理伦片| www.av亚洲| 久久免费精品国产久精品久久久久| 亚洲综合久久av| 91免费国产视频网站| 欧美经典一区二区三区| 精品在线你懂的| 欧美一区二区日韩一区二区| 亚洲精品欧美二区三区中文字幕| 粉嫩av一区二区三区| 26uuu久久综合| 免费精品99久久国产综合精品| 欧洲亚洲国产日韩| 亚洲欧洲综合另类| 成人v精品蜜桃久久一区| 国产免费成人在线视频| 国产一区二区导航在线播放| 日韩欧美的一区| 日韩福利电影在线| 欧美精品色综合| 日韩vs国产vs欧美| 7777精品伊人久久久大香线蕉最新版 | 国产精品免费av| 国产精品自拍网站| 久久婷婷色综合| 国产一级精品在线| 久久久91精品国产一区二区三区| 国产一区二区三区免费| 久久色在线视频| 成人午夜在线视频|