Почему бы не заблокировать 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, как я могу больше заблокировать его?

Agvorth
источник
4
iptables -A INPUT -j DROP <неправильно (мнение) вы должны установить политику на iptables -P INPUT DROP, которая в основном совпадает с настройкой по умолчанию. ОТКАЗ ОТ ПОМОЩИ.
ксенотеррацид
2
Узнайте, почему блокировать icmp плохая идея: security.stackexchange.com/a/22713/485
Рори Олсоп,

Ответы:

117

ICMP - это путь, намного больше, чем «traceroute» и «ping». Он используется для обратной связи, когда вы запускаете DNS-сервер (порт недоступен), который на современном DNS-сервере может фактически помочь выбрать другой компьютер для более быстрого запроса.

ICMP также, как упоминалось выше, используется для обнаружения MTU пути. Скорее всего, ваша ОС устанавливает «DF» (не фрагментирует) на отправляемые TCP-пакеты. Ожидается, что ICMP-пакет «требуется фрагментация» вернется обратно, если что-то на пути не сможет обработать пакет такого размера. Если вы заблокируете все ICMP, ваша машина должна будет использовать другие резервные механизмы, которые в основном используют тайм-аут для обнаружения «черной дыры» PMTU и никогда не будут правильно оптимизированы.

Кроме того, вы должны спросить себя, почему вы хотите заблокировать ICMP. Что конкретно вы пытаетесь здесь предотвратить? Совершенно очевидно, что вы не понимаете, для чего используется ICMP, что довольно часто. Я был бы крайне осторожен в блокировании того, что вы не до конца понимаете.

Чтобы еще сложнее было узнать об этом, многие распространенные книги по брандмауэрам говорят «блокировать ICMP» - ясно, что их авторы никогда не читали RFC или им приходилось решать вопросы, связанные с такими советами. Это плохой совет, чтобы заблокировать все ICMP.

Теперь ограничение скорости тоже может повредить. Если ваша машина занята, или даже если это не так, вы можете получить хороший объем ICMP-трафика. Мой веб-сервер, вероятно, получает около 10-100 ICMP-пакетов в минуту, большая часть которых - обнаружение PMTU. Даже если кто-то решит атаковать мой сервер с помощью пакетов ICMP какого-либо типа, это действительно не такая уж большая проблема. Если ваша машина принимает хотя бы одно TCP-соединение (ssh, http, mail и т. Д.), Скорее всего, это больший вектор атаки, чем когда-либо будет неправильно понятый ICMP.

Майкл Графф
источник
4
Не мог бы сказать это лучше. +1
Массимо
9
Существует один тип ICMP, который может быть вредным для данного redirectтипа. Это единственный тип ICMP, который вы должны рассматривать как блокирующий.
Хьюберт Карио
2
@Hubert было бы очень полезно, если бы вы могли дать ссылку на дополнительные советы по блокировке redirect. Теперь я понимаю, что должен подумать об этом, но я не в лучшем положении - все еще не могу определиться так или иначе :) Это риск или нет?
RomanSt
ICMP-сообщение о перенаправлении сообщает хосту (маршрутизаторы никогда не должны их принимать), что такая-то подсеть или хост доступны на другом шлюзе (обычно более быстрым маршрутизатором). По крайней мере, так говорит RFC1122.
Хьюберт Карио
2
Я считаю, что перенаправления по умолчанию игнорируются в Linux. Но да, лучше отфильтровать это.
Фокс
26

ICMP используется для ряда функций диагностики (например, ping, traceroute) и управления сетью (например, обнаружение PMTU). Беспорядочная блокировка ICMP вызывает у других людей всевозможные изжоги, и если вы точно не знаете, что делаете, вы должны оставить это в покое.

romble
источник
14

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

