如何使用 UFW 阻止一系列 IP 地址

如何使用 UFW 阻止一系列 IP 地址

我正在尝试在我的 Ubuntu 16.04LTS 服务器上阻止来自特定国家/地区(例如中国、伊朗等)的一系列 IP 地址。

我希望找到一个脚本或其他可以运行的东西来轻松制作动态更新列表。就像我只需输入国家代码,它就会自动从某个地方填充当前列表,然后附加我的块范围。这样就可以在地址列表发生变化时轻松更新它们。但一开始我使用了国家/地区 IP 拦截 查找中国的地址列表,并将其保存到名为“chinaiprange.txt”的文本文件中

经过一番搜索,我找到了以下命令来一次性输入所有内容例子

while read line; do sudo ufw insert 1 deny from $line to any; done < chinaiprange.txt

但是当我运行它时我收到以下输出:ERROR: Bad source address

地址保存的格式如下:

1.0.1.0/24 
1.0.2.0/23
1.0.8.0/21
...

如果有更好的方法可以做到这一点,那就太好了,但让我知道我做错了什么也同样很棒。提前谢谢!

答案1

我认为你的命令的语法没有任何问题(无论是命令ufw本身还是 bash 循环 - 尽管引用变量$lineie是个好习惯... from "$line" to any ...)。

ERROR: Bad source address错误表明地址字符串本身存在问题,我们可以猜测这可能是由于 DOS 样式的CR-LF行尾引起的 - 您可以通过打开chinaiprange.txt文件来确认nano

解决方案是修复行尾,使用任何众所周知的方法,例如:

  • dos2unix通过命令运行文件
  • 使用trsed-例如sed -i 's/\r$//' chinaiprange.txt
  • 打开文件vi并执行,:set ff=unix然后:wq重新保存

答案2

重新阅读man ufw。有两个类似的ufw调用让您感到困惑:

   ufw [--dry-run] [delete] [insert NUM] allow|deny|reject|limit [in|out] [log|log-all] PORT[/PROTOCOL]

   ufw [--dry-run] [rule] [delete] [insert NUM] allow|deny|reject|limit [in|out [on INTERFACE]] [log|log-all] [proto PROTOCOL] [from ADDRESS [port PORT]] [to ADDRESS [port PORT]]

你可能想要

sudo ufw insert 1 deny on eth0 from $line 

相关内容