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

2023-10-27 17:20:03 +08:00
 dzdh

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

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

python 用 requests 就不行

4977 次点击
所在节点    Linux
41 条回复
dode
2023-10-27 23:55:37 +08:00
@psyche08 +1

使用 curl 的独特特性指定一个固定源端口?
curl http://example.com -p 12345

把两个程序跑在一个 Linux 网络命名空间里?
jackOff
2023-10-28 00:33:34 +08:00
这个听起来可以从另一个角度实现,因为所有的 http 请求都需要先进行 dns 查询,那么最简单方法就是劫持本地 dns 请求,解析请求的域名,放行某个程序的所有域名。具体做法是搭建一个 socket 服务器监听本地 53 端口,使用 dnslib 对 dns 查询进行解析获取请求的域名,根据白名单放行,放行就是指创建一个简单的 socket 对象(不需要绑定绑定端口),只要指定连接公共 dns 服务器就可以(223.5.5.5:53)。我说的这些实际上就是 dns 分流器或者是 adguard 这些广告拦截器的前置和最终处理,中间的逻辑不同所以其职能不同,希望能有助于你解决问题
gamexg
2023-10-28 02:12:24 +08:00
既然是同一计算机,那么执行 netstats 检查来源端口是否是预期的程序完事.
t133
2023-10-28 05:58:27 +08:00
同计算机为什么不用管道
yankebupt
2023-10-28 07:07:25 +08:00
首先限定监听的是 127.0.0.1 的 8000 而不是 0.0.0.0 的,然后对本机的 127.0.0.1 访问进行 app 限制……
但因为是限制程序所以肯定不是防火墙了……
但其实 python 也可以 shell /usr/bin/curl 的,光限制 requests 没用,还要加额外限制……
很麻烦,不如加 Authencation (自制签名加密)或用管道(如楼上)
kuaner
2023-10-28 09:09:26 +08:00
两个程序丢在一个容器里面
lisxour
2023-10-28 09:11:03 +08:00
请把你原本遇到的问题发出来,而不是经自己想法加工过后的问题,你问的这个问题在现实中我就没想到能有啥场景对应,你是不是只想自己的程序能访问服务,其他程序不行?
xuelang
2023-10-28 09:20:06 +08:00
-H "Authorization: Bearer $OPENAI_API_KEY" ?

这种就是权限管理呀,只有带 key 的应该才给访问
Jamy
2023-10-28 10:20:28 +08:00
如果你是 root 权限运行的,可以使用 netstat,
```
netstat -antp | grep ${port} | grep ${remoteport}
```
返回结果带有 pid 和进程名的, 可以根据 pid 去/proc/$pid/目录查询更详细的信息.
fox0001
2023-10-28 10:23:26 +08:00
只能加认证,限制客户端
listenerri
2023-10-28 11:30:11 +08:00
用 docker 把应用和服务放到一个容器里
flyqie
2023-10-28 12:36:43 +08:00
感觉其实应该从 server 鉴权这边入手,而不是限制客户端。
miyuki
2023-10-28 12:49:55 +08:00
本机的话 selinux 可以
lesismal
2023-10-28 15:40:44 +08:00
服务器里查出允许的进程的 pid ,然后请求进来后用 netstat -tunp 查 remote addr 的端口是不是那个进程的 pid ,不是就不允许

但如果是自己的服务器,自己人不能限制好自家的服务吗?是怕被外人入侵?
adoal
2023-10-28 17:43:00 +08:00
所以呢不要看各种所谓新手教程后连说的是啥都不知道就手把手照做“安装完 RHEL 及其克隆发行版后第一件事是关 SELinux”……
realpg
2023-10-29 01:41:18 +08:00
既然是 127.0.0.1 ,无脑 selinux 就行了
realpg
2023-10-29 01:42:24 +08:00
@adoal #35
centos 以及 centos 衍生类的发行版服务器被入侵率超越所有其他发行版加起来的 300 倍以上,不是没有原因的
dzdh
2023-10-29 03:38:42 +08:00
@realpg #37 求帖子
realpg
2023-10-29 11:23:40 +08:00
@dzdh #38
你不用求帖子
你可以就在 V2 上找小白搞了个云服务器被入侵的帖子
100%是 centos 系的
因为 redis mysql mongodb 的默认版本库内的版本都是无密码且监听 0.0.0.0 的

安装 redis 在知名 vps ip 段,如果顶层没有这类病毒拦截,几乎是 90 秒内就会被植入恶意程序
yestodayHadRain
2023-10-29 16:34:11 +08:00
@realpg redis 那种之所以被入侵是因为没设置密码并且开了外网端口,但是正常讲这种基本都是内网访问吧,只要不把端口暴露在公网就 ok 了

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

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

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

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

© 2021 V2EX