使用 iptables 阻止传出连接

使用 iptables 阻止传出连接

我有一台(非生产)机器,外部支持者具有 shell 访问权限(非 root)。我想阻止他们使用 iptables 从该机器进一步进入我们的网络。

“普通”防火墙 GUI 仅阻止传入流量。如何设置“接受所有传入流量(加上响应),但仅允许特定目标的新传出流量(例如监控服务器的 snmp-traps)”之类的规则?

操作系统是 CentOS 5

答案1

假设您只想接受传入 TCP 流量,则可以使用这些规则将传出流量限制为已建立的 TCP 连接(必须从外部启动)和 LAN 外部的 IP 地址:

iptables -A INPUT -p tcp -i lo -j ACCEPT
iptables -A INPUT -p tcp -p 22 -j ACCEPT   # repeat for other ports you want to allow
iptables -P INPUT -j DENY
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p tcp \! -d 10.0.0.0/8 -j ACCEPT  # replace by your LAN's network(s)
iptables -A OUTPUT -p tcp \! --syn -j ACCEPT
iptables -P OUTPUT -j DENY

根据您的要求,您可能更愿意将一些规则专门应用于支持者执行的流程。假设他们在supporters群组中,以下规则将拒绝支持者(并且仅限支持者)您 LAN 内的所有连接(传入或传出):

iptables -I INPUT \! -i lo -s 10.0.0.0/8 -m owner --gid-owner supporters -j DENY
iptables -I OUTPUT \! -o lo -d 10.0.0.0/8 -m owner --gid-owner supporters -j DENY

注意gid-owner测试进程的FSGID,这几乎总是有效GID。除非运行一个进程设置gid或将其有效 GID 切换为补充组,用户的主要组(记录在用户数据库中,例如/etc/passwd)适用。

答案2

有两种方法可以丢弃除您明确定义为“接受”的所有传出流量。第一个是设置 OUTPUT 链丢弃的默认策略。

iptables -P OUTPUT DROP

此方法的缺点是,当刷新链(删除所有规则)时,所有出站流量都将被丢弃。另一种方法是在结尾的链条。

iptables -A OUTPUT -j DROP

在不确切知道您需要什么的情况下,我无法提供关于接受什么的建议。我个人使用的方法是在链的末尾放置一个默认的 DROP 规则。您可能需要研究 GUI 如何设置规则,否则可能会与启动时恢复规则的传统 CLI 方式(例如 /etc/sysconfig/iptables)发生冲突。

答案3

考虑安装岸墙作为您的防火墙构建者。使用单个接口示例作为起点,并且不提供任何不必要的传出访问规则。允许所需的 ICMP 类型。

您可能需要至少提供传出 DNS(名称查找)和 NTP(时间同步)访问规则。

相关内容