Я прочитал здесь несколько ответов о блокировании диапазонов IP-адресов и уже использовал для этого iptables
цель раньше. Предлагается использовать ipset
в сочетании с iptables
.
Я установил только ipset , но еще не настроил его.
Я нашел этот сайт ip2location.com , чтобы создать список запрещенных IP-адресов по странам. Я выбрал 5 стран, которые регулярно нацелены на наши сайты, но список огромен, 256000 строк .
ipset
(прежде чем пытаться использовать только IPtables, я сомневался, что такой большой файл может снизить производительность). Например, есть несколько записей / 21:
185.179.152.0/22
Онлайн-инструмент показывает, что это разрешает: 185.179. 152 от 0,0 до 185,179. 155 .255
Я не думаю, что есть какой-либо простой способ уменьшить количество записей, поэтому любые советы по вопросам реализации и производительности, пожалуйста.
Обычно максимальная длина списка ipset составляет 65536 элементов, поэтому вам, возможно, придется использовать отдельный список для каждой страны, которую вы хотите заблокировать.
Используя набор hash:net, вы можете напрямую добавить записи CIDR, которые вы хотите запретить. Вы можете проверить https://www.ipdeny.com/ipblocks/ для блокировки на уровне страны
Что касается ваших вопросов
Наконец, есть много похожих вопросов об использовании iptables с ipset для блокировки определенных стран, поэтому я не буду вдаваться в подробности настройки iptables - просто проверьте https://askubuntu.com/questions/868334/block-china-with-iptables или подобное
Существует утилита командной строки с именем 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, что, вероятно, лучше всего здесь.)
Это было решено путем удаления ведущих звездочек из подстановочного символа домена в /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 для хеширования, который имеет определенную собственную временную стоимость.
До сих пор не было проведено эмпирических тестов синхронизации.