Чи краще встановити -j REJECT або -j DROP в iptables?


33

Приклад правил iptables для wiki archlinux:

# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sun Mar 17 14:21:12 2013

Кілька днів тому мій друг запитав мене, чому існує REJECTтри останні правила. Він сказав мені, що DROPзамість цього має бути , і він згадав щось про кращу безпеку у випадку DROP.

Отже, у мене є два питання:

  1. Що виконують три правила?

  2. Чи має значення якесь значення, коли я ставлю його DROPна місце REJECT --reject-with? Якщо так, яка різниця?


Відповіді:


33

Що виконують три правила?

Ці 3 правила здаються досить зрозумілими:

  1. Відхилити вхідні пакети UDP з повідомленням ICMP "порт недоступний"
  2. Відхилити вхідні пакети TCP з "скиданням tcp"
  3. Відхилити вхідні пакети (будь-якого іншого протоколу) з повідомленням ICMP "протокол недоступний"

Якщо ви шукаєте більш детальну інформацію (про пакети UDP / TCP, ICMP), вам потрібно розібратися в мережевих документах і, можливо, man iptablesтеж.

Чи є якась різниця, коли я поставив туди DROP на місце REJECT --reject-with? Якщо так, чи міг би хтось пояснити мені різницю, я дуже оціню це.

Це має значення. І всупереч поширеній думці, DROPне дає кращої безпеки, ніж REJECT. Це доставляє незручності законним користувачам і фактично не захищає від шкідливих. У цій публікації детально пояснюються міркування:

http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject

Загальна причина використання DROP, а не REJECT - уникати передачі інформації про те, які порти відкриті, однак відмова від пакетів дає стільки ж інформації, скільки відхилення.

Завдяки REJECT ви скануєте та класифікуєте результати на "з'єднання встановлено" та "з'єднання відхилено".

За допомогою DROP ви класифікуєте результати за "з'єднанням встановлено" та "з’єднанням вичерпано".

Найбільш тривіальний сканер використовуватиме виклик операційної системи "підключити" і чекатиме завершення однієї спроби підключення до запуску наступного. Цей тип сканерів значно сповільниться, скинувши пакети. Однак якщо атака встановлює час очікування в 5 секунд на спробу з'єднання, можна сканувати кожен зарезервований порт (1..1023) на машині всього за 1,5 години. Сканування завжди автоматизовано, і зловмисник не хвилює, що результат не буде негайним.

Більш складний сканер буде надсилати пакети сам, а не покладатися на реалізацію TCP операційної системи. Такі сканери швидко, ефективно та байдуже до вибору REJECT або DROP.

ВИСНОВОК

DROP не пропонує ефективного бар'єру для ворожих сил, але може різко уповільнити програми, запущені законними користувачами. DROP зазвичай не слід застосовувати.


@janos - ви могли б написати трохи більше про те, що насправді відбувається, коли пакет досягає кожного з трьох правил?
Михайло Морфіков

3
@Kiwy - Прочитайте посилання та спробуйте самі. DROP не забезпечує кращої безпеки, ніж REJECT. Це доставляє незручності законним користувачам і фактично не захищає від шкідливих. Це пояснюється тим, що законні користувачі страждають від повільного з’єднання під час очікування вимкнення з'єднання, а сухарики просто налаштовують свої інструменти, щоб не чекати вичерпання часу. той факт, що з’єднання повільне (через очікування часу очікування), показує, що ваш сервер є там і закривається.
Пантера

2
Я не йду з цим висновком. Відхилити генерує відповідь ICMP, яку можна проаналізувати. На основі цього аналізу хороші двигуни атаки можуть отримати ОС, яка використовується. Тож у системі, де всі порти відомі, крапля може бути кращою. Це стосується серверів у виробничому середовищі.
Нілс

1
Брандмауер, який лише пересилає певні порти, ще кращий. ЗАКРИТИ РЕЖЕКТ - це не те саме, що абсолютно жодна служба, що працює на першому місці. Багато сканерів портів позначають вашого хоста як потенційну ціль для майбутніх сканувань, сподіваючись знищити ваш брандмауер, якщо вони знайдуть REJECTS або DROPS там, оскільки їх можна виявити зовні. chiark.greenend.org.uk/~peterb/network/drop-vs-reject
Dagelf

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