我正在运行带有 FTP(S) 和多个用户的 LAMP 服务器。用户只能上传 PHP 文件和其他 Web 内容。有些运行 Drupal 和 Wordpress,但也有一些自制的东西。我已经禁用了 php 的所有 shell 访问尝试。但为了充分保护我自己、我的服务器和我的用户免受停机、脚本小子和其他令人讨厌的事情的影响,我想禁止射频干扰。实际上,我不想允许任何我不允许的流量(TCP 和 UDP)从我的服务器流出。对于此任务,我想创建一个透明代理,在发送之前检索所有包,并决定是否允许这些包。我想使用 Python 来完成决策任务,因为从本地数据库获取允许的 URL 很容易。就像我想允许某些 API/OAuth 来源一样。
如何配置 iptables 将所有数据(包括目标 ip 和端口)发送到我的 python 应用程序?或者有没有更好的方法来做到这一点?
我的想法是,如果我可以禁用 shell 访问和未经授权的网络流量,我晚上就可以睡觉了。这样就没有人可以将我的服务器用作僵尸网络中的机器人。而且他们不能发送垃圾邮件。你怎么认为?
我不想依赖 Suhosin,因为我使用的是 PHP 5.4 及更高版本。
答案1
就 iptables 而言:
## default policy for OUTPUT
iptables -P OUTPUT DROP
## allow related/established traffic, e.g. for incoming connections
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
## whitelist some APIs (here 10.0.0.1)
## or package repositories, or your DNS (here 8.8.8.8), ...
iptables -A OUTPUT -p udp --dport 53 -d 8.8.8.8 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -d 8.8.8.8 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -d 10.0.0.1 -j ACCEPT
## other TCP packages go to your script (probably not needed anyway)
iptables -t nat -A OUTPUT -p tcp -j DNAT --to-destination 127.0.0.1:8001
您还可以查看 apparmor 来过滤来自 PHP 的传出流量,而不是自己编写代理脚本。