首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用域名(Linux)限制传出网络流量

使用域名(Linux)限制传出网络流量
EN

Server Fault用户
提问于 2015-01-25 02:22:07
回答 1查看 4.4K关注 0票数 2

我的根本目标是防止攻击者在我的服务器上进行未经授权的传出连接(例如,连接回壳)。

我可以通过使用"ufw“阻塞所有传出通信的端口来实现这一点,除了服务器需要操作的端口(即DNS、HTTP、SSH和SMTP)。

ufw允许我只允许发送DNS连接到静态IP地址(因此我将配置服务器使用Google DNS),并且允许我限制发送SSH的目的地为127.0.0.1 (我的自动部署脚本需要使用Git)。

正如我所了解的,ufw并不真正允许基于域名的传出限制,这是有意义的(从性能角度来看)。我需要这样做才能将传出SMTP连接限制在我的邮件服务器域(目前正在使用Gmail进行测试)和Ubuntu服务器的HTTP连接(用于系统更新)。

我知道iptables允许您根据域指定规则,但它们在启动时被翻译,而不是每次执行(即反向DNS)。我知道这是出于设计,因为性能方面的原因。

那么,通过域名限制传出网络流量的解决方案是什么(也就是说,每个传出连接都需要有它的目标IP地址,反向DNS并与域名白名单相匹配)?

我在想,如果我无法使基于域的一半传出限制有效,那么使用ufw通过IP限制DNS和SSH就没有多大意义了。

  • 编辑1*因此,我已经制定了如何使用iptables直接“转发”发送到特定端口(例如,80)到另一个端口。

然后我意识到,在接收到转发的通信量时,不可能知道最初的目的IP地址是什么。那时,我找到了https://github.com/mitmproxy/mitmproxy,并发现它(作为透明的Python )与iptables接口交互,以确定套接字的初始目标IP地址是什么。

我还没有让它全部发挥作用,但我确信这种方法应该会奏效的。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2015-01-26 06:14:20

这只能在一台机器上工作,因为它依赖于透明代理能够与iptables接口并获得传出通信量的原始目标IP。

还请注意,此方法有点麻烦,因为为了克服无限循环问题(重定向到代理->重定向到代理-> .),防火墙规则应用于操作系统用户组,这意味着组中的任何用户都不会通过代理转发其传出通信量。

步骤:

  1. 创建一个名为“代理”的新操作系统用户组
  2. 添加每个操作系统用户(除了root!)给这个新的团体
  3. 获取代理组的id,并在以后记住它。
  4. 设置一个透明的代理服务器,它可以接受您想要代理的协议(S),并且可以与iptables进行接口。我使用了mitmproxy (这是基于Python的),并将其设置为作为根服务运行并侦听proxyPort。
  5. iptables添加一条规则,以便将所有发送到特定端口(例如http)的传出流量重定向到127.0.0.1: proxyPort,如:iptables -t nat -A OUTPUT -m owner --gid-owner proxyGID -p tcp --dport 80 -j DNAT --to 127.0.0.1:proxyPort,适当地替换proxyGID和proxyPort
  6. iptablesufw配置为允许传出流量到proxyPort,允许任何端口被代理(例如80),默认情况下不允许所有其他端口。
  7. 配置透明代理以删除任何您喜欢的请求。要回答这个问题,您可以将代理配置为在原始目标IP上执行反向DNS,并检查结果域是否位于预先配置的白名单中,否则流量将被删除。
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/662393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档