Ipset с Iptables с большим списком диапазонов IP-адресов (CIDR)

Я прочитал здесь несколько ответов о блокировании диапазонов IP-адресов и уже использовал для этого iptables цель раньше. Предлагается использовать ipset в сочетании с iptables .

Я установил только ipset , но еще не настроил его.

Я нашел этот сайт ip2location.com , чтобы создать список запрещенных IP-адресов по странам. Я выбрал 5 стран, которые регулярно нацелены на наши сайты, но список огромен, 256000 строк .

  • Не замедлит ли этот огромный список мой сервер при использовании ipset (прежде чем пытаться использовать только IPtables, я сомневался, что такой большой файл может снизить производительность).
  • Если это так, как это сделать? На данный момент я использую fail2ban, но не думаю, что конфигурация nginx настроена правильно (я предполагаю регулярное выражение). В любом случае мне нужен более надежный способ.
  • Наконец, я не утверждаю, что понимаю CIDR в достаточной степени, чтобы уменьшить этот список (если возможно, объедините похожие диапазоны IP-адресов).

Например, есть несколько записей / 21:

185.179.152.0/22

Онлайн-инструмент показывает, что это разрешает: 185.179. 152 от 0,0 до 185,179. 155 .255

Я не думаю, что есть какой-либо простой способ уменьшить количество записей, поэтому любые советы по вопросам реализации и производительности, пожалуйста.

0
задан 11 January 2021 в 16:48
3 ответа

Обычно максимальная длина списка ipset составляет 65536 элементов, поэтому вам, возможно, придется использовать отдельный список для каждой страны, которую вы хотите заблокировать.

Используя набор hash:net, вы можете напрямую добавить записи CIDR, которые вы хотите запретить. Вы можете проверить https://www.ipdeny.com/ipblocks/ для блокировки на уровне страны

Что касается ваших вопросов

  • ipset не должен сильно замедлить вашу систему - он будет использовать немного памяти для хранения наборов, но в остальном нагрузка не должна быть заметной
  • fail2ban стоит оставить, так как злоумышленники могут использовать облачные/vps сервера в любой стране

Наконец, есть много похожих вопросов об использовании iptables с ipset для блокировки определенных стран, поэтому я не буду вдаваться в подробности настройки iptables - просто проверьте https://askubuntu.com/questions/868334/block-china-with-iptables или подобное

1
ответ дан 24 April 2021 в 01:31

Существует утилита командной строки с именем aggregate . Он берет список сетевых блоков CIDR и объединяет последовательные блоки в соответствующий больший блок. Он также удаляет избыточные сетевые блоки.

Например:

$ aggregate -q << EOF
> 192.168.0.0/24
> 192.168.1.0/24
EOF
192.168.0.0/23

Подайте ему текстовый файл, содержащий только ваши блоки CIDR, и он попытается объединить их, уменьшая размер списка.

На странице руководства:

DESCRIPTION
       Takes  a list of prefixes in conventional format on stdin, and performs
       two optimisations to attempt to reduce the length of the prefix list.

       The first optimisation is to remove any supplied prefixes which are su‐
       perfluous because they are already included in another supplied prefix.
       For example, 203.97.2.0/24 would be removed if 203.97.0.0/17  was  also
       supplied.

       The  second  optimisation identifies adjacent prefixes that can be com‐
       bined under a single, shorter-length prefix. For example, 203.97.2.0/24
       and 203.97.3.0/24 can be combined into the single prefix 203.97.2.0/23.

aggregate упакован в большинство основных дистрибутивов Linux, включая Ubuntu.

(Обратите внимание, что я взял список с этого веб-сайта и попытался объединить их, но ничего не произошло, так что они, возможно, уже были объединены. Вы, безусловно, можете использовать более одного IPSet, что, вероятно, лучше всего здесь.)

1
ответ дан 24 April 2021 в 01:31

Это было решено путем удаления ведущих звездочек из подстановочного символа домена в /etc/opendkim/trusted.hosts . Наличие звездочек не только остановило работу подстановочного символа домена, но и остановило работу всех остальных строковых записей в файле, хотя IP-адреса не были затронуты.

IP-адреса работают, но не последовательности:

127.0.0.1
::1
localhost
mailserver                # mail server hostname
192.168.100.50            # test server
webserver.domain.local    # web server
.domain.local             # entire local domain
*.testdomain.local        # entire local test domain

IP-адреса и строки работают:

127.0.0.1
::1
localhost
mailserver                # mail server hostname
192.168.100.50            # test server
webserver.domain.local    # web server
.domain.local             # entire local domain
.testdomain.local         # entire local test domain
-121--477619-
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Wake on magic packet" -DisplayValue "Disabled"  

Чтобы увидеть текущие значения:

Get-NetAdapterAdvancedProperty -Name "*"  
-121--478488-

Не могли бы вы использовать xt _ geoip xtables addon вместо этого?

geoip vs ip xt_geoip использует (вероятно) наиболее эффективный формат, (несжатый) упакованный большой двоичный объект. Загрузка одной страны в ядро стоит столько же, сколько и файл на диске.

Поскольку ipset не поддерживает произвольные диапазоны IPaddr-IPaddr, необходимо приблизить их, используя, например, несколько записей Network/Prefixlength. Кроме того, если используется хеш набора тип, можно предположить, что по характеру хешей и/или деревьев некоторые ведра остаются пустыми и/или требуются дополнительные метаданные. Таким образом, объем памяти с геоип на основе ipset, естественно, больше. Отчеты пользователя 1 указывают на то, что в некоторых случаях он может стать на два порядка выше (iptreemap).

xt _ geoip время поиска равно O (log2 (диапазоны)), поэтому для поиска адреса в пределах 20000 диапазонов требуется не более 15 итераций каждая со сравнениями адресов (не более 3). ipset использует Jenkins3 для хеширования, который имеет определенную собственную временную стоимость.

До сих пор не было проведено эмпирических тестов синхронизации.

0
ответ дан 24 April 2021 в 01:31

Теги

Похожие вопросы