Стоит ли блокировать icmp?

Зачем использовать команду «ping» в Linux

Зачем нужна Команда Ping в Linux.

Большинство из нас регулярно посещают одни и те же полезные сайты. Например, я посещаю сайт BBC, чтобы прочитать новости, также я посещаю сайт Sky Sports, чтобы получить новости и результаты футбола. У вас, несомненно, будет свой собственный набор ключевых сайтов, таких как наш.

Представьте, что вы ввели веб-адрес BBC в свой браузер, и страница не загружалась вообще. Причиной этого может быть одна из многих вещей.

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

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

Какова бы ни была причина, вы можете легко проверить связь между вашим компьютером и другой сетью, используя команду «ping».

Example-2: Stop ICMP ping flood attack (IPv6) with iptables

Similar to IPv4 we can also control ICMP Echo request by applying a hash limit for IPv6 traffic. To limit ping flood for IPv6 packets you must apply iptables rule to ICMPv6 type 128:

Advertisement

First of all DROP all incoming requests:

~]# ip6tables -P INPUT DROP

Now apply hash limit to ICMPv6 type 128 using the following rule:

~]# ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -m hashlimit --hashlimit-name PING --hashlimit 15/sec --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-htable-expire 300000 -j ACCEPT

List this applied rules for IPv6:

~]# ip6tables -L
Chain INPUT (policy DROP)
target     prot opt     source               destination
ACCEPT     ipv6-icmp    anywhere             anywhere             ipv6-icmp echo-request ctstate NEW,RELATED,ESTABLISHED limit: up to 15/sec burst 5 mode srcip htable-expire 300000
...

Verify if ICMPv6 Echo Request is limited for ping flood for this node where we have applied the iptables rule:

Our 78% of ping6 packets were dropped so our hash limit is working as expected.

Блокируем PING на одиночном компьютере

Для блокирования всех PING пакетов с компьютера и на него нам необходимо создать полититку IPSec, которая будет блокировать весь ICMP трафик. Для начала проверьте отвечает ли ваш компьютер на ICMP запросы:

Для настройки одиночного компьютера нам необходимо выполнить следующие шаги:

Сконфигурируем
список IP Filter Lists и Filter Actions

  1. Откройте окно MMC (Start > Run > MMC).
  2. Добавьте оснастку IP Security and Policy Management.
  1. Выберите какой компьютер будет управляться этой политикой – в нашем случае это локальный компьтер. Нажмите Close, потом нажмитеOk.
  1. Правой кнопкой нажмите на IP Security Policies в левой половине консоле MMC. Выберите Manage IP Filter Lists and Filter Actions.
  1. Вам не нужно настраивать или создавать IP фильтр для ICMP (протокол в котором работает PING), так как такой фильтр уже существует по умолчанию – All ICMP Traffic.

Однако вы можете сконфигурировать сколь угодно сложный IP фильтр, к примеру запретить пинговать ваш компьютер со всех IP, кроме нескольких определенных. В одной из следующих статей посвященных IPSec мы подробно рассмотрим создание IP фильтров, следите за обновлениями.

  1. В окне Manage IP Filter Lists and Filter actions просмотрите ваши фильтры и если все в порядке нажмите на вкладку Manage Filter Actions. Теперь нам нужно добавить действие для фильтра, которое будет блокировать определенный трафик, нажмем Add.
  1. В первом окне приветствия нажимаем Next.
  2. В поле Filter Action Name вводим Block и нажимаем Next.
  1. В Filter Action General Options выбираем Block, после чего жмем Next.
  1. Вернитесь в окно Manage IP Filter Lists and Filter actions и просмотрите ваши фильтры и если все в порядке, нажмите Close. Вы можете добавить фильтры и действия для фильтров в любое время.

Следующим шагом будет конфигурирование политики IPSec и её применение.

