Чому б не заблокувати ICMP?


53

Я думаю, що у мене майже завершено налаштування iptables в моїй системі CentOS 5.3. Ось мій сценарій ...

# Establish a clean slate
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F # Flush all rules
iptables -X # Delete all chains

# Disable routing. Drop packets if they reach the end of the chain.
iptables -P FORWARD DROP

# Drop all packets with a bad state
iptables -A INPUT -m state --state INVALID -j DROP
# Accept any packets that have something to do with ones we've sent on outbound
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Accept any packets coming or going on localhost (this can be very important)
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp -j ACCEPT

# Allow ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow httpd
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Allow SSL
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Block all other traffic 
iptables -A INPUT -j DROP

Для контексту ця машина є хостом веб-програми Virtual Private Server.

У попередньому запитанні Лі Б сказав, що мені слід «трохи зафіксувати ICMP». Чому б просто не заблокувати його взагалі? Що було б, якби я це зробив (що б поганого сталося)?

Якщо мені потрібно не блокувати ICMP, як я можу продовжувати блокувати його більше?


4
iptables -A INPUT -j DROP <неправильно (думка), ви повинні встановити політику на iptables -P INPUT DROP, яка в основному така сама, як встановлення за замовчуванням. ДЕНІ ЗА ЗАВДАННЯМ.
ксенотеррацид

2
Дізнайтеся, чому це погана ідея блокувати icmp: security.stackexchange.com/a/22713/485
Rory Alsop

Відповіді:


117

ICMP - це спосіб, набагато більше, ніж "traceroute" та "ping". Він використовується для зворотного зв’язку, коли ви запускаєте сервер DNS (порт недоступний), який на сучасному сервері DNS може насправді допомогти вибрати іншу машину для швидшого запиту.

Як було сказано вище, ICMP також використовується для відкриття шляху МТУ. Швидше за все, ваші ОС встановлюють "DF" (не фрагмент) на TCP-пакети, які він надсилає. Він очікує повернення пакету ICMP "потрібна фрагментація", якщо щось по шляху не вдається обробити такий розмір пакету. Якщо ви заблокуєте всі ICMP, вашій машині доведеться використовувати інші механізми резервного копіювання, які в основному використовують тайм-аут, щоб виявити "чорну діру" PMTU і ніколи не буде правильно оптимізуватися.

Крім того, ви повинні запитати себе, чому ви хочете заблокувати ICMP. Що конкретно ви намагаєтесь запобігти тут? Цілком зрозуміло, що ви не розумієте, для чого використовується ICMP, що є досить поширеним явищем. Я був би надзвичайно обережним у блокуванні чогось, чого ви не повністю розумієте.

Щоб зробити це ще складніше дізнатися про це, багато поширених книг про брандмауер говорять про "блокувати ICMP" - зрозуміло, що їхні автори ніколи не читали RFC або не повинні були вирішувати питання, пов'язані з такими порадами. Погана порада заблокувати всі ICMP.

Тепер обмеження швидкості може також нашкодити. Якщо ваша машина зайнята, або навіть якщо її немає, ви можете отримати хороший обсяг ICMP-трафіку. Мій веб-сервер, ймовірно, отримує близько 10-100 пакетів ICMP в хвилину, більшість з яких - це відкриття PMTU. Навіть якщо хтось вирішив напасти на мій сервер з пакетами ICMP якогось типу, це справді не така вже й велика угода. Якщо ваша машина приймає навіть одне TCP-з'єднання (ssh, http, пошта тощо), швидше за все, це більший вектор атаки, ніж неправильно зрозумілий ICMP.


4
Не міг би сказати це краще. +1
Массімо

9
Існує один тип ICMP, який може бути шкідливим redirect. Це єдиний тип ICMP, який ви коли-небудь повинні розглянути про блокування.
Хуберт Каріо

2
@Hubert, було б дуже корисно, якщо ви можете посилатися на більше порад щодо блокування redirect. Зараз я розумію, що я повинен це розглянути, але я не кращий - все одно не можу вирішити так чи інакше :) Це ризик чи ні?
RomanSt

Повідомлення перенаправлення ICMP повідомляє хосту (маршрутизатори ніколи не повинні їх приймати), що така і така підмережа або хост доступні в іншому шлюзі (як правило, при більш швидкому маршрутизаторі). Принаймні, так говорить RFC1122.
Хуберт Каріо

2
Я вважаю, що перенаправлення за замовчуванням ігноруються в Linux. Але так, краще відфільтрувати.
Фокс

26

ICMP використовується для діагностичних функцій (наприклад, ping, traceroute) та управління мережею (наприклад, виявлення PMTU). Нерозбірливе блокування ICMP викликає у інших людей всіляку печію, і якщо ви точно не знаєте, чим займаєтесь, вам слід залишити це в спокої.


14

Я ніколи не розумів, чому люди дивляться на ICMP, як було сказано вище, це коли-небудь викликає головний біль у себе та інших. Ви можете визначити, чи хост працює досить легко і до тих пір, поки він досить обмежений, щоб не використовуватися як DOS, тоді я ніколи не чув жодних вагомих причин блокувати його. (Якщо хтось може придумати причину, будь ласка, опублікуйте)


