Назад | Перейти на главную страницу

Строка 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 для проблемы чтения).

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

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

Теперь, если вам действительно нужно поддерживать такой файл, вы можете попробовать использовать файл, как описано в hosts_access(5) справочная страница под 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

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