Конфигурируем политику IPSe

  1. В той же MMC консоле нажмите правой кнопкой по IP Security Policies и выберите Create IP Security Policy.
  1. Пропустите приветствие мастера нажав Next.
  2. В поле IP Security Policy Name введите соответствующее случаю имя, например “Block PING”. Нажмите Next
  1. В окне Запросов безопасного соединения сними галочку с чекбокса Active the Default Response Rule. НажмитеNext
  1. Отметьте чекбокс изменить свойства и нажмите Finish.
  1. Нам нужно добавить IP фильтры и действия фильтров в новую политику IPSec. В окне новый политике IPSec нажмите Add
  1. Нажмите Next.
  2. В окне Tunnel Endpoint убедитесь что выбрано значение по умолчанию и нажмите Next.

Брандмауэр — первая линия защиты любого сервера, и от его правильной настройки зависит, сможет ли злоумышленник продвинуться дальше в своих попытках проникновения в систему. Современные файеры предлагают множество механизмов обеспечения безопасности, используя которые ты можешь оставить «не у дел» 99% атакующих. И все это без необходимости покупки дорогостоящего оборудования и коммерческого софта.

Главная цель всех взломщиков — получение доступа к командному интерпретатору сервера для использования его возможностей в своих интересах. Наиболее часто проникновение в «святая святых» осуществляется с помощью дыр в сервисах или же через подбор пароля (брутфорс) к одному из них (например, ssh).

Пара слов об ограничении скорости

Хотя ICMP-сообщения, подобные тем, которые описаны в статье, могут быть очень полезными, помните, что генерация всех этих сообщений занимает процессорное время на ваших маршрутизаторах и генерирует трафик. Вы действительно ожидаете, что вы получите 1000 пингов в секунду через ваш брандмауэр в обычной ситуации? Будет ли это считаться нормальным трафиком? Вероятно, нет. Ограничивайте пропускную способность сети для этих типов ICMP трафика, как вы считаете нужным; этот шаг может помочь вам в защите вашей сети.

Читать, исследовать и понимать

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

Предыдущая запись mod_rewrite — перенаправляем на https сайт
Следующая запись Низкая скорость GRE IPSec тоннеля AES CBC

Исследование пути доставки пакетов

