Итак, продолжаем разбираться с ACL. На сей раз, у нас расширенные ACL. Топологию возьмём от предыдущей статьи, надеюсь, вы её изучили досконально. Если это не так, то очень рекомендую прочесть, чтобы материалы этой статьи были более понятными.
Прежде всего начну с того, что такое расширенные ACL. Расширенные ACL позволяют помимо адреса источника указать протокол, адрес назначения и порты. А так же особые параметры определённого протокола. Лучше всего учиться на примерах, поэтому сформируем новую задачу, усложнив предыдущую. Кстати, кому-то может интересно будет после этого заняться вопросами распределения трафика по приоритетам, советую вот QoS Classification and Marking хорошую статью, правда на английском. Ну а пока, вернемся к нашей задаче:
Задача.
Комплексная задача. Решать её будем тоже комплексно. Прежде всего разберу синтаксис применения расширенного ACL.
<номер от 100 до 199> <действие permit, deny> <протокол> <источник> <порт> <назначение> <порт> <опции>
Номера портов указываются только у протоколов TCP / UDP, разумеется. Так же могу иметь место приставочки eq (номер порта равный указанному), gt / lt (номер порта больше/меньше указанного), neq (номер порта не равен указанному), range (диапазон портов).
Кстати, списки доступа можно не только нумеровать, но и именовать! Возможно этот способ покажется вам более удобным. В этот раз сделаем именно так. Эти команды выполняются в контексте глобального конфигурирования и синтаксис выглядит так:
Router(config)#ip access-list extended <имя>
Итак, начинаем формировать правила.
Вот тебе раз. Только что же всё работало! Почему перестало? Это обещанный сюрприз. Объясняю, в чём проблема. Да, первое правило никуда не делось. Оно действительно разрешает отправку echo запроса на узел сервера. Но где разрешение на прохождение echo-ответов? Его нет! Запрос посылаем, а ответ принять не можем! Почему же всё работало раньше? Тогда у нас не было ACL на интерфейсе fa0/1 . А раз нет ACL, то всё разрешено. Придётся создавать правило на разрешение приёма icmp-ответов.
В список INT_OUT добавим
То же добавим и в список INT_IN.
Router(config-ext-nacl)#permit icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo-reply
Вот теперь не придраться. Всё проходит великолепно!
И, разумеется, обратное правило, в список INT_OUT (который на интерфейсе fa0/1 ):
Router(config-ext-nacl)#permit tcp host 10.0.0.100 eq 80 host 192.168.0.11 established
То есть разрешаем TCP с порта 80 сервера на хост *.11 , и соединение уже должно быть установлено! Можно вместо established указать так же gt 1024 , работать будет так же хорошо. Но смысл немного иной.
В комментах ответьте, что будет более безопасным?
permit tcp host 192.168.0.13 gt 1024 host 10.0.0.100 eq 21
permit tcp host 192.168.0.13 gt 1024 host 10.0.0.100 gt 1024
А в список INT_OUT добавляем правила:
permit tcp host 10.0.0.100 eq ftp host 192.168.0.13 gt 1024
permit tcp host 10.0.0.100 gt 1024 host 192.168.0.13 gt 1024
Проверяем из командной строки, командой ftp 10.0.0.100 , где авторизуемся по учётным данным cisco:cisco (взято из настроек сервера), там вводим команду dir и увидим, что данные как и команды – передаются успешно.
Вот примерно и всё, что касается расширенных список доступа.
Итак, посмотрим наши правила:
Router#sh access
Extended IP access list INT_IN
permit icmp 192.168.0.0 0.0.0.255 host 10.0.0.100 echo (17 match(es))
permit icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo-reply
permit tcp host 192.168.0.11 gt 1024 host 10.0.0.100 eq www (36 match(es))
permit tcp host 192.168.0.13 gt 1024 host 10.0.0.100 eq ftp (40 match(es))
permit tcp host 192.168.0.13 gt 1024 host 10.0.0.100 gt 1024 (4 match(es))
Extended IP access list INT_OUT
deny icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo (4 match(es))
permit icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo-reply (4 match(es))
permit tcp host 10.0.0.100 eq www host 192.168.0.11 established (3 match(es))
permit tcp host 10.0.0.100 eq ftp host 192.168.0.13 gt 1024 (16 match(es))
permit tcp host 10.0.0.100 gt 1024 host 192.168.0.13 gt 1024 (3 match(es))
Нередко пользователей раздражает медлительность в работе интернета. Особенно это относится к многочисленной армии любителей сетевых игр. Можно сократить время потенциальных задержек, отключив функцию ping.
Файрвол в системе linux контролируется программой iptables (для ipv4) и ip6tables (для ipv6). В данной шпаргалке рассмотрены самые распространённые способы использования iptables для тех, кто хочет защитить свою систему от взломщиков или просто разобраться в настройке.
Знак # означает, что команда выполняется от root. Откройте заранее консоль с рутовыми правами - sudo -i в Debian-based системах или su в остальных.
# iptables -L -n -v
Примерный вывод команды для неактивного файрвола:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Для активного файрвола:
Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 394 43586 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 93 17292 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 1 142 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 0 0 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 wanin all -- vlan2 * 0.0.0.0/0 0.0.0.0/0 0 0 wanout all -- * vlan2 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 425 packets, 113K bytes) pkts bytes target prot opt in out source destination Chain wanin (1 references) pkts bytes target prot opt in out source destination Chain wanout (1 references) pkts bytes target prot opt in out source destination
Где:
-L: Показать список правил.
-v: Отображать дополнительную информацию. Эта опция показывает имя интерфейса, опции, TOS маски. Также отображает суффиксы "K", "M" or "G".
-n: Отображать IP адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение).
# iptables -n -L -v --line-numbers
Примерный вывод:
Chain INPUT (policy DROP) num target prot opt source destination 1 DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 2 DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID 3 TCPMSS tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 5 wanin all -- 0.0.0.0/0 0.0.0.0/0 6 wanout all -- 0.0.0.0/0 0.0.0.0/0 7 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT) num target prot opt source destination Chain wanin (1 references) num target prot opt source destination Chain wanout (1 references) num target prot opt source destination
Вы можете использовать номера строк для того, чтобы добавлять новые правила.
# iptables -L INPUT -n -v
# iptables -L OUTPUT -n -v --line-numbers
Силами самой системы:
# service ufw stop
# service ufw start
Можно также использовать команды iptables для того, чтобы остановить файрвол и удалить все правила:
# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT
Где:
-F: Удалить (flush) все правила.
-X: Удалить цепочку.
-t table_name: Выбрать таблицу (nat или mangle) и удалить все правила.
-P: Выбрать действия по умолчанию (такие, как DROP, REJECT, или ACCEPT).
Чтобы отобразить номер строки с существующими правилами:
# iptables -L OUTPUT -n --line-numbers
# iptables -L OUTPUT -n --line-numbers | less
# iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1
Получим список IP адресов. Просто посмотрим на номер слева и удалим соответствующую строку. К примеру для номера 3:
# iptables -D INPUT 3
Или найдем IP адрес источника (202.54.1.1) и удалим из правила:
# iptables -D INPUT -s 202.54.1.1 -j DROP
Где:
-D: Удалить одно или несколько правил из цепочки.
Чтобы добавить одно или несколько правил в цепочку, для начала отобразим список с использованием номеров строк:
# iptables -L INPUT -n --line-numbers
Примерный вывод:
Chain INPUT (policy DROP) num target prot opt source destination 1 DROP all -- 202.54.1.1 0.0.0.0/0 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED
Чтобы вставить правило между 1 и 2 строкой:
# iptables -I INPUT 2 -s 202.54.1.2 -j DROP
Проверим, обновилось ли правило:
# iptables -L INPUT -n --line-numbers
Вывод станет таким:
Chain INPUT (policy DROP) num target prot opt source destination 1 DROP all -- 202.54.1.1 0.0.0.0/0 2 DROP all -- 202.54.1.2 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED
Через iptables-save:
# iptables-save > /etc/iptables.rules
Через iptables-restore
# iptables-restore
Чтобы сбрасывать весь трафик:
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
# iptables -L -v -n
После вышеперечисленных команд ни один пакет не покинет данный хост.
# ping google.com
Чтобы сбрасывать все не инициированные вами входящие пакеты, но разрешить исходящий трафик:
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -L -v -n
Пакеты исходящие и те, которые были запомнены в рамках установленных сессий - разрешены.
# ping google.com
# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
Список IP адресов для изолированных сетей:
10.0.0.0/8 -j (A)
172.16.0.0/12 (B)
192.168.0.0/16 (C)
224.0.0.0/4 (MULTICAST D)
240.0.0.0/5 (E)
127.0.0.0/8 (LOOPBACK)
Чтобы заблокировать адрес взломщика 1.2.3.4:
# iptables -A INPUT -s 1.2.3.4 -j DROP
# iptables -A INPUT -s 192.168.0.0/24 -j DROP
Чтобы заблокировать все входящие запросы порта 80:
# iptables -A INPUT -p tcp --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
Чтобы заблокировать запрос порта 80 с адреса 1.2.3.4:
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
Чтобы заблокировать определенный домен, узнаем его адрес:
# host -t a facebook.com
Вывод: facebook.com has address 69.171.228.40
Найдем CIDR для 69.171.228.40:
# whois 69.171.228.40 | grep CIDR
Вывод:
CIDR: 69.171.224.0/19
Заблокируем доступ на 69.171.224.0/19:
# iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP
Также можно использовать домен для блокировки:
# iptables -A OUTPUT -p tcp -d www.fаcebook.com -j DROP
# iptables -A OUTPUT -p tcp -d fаcebook.com -j DROP
Чтобы записать в журнал движение пакетов перед сбросом, добавим правило:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Проверим журнал (по умолчанию /var/log/messages):
# tail -f /var/log/messages
# grep -i --color "IP SPOOF" /var/log/messages
Чтобы не переполнить раздел раздутым журналом, ограничим количество записей с помощью -m. К примеру, чтобы записывать каждые 5 минут максимум 7 строк:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
# iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
## *разрешить только для TCP port # 8080 с mac адреса 00:0F:EA:91:04:07 * ##
# iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT
Чтобы запретить ping:
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
Разрешить для определенных сетей / хостов:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
Разрешить только часть ICMP запросов:
### ** предполагается, что политики по умолчанию для входящих установлены в DROP ** ###
# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
## ** разрешим отвечать на запрос ** ##
# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT
## разрешить подключение к порту 80 (Apache) если адрес в диапазоне от 192.168.1.100 до 192.168.1.200 ##
# iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT
## пример для nat ##
# iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25
Заменить ACCEPT на DROP, чтобы заблокировать порт.
## ssh tcp port 22 ##
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
## cups (printing service) udp/tcp port 631 для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT
## time sync via NTP для локальной сети (udp port 123) ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT
## tcp port 25 (smtp) ##
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
# dns server ports ##
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
## http/https www server port ##
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
## tcp port 110 (pop3) ##
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT
## tcp port 143 (imap) ##
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
## Samba file server для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT
## proxy server для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT
## mysql server для локальной сети ##
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
Для ограничений используется connlimit модуль. Чтобы разрешить только 3 ssh соединения на одного клиента:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Установить количество запросов HTTP до 20:
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP
Где:
--connlimit-above 3: Указывает, что правило действует только если количество соединений превышает 3.
--connlimit-mask 24: Указывает маску сети.
Для поиска помощи по iptables, воспользуемся man:
$ man iptables
Чтобы посмотреть помощь по определенным командам и целям:
# iptables -j DROP -h
Проверяем открытость / закрытость портов:
# netstat -tulpn
Проверяем открытость / закрытость определенного порта:
# netstat -tulpn | grep:80
Проверим, что iptables разрешает соединение с 80 портом:
# iptables -L INPUT -v -n | grep 80
В противном случае откроем его для всех:
# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
Проверяем с помощью telnet
$ telnet ya.ru 80
Можно использовать nmap для проверки:
$ nmap -sS -p 80 ya.ru
Iptables отличный инструмент в руках администратора. Если нужно легко и просто защититься в десктопной Ubuntu, то стоит знать, что есть удобная консольная надстройка над iptables под названием UFW, а к ней есть графическая программа GUFW. Сделать свою Ubuntu ещё более защищённой поможет видеоматериал.
Научиться настройке MikroTik можно на онлайн курсе по оборудованию этого производителя. Автор курса является сертифицированным тренером MikroTik. Подробней Вы можете прочитать в конце статьи.
Статья отвечает на вопрос насколько опасно блокировать ICMP трафик.
Многие сетевые администраторы считают, что протокол межсетевых управляющих сообщений (Internet Control Message Protocol (ICMP) представляет собой угрозу безопасности и поэтому должен всегда блокироваться на . Это правда, что протокол имеет некоторые связанные с этим проблемы безопасности, и что часть запросов должна быть заблокирована. Но это не повод блокировать весь ICMP-трафик!
ICMP-трафик имеет много важных функций; какие то из них полезны для устранения неполадок, другие же необходимы для правильной работы сети. Ниже приведены сведения о некоторых важных составляющих ICMP протокола, о которых вы должны знать. Следует подумать над тем, как оптимальным образом пропускать их через вашу сеть.
IPv4 – Echo запрос (Type8, Code0) и Echo ответ (Type0, Code0)
IPv6 – Echo запрос (Type128, Code0) and Echo ответ (Type129, Code0)
Мы все хорошо знаем, что ping, - один из первых инструментов для поиска и устранения неполадок. Да, если вы включите на своем оборудование обработку ICMP-пакетов, то это значит, что ваш хост теперь доступен для обнаружения, но разве ваш уже не слушает порт 80, и не отправляет ответы на клиентские запросы? Конечно, заблокируйте ещё и эти запросы, если вы действительно хотите, чтобы на границе сети была ваша DMZ. Но блокируя ICMP трафик внутри вашей сети, не усилите защиту, напротив получите систему с излишне сложным процессом поиска и устранения неполадок («Проверьте пожалуйста отзывается ли шлюз на сетевые запросы?», «Нет, но это меня ничуть не расстраивает, потому что мне это ничего не скажет! »).
Помните, также можете разрешить прохождение запросов в определенном направлении; например, настроить оборудование так, чтобы Echo запросы из вашей сети проходили в сеть Интернет и Echo ответы из Интернета в вашу сеть, но не наоборот.
IPv4 – (Type3, Code4)
IPv6 – (Type2, Code0)
Данные компоненты протокола ICMP очень важны, так как являются важным компонентом в Path MTU Discovery (PMTUD), который является неотъемлемой частью протокола TCP. Позволяет двум хостам корректировать значение максимального размера сегмента TCP (MSS) до значения, которое будет соответствовать наименьшему MTU по пути связей между двумя адресатами. Если на пути следования пакетов будет узел с меньшим Maximum Transmission Unit, чем у отправителя или получателя, и у них не будет средств для обнаружения данной коллизии, то трафик будет незаметно отбрасывается. И вы не будете понимать что происходит с каналом связи; другими словами, «для вас наступят веселые деньки».
Передача IPv4-пакетов с установленным битом Don’t Fragment (большинство из них!) или IPv6-пакетов (помним, что в IPv6 нет фрагментации маршрутизаторами), которые слишком велики для передачи через интерфейс, приведёт к тому, что маршрутизатор отбросит пакет и сформирует ответ источнику передачи с следующими ICMP-ошибками: Требуется Фрагментация (Fragmentation Required ), либо Пакет Слишком Большой (Packet Too Big). Если ответы с этими ошибками не смогут вернуться к отправителю, то он будет интерпретировать отсутствие подтверждающих ответов о доставке пакетов ACK (Acknowledge ) от получателя в качестве перегрузки / потери и источником для повторной передачи пакетов, которые также будут отбрасываться.
Сложно выявить причину подобной проблемы и быстро устранить, процесс обмена TCP-рукопожатиями (TCP-handshake) работает нормально, поскольку в нем задействованы небольшие пакеты, но как только происходит массовая передача данных сеанс передачи зависает, так как источник передачи не получает сообщения об ошибках.
RFC 4821 был разработан для того, чтобы помочь участникам передачи трафика в сети обойти эту проблему, используя исследование пути распространения пакетов (Path MTU Discovery (PLPMTUD) . Стандарт позволяет обнаружить максимальный объём данных (Maximum Transmission Unit (MTU) , который может быть передан протоколом за одну итерацию, путем постепенного увеличения максимального размера полезного блока данных (Maximum Segment Size (MSS) , для того чтобы найти максимально возможную величину пакета без его фрагментации на пути следования от передатчика к приемнику. Данный функционал уменьшает зависимость от своевременного получения ответов с ошибками по протоколу межсетевых управляющих сообщений (Internet Control Message Protocol (ICMP) и доступен в большинстве сетевых стеков устройств и клиентских операционных систем. К сожалению, он не так эффективен, как непосредственное получение данных о максимальном возможном размере передаваемых пакетов. Пожалуйста, позвольте этим сообщениям протокола ICMP возвращаться к источнику передачи, хорошо?
IPv4 – (Type11, Code0)
IPv6 – (Type3, Code0)
Traceroute - очень полезный инструмент для устранения неполадок в сетевых соединениях между двумя хостами, подробно описывающий каждый шаг пути.
Отправляет пакет с временем жизни пакета данных для протокола IP (Time to live (TTL) равным 1 , чтобы первый маршрутизатор отправил сообщение с ошибкой (включая собственный IP-адрес) о превышении времени жизни пакета. Затем отправляет пакет с TTL 2 и так далее. Данная процедура необходима для того, чтобы обнаружить каждый узел на пути следования пакетов.
Router Solicitation (RS) (Type133, Code0)
Router Advertisement (RA) (Type134, Code0)
Neighbour Solicitation (NS) (Type135, Code0)
Neighbour Advertisement (NA) (Type136, Code0)
Redirect (Type137, Code0)
В то время как IPv4 использовал протокол разрешения адресов (ARP) для сопоставления 2 и 3 уровней сетевой модели OSI, IPv6 использует другой подход в виде протокола обнаружения соседей (NDP). NDP предоставляет множество функций, включая обнаружение маршрутизатора, обнаружение префикса, разрешение адреса и многое другое. В дополнение к NDP, Автоконфигурация (StateLess Address AutoConfiguration (SLAAC) позволяет динамически настраивать хост в сети, аналогично концепции протокола динамической настройки узла (Dynamic Host Configuration Protocol (DHCP) (хотя DHCPv6 предназначается для более тонкого управления).
Эти пять типов ICMP сообщений не должны блокироваться внутри вашей сети (не учитываем внешний периметр), чтобы протокол передачи данных IP функционировал правильно.
Протокол межсетевых управляющих сообщений (ICMP) содержит много сообщений, которые идентифицируются полем «тип».
Тип | Наименование | Спецификация |
---|---|---|
0 | 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 |
Хотя ICMP-сообщения, подобные тем, которые описаны в статье, могут быть очень полезными, помните, что генерация всех этих сообщений занимает процессорное время на ваших маршрутизаторах и генерирует трафик. Вы действительно ожидаете, что вы получите 1000 пингов в секунду через ваш брандмауэр в обычной ситуации? Будет ли это считаться нормальным трафиком? Вероятно, нет. Ограничивайте пропускную способность сети для этих типов ICMP трафика, как вы считаете нужным; этот шаг может помочь вам в защите вашей сети.
Учитывая, что обсуждение темы «блокировать или не блокировать» ICMP-пакетов, всегда приводит к путанице, спорам и разногласиям, предлагаю продолжить изучать эту тему самостоятельно. На этой странице привел много ссылок, считаю для более полного понимания проблематики следует потратить время на их чтение. И сделать осознанный выбор того, что лучше всего подходит для вашей сети.
MikroTik: куда нажать, чтобы заработало?
При всех своих достоинствах, есть у продукции компании MikroTik один минус – много разобщенной и далеко не всегда достоверной информации о ее настройке. Рекомендуем проверенный источник на русском языке, где все собрано, логично и структурировано – видеокурс «Настройка оборудования MikroTik ». В курс входит 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект. Все материалы остаются у вас бессрочно. Начало курса можно посмотреть бесплатно, оставив заявку на странице курса. Автор курса является сертифицированным тренером MikroTik.
Блокирование ответов пинг в ОС может предотвратить атаки флуда ICMP пакетов, но большинство систем используют данную услугу для онлайн мониторинга (системного мониторинга). В своей теме «заблокировать Ping (ICMP) ответов в Unix/Linux» я расскажу как можно все-таки его выключить.
Блокировка PING на сервер является полезным, если сервер постоянно сталкивается с какой-то DoS атакой с помощью функции PING. При использовании IPTables мы можем просто остановить запретить прохождение ICMP пакетов (собственно, запретить PING) на сервер. Перед началом этого необходимо иметь представление о том, что такое Iptables в Linux. Iptables это система межсетевого экрана с набором правил, которые контролирует входящие и исходящие пакеты. По-умолчанию в Iptables работает без каких-либо правил, вы можете создавать, добавлять, редактировать правила.
Обьяснение некоторых параметров в iptables, которые необходимы для создания правил управления ICMP пакетами:
A: Добавляет правила.
-D: Удаляет правило с таблицы.
-p: Опция чтобы указать протокол (где ‘icmp’).
—icmp-type: Опция для указания типа.
-J: Перейти к цепочке.
Ниже, я приведу наглядные примеры.
Как заблокировать PING на сервере с выводом сообщений об ошибке?
Таким образом, вы можете частично блокировать PING с выводом сообщения об ошибке «Destination Port Unreachable». Добавьте следующие правила Iptables чтобы заблокировать PING с выводом сообщения об ошибке:
# iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
Заблокировать PING на сервере
без каких-либо сообщений об ошибках.
Для этого, используем команду для ИПтейбелс:
# iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP # iptables -A INPUT -p icmp --icmp-type echo-reply -j DROP
Заблокирует все входящие и исходящие ICMP пакеты на сервере.
Если заблокировали ping на сервере и не знаете как вернуть назад. То я сейчас расскажу как это сделать. А делается это, добавлением следующего правила в IPtables:
# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
Данные правила разрешат прохождения ICMP пакетов с сервера и на него.
Мы также можем блокировать пинг ответы непосредственно параметрами ядра. Можно заблокировать ответы на пинг временно или постоянно и внизу показано как это сделать.
Временная блокировка Ping
Вы можете заблокировать временно ответы на пинг используя следующую команду
# echo "1" >
Чтобы разблокировать эту команду, выполните следующую:
# echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
Запретить Ping вообще
Вы можете заблокировать пинг ответы добавляя следующий параметр в конфигурационный файл:
# vim /etc/sysctl.conf
И прописать:
[...] net.ipv4.icmp_echo_ignore_all = 1 [...]
sysctl используется для изменения параметров ядра во время выполнения, один из этих параметров может быть «ping daemon» (демон пинга), если вы хотите отключить пинг, то вы просто должны выполнить что-то вроде:
# sysctl -w net.ipv4.icmp_echo_ignore_all=1
Теперь попробуйте пинговать машину, никаких ответов на нее нет, не так ли? Для повторного включения пинга, используйте:
# sysctl -w net.ipv4.icmp_echo_ignore_all=0
W флаг используется, если вы хотите изменить некоторые настройки.
Теперь выполните следующую команду, чтобы немедленно применить настройки без перезагрузки системы:
# sysctl -p
# sysctl --system
Вот мой полный конфиг:
# cd /usr/local/src && wget http://сайт/wp-content/uploads/files/sysctl_conf.txt
и потом можно выполнить:
# cp /usr/local/src/sysctl_conf.txt /etc/sysctl.conf
На этом у меня все, тема «Заблокировать Ping (ICMP) ответов в Unix/Linux» завершена.