当前位置: 首页 > news >正文

java配置nginx网络安全,防止国外ip访问,自动添加黑名单,需手动重新加载nginx

在这里插入图片描述

通过访问日志自动添加国外ip黑名单
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建一个类,自己添加一个main启动类即可测试

import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;import static java.lang.Character.LINE_SEPARATOR;@Slf4j
@Component
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class SecurityIp {private final static String[] privinces = {"北京市", "天津市", "河北省", "山西省", "内蒙古", "辽宁省", "吉林省", "黑龙江省", "上海市", "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省", "广东省", "广西", "海南省", "重庆市", "四川省", "贵州省", "云南省", "西藏", "陕西省", "甘肃省", "青海省", "宁夏", "新疆", "台湾省", "香港", "澳门", "此IP属于本地局域网","本地局域网"};//nginx的工作空间private final static String nginxPath = "F:/zty/testlinux/usr/local/nginx/";//nging的access.log路径private final static String logPath = nginxPath + "logs/access.log";//黑名单配置文件路径private final static String blackListPath = nginxPath + "conf/blackListIp.conf";private final static String blackListLogPath = nginxPath + "conf/blackListIpLog.log";//启动脚本文件路径private final static String binPath = nginxPath + "";private static String getAddressByIp(String ip) {try {URL url = new URL("http://opendata.baidu.com/api.php?query=" + ip + "&co=&resource_id=6006&t=1433920989928&ie=utf8&oe=utf-8&format=json");URLConnection conn = url.openConnection();BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));String line = null;StringBuffer result = new StringBuffer();while ((line = reader.readLine()) != null) {result.append(line);}reader.close();JSONObject jsStr = new JSONObject(result.toString());JSONArray jsData = (JSONArray) jsStr.get("data");JSONObject data = (JSONObject) jsData.get(0);//位置return (String) data.get("location");} catch (IOException e) {log.error("getAddressByIp error, ip={},msg={}", ip, e);return null;}}/*** 扫描非法IP* 每隔30秒扫描一次非法IP并加入黑名单*/@Scheduled(fixedDelay = 3000)public void scanForIllegalIP() throws Exception {List<String> ips = getIps();// 将当前检测国外ip加入黑名单并且返回if(ips.size() > 0) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("deny,国外ip:" + ips + "已写入nginx黑名单列表"+sdf.format(new Date()));}}/*** 获取国外ip** @return*/private List<String> getIps() {File file = new File(logPath);if (!file.exists()) {log.error("{} not exists", logPath);return null;}try {List<String> lines = new ArrayList<>();try (BufferedReader reader = new BufferedReader(new FileReader(file))) {String line;while ((line = reader.readLine()) != null) {// 获取access.log中ipString ip = line.substring(0, line.indexOf(" - - ["));if (!ip.equals("127.0.0.1")) {String securityIps = securityIps(ip);// 校验ip是否是国外ip,如果是的写入黑名单if (Objects.nonNull(securityIps) && !securityIps.isEmpty()) {lines.add(securityIps);// 国外ip加入黑名单的相应}}}}return lines;} catch (IOException e) {throw new RuntimeException(e);}}/*** 将ip写入黑名单** @param ip* @return*/private String securityIps(String ip) {String location = getAddressByIp(ip);if (Objects.nonNull(location) && privinces.length > 0) {List<String> lines = new ArrayList<>();List<String> notIps = Arrays.stream(privinces).filter(p -> p.contains(location)).collect(Collectors.toList());if (Objects.nonNull(notIps) && notIps.size() == 0) {// 写入黑名单时先查询此ip是否写入黑名单File isExsitfile = new File(blackListPath);if (!isExsitfile.exists()) {log.error("{} not exists", logPath);return null;}try {try (BufferedReader reader = new BufferedReader(new FileReader(isExsitfile))) {String line;while ((line = reader.readLine()) != null) {// 获取blackListIp.conf,判断是否已经写入if (Objects.nonNull(line) && !line.isEmpty() && !line.contains("127.0.0.1") && !line.contains("#")) {String newLines = line.replace(" deny ", "").replace(";", "");lines.add(newLines);}}}} catch (IOException e) {throw new RuntimeException(e);}}//第二步,写入非法IP进nginx的blackList文件try {List<String> isExit = lines.stream().filter(line -> line.contains(ip)).collect(Collectors.toList());if (notIps.size()==0&&isExit.size() == 0) {// 国外ip不在白名单中并且没有写入黑名单File file = new File(blackListPath);FileWriter out = new FileWriter(file, true);BufferedWriter bw = new BufferedWriter(out);bw.write(LINE_SEPARATOR);bw.write(" deny " + ip + ";");bw.flush();bw.close();log.info("国外:" + location + "IP:{} 已写入nginx黑名单列表", ip);// 写入nginx黑名单日志File blackListLog = new File(blackListLogPath);FileWriter blackListout = new FileWriter(blackListLog, true);BufferedWriter blackListbw = new BufferedWriter(blackListout);blackListbw.write(LINE_SEPARATOR);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");blackListbw.write("deny,国外:" + location + ip + "已写入nginx黑名单列表"+sdf.format(new Date()));blackListbw.flush();blackListbw.close();return ip;}} catch (IOException e) {throw new RuntimeException(e);}}return "";}
}