5
Це частина культу інформаційної безпеки. Люди з безпеки вважають, що їм не потрібно нічого виправдовувати, оскільки просто смертні не можуть зрозуміти наслідки для безпеки. З іншого боку, головні болі в адміністраторах мережі та системи можна віднести до звичайної ліні. Зрештою, якби адміністратори знали, що відбувається, речі ніколи не зламаються ...
duffbeer703

мені просто дивно вбивати засоби діагностики по суті заради цього; тому що інформація, яка зацікавила б зловмисника, може бути отримана, якщо у вас є будь-яка інша служба, яка працює на машині. Ваше право; це здається дуже "культовим" у, не сумнівайтеся просто робити.
Антитрибу

6
Я ніколи не розумів, чому, схоже, автори книг про брандмауер повністю пропускають, що ICMP - це набагато більше, ніж "пінг" та "прослідкування", і все ж книги та блоги та HOW-TO говорять про "блокування ICMP".
Майкл Графф

1
рівнів і рівнів цього, ваша відповідь справедливо була проголосована, добре висловлена. Здебільшого я знаю, що коли він заблокований, ти ніколи не можеш точно сказати, що відбувається не так з переривчастими речами, особливо коли на шляху є кілька блоків ICMP.
Антитрибу

8

ви можете просто спробувати обмежити icmp таким чином, що його не можна використовувати як DOS-атаку. але є занадто багато інструментів усунення несправностей, таких як ping, mtr (я забуваю еквівалент Windows), traceroute (tracert), які використовують icmp. відкидати їх цілком просто нерозумно. Це хороший спосіб перевірити, чи працює ваш примірник, навіть якщо ви не можете телефонувати на жодні порти.

--limit 10/second
вашим правилам icmp - це, мабуть, гідний ліміт, враховуючи те, наскільки комп'ютер може реально працювати.


6

Ось альтернативна точка зору, в дусі того, що б запропонувала теорія безпеки. Інші плакати мають рацію, що практика безпеки часто є надмірною, але багато з них є хорошою основою.

Теорія безпеки, як правило, полягає в тому, що ви вмикаєте лише те, що вам потрібно. Інші речі (які можуть бути корисні - наприклад, відповіді на пінг) можуть використовуватись зловмисником для розширення вашої системи або, можливо, як вектор атаки для деякої ще вразливості.

Отже, дивлячись на типи повідомлень ICMP, що вам потрібно для нормальної, належної роботи вашої системи?

  • echo відповідь (ping) - не так багато
  • призначення недоступне - тут багато корисної інформації. Вимкніть це, і ви порушите доступ до свого сервера для деяких клієнтів.
  • вихідне гасіння - застаріле з 1995 року і, мабуть, вилучене з хост-реалізацій з (пізніше) 2005 р. tools.ietf.org/html/rfc6633#section-1.
  • перенаправлення - майже точно не
  • реклама маршрутизатора та клопотання - немає необхідності, якщо ви статично налаштовуєте свої маршрути та можете їх використовувати для DoS. Я б заблокував його, якщо ви не знаєте, що вам це потрібно, і, якщо він вам потрібен, можливо, кодуйте правило, щоб приймати інформацію лише з можливих відомих маршрутизаторів.
  • ttl перевищено - не лише для traceroute, повідомляє вам, що ваш трафік не проходить до місця призначення

...і так далі. Якщо ви дійсно хочете зрозуміти це, ознайомтеся з різними типами ICMP і для чого вони призначені. Стаття у Вікіпедії - хороша відправна точка.

На практиці справді потворне перенаправлення; якщо ви хочете зробити щось швидке і корисне, заблокуйте це і дозвольте іншим.

Я додам, що відстеження з'єднання IPtables дозволить відповідне повернення пакетів ICMP для активних з'єднань. Отже, якщо ви виконуєте conntrack, ви повинні мати можливість блокувати більшість вхідних ICMP, поки ви приймаєте пов'язані пакети (перш ніж блокувати ICMP у наборі правил).


2
Фактично гасіння джерел застаріле з 1995 року, і, очевидно, видалено з хост-реалізацій з (пізніше) 2005 року :). tools.ietf.org/html/rfc6633#section-1 .
sourcejedi

відповідь оновлена, спасибі Якби я подумав трохи складніше, я б згадав про це, так.
Dan Pritts

Я думаю, що ICMP PING необхідний для виявлення PMTU (який використовують багато браузерів та інструментів). Забороняти це - це як бути нечесним для своїх користувачів. Пінг також використовується для багатьох діагностичних цілей, і більшість великих гравців дозволяють це. Крім того, користі від заборони цього є мало.
jjmontes

2
Пакети Echo (ping) не потрібні для виявлення PMTU. Виявлення PMTU здійснюється шляхом встановлення біта Don't Fragment (DF) на вихідні пакети, і залежить від ICMP Destination Unreachable - фрагментація необхідних повідомлень, що повертаються з маршрутизаторів з меншими MTU-кодами зв'язку. Ping, безумовно, корисний для діагностичних цілей, але також корисний для розвідки мережі та, можливо, для DoS. Для всіх вас, і я знаю, існує скрита помилка віддаленого корінця в стеці ICMP в Linux. Якщо ваш стандарт "мені це потрібно", відповідь - "ні".
Dan Pritts

