Строка hosts.deny слишком длинная или слишком большой файл?

У меня около 50 тыс. Ip-адресов, запрещенных в файле hosts.deny, сгенерированных скриптом с максимум 7 адресами в строке, и получаю эту ошибку:

warning: /etc/hosts.deny, line 4429: missing newline or line too long

Линия 4429 находится здесь посередине:

ALL: 96.47.225.95, 96.47.225.96, 96.47.225.97, 96.47.225.98, 96.47.225.99, 96.56.113.123, 96.8.112.149
ALL: 98.126.161.178, 98.15.206.118, 98.159.4.16, 98.197.212.67, 98.83.135.94, 98.94.6.213, 98.94.6.78
ALL: 99.167.89.146, 99.177.96.73, 99.235.84.25, 99.244.9.103, 99.49.94.70

в чем дело?

Обновить:

Предупреждение появляется только тогда, когда в момент установления соединения файл hosts.deny записывается одновременно. (ввод / вывод, блокировка, fopen для записи, fopen для проблемы чтения).

1 ответ

Решение

На мой взгляд, не имеет смысла иметь такой большой файл `/etc/hosts.deny'по нескольким причинам:

  1. активность ботнета может исходить от возможных допустимых IP-адресов источников, и обычно бесполезно блокировать IP-адрес, который может быть просто временным общедоступным IP-адресом взломанного домашнего компьютера с динамическим адресом.
  2. Есть лучшие инструменты для этой работы, такие как denyhosts, fail2ban, psadи т.д... это обеспечит некоторую защиту от злодеев, не попадая в ловушку, упомянутую в предыдущем абзаце.

Теперь, если вам действительно нужно сохранить такой файл, вы можете попробовать использовать файл, как описано в hosts_access(5) Manpage, под PATTERNS раздел:

СХЕМЫ

 The access control language implements the following patterns:

  ·      A  string  that  begins  with a `/´ character is treated as a file name. A host name or address is matched if it matches any host name or address pattern listed in the named file. The file format is zero or
          more lines with zero or more host name or address patterns separated by whitespace.  A file name pattern can be used anywhere a host name or address pattern can be used.

Я попробовал и сгенерировал список:

# echo 123.{1..255}.{1..255}.{1..254} > /etc/list

Добавил его в /etc/hosts.deny файл:

# echo 'ALL: /etc/list' >> /etc/hosts.deny

Перепробовал некоторые соединения и проверил мои логи. Я не смог воспроизвести упомянутое вами предупреждение.

Другие вопросы по тегам