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

Как обновить запись на основе имени ipset

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

Чтобы сохранить стабильную конфигурацию, я собираюсь использовать ipset. (РЕДАКТИРОВАТЬ: для примера ниже предположим, что www.google.com имеет только один IP в определенный момент, но он может измениться)

root@srv ~# ipset create google hash:ip
root@srv ~# ipset add google www.google.com
root@srv ~# ipset list google
Name: google
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 136
References: 0
Number of entries: 1
Members:
216.58.206.228

Могу добавлять / удалять IP-адреса для набора. Это не решает проблему обновления IP..

Чтобы взять пример выше, я хотел бы иметь возможность повторно добавить www.google.com и (если его IP изменился) иметь 216.58.206.228 удален и заменен новым IP.

Это не вариант:

root@srv ~# ipset add google www.google.com
root@srv ~# ipset list google
Name: google
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 184
References: 0
Number of entries: 2
Members:
216.58.206.228
216.58.204.132

Есть ли механизм, который позволяет обновлять IP-адрес в наборе, чтобы он соответствовал текущему разрешению имени?

РЕДАКТИРОВАТЬ: чтобы прояснить следующие некоторые ответы: я не хочу решать проблему имени, у которого есть несколько адресов, и покрывать их все (скажем, убедившись, что у меня есть все разрешения для www.google.com). У меня есть сайт с одним единственным IP-адресом, но он может измениться.

Это не кажется лучшим способом заблокировать веб-сайт с большим количеством IP-адресов.

Тем не менее, это будет работать, даже если у вас есть несколько IP-адресов в списке ipset:

Вместо того, чтобы переписывать тот же список ipset, создайте новый список, а затем ipset swap их.

ipset create temp hash:ip

for address in $(dig a www.google.com +short); do
    ipset add temp $address
done

ipset swap temp google
ipset destroy temp

Ваша проблема двоякая:

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

  • Многие пункты назначения больше не используют один фиксированный IP-адрес (диапазон), но используют такие вещи, как CDN, циклический перебор и GEO DNS, anycast и т. Д., И последующие подключения к одному и тому же DNS-имени пункта назначения будут идти на разные IP-адреса в ( почти) непредсказуемая картина.

Большинство организаций решают эту проблему, просто полностью блокируя прямой доступ в Интернет и требуя использования прокси-сервера. На прокси-сервере вы можете легко обеспечить контроль доступа на основе URL-адресов и разрешить доступ к www.google.co.uk и заблокировать доступ к www.google.de, несмотря на то, что они могут (время от времени) разрешаться на один и тот же IP-адрес и несмотря на то, что ip-адрес у них может меняться в случайные моменты.

В качестве альтернативы организации блокируют DNS, разрешают использование DNS-сервера, который они предоставляют, и запускают белый / черный список имен хостов на уровне DNS. Это будет для большинства пользователей эффективным средством контроля доступа, хотя опытным оператором его легко обойти.