Некоторые ругаются на то, что пустые хостлисты равнозначны их отсутствию.
Какой у этого юз кейз ?
Конечно, в процессе разработки были и неоднозначные решения, которые вроде хотелось бы и переделать, но это сломает уже устоявшуюся схему и конфиги.
Конкретно по этому случаю. Хостлисты - автоматически перечитываемые по изменению файлы.
Скрипты запуска предполагают наличие /opt/zapret/ipset/{zapret-hosts-user.txt,zapret-hosts-user-exclude.txt}.
Как сделать так, чтобы можно было не удаляя файлы переключаться между режимами черного и белого списков ? Сейчас этот вопрос решается именно этой “багофичей”. Если вам нужны только исключения, вы оставляете zapret-hosts-user.txt пустым, что равнозначно его НЕуказанию в командной строке nfqws/tpws. Но если вы не перезапуская инстанс туда что-то внесете или оттуда вынесити , изменения подхватятся автоматом, режим белого/черного списка переключится при переключении между состояниями “zapret-hosts-user.txt пуст” и “zapret-hosts-user.txt не пуст”. Если файл удалять, то кто потом знает какое имя правильное и где он должен быть ? Или придется городить еще настройки в конфиге типа учитывать один файл, не учитывать другой. Изменение потребует перезапуска инстанса.
Другой момент состоит в том, что nfqws/tpws при запуске требуют наличие всех указанных листов. Они не умеют подразумевать и ожидать появление файла, если вдруг его захотят создать. Скрипты добавляют в командную строку только листы, файлы которых есть. Если потом файл добавят, то nfqws/tpws о нем ничего не знают. Потребуется перезапуск инстанса. Если файл удалят в процессе, то список в памяти останется, он не очистится автоматом. nfqws/tpws будут пытаться проверять наличие файла, и при его появлении вновь его перечитают.
Если даже сделать функцию ожидания файла, то это чревато разными очепятками. Параметр принимается, в имени файла пропущена буква, создают файл, ничего не работает. Сейчас же идет сразу отлуп. Как по критерию наличия файла, так и по правам доступа. Считаю, что сразу тыкать носом в ошибки - это лучшая стратегия, чем куча криво настроенных чайниками инстансов, которые волшебно-шамански работают, но по сути полны ерунды. Такая ерунда случалась, когда не было проверки на права доступа под сброшенными привилегиями сразу. У людей работало, но при попытке перечитать реально были ошибки, функция перечитки не работала. При апгрейде, когда была сделана проверка на права, у них “просто перестал работать zapret”. Догадались почему ? Это тычок носом, который они не поняли, в проблему, которая была и раньше, но теперь прога отказалась работать с этой проблемой.
Напоминаю, что zapret состоит из ядра - демонов nfqws и tpws, и они НИЧЕГО не знают о файле config. Они работают только с командной строкой. Скрипты запуска суть обертка, чтобы выставить нужные ip/nf tables и поднять nfqws/tpws с нужными параметрами.
Сделано так, как сделано. Если вы знаете этот момент и делаете для себя, вам не составит труда при опустошении списка добавить туда бредостроку, чтобы он оставался не пустым. Сборщикам тоже по умолчанию стоит это делать. Добавьте “строку_не_удалять” в файл, если он изначально ожидается пустым, но требует функционала включающего списка.
Теперь отвечу почему в автохостлисте “сделана затычка”, которая автоматически делает его непустым.
Да потому что профиль с авто хост листом приоритетный, он выбирается вне зависимости от включения текущего домена в хост лист. Автолист работает как по уже включенным доменам, так и по невключенным. Для первых производится дурение, для вторых - тестирование на предмет ситуаций, похожих на блокировку. Если же домен в exclude листе того же профиля, то не делается ничего, и поиск профиля дальше не продолжается. Автолист профиль - это всегда “приехали” для всего, что подпадет под другие фильтры, не связанные с хостлистами.
Изначально автохостлист пуст, и это не означает отсутствие автохостлиста.