相关文章:

java配置nginx网络安全,防止国外ip访问,自动添加黑名单,需手动重新加载nginx

通过访问日志自动添加国外ip黑名单 创建一个类&#xff0c;自己添加一个main启动类即可测试 import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.json.JSONArray; import org.json.JSONObject; import org.sp…...

ARP协议

计算机网络资料下载&#xff1a;CSDN ARP协议 APR(address resolution protocol):地址解析协议&#xff0c;用于实现从IP地址到MAC地址的映射&#xff0c;即访问目标ip地址的mac地址。 网络层及以上采用的ip地址来标记网络接口&#xff0c;但是以太数据帧的传输&#xff0c;…...

Qt程序图标更改以及程序打包

Qt程序图标更改以及程序打包 1 windows1.1 cmake1.1.1 修改.exe程序图标1.1.2 修改显示页面左上角图标 1.2 qmake1.2.1 修改.exe程序图标1.2.2 修改显示页面左上角图标 2 程序打包2.1 MinGW2.2 Visual Studio 3 参考链接 QT6 6.7.2 1 windows 1.1 cmake 1.1.1 修改.exe程序图…...

普通人还有必要学习 Python 之类的编程语言吗?

在开始前分享一些编程的资料需要的同学评论888即可拿走 是我根据网友给的问题精心整理的对于编程的重要性&#xff0c;这里就不详谈了。 未来&#xff0c;我们和机器的交流会越来越多&#xff0c;编程可以简单看作是和机器对话并分发给机器任务。机器不仅越来越强大&#xff0…...

「Python」基于Gunicorn、Flask和Docker的高并发部署

目标预期 使用Gunicorn作为WSGI HTTP服务器,提供高效的Python应用服务。使用Flask作为轻量级Web应用框架,快速开发Web应用。利用Docker容器化技术,确保应用的可移植性和一致性。实现高并发处理,提高应用的响应速度和稳定性。过程 环境准备:安装Docker和Docker Compose。编…...

在攻防演练中遇到的一个“有马蜂的蜜罐”

在攻防演练中遇到的一个“有马蜂的蜜罐” 有趣的结论&#xff0c;请一路看到文章结尾 在前几天的攻防演练中&#xff0c;我跟队友的气氛氛围都很好&#xff0c;有说有笑&#xff0c;恐怕也是全场话最多、笑最多的队伍了。 也是因为我们遇到了许多相当有趣的事情&#xff0c;其…...

一文了解MySQL的表级锁

文章目录 ☃️概述☃️表级锁❄️❄️介绍❄️❄️表锁❄️❄️元数据锁❄️❄️意向锁⛷️⛷️⛷️ 介绍 ☃️概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0…...

LVS+Keepalive高可用

1、keepalive 调度器的高可用 vip地址主备之间的切换&#xff0c;主在工作时&#xff0c;vip地址只在主上&#xff0c;vip漂移到备服务器。 在主备的优先级不变的情况下&#xff0c;主恢复工作&#xff0c;vip会飘回到住服务器 1、配优先级 2、配置vip和真实服务器 3、主…...

网络安全防御【防火墙安全策略用户认证综合实验】

目录 一、实验拓扑图 二、实验要求 三、实验思路 四、实验步骤 1、打开ensp防火墙的web服务&#xff08;带内管理的工作模式&#xff09; 2、在FW1的web网页中网络相关配置 3、交换机LSW6&#xff08;总公司&#xff09;的相关配置&#xff1a; 4、路由器相关接口配置&a…...

