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

iptables限制docker端口禁止某台主机访问(使用DOCKER链和raw表的PREROUTING链)

背景:

在Linux上docker映射了端口,想着对服务端口进行限制指定IP访问,发现在filter表的INPUT链限制无效

环境:

主机192.168.56.132上的docker容器部署了nginx并将容器80端口映射到主机8000端口

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                          COMMAND                  CREATED       STATUS       PORTS                                   NAMES
79e2d2824b97   dockerproxy.cn/library/nginx   "/docker-entrypoint.…"   4 hours ago   Up 2 hours   0.0.0.0:8000->80/tcp, :::8000->80/tcp   nginx-test
[root@localhost ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      83216/docker-proxy                  
tcp6       0      0 :::8000                 :::*                    LISTEN      83220/docker-proxy

需求:

仅允许192.168.56.128主机访问此容器,其他主机全部禁止访问。
此时默认iptables策略为:

[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         Chain DOCKER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            172.17.0.2           tcp dpt:80Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0           
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            0.0.0.0/0           
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0   

操作:

按照常规操作添加策略

在INPUT表中直接添加drop所有地址访问8000端口

# 添加策略
[root@server ~]# iptables  -I INPUT -p tcp --dport 8000 -j DROP
# 查看
[root@server ~]# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8000
使用其他机器测试发现所添加防火墙策略无效
[root@client ~]# curl  192.168.56.132:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>那尝试禁用80端口看看是否有效
[root@server ~]# iptables  -I INPUT -p tcp --dport 80 -j DROP
[root@server ~]# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8000测试连接,发现策略依旧无效。
[root@client ~]# curl  192.168.56.132:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>

查找资料发现
Docker安装了两个定制的iptables链,名为DOCKER-USER和DOCKER,它确保传入的数据包总是首先由这两个链检查。
Docker的所有iptables规则都被添加到Docker链中。不要手动操作该链条。如果您需要添加在Docker规则之前加载的规则,请将它们添加到DOCKER-USER链中。这些规则是在Docker自动创建任何规则之前应用的。
添加到转发链中的规则——无论是手动添加的,还是由另一个基于iptables的防火墙添加的——都会在这些链之后进行评估。这意味着如果您通过Docker暴露一个端口,无论您的防火墙配置了什么规则,该端口都会被暴露。如果您希望这些规则即使在端口通过Docker暴露时也适用,那么您必须将这些规则添加到DOCKER-USER链中。

在DOCKER-USER链中配置策略

Docker容器创建时会自动创建iptables策略,Docker使用的规则链是DOCKER-USER,所以需使用iptables对DOCKER-USER链做限制才可以完成需求。
加上试试

# 先删掉return的策略,不然会被直接返回进行下一步操作
[root@server ~]# iptables  -D DOCKER-USER -j RETURN
[root@server ~]# iptables  -I DOCKER-USER -p tcp --dport 8000 -j DROP
[root@server ~]# iptables -nL DOCKER-USER
Chain DOCKER-USER (1 references)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8000     
访问测试,还是不行!?
[root@client ~]# curl  192.168.56.132:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
加上日志追踪看一下到底什么原因
[root@server ~]# echo 'kern.=debug     /var/log/kern.debug.log' >>  /etc/rsyslog.conf 
[root@server ~]# touch /var/log/kern.debug.log 
[root@server ~]# systemctl restart rsyslog[root@server ~]# iptables -I DOCKER-USER 1  -p tcp  -m limit --limit 4/min -j LOG --log-prefix "Iptables-DROP: " --log-level 7
[root@server ~]# iptables -nL DOCKER-USER
Chain DOCKER-USER (1 references)
target     prot opt source               destination         
LOG        tcp  --  0.0.0.0/0            0.0.0.0/0            limit: avg 4/min burst 5 LOG flags 0 level 7 prefix "Iptables-DROP: "
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8000  # 其他机器测试连接一下,肯定是可以连通的。
[root@client ~]# curl  192.168.56.132:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style># 查看日志
[root@server ~]# tailf /var/log/kern.debug.log 
Oct 28 14:55:45 server kernel: Iptables-DROP: IN=ens33 OUT=docker0 MAC=00:0c:29:87:29:40:00:50:56:c0:00:08:08:00 SRC=192.168.56.1 DST=172.17.0.2 LEN=40 TOS=0x00 PREC=0x00 TTL=127 ID=35633 DF PROTO=TCP SPT=43556 DPT=80 WINDOW=0 RES=0x00 ACK FIN URGP=0 # 重点部分
SRC=192.168.56.1 # 源地址
DST=172.17.0.2  # 目标地址
DPT=80 # 目标端口

在日志中发现原地址,目标地址和目标端口都有,现在就发现问题了,目标端口不是我们所映射出来的8000端口而是容器内部的80端口,那尝试禁止访问80端口试试

[root@server ~]# iptables  -I DOCKER-USER -p tcp --dport 80 -j DROP
[root@server ~]# iptables -nL DOCKER-USER
Chain DOCKER-USER (1 references)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
LOG        tcp  --  0.0.0.0/0            0.0.0.0/0            limit: avg 4/min burst 5 LOG flags 0 level 7 prefix "Iptables-DROP: "
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8000测试访问,发现被拦截了,那我们的需求就达到了,只要放开想要放行的IP地址就可以了,
[root@client ~]# curl  192.168.56.132:8000
curl: (7) Failed to connect to 192.168.56.132 port 8000: Connection timed out#server端放行192.168.56.128
[root@server ~]# iptables  -I DOCKER-USER -s 192.168.56.128 -p tcp --dport 80 -j ACCEPT
[root@server ~]# iptables -nL DOCKER-USER
Chain DOCKER-USER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.56.128       0.0.0.0/0            tcp dpt:80
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
LOG        tcp  --  0.0.0.0/0            0.0.0.0/0            limit: avg 4/min burst 5 LOG flags 0 level 7 prefix "Iptables-DROP: "
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8000#再次测试,发现可行了,找个其他机器测试一下,发现除了放行的地址其他地址无法访问。
[root@client ~]# curl  192.168.56.132:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>

会出现的问题:

问题复现:

上面操作就完成了我们的需求,但是这样做会有一个问题,如果我机器上容器比较多,多个容器内部端口都是80端口,那是不是也就不通了,答案是:是的,因为他是根据内部端口禁用了。
再拉一个nginx测试一下,映射了一个9000端口出来


[root@server ~]# docker ps
CONTAINER ID   IMAGE                          COMMAND                  CREATED         STATUS             PORTS                                   NAMES
4a7040a0040c   dockerproxy.cn/library/nginx   "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes       0.0.0.0:9000->80/tcp, :::9000->80/tcp   nginx-test-2
79e2d2824b97   dockerproxy.cn/library/nginx   "/docker-entrypoint.…"   5 hours ago     Up About an hour   0.0.0.0:8000->80/tcp, :::8000->80/tcp   nginx-test
# 他会自动在DOCKER链中生成一条新的,不用管它。
[root@server ~]# iptables -nL  DOCKER
Chain DOCKER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            172.17.0.2           tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            172.17.0.3           tcp dpt:80
# 我们将放行的机器剔除
root@server ~]# iptables  -D DOCKER-USER -s 192.168.56.128 -p tcp --dport 80 -j ACCEPT
[root@server ~]# iptables -nL  DOCKER-USER
Chain DOCKER-USER (1 references)
target     prot opt source               destination         
LOG        tcp  --  0.0.0.0/0            0.0.0.0/0            limit: avg 4/min burst 5 LOG flags 0 level 7 prefix "Iptables-DROP: "
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
# 测试访问两个端口,发现都无法访问,这就很可能会影响我们其他容器的业务[root@client ~]# curl  192.168.56.132:9000
curl: (7) Failed to connect to 192.168.56.132 port 9000: Connection timed out[root@client ~]# curl  192.168.56.132:8000
curl: (7) Failed to connect to 192.168.56.132 port 8000: Connection timed out

解决方法:

解决方法一:

策略指定目的地址,我们每创建一个容器他都会生成一个他自己的地址,在加防火墙的时候增加上目的地址可以解决此问题。
例如:我现在9000端口的容器就想要被所有人访问,8000端口只让192.168.56.128一台可以访问,可以这样做(就是比较麻烦,首先得获取每个容器的ip地址)

# 先清理掉之前的规则
[root@server ~]# iptables  -D DOCKER-USER -p tcp --dport 80 -j DROP
# 增加一条带有目的地址的策略
[root@server ~]# iptables  -A DOCKER-USER -d 172.17.0.2 -p tcp --dport 80 -j DROP
[root@server ~]# iptables -nL  DOCKER-USER
Chain DOCKER-USER (1 references)
target     prot opt source               destination         
LOG        tcp  --  0.0.0.0/0            0.0.0.0/0            limit: avg 4/min burst 5 LOG flags 0 level 7 prefix "Iptables-DROP: "
DROP       tcp  --  0.0.0.0/0            172.17.0.2           tcp dpt:80# 测试,达成了我们的目的
[root@client ~]# curl  192.168.56.132:9000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>[root@client ~]# curl  192.168.56.132:8000
curl: (7) Failed to connect to 192.168.56.132 port 8000: Connection timed out#然后放行我们想要放行的地址即可
[root@server ~]# iptables  -I DOCKER-USER -s 192.168.56.128 -d  172.17.0.2 -p tcp --dport 80 -j ACCEPT
[root@server ~]# iptables -nL  DOCKER-USER
Chain DOCKER-USER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.56.128       172.17.0.2           tcp dpt:80
LOG        tcp  --  0.0.0.0/0            0.0.0.0/0            limit: avg 4/min burst 5 LOG flags 0 level 7 prefix "Iptables-DROP: "
DROP       tcp  --  0.0.0.0/0            172.17.0.2           tcp dpt:80#测试访问
[root@client ~]# curl  192.168.56.132:9000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
[root@client ~]# curl  192.168.56.132:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
解决方法二:

在raw表中增加策略
解决方法二:
在raw表中增加策略。
了解一下什么是raw表?做什么用的?
iptables有5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
4个表:filter,nat,mangle,raw
4个表的优先级由高到低的顺序为:raw–>mangle–>nat–>filter
举例来说:如果PRROUTING链上,即有mangle表,也有nat表,那么先由mangle处理,然后由nat表处理
RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.
RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。

Docker端口映射工作流程:
当你使用 docker run -p <host_port>:<container_port> 启动一个容器时,Docker 会通过 iptables 将宿主机的 <host_port> 映射到容器的 <container_port>。
PREROUTING 链中的规则会捕获外部发向 <host_port> 的流量,重定向到容器的 IP 地址和 <container_port>。
总的来说,Docker 的端口映射主要通过 NAT 表 中的 PREROUTING 链 和 DOCKER 链 来实现的。这些链协作,确保外部请求可以被正确地转发到容器中对应的端口,那么根据下面的流程图可以看出我们可以在NAT表转换端口之前去拦截过滤原始端口(外部主机访问的宿主机端口),那只能在RAW表的PREROUTING和mangle表的PREROUTING链上面去加策略。
但是mangle表是用来修改数据包的,不做过滤操作,那么只能在raw表上去做。

理论结束实战开始:
先把策略恢复到一开始的没操作的状态

[root@server ~]# iptables -nL 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         Chain DOCKER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            172.17.0.2           tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            172.17.0.3           tcp dpt:80Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0           
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            0.0.0.0/0           
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0   

直接在raw 表的PREROUTING链上做8000端口的拦截

[root@server ~]# iptables -t raw -I PREROUTING  -p tcp -m tcp --dport 8000 -j DROP

测试连接情况

[root@client ~]# curl  192.168.56.132:8000
curl: (7) Failed to connect to 192.168.56.132 port 8000: Connection timed out# 不影响9000端口的容器访问
[root@client ~]# curl  192.168.56.132:9000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>

放开指定ip地址

[root@server ~]# iptables -t raw -I PREROUTING -s 192.168.56.128 -p tcp -m tcp --dport 8000 -j ACCEPT[root@server ~]# iptables -nL -t raw
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.56.128       0.0.0.0/0            tcp dpt:8000
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8000Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

再次测试,被放开的主机已经可以通了,测试一下其他主机发现无法访问仅放开的主机可以访问,且不干扰其他端口

[root@client ~]# curl  192.168.56.132:9000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>[root@client ~]# curl  192.168.56.132:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>

PS:在raw表上加策略用的人少,不知道会有什么影响,希望有大佬可以解答。

相关文章:

iptables限制docker端口禁止某台主机访问(使用DOCKER链和raw表的PREROUTING链)

背景&#xff1a; 在Linux上docker映射了端口&#xff0c;想着对服务端口进行限制指定IP访问&#xff0c;发现在filter表的INPUT链限制无效 环境&#xff1a; 主机192.168.56.132上的docker容器部署了nginx并将容器80端口映射到主机8000端口 [rootlocalhost ~]# docker ps …...

【VM实战】VMware迁移到VirtualBox

VMware 虚拟机开机卸载VMware Tools 调整虚拟磁盘 对于Windows 10及以上的虚拟机&#xff0c;一般VMware默认都会选Nvme固态硬盘。在导出前必须将其改为SATA&#xff0c;否则VirtualBox导入会报Appliance Import错误 (E_INVALIDARG 0x80070057) 先删掉当前盘的挂载&#xff…...

Android WebView加载不到cookie

以下配置根据需求酌情添加&#xff0c;建议逐个试验&#xff0c;cookie操作不是内存操作&#xff0c;建议修改配置后卸载app再重新运行防止缓存影响测试结果。 1.设置应用程序的 WebView 实例是否应发送并接受 Cookie CookieManager cookieManager CookieManager.getInstanc…...

c++qt

1.显示画布 #include "code.h" #include <QtWidgets/QApplication> #include<iostream> #include<vector> #include <QWindow> #include <QGraphicsView> #include <QGraphicsScene>using namespace std;//1.空格 2.墙 3.入口…...

零跑汽车嵌入式面试题汇总及参考答案

C++ 的三大特性是什么? C++ 的三大特性分别是封装、继承和多态。 封装 概念:封装是把数据和操作数据的函数绑定在一起,对数据的访问进行限制。通过将数据成员声明为私有或保护,只允许通过公共的成员函数来访问和修改数据,从而隐藏了类的内部实现细节。这有助于提高代码的安…...

LC:贪心题解

文章目录 376. 摆动序列 376. 摆动序列 题目链接&#xff1a;https://leetcode.cn/problems/wiggle-subsequence/description/ 这个题目自己首先想到的是动态规划解题&#xff0c;贪心解法真的非常妙&#xff0c;参考下面题解&#xff1a;https://leetcode.cn/problems/wiggle…...

ubuntu交叉编译dbus库给arm平台使用

1.下载dbus库源码 https://www.freedesktop.org/wiki/Software/dbus 克隆源码: https://gitlab.freedesktop.org/dbus/dbus/-/tree/dbus-1.12?ref_type=heads 下载1.12.20版本: 指定pkgconfig环境变量: export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$PWD/../expat-2.3.…...

ansible开局配置-openEuler

ansible干啥用的就不多介绍了&#xff0c;这篇文章主要在说ansible的安装、开局配置、免密登录。 ansible安装 查看系统版本 cat /etc/openEuler-latest输出内容如下&#xff1a; openeulerversionopenEuler-24.03-LTS compiletime2024-05-27-21-31-28 gccversion12.3.1-30.…...

连锁收银系统的优势与挑战

在快速发展的零售环境中&#xff0c;连锁收银系统不仅是收银的工具&#xff0c;更是现代零售管理的重要组成部分。它在提升效率、优化客户体验以及数据管理等方面发挥了关键作用。然而&#xff0c;随着技术的进步和市场环境的变化&#xff0c;连锁收银系统也面临着诸多挑战。本…...

轻型民用无人驾驶航空器安全操控理论培训知识总结-多旋翼部分

航空器知识 螺旋桨 螺旋桨为多旋翼民用无人驾驶航空器提供升力,多旋翼民用无人驾驶航空器通过飞控系统控制电机调节螺旋桨转速,来实现飞行。 天线 多旋翼民用无人驾驶航空器的图像传输以及遥控控制信号,主要是通过无线信道进行的,靠民用无人驾驶航空器与遥控器的天线传…...

springboot092安康旅游网站的设计与实现(论文+源码)_kaic

毕业设计&#xff08;论文&#xff09; 基于JSP的安康旅游网站的设计与实现 姓  名 学  号 院  系 专  业 指导老师 2021 年 月 教务处制 目 录 目 录 摘 要 Abstract 第一章 绪论 1.1 研究现状 1.2 设…...

优化 Git 管理:提升协作效率的最佳实践20241030

优化 Git 管理&#xff1a;提升协作效率的最佳实践 引言 在现代软件开发中&#xff0c;版本控制系统是确保代码质量和团队协作顺畅的基石。Git 作为最流行的分布式版本控制工具&#xff0c;其灵活性和强大功能使得开发者能够高效地管理项目代码。然而&#xff0c;仅依靠工具本…...

Cocos使用精灵组件显示相机内容

Cocos使用精灵组件显示相机内容 1. 为什么使用精灵渲染 在游戏引擎中&#xff0c;游戏场景内除webview和video外所有的节点都是渲染在Canvas上&#xff0c;这导致了webview和video只能存在于所有节点的最上层或最下层&#xff0c;而这种层级关系会出现节点事件无法正常监听或者…...

AListFlutter(手机alist)——一键安装,可在手机/电视上运行并挂载各个网盘

前面提到软路由系统OpenWRT的时候&#xff0c;当时说过可以在OpenWRT里安装alist&#xff0c;然后挂载网盘&#xff0c;这样就可以通过webdav的方式在家庭局域网下的任何设备都可以访问操作这些网盘&#xff0c;摆脱硬盘空间不够的问题。 但alist的官方版本是没有手机版本的&a…...

2024快手面试算法题-生气传染

问题描述 思路分析 生气只会向后传播&#xff0c;最后一个生气的人一定是最长连续没有生气的人中的最后一个人&#xff0c;前提是前面得有一个人生气。 注意&#xff0c;一次只能传播一个人&#xff0c;比如示例1&#xff0c;第一次只会传播给第一个P&#xff0c;不会传播给第…...

组织如何防御日益增加的 API 攻击面

应用程序编程接口 (API) 日益重要。随着 API 超出手动控制范围&#xff0c;组织可能面临更大的安全挑战。 在这里&#xff0c;我们与 Akamai 安全技术战略总监 Karl Mattson 进行了交谈。 请介绍一下您的职位和背景。 我在网络安全和技术领导方面拥有超过 25 年的经验&am…...

如何防止U盘盗取电脑数据?

数据安全无论是对企业还是个人都至关重要。这些用户群体随时面临着数据被窃取的风险&#xff0c;而 U 盘则成为了潜在的安全隐患。如果你想要禁止电脑上使用 这类USB 存储设备&#xff0c;看完这篇文章&#xff0c;防止 U 盘盗取数据并非难事。 禁止使用usb存储设备 打开电脑上…...

python爬虫抓取豆瓣数据教程

环境准备 在开始之前&#xff0c;你需要确保你的Python环境已经安装了以下库&#xff1a; requests&#xff1a;用于发送HTTP请求。BeautifulSoup&#xff1a;用于解析HTML文档。 如果你还没有安装这些库&#xff0c;可以通过以下命令安装&#xff1a; pip install requests…...

Mybatis 注意传递多种参数,不一定都有参数值,用xml如何写出查询语句

Mybatis 注意传递多种参数&#xff0c;不一定都有参数值&#xff0c;用xml如何写出查询语句 有一张User表&#xff0c;传递name和age参数&#xff0c;通过mybatis的xml格式编写查询namelike“%张%”&#xff0c;或者age18的学生信息&#xff0c;但是注意传递name和age参数&…...

【Windows】Redis 部署

1、部署 &#xff08;1&#xff09;下载 目前 Redis官网 没有提供Windows版本的安装程序&#xff0c;如果需要安装&#xff0c;需要到Github上下载适合Windows的版本。 具体下载地址为&#xff1a; Redis-x64-3.0.504.zipRedis-x64-5.0.14.1.zip &#xff08;2&#xff09…...

Keep架构深度解析:企业级AIOps告警管理平台的设计与实践

Keep架构深度解析&#xff1a;企业级AIOps告警管理平台的设计与实践 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep Keep作为开源AIOps告警管理平台&#xff0c;采用现代化的微服…...

3分钟掌握SRWE:打破屏幕分辨率限制的终极窗口编辑神器

3分钟掌握SRWE&#xff1a;打破屏幕分辨率限制的终极窗口编辑神器 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE SRWE&#xff08;Simple Runtime Window Editor&#xff09;是一款革命性的实时窗口编辑器&…...

Linux小白避坑指南:Resilio Sync安装后权限配置与Web界面访问失败的常见问题解决

Linux权限迷宫&#xff1a;Resilio Sync安装后的深度避坑实战 当8888端口沉默时&#xff1a;一次真实的故障排查记录 上周五晚上11点&#xff0c;我正准备将团队的设计素材库同步到本地开发环境。按照官方文档&#xff0c;我在Ubuntu 22.04上顺利安装了Resilio Sync&#xff0c…...

自动化测试系统开关架构与继电器选型指南

1. 自动化测试系统中的开关架构选择在自动化测试系统中&#xff0c;开关架构的选择直接影响着测试效率、信号完整性和系统成本。根据测试需求和被测设备(DUT)特性&#xff0c;我们可以将开关架构分为四种基本类型。1.1 无开关架构无开关架构是最直接的连接方式&#xff0c;每个…...

AI编程助手成本优化:混合路由策略如何将API账单降低73%

1. 项目概述&#xff1a;当AI编程助手成为API预算的“吞金兽”如果你正在为团队开发或集成一个AI编程助手&#xff0c;并且看着每月五位数的API账单感到头皮发麻&#xff0c;这篇文章就是为你准备的。我亲眼见过不少开发团队&#xff0c;在享受着AI辅助编程带来的效率提升时&am…...

从零到一:深入拆解 I/O 多路复用的前世今生与实战选型

1. 从单线程阻塞到多路复用&#xff1a;I/O模型的进化史 第一次写网络程序时&#xff0c;你可能遇到过这样的场景&#xff1a;服务器在accept()一个客户端连接后&#xff0c;整个程序就像被冻住一样&#xff0c;直到这个客户端发送数据才能继续运行。这就是最原始的阻塞I/O模型…...

MTKClient实战指南:联发科设备深度操作与安全研究

MTKClient实战指南&#xff1a;联发科设备深度操作与安全研究 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient MTKClient是一款功能强大的开源工具&#xff0c;专门用于联发科&#xff08;M…...

Flutter+开源鸿蒙实战|城市共享驿站智能存取系统 Day6 全局UI精细化美化+通用组件封装+反馈设置模块+隐私弹窗+鸿蒙打包签名适配+项目整体重构

Flutter开源鸿蒙实战&#xff5c;城市共享驿站智能存取系统 Day6 全局UI精细化美化通用组件封装反馈设置模块隐私弹窗鸿蒙打包签名适配项目整体重构 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net <!-- Schema.org 结构化数据 --> &…...

算法题(回溯)

一、题目1、括号生成&#xff08;LC 22&#xff09;2、单词搜索&#xff08;LC 79&#xff09;二、题解1、括号生成&#xff08;LC 22&#xff09;&#xff08;1&#xff09;分析采用回溯的思想解决。递归方法包括 left、right、ans、path、n 五个核心参数&#xff0c;其中 lef…...

OpenClaw微信公众号插件wemp v2:双Agent路由与混合知识库实战

1. 项目概述&#xff1a;一个为OpenClaw设计的微信公众号插件如果你正在寻找一个能够将你的AI助手能力无缝接入微信公众号&#xff0c;实现自动化客服、智能问答甚至更复杂交互的解决方案&#xff0c;那么你找对地方了。wemp&#xff08;WeChat MP Plugin&#xff09;正是这样一…...