我正在尝试在我的 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 循环 - 尽管引用变量$line
ie是个好习惯... from "$line" to any ...
)。
该ERROR: Bad source address
错误表明地址字符串本身存在问题,我们可以猜测这可能是由于 DOS 样式的CR-LF
行尾引起的 - 您可以通过打开chinaiprange.txt
文件来确认nano
解决方案是修复行尾,使用任何众所周知的方法,例如:
dos2unix
通过命令运行文件- 使用
tr
或sed
-例如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