отступники
источник
5
Это часть культа информационной безопасности. Специалисты по безопасности считают, что им не нужно оправдывать вещи, потому что простые смертные не могут понять последствий для безопасности. С другой стороны, головные боли администратора сети и системы можно отнести к простой лени. В конце концов, если бы администраторы знали, что происходит, все бы никогда не
сломалось
мне просто кажется странным убивать диагностические инструменты по существу ради этого; поскольку информация, которая может заинтересовать злоумышленника, может быть получена, если предположить, что на вашей машине вообще работает какая-либо другая служба. Твое право; это кажется очень "культовым", не задавайте вопросов, просто делайте.
Отступление
6
Я никогда не понимал, почему авторы книг по брандмауэрам, похоже, полностью упускают из виду, что ICMP гораздо больше, чем «ping» и «traceroute», и все же книги, блоги и инструкции по теме все говорят «блокировать ICMP».
Майкл Графф
1
уровни и уровни этого, ваш ответ был правильно оценен, хорошо поставленный. В основном я знаю, что когда он заблокирован, вы никогда не сможете точно сказать, что происходит с прерывистыми вещами, особенно когда на пути есть несколько блоков ICMP.
Отступление
8

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

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

xenoterracide
источник
6

Вот альтернативная точка зрения, в духе того, что предлагает теория безопасности. Другие плакаты правы в том, что практика безопасности часто переусердствовала, но для этого есть хорошая основа.

Теория безопасности, как правило, заключается в том, что вы включаете только то, что вам нужно. Другие вещи (которые могут быть полезны - например, пинг-ответы) могут быть использованы злоумышленником для расширения вашей системы или, возможно, в качестве вектора атаки для какой-то уязвимости, которую еще предстоит обнаружить.

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

  • эхо-ответ (пинг) - не так много
  • пункт назначения недоступен - здесь много полезной информации. Отключите это, и вы заблокируете доступ к вашему серверу для некоторых клиентов.
  • quench source - устарел с 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
ответ обновлен, спасибо. Если бы я думал немного усерднее, я бы запомнил это.
Дэн Притц
Я думаю, что ICMP PING требуется для обнаружения PMTU (который используют многие браузеры и инструменты). Запретить его - все равно что быть невежливым по отношению к своим пользователям. Пинг также используется во многих диагностических целях, и большинство крупных игроков разрешают это. Кроме того, есть небольшая польза от запрета.
jjmontes
2
Эхо-пакеты (ping) не требуются для обнаружения PMTU. Обнаружение PMTU выполняется путем установки бита «Не фрагментировать» (DF) в исходящих пакетах и ​​зависит от ICMP Destination Unreachable - необходимы фрагментированные сообщения, возвращаемые маршрутизаторами с меньшим MTU канала. Ping, безусловно, полезен для диагностических целей, но также полезен для сетевой разведки и, возможно, для DoS. Для всех нас с вами есть скрытая ошибка удаленного рута в стеке ICMP в Linux. Если ваш стандарт «мне нужно это», ответ «нет».
Дэн Притц
1
(Обратите внимание, что я написал в ответе, что блокирование недоступных сообщений назначения приведет к поломке. Обнаружение PMTU было именно тем, о чем я думал. :)
Дэн Приттс
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

Вы могли бы также хотеть задушить это.

neoice
источник
8
Это крайне неадекватно по причинам, указанным другими ( ICMP - это нечто большее, чем просто пинг ). Вы должны выборочно блокировать определенные, потенциально вредные ICMP-сообщения и разрешать другие управляющие сообщения через unmoled.
voretaq7
2

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

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

Ситуация такова, что злоумышленники используют в основном ICMP-туннелирование, и несколько администраторов сервера обсудили несколько действительно интересных строк журнала, и они сказали, что у них есть ICMP-запросы к серверу, поэтому злоумышленники использовали это для туннелирования атаки и атаки на нас. Звучит странно, но это правда.

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

Я говорю то, что я делаю, если вы не согласны - не делайте этого. Просто как тот. Удачи

Андрюс Лукминас
источник
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

Это вставляет его после стандартного loopback, установленного, белого списка LAN, белого списка провайдера VOIP и ACHEPT портов SSH. Я разрешаю трафик, который хочу, а затем делаю все возможное, чтобы сервер оставался невидимым для остального мира.

Дэн
источник
1
Я думаю, что понимаю, что вы пытаетесь сказать, но это не связано с таблицами, которые вы написали. Если вы отбрасываете конкретные типы ICMP, что происходит с этими неопределенными ??? Я бы предпочел Default-Allow, иначе зачем указывать блок, если он присущ. Затем вы заявляете «Я разрешаю трафик, который я хочу», что будет означать «Default-Deny» или «Default-Drop» ... в основном ваш ответ непоследователен и в лучшем случае сбивает с толку.
Дж. М. Беккер