IOS上微信小程序密码框光标离开提示存储密码解决方案

问题&#xff1a; ios密码框输入密码光标离开之后会提示存储密码的弹窗 解决方案 1、在苹果手机上面把 “自动填充密码”关闭&#xff0c;但是苹果这个默认开启&#xff0c;而且大部分客户也不会去自己关闭。 2、欺骗苹果手机&#xff0c;代码实现。 先说解决思路&#xf…...

AWS CDN新增用户ip 地区 城市 响应头

1.需要自定义cdn缓存策略 这里的策略也是先复制之前的cdn策略哈 最后复制完了 全部新增这两条标头key CloudFront-Viewer-Country CloudFront-Viewer-City 2.然后新增cdn函数&#xff0c;应用你写的这个函数 function handler(event) {var request event.request;var respon…...

Elasticsearch基础概念

Elasticsearch 是一款开源的,ESTful风格的 分布式搜索、存储、分析引擎; 常见的使用场景 网站搜索,代码搜索等日志管理与分析,应用系统性能分析,安全指标监控等数据库同步,将数据库某个表的数据同步到elasticsearch上然后提供搜索服务 ES基本概念 文档 我们向elasticsearch存…...

Redis 7.x 系列【24】哨兵模式配置项

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 配置项2.1 protected-mode2.2 port2.3 daemonize2.4 pidfile2.5 loglevel2.…...

SpringBoot+Vue实现简单的文件上传(策略模式)

SpringBootVue实现简单的文件上传 1 环境 SpringBoot 3.2.1&#xff0c;Vue 2&#xff0c;ElementUI 2 问题 前两篇文章&#xff0c;我们上传了txt、Excel文件&#xff0c;其实文件类型有很多种&#xff0c;如果我们的upload组件没有上传文件类型的限制&#xff0c;那么同一个…...

软考中级科目包含哪些?应该考哪个?

软考中级包含5个专业方向&#xff0c;分别是&#xff1a;计算机软件、计算机网络、计算机应用技术、信息系统、信息服务。这5个方向又对应15个软考中级科目。 信息系统包括&#xff1a;系统集成项目管理工程师、信息系统监理师、信息安全工程师、数据库系统工程师、信息系统管…...

ArcGIS Enterprise 命令行组件创建配置

1. 创建ArcGIS Server站点 使用 createsite工具 命令行直接执行 createsite.sh [-u <arg>] [-p <arg>] [-d <arg>] [-c <arg>]执行文件 createsite.sh [-f <FILE>]安装目录下会有类似的创建站点文件&#xff1a; 修改其中的内容&#xff0c;…...

Web组成架构

网站源码&#xff1a;分脚本类型&#xff0c;分应用方向操作系统&#xff1a;windows&#xff0c;linux中间件&#xff08;搭建平台&#xff09;&#xff1a;apche、IIS、tomcat、nginx等数据库&#xff1a;mssql、oracle、sybase、db2、access等 WEB相关安全漏洞 WEB源码类对…...

「Pytorch」roLabelImg 图像异常旋转 bug

在进行Yolo-obb 模型训练的时候需要标注旋转框&#xff0c;roLabelImg 是比较推荐的一款旋转框标注工具&#xff0c;既可以标注正常的矩形框&#xff0c;还可以标注旋转框 roLabelImg Github 地址&#xff1a;https://github.com/HumanSignal/labelImg 但是在使用过程中遇到了…...

java.sql.SQLException: Unknown system variable ‘query_cache_size‘【Pyspark】

1、问题描述 学习SparkSql中&#xff0c;将spark中dataframe数据结构保存为jdbc的格式并提交到本地的mysql中&#xff0c;相关代码见文章末尾。 运行代码时报出相关配置文件错误&#xff0c;如下。 根据该报错&#xff0c;发现网络上多数解决方都是基于java开发的解决方案&a…...

汽车连接器革新!中国星坤产品在汽车安全与效率中的卓越表现!

随着汽车行业的快速发展&#xff0c;车载电子系统的复杂性不断增加&#xff0c;对连接器的性能要求也越来越高。中国星坤推出的汽车连接器&#xff0c;以其卓越的设计和性能&#xff0c;为汽车行业带来了一场技术革新。这些连接器不仅能够适应极端的工作环境&#xff0c;还确保…...

