限制和控制出站流量在许多情况下都很有用,例如:
- 防止攻击 - 当服务器上的服务生成响应时
- 数据保护 - 使从服务器提取信息变得更加困难
- 防止闭源脚本在您不知情的情况下收集和传输信息
在我们的示例中,我们将创建一个虚拟机,并假设我们需要测试某个软件的 数据传输情况。因此,我们将阻止除一个 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