Я пытаюсь заблокировать диапазон IP-адреса на моем сервере Ubuntu 16.04LTS из определенной страны, т.е. Китая, Ирана, и т.д.
Я надеялся найти сценарий или что-то, что я мог выполнить для легкого вхождения в динамично обновляющий список. Как в я просто вставил коды страны, и это автоматический заполняет текущий список от где-нибудь затем добавленного мой диапазон блока. Помощь обновлениям для списка адреса, когда они изменяются. Но запускаться с я использовал блоки 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
...
Если бы существует лучший способ сделать это, которое было бы большим, но сообщило бы мне, что я делаю, неправильно было бы столь же потрясающим.Заранее спасибо!
Перечитать 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
Я не думаю, что существует что-то не так с синтаксисом Вашей команды (любой из ufw
сама команда или цикл удара - хотя это была бы хорошая практика для заключения в кавычки $line
переменная т.е. ... 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
повторно сохранить