像素风机甲对战小游戏HTML

先放效果图&#x1f3ae; 游戏玩法设计功能说明&#xff1a; 双人对战&#xff1a;两个玩家在同一键盘上对战 移动系统&#xff1a;左右移动 跳跃&#xff08;带重力物理&#xff09; 攻击系统&#xff1a; 近战攻击&#xff0c;有冷却时间和范围判定 防御系统&#xff1a;…...

数据结构——带懒标记的线段树

一、什么是线段树&#xff1f;线段树是一种二叉树数据结构&#xff0c;用于高效地处理区间查询和区间更新操作。核心思想&#xff1a;将数组分成若干个区间&#xff08;线段&#xff09;&#xff0c;每个节点代表一个区间&#xff0c;通过合并子节点的信息来得到父节点的信息。…...

ARMv8 AArch32虚拟内存系统与异常处理机制详解

1. AArch32虚拟内存系统架构概述AArch32是ARMv8架构中的32位执行状态&#xff0c;其虚拟内存系统架构(VMSAv8-32)是现代嵌入式系统和虚拟化平台的核心组件。这套系统通过精巧的硬件设计实现了内存隔离、访问控制和地址转换等关键功能。VMSAv8-32最显著的特点是采用了两阶段地址…...

别再死记公式了!用Cadence仿真带你直观理解比较器的增益、失调与噪声

Cadence实战&#xff1a;用仿真可视化比较器的增益、失调与噪声特性 刚接触模拟电路设计时&#xff0c;那些复杂的公式和抽象概念总让人头疼。比较器的增益、失调电压、噪声——这些名词在教科书上看起来冰冷生硬&#xff0c;但当你第一次在Cadence Virtuoso中看到它们如何真实…...

无监督聚类挖掘声音语义:从音乐描述文本发现认知规律

1. 这不是传统聚类&#xff0c;而是一场对“声音语言”的考古式挖掘你有没有试过听一首歌&#xff0c;然后被某段音色击中——那种“像融化的玻璃糖纸裹着雨滴坠落”的感觉&#xff1f;或者在音乐评论区刷到“低频像沉入深海的青铜钟”“人声有未拆封的羊皮纸质感”这类描述&am…...

TensorFlow 2迁移学习实战:图像分类快速上手指南

我不能基于您提供的输入内容生成符合要求的博文。原因如下&#xff1a;输入内容严重缺失实质性项目信息&#xff1a;仅包含一篇已发表文章的元数据&#xff08;标题、发布日期、作者名、平台名称、一句模糊口号“学习竞争对手”&#xff09;&#xff0c;完全没有提供任何关于 T…...

工控机,怎么突然成了制造业里的“硬通货”?

工控机&#xff0c;怎么突然成了制造业里的“硬通货”&#xff1f; http:/www.lionconit.com 苏州联控信息科技有限公司原创 转载请备注来源 去年底&#xff0c;和一个做机器视觉设备的朋友聊天。 他说现在客户开会&#xff0c;讨论顺序已经变了。 以前大家最关心的是…...

解锁包豪斯极简美学:Midjourney V6中实现100%可控几何构成的3步提示工程法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;包豪斯极简美学与Midjourney V6的范式耦合 包豪斯学派所倡导的“形式追随功能”“少即是多”“去除冗余装饰”等核心信条&#xff0c;正以惊人的契合度映射于Midjourney V6的底层生成逻辑——其增强的语…...

2026 软考中级《多媒体应用设计师》备考全攻略(附全套资料)

大家好&#xff0c;最近很多朋友问我软考多媒体应用设计师的备考方法和资料整理问题&#xff0c;今天就把我自己整理的备考资料和实用经验一次性分享给大家&#xff0c;帮你少走弯路&#xff0c;高效备考&#xff5e; &#x1f4da; 我的备考资料整理&#xff08;4 大模块全覆…...

运放电源端串联磁珠

在运放电源端串联磁珠&#xff0c;是一种常见的高频噪声抑制设计手段&#xff0c;但需结合具体应用场景谨慎使用。以下是关键要点&#xff1a;---作用与目的 - 抑制高频噪声&#xff1a;磁珠对高频信号&#xff08;通常 >10 MHz&#xff09;呈现高阻抗&#xff0c;将电源线上…...