我想禁止请求某些页面的 IP,例如向 发送请求example.com/weird.php
的 IP 。POST
example.com/weirder.php
我搜索了很多,了解了一些iptables
,但似乎有些是针对 CentOS 的说明。我也担心被锁定。所以我在寻找一些详细且安全的答案。
我使用 AWS EC2、Ubuntu 和 nginx。
答案1
首先在您有物理访问权的机器上尝试此操作。
IP 表
首先,让我们弄清楚阻止 IP 地址的 IP 表规则。有关详细说明,查看本指南让我们删除来自特定 IP 的所有传入连接:
iptables -A INPUT -s A.B.C.D -j DROP
此后,照常重新启动 iptables。尝试此命令以检查它是否正常工作,熟悉语法,然后继续下一步。
Bash 脚本
让我们创建一个 Bash 脚本来阻止 IP。它看起来像这样(警告:您可能需要使用用户权限和 sudo 才能使其工作)。创建一个新文件,例如 blockip.sh。
#! /usr/bin/env bash
iptables -A INPUT -s $1 -d DROP
<other stuff you want to do when you block an IP>
<note: the IP address is in variable $1>
运行chmod +x blockip.sh
以使脚本可执行。现在您可以将其作为 运行/path/to/file/blockip.sh 1.2.3.4
。
Sudo 权限
如果你的脚本需要有 root 用户权限,你需要配置 sudo 来提供无密码访问。参考这个 Stack Overflow 问题,运行sudo visudo
并添加以下行:
nobody ALL = NOPASSWD: /your/script
保存文件并退出。作为安全警告,请确保只有您可以修改脚本文件,否则,有人可能会通过修改脚本以 root 用户身份运行有害代码。
PHP 代码
当您想要屏蔽某人时,请运行这段代码。
exec("sudo /path/to/file/blockip.sh ".$_SERVER['REMOTE_ADDR']);
结论
首先,在一台您可以物理访问的机器上测试此代码。另外,请注意 LAN 后面的多个用户将共享相同的外部 IP,阻止其中一个用户将导致阻止所有用户。请小心。如果答案对您有帮助,请点赞。