RFC 4821 был разработан для того, чтобы помочь участникам передачи трафика в сети обойти эту проблему, используя исследование пути распространения пакетов (Path MTU Discovery (PLPMTUD). Стандарт позволяет обнаружить максимальный объём данных (Maximum Transmission Unit (MTU), который может быть передан протоколом за одну итерацию,  путем постепенного увеличения максимального размера полезного блока данных (Maximum Segment Size (MSS), для того чтобы найти максимально возможную величину пакета без его фрагментации на пути следования от передатчика к приемнику. Данный функционал уменьшает зависимость от своевременного получения ответов с ошибками по протоколу межсетевых управляющих сообщений (Internet Control Message Protocol (ICMP) и доступен в большинстве сетевых стеков устройств и клиентских операционных систем. К сожалению, он не так эффективен, как непосредственное получение данных о максимальном возможном размере передаваемых пакетов. Пожалуйста, позвольте этим сообщениям протокола ICMP возвращаться к источнику передачи, хорошо?

Ответ 1

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

Как пользоваться Ping?

Для проверки работоспособности сети часто используется программа ping любого сайта, который всегда доступен, например, google.com или еще проще и короче ya.ru. Вам будет достаточно передать утилите в параметрах этот адрес, она сама найдет ip и сделает все нужное:

Как я и писал выше, для каждого пакета выводится уникальный идентификатор icmp_seq, количество узлов до целевого узла ttl и время, потраченное на доставку пакета time. Чтобы остановить ping нажмите сочетание клавиш Ctrl+C. В конце утилита вывела общую статистику:

  • packets transmitted — отправлено пакетов;
  • received — получено пакетов;
  • packet loss — процент потерянных пакетов;
  • time — обще время работы;rtt min/avg/max/mdev — минимальное время/среднее время/максимальное время/квадратичное отклонение.

Если выполнение команды ping не остановить, то пакеты могут отправляться очень долгое время, это создает дополнительную нагрузку на сервер и поэтому не желательно. Вы можете сразу в вызове команды ограничить количество отправляемых пакетов с помощью опции -c:

Точно так же как мы выполняем ping для домена, можно указать ip адрес напрямую. Это позволяет проверить есть ли сеть когда неверно настроены серверы DNS. Например:

Следующий вид отправки ping сообщений, это ping флуд. С помощью таких пакетов можно выполнить нагрузочное тестирование канала или даже заглушить интернет соединение на одной из машин. Но эти функции можно использовать только с правами суперпользователя. Для организации ping флуда укажите опцию -f:

По умолчанию, в обычном режиме, каждый следующий пакет отправляется, когда получен ответ на предыдущий. Но вы можете сами установить интервал между отправкой пакетов -i:

Здесь программа ping выполняет так званный, настраиваемый флуд, вы указываете с какой интенсивностью нужно отправлять пакеты. С помощью опции -D вы можете увидеть Unix Timestamp для каждого сообщения:

Блокировать/разблокировать запросы ping к Linux Server

Ping работает, отправляя пакет ICMP (эхо-запрос) в систему назначения, а затем получает ответный пакет ICMP (эхо-ответ). В Linux команда ping продолжает отправлять пакеты ICMP, пока вы не остановите ее с помощью Ctrl + C.

Чтобы заблокировать запросы ping, вам нужно будет блокировать/разблокировать эхо-запросы ICMP, отправляемые на ваш сервер. Есть два способа блокировать/разблокировать эхо-запросы ICMP к серверу Linux.

  • Через параметры ядра
  • Через iptables

Давайте начнем.

Блокировать/разблокировать запросы ping через параметры ядра

С помощью параметров ядра вы можете временно или постоянно блокировать ping-запросы. Параметры ядра можно изменить с помощью команды sysctl, каталога /sys /proc и файла /etc/sysctl.conf.

Временные запросы блокировки/разблокировки ping

Команда sysctl в Linux используется для чтения и записи параметров ядра в каталог /proc/sys. Используя эту команду, мы можем настроить параметры ядра для блокировки/разблокировки запросов ping. Параметр ядра net.ipv4.icmp_echo_ignore_all определяет, должна ли система отвечать на эхо-запрос ICMP. Значение по умолчанию – «0», что означает ответ на запрос ICMP.

Блокировать запрос Ping

Чтобы заблокировать запрос ping, введите в Терминале следующую команду:

$ sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1

Эта команда устанавливает для параметра ядра значение «1», что означает игнорирование всех запросов ICMP.

Теперь все запросы ping к вашей системе будут заблокированы, и отправитель не получит ответа.

Разблокировать запрос Ping

Чтобы разблокировать запросы ping, снова запустите ту же команду, изменив значение параметра на «0» по умолчанию.

$ sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0

Кроме того, вы можете заблокировать запросы ping, изменив значение параметра ядра в каталоге /proc/sys с помощью команды echo. Однако, чтобы использовать этот метод, вам нужно будет запустить команду от имени пользователя root.

Чтобы заблокировать запрос ping, сначала переключитесь на учетную запись root, используя следующую команду в терминале:

$ su root

Когда будет предложено ввести пароль, введите пароль для root.

Затем введите следующую команду в Терминале:

$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Чтобы разблокировать запросы ping, используйте следующую команду:

$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Пример использования команды «ping»

Команда Ping в Linux является очень полезной.

Чтобы проверить, доступен ли веб-сайт, введите «ping», а затем имя сайта, к которому вы хотите подключиться. Например, для ping BBC .com вы выполните следующую команду:

ping название .com
Команда ping непрерывно отправляет запросы в сеть, и когда будет получен ответ, вы получите сообщение о выходе со следующей информацией:

  • количество полученных байтов
  • IP-адрес
  • порядковый номер
  • время, требуемое для ответа

Если сеть, которую вы пытаетесь выполнить ping, не отвечает, потому что она недоступна, вы будете уведомлены об этом.

Если вы знаете IP-адрес сети, вы можете использовать это вместо имени веб-сайта:

Брутфорс

Разведав информацию об открытых портах и ОС, взломщик предпринимает попытки проникновения в систему, которые могут быть основаны на эксплуатации дыр в сервисах, либо на подборе паролей. Предотвратить возможность взлома сервисов брандмауэр нам не поможет, однако затормозить процесс перебора паролей — легко. Для этого применяются возможности по ограничению количества пакетов, пришедших на машину с одного IP-адреса. Вот как это можно сделать с помощью iptables:

Защита от брутфорса с помощью iptables

# Цепочка для проверки соединений
iptables -N brute_check
# Блокировка адреса, если за 60
секунд он инициировал более 2-х соединений
—update —seconds 60 \
—hitcount 3 -j DROP
# Если нет — разрешаем соединение и
заносим адрес в список
iptables -A brute_check -m recent \
—set -j ACCEPT
# Очищаем цепочку INPUT
iptables -F INPUT
# Отправляем в цепочку brute_check
всех, кто пытается подключиться к
22-му порту
ctstate NEW -p tcp \
—dport 22 -j brute_check
iptables -P INPUT DROP

То же самое можно проделать и с использованием pf:

Защита от брутфорса с помощью pf

# Создаем таблицу для брутфорсеров
table persist
# Блокируем всех, кто в нее попадает
block in quick from
# Помещаем в таблицу bruteforcers всех, кто инициирует более двух соединений на 22-ой порт в минуту
pass in on $ext_if inet proto tcp to $outif \
port 22 flags S/SA keep state \
(max-src-conn-rate 60/2, \ overload flush)

Брандмауэр ipfw не обладает достаточной функциональностью для эффективного противодействия брутфорсерам, поэтому его пользователи должны использовать инструменты более высокого уровня, такие как специальные модули PAM, системы обнаружения вторжений и программы вроде sshguard.

Автозагрузка правил iptables

1. Загрузка правил с помощью скрипта

Сохраненные правила с помощью утилиты iptables-save можно восстанавливать с помощью скрипта, запускаемого при каждом запуске операционной системы. Для этого необходимо выполнить следующие действия:

Сохранить набор правил межсетевого экрана с помощью команды:

Для запуска набора правил при старте операционной системы перед включением сетевого интерфейса мы создаем новый файл с помощью команды:

Заметим — в сети есть много вариантов места размещения скрипта на локальной машине, но я считаю именно размещение в папке if-pre-up.d наиболее верным, так как при этом скрипт будет выполнятся перед включением сетевого интерфейса. Добавляем в данный файл следующий скрипт:

Сохраняем файл iptables Ctrl+O. Выходим из editor Ctrl+X. Устанавливаем необходимые права для созданного файла:

Перезагружаем компьютер и проверяем результат для таблицы filter с помощью команды:

Для обеспечения безопасности необходимо, чтобы конфигурация iptables применялась до запуска сетевых интерфейсов, сетевых служб и маршрутизации. Если данные условия не будут соблюдены — появляется окно уязвимости между загрузкой операционной системы и правил защиты межсетевого экрана. Для реализации такого варианта защиты можно использовать пакет iptables-persistent.

2. Автозагрузка правил iptables-persistent

По умолчанию данный пакет не установлен в операционной системе. Данный вариант реализации автозапуска конфигурации возможен в операционных системах Debian, Ubuntu. Для установки пакета требуется выполнить команду:

Этот пакет впервые стал доступен в Debian (Squeeze) и Ubuntu (Lucid). Используемые этим пакетом правила iptables хранятся в следующих директориях:

  • /etc/iptables/rules.v4 для набора правил протокола IPv4;
  • /etc/iptables/rules.v6 для набора правил протокола IPv6.

Но они должны быть сохранены в понятном утилите iptables-persistent виде.

Требования к формату данных файлах не задокументированны, что создает некоторые сложности для создания этих файлов вручную. Их можно создать с помощью dpkg-reconfigure:

Или можно использовать iptables-save и ip6tables-save:

Утилита netfilter-persistent тоже позволяет управлять автозагрузкой правил. Вот её синтаксис:

sudo netfilter-persistent

Где может принимать следующие значения:

  • start — вызывает все плагины с параметром start, для загрузки правил в netfilter;
  • stop — если настроена конфигурация сброса настроек Netfilter при остановке плагина, сбрасывает все настройки firewall на значения по умолчанию. Иначе просто выдает предупреждение;
  • flush — плагины вызываются с параметром flush, что приводит к сбросу правил межсетевого экрана на значения по умолчанию;
  • save — вызывает плагины с параметром save, позволяя сохранить значения правил брандмауэра в файлы на диске;
  • reload — не задокументированный параметр, возникали случаи когда параметр start не срабатывал, помогал вызов этого параметра для загрузки правил из файла на диске;

Значит, чтобы сохранить правила мы можем вызвать следующую команду:

Для загрузки же сохраненных правил мы можем использовать команду:

Замечание После установки netfilter-persistent система при использовании iptables и формата хранения файлов, связанного с ним, начинает при работе выдавать предупреждение

Это связано с наличием новой утилиты настройки и редактирования правил Netfilter — nftables, для миграцию на эту утилиту старых правил iptables можно использовать автоматический транслятор правил iptables-translate. Но это уже тема для отдельной статьи.

Ответ 4

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

Теория безопасности обычно заключается в том, что вы включаете только ТО, ЧТО ВАМ НУЖНО. Другие вещи (которые могут быть полезны — например, ответы ping) могут быть использованы злоумышленником для обзора вашей системы или, возможно, в качестве вектора атаки для какой-либо уязвимости, которую еще предстоит обнаружить.

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

  • эхо-ответ (пинг)

  • destination unreacheable — здесь много полезной информации. Отключите это, и вы нарушите доступ к вашему серверу для некоторых клиентов.

  • Source quench — устарело с 1995 года и, по-видимому, удалено из реализаций хоста с (самое позднее) 2005 года. tools.ietf.org/html/rfc6633#section-1.

  • redirectional — почти наверняка не нужно.

  • Объявление и запрос маршрутизатора — нет необходимости, если вы статически настраиваете свои маршруты, и может использоваться для DDoS. Я бы заблокировал его, если вы не знаете, что он вам нужен, и, если он вам нужен, возможно, закодируйте правило, чтобы принимать информацию только от возможных известных маршрутизаторов.

  • ttl exceeded — не только для traceroute, сообщает вам, что ваш трафик не доходит до пункта назначения.

…и так далее. Если вы действительно хотите понять это, узнайте о различных типах ICMP и о том, для чего они нужны. Статья в Википедии является хорошей отправной точкой.

На практике действительно недопустимым является перенаправление; если вы хотите просто сделать что-то быстрое и полезное, заблокируйте это и оставьте остальное.

Я бы добавил, что отслеживание соединений IPtables позволит возвращать соответствующие пакеты ICMP для активных соединений. Поэтому, если вы используете conntrack, вы сможете заблокировать большую часть входящих ICMP, пока вы принимаете СВЯЗАННЫЕ пакеты (до того, как вы заблокируете ICMP в своем наборе правил).

Как Пользоваться Командой Linux Ping?

В Linux есть разные варианты, как можно проверить соединение между двумя сетями:

1. Проверка Соединения

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

В этом примере мы проверим сетевое соединение с www.google.com:

ping google.com

Вот результат:

Если вы не знаете домен, вы также можете использовать IP-адрес. Здесь IP-адрес Google отображается в скобках вместе с полной статистической сводкой.

  • min — минимальное время ответа
  • avg — показывает среднее время ответа
  • max — максимальное время ответа

Чтобы остановить команду ping в Linux, используйте Ctrl + C. Это остановит отправку пакетов на целевой хост. Также команда остановит все процессы в терминале.

2. Указание Количества ECHO_REQUEST

Параметр команды -c используется для указания количества пакетов или запросов, которые хочет выполнить пользователь.

Синтаксис будет выглядеть так:

ping –c * primerdomen.com

Здесь * — количество пингов, которые вы хотите выполнить.

3. Звуковой Пинг

Опция команды Linux ping -a создаёт звуковой сигнал, чтобы проверить, является ли хост активным или нет, таким образом сообщая вам об этом.

Команда будет выглядеть так:

ping –a primerdomen.com

Помните, чтобы завершить пинг, нажмите Ctrl+C.

4. Установка Интервалов

Опция –i в Linux позволяет пользователю устанавливать интервалы в секундах между каждым пакетом.

Команда имеет ту же структуру, что и предыдущие:

ping –i 2 –c 7 primerdomen.com

Цифры, которые вы видите в команде могут быть изменены по вашему желанию.

5. Получать Только Сводку Команды Ping

Чтобы получить только сводную информацию о сети, используйте параметр -q в командной строке терминала Linux:

ping –c 7 –q primerdomen.com

Опять же, мы по-прежнему указываем -c 7 для выполнения семи запросов, но получаем только сводку, поскольку добавили -q.

6. Тестируем Нагрузку на Сеть с Помощью Команды Linux Ping

Команда ping позволяет отправлять 100 или более пакетов в секунду с помощью следующей команды:

ping –f  primerdomen.com

Это отличный вариант, если вы хотите проверить, как ваш сайт или сервер справляется с нагрузкой на сеть — большим количеством запросов.

Использование команды ping в Linux

Вы можете использовать команду ping с IP-адресом или именем хоста/URL.

Предположим, мы пингуем Google. Он отправит ICMP-пакеты размером 56 байтов на google.com.

Вы должны вручную остановить команду ping, иначе она продолжит выполняться. Вы можете использовать  терминала ярлык, чтобы остановить команду ping в Linux, как мы сделали в приведенном выше примере.

Когда вы останавливаете , она представляет вам сводку передачи. Вы можете увидеть статистику, такую как количество переданных ICMP-пакетов, принятых пакетов, потерянных пакетов и т. д.

Теперь, когда вы знаете, как пинговать в Linux, давайте посмотрим на некоторые другие опции команды ping.

Отправить только N количество пакетов

Если вы не хотите, чтобы команда ping выполнялась вечно без остановки вручную, вы можете использовать .

При этом вы можете указать количество пакетов, которые команда ping должна отправить перед автоматической остановкой.

Отправить пинг только на ограниченное время

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

Например, если вы хотите отправлять ping-пакеты всего за 5 секунд, вы можете использовать его следующим образом:

Изменить интервал времени между двумя пингами

По умолчанию ping отправляет пакеты с интервалом в одну секунду. Вы можете изменить этот интервал времени с помощью .

Для отправки ICMP-пакетов с интервалом в 3 секунды вы можете использовать команду Ping, например:

Вы также можете уменьшить временной интервал между пингами.

Однако, если вы попытаетесь уменьшить временной интервал ниже 0,2 секунды (200 мс), вы увидите ошибку:

Не беспокойтесь Вы все еще можете пропинговать с интервалом менее 200 мс. Но для этого нужно использовать пинг с правами root.

DoS-атака с пингом, который также называется Ping of Death.

Одна из самых простых атак DoS – Ping of Death. При такого рода атаках злоумышленник отправляет большое количество запросов ping за очень короткий промежуток времени. Если сервер не настроен должным образом, он потерпит крах при обработке запроса ping, и веб-сайт закроется.

Команда ping имеет встроенную функцию для этого. Это называется , и этого можно достичь с помощью . Вам понадобятся права sudo для запуска этой опции с нулевым интервалом.

Когда вы запустите эту команду, вы увидите, что некоторые точки появляются и исчезают в выходных данных. Каждый ‘.’ обозначает запрос, тогда как ответом является возврат (поэтому точки исчезают).

Этот параметр проверки связи полезен при тестировании нагрузочной способности сервера.

Бонусный совет: отправьте звуковые сигналы

Вы можете отправлять звуковые сигналы с . При этом вы услышите звуковой сигнал для каждого успешного пинга.

Обратите внимание, что не все дистрибутивы Linux настроены на создание звукового сигнала. Мы проверили это на Ubuntu 18.04, и могли слышать звуковой сигнал

Нумерация типов ICMP

Протокол межсетевых управляющих сообщений (ICMP) содержит много сообщений, которые идентифицируются полем «тип».

Тип Наименование Спецификация
Echo Reply
1 Unassigned
2 Unassigned
3 Destination Unreachable
4 Source Quench (Deprecated)
5 Redirect
6 Alternate Host Address (Deprecated)
7 Unassigned
8 Echo
9 Router Advertisement
10 Router Solicitation
11 Time Exceeded
12 Parameter Problem
13 Timestamp
14 Timestamp Reply
15 Information Request (Deprecated)
16 Information Reply (Deprecated)
17 Address Mask Request (Deprecated)
18 Address Mask Reply (Deprecated)
19 Reserved (for Security) Solo
20-29 Reserved (for Robustness Experiment) ZSu
30 Traceroute (Deprecated)
31 Datagram Conversion Error (Deprecated)
32 Mobile Host Redirect (Deprecated) David_Johnson
33 IPv6 Where-Are-You (Deprecated)
34 IPv6 I-Am-Here (Deprecated)
35 Mobile Registration Request (Deprecated)
36 Mobile Registration Reply (Deprecated)
37 Domain Name Request (Deprecated)
38 Domain Name Reply (Deprecated)
39 SKIP (Deprecated)
40 Photuris
41 ICMP messages utilized by experimental mobility protocols such as Seamoby
42 Extended Echo Request
43 Extended Echo Reply
44-252 Unassigned
253 RFC3692-style Experiment 1
254 RFC3692-style Experiment 2
255 Reserved

Example-1: Stop ICMP ping flood attack (IPv4) with iptables

It is always recommended to BLOCK all incoming requests to your Linux Server and only allow requests as per the ALLOW rules. But before your DROP all the incoming requests, at least allow port 22 so that you are able to connect to your server using SSH.

~]# iptables -A INPUT -p tcp  --dport 22 -j ACCEPT

Now DROP all the incoming request via INPUT chain:

~]# iptables  -P INPUT DROP

List the applied rules:

 ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

So we have to apply hash limit to ICMP type 8 which is for Echo Request.

~]# iptables  -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -m hashlimit --hashlimit-name PING --hashlimit 15/sec --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-htable-expire 300000 -j ACCEPT

List the applied rules:

~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     icmp --  anywhere             anywhere             icmp echo-request ctstate NEW,RELATED,ESTABLISHED limit: up to 15/sec burst 5 mode srcip htable-expire 300000
...

Now attempt to send ping flood from to :

So we have not completely blocked ICMP packets, instead just applied hash limit to avoid ping flood attacks which is why there is 84% packet loss instead of 100%.

Команда Ping

Теперь нам осталось немного попрактиковаться. Но перед тем, как мы перейдем к практике давайте рассмотрим синтаксис команды и ее опции. Синтаксис довольно прост:

$ ping опции адрес_узла

Формат команды ping очень прост. В качестве адреса узла можно передавать как ip адрес, так и доменное имя. Опции настраивают поведение утилиты. Рассмотрим основные из них:

  • -4 — использовать только ipv4 (по умолчанию);
  • -6 — использовать только ipv6;
  • -A — адаптивный режим, время между отправками пакета адаптируется к времени передачи и приема пакета, но не меньше чем 200мс;
  • -b — разрешить ping широковещательного адреса;
  • — количество пакетов, которые нужно отправить;
  • -D — выводить время в виде UNIX timest
  • -f — режим флуда, в этом режиме пакеты передаются без задержек, может использоваться для совершения DoS атак на отдельные узлы. Количество точек, которые выводит утилита обозначает количество потерянных пакетов;
  • -i — интервал в секундах между отправкой пакетов;
  • -I — использовать этот сетевой интерфейс для отправки пакетов;
  • -l — режим перегрузки, отправляется очень много пакетов и система не следит за ответными пакетами;
  • -n — не получать домены для ip адресов;
  • -r — игнорировать таблицы маршрутизации и отправить пакет на указанный интерфейс;
  • -s — размер одного пакета;
  • -t — установить TTL вручную;
  • -v — более подробный вывод.

Теперь, когда мы рассмотрели основные параметры команды ping и ее синтаксис, пришло время практики, дальше поговорим о том, как сделать ping определенного узла в Linux.

Спуфинг

Спуфинг (подмена адреса отправителя пакета) может быть использован для осуществления DoS-атак или обхода брандмауэра. В первом случае спуфинг дает огромное преимущество атакующему, так как существенно затрудняет реакцию на атаку (пакеты, приходящие с совершенно разными адресами отправителя, не так просто классифицировать и заблокировать) и затягивает процесс закрытия новых соединений (обычно поддельный адрес недостижим, поэтому закрытие соединения происходит лишь по истечению таймаута). Спуфинг, осуществляемый для обхода системы защиты, менее опасен и в большинстве случаев поддается контролю.

Достаточно часто, блокируя внешние сетевые сервисы хоста, системные администраторы оставляют их открытыми для определенного диапазона адресов (например, для подключения со своей домашней машины). Вычислив один из этих адресов, взломщик может сформировать пакет, указав этот адрес в качестве обратного, и таким образом «проскользнуть » через брандмауэр. Далее он может угадать номера последовательности TCP-пакетов и сделать так, чтобы доверяющий обратному адресу сервис выполнил нужное ему действие. Это очень трудная в реализации атака, которая, тем не менее, может быть выполнена грамотным специалистом, а если речь идет о протоколе UDP, то это под силу и кулхацкеру.

К счастью, защититься от подобных атак легко. Достаточно не открывать порты незащищенных сервисов во внешний мир, а в случае резкой необходимости использовать защитные системы самих сервисов (например, сертификаты ssh) или механизм «стука в порты» (о нем рассказано в конце статьи).

Ситуация становится более сложной, когда дело касается сетевого моста, разделяющего внутреннюю и внешнюю сети (или две локальных сети). Доверительные отношения внутри локальной сети — обычное дело. Сервисы доступны всем, никакой аутентификации, шифрования и т.д. — просто лакомый кусочек для взломщика. Находясь во внешней сети, он может узнать сетевую маску внутренней сети и сформировать пакеты с соответствующим ей обратным адресом, что приведет к получению доступа ко всем ресурсам локалки. Это действительно опасная ситуация, но ее легко предотвратить с помощью правильной настройки брандмауэра или ОС.

Для этого достаточно запретить прохождение пакетов, обратные адреса которых соответствуют используемым во внутренней сети, с внешнего интерфейса:

Linux> iptables -A INPUT -i $outif \
-s 192.168.1.0/24 -j DENY
FreeBSD> ipfw add deny ip from \
192.168.1.0/24 to any via $outif
OpenBSD> block in on $outif from \
192.168.1.0/24 to any

В качестве альтернативы или дополнительной меры защиты можно (и даже нужно) использовать специальные директивы ipfw и pf и настройки ядра Linux:

Linux> echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
FreeBSD> ipfw add deny ip from any to any not antispoof in
OpenBSD> antispoof quick for $ext_if

Эти три команды приводят к одинаковым результатам. Все пакеты, обратные адреса которых соответствуют маске сети другого интерфейса, отбрасываются.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: