Мне нужно обработать мой брандмауэр (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. Это будет для большинства пользователей эффективным средством контроля доступа, хотя опытным оператором его легко обойти.