当前位置: 首页 > 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…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...