Роблячи iptables простішими в обслуговуванні


14

Моя мережа повністю заблокована, за винятком кількох сайтів, які містяться у списках. Все це робиться через iptables, який виглядає приблизно так:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 101.102.103.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 101.102.103.0/24 -j ACCEPT
...

Очевидно, ці адреси гіпотетичні, але ви розумієте. Мій брандмауер стає величезним. Було б набагато простіше в обслуговуванні, якби я міг просто так:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d google.com -j ACCEPT
iptables -A zone_lan_forward -p udp -d google.com -j ACCEPT

Я вважаю, що це можливо, оскільки man iptablesговорить:

Адреса може бути як мережевим іменем, ім'ям хоста (зауважте, що вказати будь-яке ім'я, яке слід вирішити за допомогою віддаленого запиту, наприклад, DNS - це дійсно погана ідея), мережеву IP-адресу (з / маскою) або звичайну IP-адресу.

Але мене турбує частина, в якій сказано: "Вказання будь-якого імені, яке слід вирішити за допомогою ... DNS - це дійсно погана ідея". Чому це погана ідея? Це просто сповільнює все?

Якщо я дійсно не повинен використовувати імена хостів у правилах iptables, то що мені робити для спрощення брандмауера?


Ви отримаєте кращу відповідь на security.stackexchange.com
Jim B

Можливо, ви маєте рацію, що це питання належить на цьому веб-сайті, але якщо у вас проблеми з прийнятою відповіддю, поясніть, чому.
Великий McLargeHuge

Якщо ви хочете дізнатися про блокування вашої мережі та як це зробити, запитайте про безпеку, якщо ви хочете використовувати iptables (на відміну від використання IPtables), то це саме місце.
Джим Б

Відповіді:


28
  • Імена DNS вирішуються, коли правила додаються, а не під час перевірки пакетів. Це порушує очікування більшості людей.
    • Правило не оновлюється для відображення змінених результатів DNS. Він вирішується, коли додається, і це все. Вам потрібно буде періодично перезавантажувати правила, інакше деякі веб-сайти можуть порушитися.
  • Проблема безпеки полягає в тому, що ви в основному делегуєте контроль над правилами брандмауера зовнішньому об'єкту.
    • Що робити, якщо ваш батьківський DNS-сервер порушений і повертає неправдиві дані.

Якщо ваша мета - блокувати доступ до HTTP, вам зазвичай набагато краще створити програмне забезпечення, призначене для фільтрації на цьому рівні (наприклад, кальмар + squidquard).


1) Я бачу, як це може бути проблемою - google.com може вирішити до 1.2.3.4 сьогодні, але завтра ця адреса недійсна. Чи просто перезапуск брандмауера подбає про це? 2) Чи залишається проблема безпеки, якщо сервер DNS добре відомий - наприклад, DNS або OpenDNS Google?
Big McLargeHuge

1
Я позначив це як відповідь, оскільки це пояснює, чому я не повинен використовувати імена хостів у правилах iptables, і дає мені курс дій для спрощення брандмауера.
Big McLargeHuge

Я хотів би додати свою підтримку для кальмарів. Я реалізував Squid для свого офісу, і після налаштування його дуже легко підтримувати для білих списків хостів (хоча я використовую його у чорний список). Схоже, у вас на руках монументальне починання; Я б навіть не знав, з чого, наприклад, почати білі списки Google. www.google.com вирішує 5 IP-адрес самостійно, що не означає нічого для ssl.gstatic.com, а також усіх інших хостів, які беруть участь у аутентифікації, G + тощо, які, ймовірно, вирішують кілька IP-адрес.
s.co.tt

Монументальний - це хороший спосіб його поставити. Але я просто використовував Google як приклад. Основний контур мого брандмауера має такий вигляд: якщо призначення пакету є дозволеним, прийміть його. В іншому випадку надішліть його через проксі-сервер.
Великий McLargeHuge

Існує також проблема систем, які використовують DNS для балансування навантаження. Ви можете не отримати однакових результатів, якщо шукати такий домен двічі поспіль, тож один пошук навіть не збирається подавати вам вичерпний список IP-адрес, до яких міг би вирішити цей домен.
cdhowie

10

Якщо ви використовуєте імена хостів у брандмауері, то ваш брандмауер тепер залежить від DNS. Це відкриває брандмауер для низки питань:

  • Пошук DNS при великих обсягах може спричинити затримку.
  • Зміни DNS не розповсюджуються миттєво. Таким чином, ваш брандмауер може використовувати кешовані IP-адреси.
  • DNS може бути підробленим, викраденим, зламаним.
  • DNS може вийти з ладу - це означає, що ваш брандмауер не працює.
  • Ваші правила брандмауера тепер контролюються третьою стороною.

Якщо ви використовуєте імена хостів і не керуєте DNS, то хтось інший ефективно керує вашими правилами IPtables. Помилки, помилки чи проблеми із безпекою на їхньому шляху стають для вас проблемами.

Єдиний раз, коли я бачив імена хостів, які добре використовуються, це внутрішні операції. Я працював в офісі, де IP-адреси та імена хостів призначалися через DHCP. Брандмауери використовували імена хостів для встановлення бар'єрів між різними групами. Оскільки це все контролювалося внутрішньо, він працював добре.


2
Це хороша відповідь, але в ньому відсутня частина, яка допомогла б мені спростити брандмауер.
Big McLargeHuge

3

Ви можете використовувати обгортку навколо iptables, наприклад, берегової стіни, щоб зробити ваші правила легшими для зберігання.


Це гарна ідея, але ви не сказали мені, чому я не повинен використовувати імена хостів у правилах iptables.
Big McLargeHuge

Я не знаю багато про Shorewall, але мені здається, що davidkennedy85 все одно повинен буде підтримувати списки кожного IP-адреси сервісу, який він хотів би дозволити в налаштуваннях Shorewall. Це може полегшити управління netfilter [та ін.], Але це не вирішить його основної проблеми, а це масивний список IP-адрес.
s.co.tt

2

Як уже говорили інші, ви не повинні використовувати дозволені імена DNS у правилах iptables. Вони неточні, контролюються сторонніми сторонами і, як правило, погані речі (tm). Я також додаю, що ваш DNS може вийти з ладу або бути недоступним під час запуску послуги iptables. У такому випадку правило взагалі не буде додано, і можуть виникнути цілі нові проблеми (наприклад, втрата ssh доступу після перезавантаження).

Що ви можете зробити:

  1. Використовуйте спеціальні ланцюги, щоб логічно розділити правила
  2. Використовуйте ipsets, щоб адреси були згруповані та відокремлені від правил
  3. Додайте коментарі до правил

Також ніхто не сказав нічого поганого про імена хостів, які не вирішені DNS (тобто вказані в hosts. Ви можете використовувати їх, якщо вам справді потрібно.


Так, ipsetвідповідь. Запуск сценарію з crontab для оновлення ipset.
mivk

2

Я особисто присвоюю ім’я хоста ip вручну в / etc / hosts, а потім використовую його в iptables.

Таким чином ви

  1. Не завантажуйте свої правила брандмауера на зовнішні об'єкти
  2. Мають легко ремонтувати iptables
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.