使用 iptables 阻止特定应用程序

Seb*_*ian 6 iptables

我必须强化 Linux 桌面作为我大学的一项任务。但是我遇到了一个特定的问题:我必须使用 iptables 控制传出流量。

应该可以阻止特定应用程序(如 LibreOffice)访问互联网。我的教授说“寻找‘匹配’选项”。但我不知道该怎么做。我想设置一个规则,用该-m owner --owner-gid选项丢弃特定组 ID 的所有数据包。但是如何配置我的应用程序以在该特定组下运行?或者这只是错误的做法?

操作系统是 Debian 7。

slm*_*slm 5

所有者模块

看看这个标题为:Iptables Tutorial 1.2.2 的URL 。此页面列出了一些可以使用有关进程的所有者信息执行的匹配技术。

所有者匹配扩展用于根据创建它们的进程的身份匹配数据包。所有者可以指定为发出相关命令的用户、组、进程、会话或命令本身的进程 ID。此扩展最初是作为 iptables 可用于什么的示例编写的。所有者匹配仅在 OUTPUT 链中有效,原因很明显:几乎不可能找到有关从另一端发送数据包的实例的身份或到达真实目的地的中间跃点的任何信息. 即使在 OUTPUT 链中,它也不是很可靠,因为某些数据包可能没有所有者。这种臭名昭著的数据包是(除其他外)不同的 ICMP 响应。ICMP 响应永远不会匹配。

  1. 匹配 --uid-owner

    $ iptables -A OUTPUT -m owner --uid-owner 500
    
    Run Code Online (Sandbox Code Playgroud)
  2. 匹配 --gid-owner

    $ iptables -A OUTPUT -m owner --gid-owner 0
    
    Run Code Online (Sandbox Code Playgroud)

警告

我参考的文档已经过时了,但实际上仍然在 netfilter.org 官方网站上引用:http : //www.netfilter.org/documentation/

咨询内置文档

因此,我将借此机会教你另一项技能,当你继续使用 Linux/Unix 和开源软件时,它会带你走得更远。查阅用法和/或手册页,因为它们可能是您在处理各种工具时会找到的最新信息。

例子

我们正在处理的模块iptables称为所有者。所以我们可以像这样查询一个广泛的使用指南:

$ iptables -m owner --help
Run Code Online (Sandbox Code Playgroud)

这样做将显示这些是受支持的所有者匹配选项:

owner match options:
[!] --uid-owner userid[-userid]      Match local UID
[!] --gid-owner groupid[-groupid]    Match local GID
[!] --socket-exists                  Match if socket exists
Run Code Online (Sandbox Code Playgroud)

注意:您可以检查您拥有的版本:

$ iptables --version
iptables v1.4.18
Run Code Online (Sandbox Code Playgroud)

我鼓励您通读本使用指南,以进一步了解如何使用该工具并了解如何使用该工具。