1
(Зверніть увагу, що я писав у відповідь, що блокування пункту призначення недоступними повідомленнями порушить справи. Відкриття PMTU було насправді тим, про що я думав. :)
Dan Pritts

4

Це корисний інструмент діагностики для вирішення проблем з підключенням до мережі.

Це також дозволяє використовувати з'єднання в інших місцях Інтернету, які використовують менші MTU, ніж у вашій мережі. Якщо ви спробуєте надіслати пакет кудись, який занадто великий і його неможливо фрагментарно, пристрій скидає пакет і надсилає необхідний пакет фрагментації ICMP назад відправнику. Якщо ви скинете всі пакети ICMP, ви втратите ці дивні речі, що трапляються у вашій мережі.

Справжнє питання "чому блокувати ICMP?" Що ви отримуєте? Просто мати хороші правила фільтрації на кордоні та перед цінними активами.


3

ping - хороший інструмент для діагностики, ви дійсно хочете, щоб у вас його було колись. Я використовую ці:

-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT

ви можете також захотіти придушити його.


8
Це надзвичайно неадекватно з причин, на які вказували інші ( ICMP - це набагато більше, ніж просто пінг ). Вам слід вибірково блокувати конкретні, потенційно шкідливі повідомлення ICMP, а інші контрольні повідомлення дозволити без вибору.
voretaq7

2

Сьогодні навіть обмеження пакетів ICMP на стороні сервера може створити головний біль при DDoS-атаках. Атаки в основному здійснюються шляхом надсилання величезних віконних запитів ICMP на один сервер, і якщо сервер намагається відповісти на кожен із них, здогадайтеся, що відбувається?

Головне, що у нас є сервер, що працює з командою, який щодня отримує погані пакети, за два місяці було кілька днів, коли ми мали «вільний час». Ми вже повністю відключили / заблокували відповіді ICMP, у нас немає ні DNS-серверів, ні NTP-серверів, ні поштових серверів, ні FTP-серверів, лише два apache та командна розмова. всі порти, які не потрібні для послуг, вимкнено. Ми плануємо заблокувати навіть ssh та залишити відкритими лише два порти. Сьогодні існує 21 к (!) Постійних заборон.

Ситуація полягає в тому, що зловмисники використовують здебільшого тунелі ICMP, і кілька дійсно цікавих ліній журналів обговорювались із адміністраторами сервера, і вони сказали, що у них є запити на сервер ICMP, тож зловмисники використовували, щоб тунель атакував їх та атакував нас. Звучить дивно, але це правда.

Якщо вам не потрібна діагностика вашого сервера і якщо ви в змозі повністю заблокувати запити або відфільтрувати їх, щоб, наприклад, скинути величезні вікна, зробіть це. Я також пропоную вам повністю заблокувати: Китай, Корея, Таїланд, Туреччина, оскільки більшість IP-адрес надходить саме звідти. У мене були цілі списки цих країн, але майже щодня надходять звідти нові.

Я кажу, що я роблю, якщо ви не згодні - не робіть цього. Просто як це. Удачі


0

Як мінімум, ви повинні дозволити передавати icmp типи 3 (недоступне місце призначення), 4 (гасіння джерела) та 11 (перевищено час). Усі ці типи використовуються для вирішення проблем із мережею і не повинні їх фільтрувати.

iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

(Тип гасіння джерела наразі застарілий, але це не завадить відкрити це)


-2

Я дозволяю ICMP-трафіку з локальної інтрамережі, блокую його з Інтернету. Таким чином мій сервер є майже невидимим в Інтернеті (він відповідає лише на нестандартний порт SSH).

iptables -I INPUT 7 -d 208.180.X.X -p icmp --icmp-type 8  -j DROP
iptables -I INPUT 8 -d 208.180.X.X -p icmp --icmp-type 0  -j DROP
iptables -I INPUT 9 -d 208.180.X.X -p icmp --icmp-type 11 -j DROP

Це вставляє його після встановленого стандартного циклу зворотного зв'язку, білого списку локальної мережі, списку постачальників послуг VOIP та ACCEPT порту SSH. Я дозволяю трафіку, який я хочу, а потім роблю все можливе, щоб сервер був непомітним для решти світу.


1
Я думаю, я розумію, що ви намагаєтесь сказати, але це не співвідноситься з таблицями, які ви написали. Якщо ви скачуєте конкретні типи ICMP, то що станеться з тими, хто не вказав ??? Я б припустив Default-Allow, інакше навіщо вказувати блок, коли він буде сутнісним. Потім ви заявляєте "Я дозволяю трафік, який я хочу", що вказуватиме на замовчування-Заборонити або За замовчуванням-Упадати ... в основному ваша відповідь суперечлива і в кращому випадку заплутана.
Дж. М. Бекер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.