如何限制一个程序的传出连接?

如何限制一个程序的传出连接?

我想防止任何人上传的程序/脚本从我的计算机发送垃圾邮件。

唯一合法的用例是通过提交端口连接到 postfix,并在身份验证后提交电子邮件。然后Postfix将连接到其他邮件服务器并发送它。

我正在考虑使用 iptables 允许到 *:SMTP 端口的传出连接(如果尝试打开此连接的程序是 postfix),并放弃任何其他连接尝试。

我有两个问题:

1)如何在 iptables 中识别出尝试打开连接的是 postfix 程序?

2) 如何防止脚本调用 sendmail 并在不进行身份验证的情况下直接向其发送消息?也许这并不那么容易,因为也许有一些程序,比如 cron,尝试使用 sendmail 向 root@localhost 发送电子邮件。这应该仍然有效。

系统运行Debian稳定

答案1

(1) 识别Postfix最简单的方法可能是iptables--owner --uid-owner postfix匹配,来指定Postfix的用户。您还可以在其自己的网络命名空间或 cgroup 中运行 Postfix,类似于中的解决方案阻止进程的网络访问?(并且仅允许该命名空间或 cgroup 发起 SMTP 流量)。

(2) 脚本sendmail已经运行身份验证:它作为您系统上的用户运行。确实有很多东西使用这个接口。 Cron 就是其中之一,但一堆随机脚本也是如此——发送电子邮件的系统上几乎所有东西都使用它。即使已安装的 MUA(mutt 等)通常也会默认使用它。

您大概可以将其锁定为仅对某些用户开放,可以使用文件系统权限(使其只能对给定组或使用 ACL 的特定用户执行),也可以使用 Postfix 配置(尽管我个人使用 Exim,所以不确定如何操作)。

相关内容