Image

知识库 → 通过 iptables 限制和控制 Linux 中的传出流量

[虚拟服务器]
出版日期: 21.07.2025

限制和控制出站流量在许多情况下都很有用,例如:

  • 防止攻击 - 当服务器上的服务生成响应时
  • 数据保护 - 使从服务器提取信息变得更加困难
  • 防止闭源脚本在您不知情的情况下收集和传输信息

在我们的示例中,我们将创建一个虚拟机,并假设我们需要测试某个软件的 数据传输情况。因此,我们将阻止除一个 IP 地址之外的所有内容,我们将使用该 IP 地址进行软件测试。

1. 向 iptables 添加规则

# 清除当前规则(如果通过 SSH 连接,请小心)
iptables -F OUTPUT

# 允许回环(localhost)
iptables -A OUTPUT -o lo -j ACCEPT

# 允许 DNS 查询(如果需要,可选)
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

# 允许所有出站连接到 IP 111.222.111.222
iptables -A OUTPUT -d 111.222.111.222 -j ACCEPT

# 阻止所有其他出站连接
iptables -A OUTPUT -j REJECT

其中 111.222.111.222 是我们将用于测试、发送和接收数据的 IP 地址。

2. 检查规则,通过 SSH 从服务器本身进行验证

2.1 检查 ping

ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 79.174.xx.xxx icmp_seq=1 Destination Port Unreachable
ping: sendmsg: 操作不允许
From 79.174.xx.xxx icmp_seq=2 Destination Port Unreachable
ping: sendmsg: 操作不允许
From 79.174.xx.xxx icmp_seq=3 Destination Port Unreachable
ping: sendmsg: 操作不允许

2.2 检查 telnet

telnet google.com 443
Trying 209.85.233.101...
Connection failed: 连接被拒绝
Trying 209.85.233.113...
Connection failed: 连接被拒绝
Trying 209.85.233.139...
Connection failed: 连接被拒绝
Trying 209.85.233.100...

正如我们所见,规则正在生效,当脚本或服务尝试连接时,数据不会传输到互联网。

3. 监控流量和连接尝试

3.1 此示例将每秒更新 PHP 的连接数据

watch -n 1 'lsof -i -nP | grep php'

php-fpm8.  445 www-data   11u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm8.  448 www-data   12u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000  (LISTEN)
php-fpm8.  449 www-data   14u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm8.  453 www-data   16u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000 (LISTEN)

如果有尝试连接到外部节点的尝试,连接将是可见的,包括端口和 IP 地址。

在监控 PHP 脚本时,还有一些额外的模块,例如 xdebug。不要在生产环境中启用它,仅用于调试。

通过这种方式,您可以在虚拟服务器上为所需脚本快速创建一个沙箱,并监控网络活动,而不会冒数据暴露的风险。





No Comments Yet