有一个服务监听了 127.0.0.1:8000,怎么限制,只允许某个程序能通过 HTTP 协议访问。

195 天前
 dzdh

是限制程序,而不是来源 IP 。

比如只允许 /usr/bin/curl 发起 HTTP 访问 127.0.0.1:8000

python 用 requests 就不行

4151 次点击
所在节点    Linux
41 条回复
guxingke
195 天前
http 协议决定了 限制不了
zsj1029
195 天前
userAgent 咯 curl 有自己的 agent
不过这玩意可以伪造,py request 改掉 header 可以绕过
ShineyWang
195 天前
怎么发起请求是客户端行为,你服务器限制不了的
除非你自己给他一个客户端,然后用你自己的客户端发起请求
psyche08
195 天前
如果都是本机的程序的话,在建立连接后,根据来源的端口号查询对应的进程,这样就可以校验了。
shermie
195 天前
header 里面带个签名 如果是限制诸如 python 这样的爬虫 就上 ja3 ja4 指纹限制
sentinelK
195 天前
如果是“某个定制程序”的话,可以通过接口加密实现。

如果是一个不能干预的,或者是“某种程序”的话,就要服务器端根据其特征识别了。但是这个识别方式很不安全,非常容易被模仿。
baihekong
195 天前
定一个特殊的 UA ,执行某个程序的时候才带上
ttvast
195 天前
用 selinux 配合 iptables
billlee
195 天前
这个只能 selinux/apparmor 配合 netfilter 了吧
ho121
195 天前
感觉是 xy 问题。
如果是要防止未授权的访问,加个鉴权就行,比如 http 的用户名和密码、token 之类的。
DefoliationM
195 天前
根据来源地址和目标地址迭代/proc 目录拿到程序路径,然后根据程序路径限制就行了。
DefoliationM
195 天前
Elliota
195 天前
只能端口数据流校验
lance6716
195 天前
本“xy 问题“警察已经抵达现场!请问 op 为什么会有这么奇怪的需求呢
liberize
195 天前
1. 收到 tcp 连接时获取源端口
2. 然后查源端口对应的程序的 pid
3. 进一步根据 pid 获取程序文件名
4. 判断文件名是否在白名单
其中 2 和 3 在 windows 下有接口可以获取,linux 下可以读/proc 。
julyclyde
195 天前
systemd“判断某条日志属于哪个 service”是用 unix domain socket 啊还是 pipe 的“对方”反查进程号的

不过 tcp/ip 似乎比较困难吧
Nazz
195 天前
token 鉴权
piaoxueblog
195 天前
可以的。一种实现方式是使用指定用户运行这个程序,然后在 iptables 里加对应规则
yichya
195 天前
curl 可以访问
python requests 不能访问
那如果用 python 的 os.system() 执行 curl 并且取得返回值这种形式可不可以访问?
victorc
195 天前
限制不了,得引入第三方角色进行仲裁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/986086

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX