Iptables: "-p udp - держава встановлена"


18

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

iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53 
   -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -p udp --sport 53 --dport 1024:65535
   -m state --state ESTABLISHED -j ACCEPT

Моє запитання: як саме я повинен розуміти встановлений стан в UDP? UDP є без громадянства.

Ось моя інтуїція - я хотів би знати, чи це неправильно:

Сторінка людини повідомляє мені це:

держава

Цей модуль у поєднанні з відстеженням з'єднання дозволяє отримати доступ до
стан відстеження з'єднання для цього пакету.

  - держава ...

Отже, iptables в основному запам'ятовує номер порту, який використовувався для вихідного пакету (що ще він міг запам'ятати для пакету UDP?) , А потім дозволяє перший вхідний пакет, який надсилається назад за короткий проміжок часу? Зловмиснику доведеться відгадати номер порту (чи справді це буде занадто важко?)

Про уникнення конфліктів:

Ядро відслідковує, які порти заблоковані (або іншими службами, або попередніми вихідними пакетами UDP), щоб ці порти не використовувались для нових вихідних пакетів DNS в межах часу? (Що буде, якби я випадково спробував запустити послугу на цьому порту в межах строку - чи спроба буде відхилена / заблокована?)

Будь ласка, знайдіть усі помилки у вищенаведеному тексті :-) Дякую,

Кріс

Відповіді:


12

Отже, iptables в основному запам'ятовує номер порту, який використовувався для вихідного пакету (що ще він міг запам'ятати для пакету UDP?),

Я майже впевнений, що для UDP джерела та порти призначення та адреси зберігаються.

Якщо ви хочете перевірити таблиці стану, встановіть conntrack та / або netstat-nat.

(Що буде, якби я випадково спробував запустити послугу на цьому порту в межах строку - чи спроба буде відхилена / заблокована?)

Оскільки ви використовуєте OUTPUT та INPUT, ви говорите про місцеві послуги. Порт вже використовується, я не вірю, що ваша система дозволить вам запустити іншу службу, оскільки щось вже слухається на цьому порту. Я думаю, ви могли б зупинити першу службу та почати іншу, якщо ви цього хотіли, але в такому випадку відповідь, ймовірно, потрапить до вашої служби. Те, що послуга робить з пакетом, залежить від вмісту пакету та якої саме служби.


Отже, якщо я почав говорити про екземпляр Tomcat на порту 8080, у мене буде шанс 1: (65535-1023), що запуск не вдасться, якщо випадково запит DNS працює на тому ж порту? Або буде просто чекати, поки не закінчиться термін? Скільки часу за замовчуванням є часовий інтервал?
Кріс Лерчер

6
В Linux я вважаю, що діапазон ефемерних портів зазвичай 32768-61000 (див. / Proc / sys / net / ipv4 / ip_local_port_range), це не включатиме ваш приклад-порт 8080. Це, як правило, дуже рідко для служб налаштування для прослуховування портів в межах ефемерних. Час запису UDP у таблиці, як правило, становить 30 секунд (див. / Proc / sys / net / netfilter / nf_conntrack_udp_timeout)
Zoredache

2
+1 Дякуємо, особливо за / proc шляху!
Кріс Лерчер

1
Якщо ви хочете продовжити udp_timeout, використовуйтеecho "net.netfilter.nf_conntrack_udp_timeout = 180" >> /etc/sysctl.conf
Кіран

8

NB: Ця відповідь була відредагована.

Незважаючи на те, що кажуть сторінки чоловіка, воно, ESTABLISHEDмабуть, означає "репутацію". Для UDP це просто означає (як ви пропонуєте) запам'ятовування кожного вихідного пакету UDP (кортеж "src ip, src port dst ip, dst port" на деякий час та визнання його відповідей).

FWIW, мої звичайні правила для DNS-трафіку були б приблизно подібними:

# permit any outbound DNS request (NB: TCP required too)
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53  -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 53  -j ACCEPT

# accept any packet that's a response to anything we sent
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

тобто контролювати трафік по OUTPUTланцюгу, а потім дозволити iptablesдержавним модулям обробляти все інше в INPUTланцюзі.

Дивіться також це пов'язане питання .


1
Я знаю, що я повинен дозволити і TCP. Але що буде ЗВ'ЯЗАНО означати для UDP? Manpage: "ЗВ'ЯЗАНО означає, що пакет починає нове з'єднання, але пов'язаний з існуючим з'єднанням, ..." З'єднання для UDP? Можливо, це справді має більше сенсу, ніж ВИСТАВЛЕНО, але це те, що я хотів би дізнатися.
Кріс Лерчер

Коли я використовую ваші правила, але обмежую udp INPUT на ЗВ'ЯЗАНІ, мої запити DNS не працюють. Здається, що я повинен дозволити ВІДКЛЮЧЕНО. Чи є якась причина, щоб дозволити ВІДПОВІДНО (для UDP)?
Кріс Лерчер

гаразд, здається, що СТВОРЕНО означає більше, ніж говорить сторінка man. У будь-якому випадку, якщо ви використовуєте фільтри OUTPUT, такі як мій, і не приймаєте незрозумілий трафік, то правило INPUT є єдиним, яке вам коли-небудь знадобиться.
Альнітак

1
З огляду на те, що ми знайшли, пов'язаних пакетів udp не існує AFAIK. Однак (наприклад), якщо ви коли-небудь виходите з FTP з цього поля, вам потрібно ПОВ'ЯЗАНЕ правило стану каналу даних. Єдине правило "Встановлено, пов'язане" є AFAIK найоптимальнішим єдиним правилом для вхідного трафіку.
Альнітак

1
насправді для RTP можуть існувати RELATEDпакети UDP .
Альнітак

1

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

розширення штату є частиною контракції. Ядро розуміє стан з таблиці

/proc/net/nf_conntrack

Приклад iptable станів для UDP в таблиці nf_conntrack з точки зору відправника. Давайте уявимо, що ви надсилаєте запит DNS на UDP

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
 [UNREPLIED] src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

Пакет надіслано. Це не відповідає і о, у таблиці є дані про те, що очікується у відповідь (пакет для відповіді DNS).

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
  src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

Відповідь надійшла, невідповіданий прапор відсутній, це означає, що це з'єднання UDP знаходиться у ВІДКЛЮЧЕНОму стані протягом невеликої кількості часу, визначеного у вашій системі.

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