Read this article in
English
Рассмотрим создание и использование списков доступа (access lists) на примере схемы подключения малого офиса к сети Интернет с помощью маршрутизатора Cisco 881. Команды для настройки маршрутизаторов других серий (1841, 2800, 3825…) или коммутаторов 3 уровня (серии 3500, 4800…) будут аналогичными. Различия могут быть лишь в настройках интерфейсов.
В распоряжении имеем:
- несколько компьютеров и серверов в локальной сети офиса
- маршрутизатор Cisco 881
- коммутатор (используется для организации локальной сети офиса, без дополнительных настроек)
Задача: ограничить соединения, проходящие через маршрутизатор.

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

Ограничение удаленного доступа к маршрутизатору
Пример access list, который используется для ограничения удаленного доступа к консоли маршрутизатора только с определенных ip адресов. В нашем случае – адрес рабочей станции администратора.
Создаем список доступа ACL_REMOTE_ACCESS
R-DELTACONFIG(config)#
ip access-list standard ACL_REMOTE_ACCESS
permit ip host 192.168.0.100
Привязываем access list для ограничения доступа к удаленному управлению маршрутизатором только с адреса 192.168.0.100
R-DELTACONFIG(config)#
line vty 0 4
access- >ACL_REMOTE_ACCESS in
Важно!
Будьте осторожны и внимательно все проверьте перед применением. Ошибку можно будет исправить только подключившись консольным кабелем или сбросив настройки маршрутизатора до заводских.
Ограничение доступа в Интернет
Для ограничения доступа из локальной сети офиса в Интернет необходим соответствующий список доступа, а также привязка его к одному из интерфейсов маршрутизатора.
Допустим, что нужно ограничить выход пользователей в сеть Интернет следующим образом:
- разрешить доступ прокси серверу (http и https)
- разрешить доступ DNS серверу (TCP 53 и UDP 53)
- полный доступ администратору сети
- разрешить протокол ICMP для всех рабочих станций для работы команды Ping.
Создаем следующий список доступа ACL_INSIDE_IN и последовательно вводим правила доступа:
R-DELTACONFIG(config)#
ip access-list extended ACL_INSIDE_IN
доступ DNS сервера в Интернет
permit udp host 192.168.0.201 any eq 53
permit tcp host 192.168.0.201 any eq 53
доступ Прокси сервера в Интернет
permit tcp host 192.168.0.202 any eq 80
permit tcp host 192.168.0.202 any eq 443
полный доступ администратора
permit ip host 192.168.0.100 any
разрешение Ping для всей локальной сети
permit icmp 192.168.0.0 0.0.0.255 any
запрет иных подключений
deny ip any any log
Важно!
Обратите внимание на то, как записана строчка правила для протокола ICMP (Ping). В списках доступа на маршрутизаторах Cisco маска подсети пишется в обратном виде: не 255.255.255.0, а 0.0.0.255
После привязываем список доступа ко внутреннему интерфейсу Vlan 1 в направлении «внутрь маршрутизатора» (параметр in). Собственно, направление привязки всегда считается относительно устройства Cisco. Для удобства интерфейс и направление трафика указано в названии самого списка доступа: ACL_INS >входящего во внутренний интерфейс.
R-DELTACONFIG(config)#
interface Vlan 1
ip access-group ACL_INSIDE_IN in
С этого момента доступ наружу будет осуществляться в соответствии с примененным access list при условии, что корректно настроена трансляция адресов (NAT). Как это делается описано в статье про настройку доступа в интернет с помощью маршрутизатора Cisco.
Проверка работы access list
Проверить работу списка доступа можно посмотрев статистику срабатываний правил. После привязки списка доступа ACL_INSIDE_IN к интерфейсу Vlan 1 запустите Ping с любой из рабочих станций сети до любого адреса в Интернет (например до www.yandex.ru), а затем выполните из привилегированного режима (знак # рядом с названием устройства) команду show access-lists. Результат должен показывать количество срабатываний каждой из строк списка доступа:
R-DELTACONFIG# sh access-lists
Extended IP access list ACL_INSIDE_IN
…
60 permit icmp any any (4 estimate matches)
70 deny ip any any log
Важные аспекты использования списков доступа (access list)
- Список доступа состоит из строк – правил, показывающих определенный трафик
- Список доступа, привязанный к интерфейсу, ограничивает проходящие через этот интерфейс пакеты.
- Список доступа может быть привязан к интерфейсу в одном из направлений: входящем или исходящем.
- В списках доступа может быть указан или только источник соединения (standard, пример ограничения доступа по SSH) или источник и назначение соединения(extended, пример ограничения доступа в Интернет).
- Не может быть привязано более одного списка доступа к одному интерфейсу в одном направлении. Все необходимые правила должны быть указаны только в одном привязанном списке доступа.
Ограничение доступа из сети Интернет
Создаем список доступа ACL_OUTSIDE_IN для внешнего интерфейса. В нем указываем лишь то, что внешний интерфейс должен отвечать на ping, а все остальные запросы отклонять.
R-DELTACONFIG(config)#
ip access-list extended ACL_OUTSIDE_IN
permit icmp any interface //разрешение Ping
deny ip any any log //запрет иных подключений
Привязываем список доступа ко внешнему интерфейсу.
R-DELTACONFIG(config)#
interface FastEthernet 4
ip access-group ACL_OUTSIDE_IN in
Важно!
Все новые правила, которые потребуются для доступа изнутри или снаружи, следует добавлять в соответствующие списки доступа ДО строчки
deny ip any any log
Если какая-то строчка с разрешением окажется в списке после запрещающей, то она не будет хоть как-то влиять на трафик, так как маршрутизатор обрабатывает строки access list последовательно до первого совпадения.
Для изменения access list удобно зайти в сам список доступа, добавить все нужные разрешения, а после этого удалить последнюю строку (deny ip any any log) и тут же ее добавить. Выполняя это нехитрое правило запрещающая строка всегда будет в самом конце списка, а все правила будут идти в порядке добавления снизу вверх. Для наглядности разрешим доступ к маршрутизатору извне по протоколу http (TCP порт 80)
R-DELTACONFIG(config)#
ip access-list extended ACL_OUTSIDE_IN
permit tcp any interface eq 80
no deny ip any any log
deny ip any any log
Разрешение ответного трафика
После привязки списка доступа ACL_OUTSIDE_IN пропадает весь доступ из локальной сети ко всем ресурсам по любым протоколам кроме Ping. Это происходит из-за того, что фильтрующие трафик правила применяются и на внутреннем (ACL_INSIDE_IN) и на внешнем (ACL_OUTSIDE_IN) интерфейсах.
Для того, чтобы проходили все обратные пакеты на запросы из локальной сети указываем протоколы для функции Inspect.
R-DELTACONFIG(config)#
ip inspect name Internet http
ip inspect name Internet https
ip inspect name Internet dns
ip inspect name Internet icmp
Привязываем правило инспектирования ко внешнему интерфейсу.
R-DELTACONFIG(config)#
interface FastEthernet 4
ip inspect Internet out
Список разрешенных для инспекции служб можно расширить в будущем.
Надеюсь, что статья поможет Вам лучше понять принцип работы списков доступа. К сожалению эту достаточно простую тему очень сложно описать простым языком. Если у Вас возникли вопросы или какой-то момент остался неясным, напишите мне на адрес smogdelta@gmail.com или оставьте свой вопрос в комментариях.
Важно!
Не забудьте сохранить конфигурацию на всех устройствах командой write или copy run start. Иначе после перезагрузки все изменения будут потеряны.
R-DELTACONFIG-1# write
Building configuration.
[OK]

Второй интерфейс маршрутизатора (0/1) настроен с адресом 10.0.0.1 и так же включен.
Router(config)#int fa0/1
Router(config-if)#ip addre 10.0.0.1 255.255.255.0
Router(config-if)#no shut
Ну и сервер, настроен с адресом 10.0.0.100, маска подсети 255.255.255.0 и адрес шлюза по-умолчанию 10.0.0.1.
Проверяем запросом Ping с любого узла на адрес сервера. Всё должно проходить свободно.
Если вдруг пакеты не доходят, проверьте следующие параметры:
- Шлюз по-умолчанию совпадает с адресом ближайшего интерфейса маршрутизатора;
- Интерфейс маршрутизатора поднят;
- IP-настройки верны;
Поскольку ломаться тут, собственно говоря, нечему, будем считать, что достигли рабочей конфигурации. Итак, стандартные списки доступа.
Задача. Разрешить доступ на сервер только узлу с адресом 192.168.0.12, остальным запретить.
Важно запомнить, что пока не задан список доступа на интерфейсе (который можно повесить только один, кстати), всё разрешено. Но стоит повесить хотябы один список, то действует механизм (сверху вниз) “Всё, что не разрешено, то запрещено”. То есть нам нет необходимости создавать в конце правило типа “остальным – запретить”, оно подразумевается автоматически. Итак, раз нам нужно пропустить пакеты с узла 192.168.0.12, то его и зададим в качестве источника.
Общий вид правила Standart ACL выглядит так:
Router(config)#access-list 1 permit host 192.168.0.12
Итак, мы разрешили прохождение пакетов с адресом источника 192.168.0.12. Негласно, ниже прописалось невидимое правило deny всё остальное, поэтому запрещающее правило можно не создавать.
Применяется правило на интерфейс в зависимости от направления.
Router(config)#int fa0/0
Router(config-if)#ip access-group 1 in
Эта настройка означает, что список правил с номером 1 будет действовать на интерфейсе fa0/0 на входящем направлении.
После проверки легко убедиться в том, что теперь только узел с адресом 192.168.0.12 может посылать ping-запрос и получать ответ от сервера. Остальные узлы не могут.
Ну и теперь, предположим, нужно добавить новый узел в раздел “разрешённых”. Как это делаем? Повторяем команду, указывая просто новый IP адрес. Для отмены какого-либо правила – повторяем его с приставкой “no ” перед командой. Тогда это правило исключается из конфигурации.
А для того, чтобы просмотреть созданные ACL, воспользуемся командой show access-lists
Router#sh access-lists
Standard IP access list 1
permit host 192.168.0.12 (11 match(es))
Кстати, эта команда даёт нам весьма ценную информацию (11 match(es)), это значит, что прошло 11 пакетов, попадающих под это правило. Ну чем не статистика?
ACL (Access Control List) – это список управления доступом. Списки доступа позволяют сетевым инженерам идентифицировать пакеты различных типов. Для этого в конфигурации ACL перечисляют значения, которые маршрутизатор Cisco может найти в заголовках IP, TCP, UDP и др. Например, список доступа может распознать пакет с IP-адресом отправителя 1.1.1.1, или пакеты IP-адрес получателя которых находится в подсети 10.1.1.0/24, или пакеты с портом получателя TCP 23 (Telnet). Чаще всего списки доступа применяют как фильтр пакетов.
ACL применяется на:
- Интерфейсе: для фильтрации пакетов
- Telnet: для ограничения доступа к маршрутизатору
- VPN: для определения трафика, подлежащего шифрованию
- QoS: для определения трафика, который необходимо обработать
- NAT: для определения IP-адресов, которые необходимо транслировать
Сами по себе списки доступа представляют из себя список выражений, которые что-то разрешают, либо запрещают. ACL применяется на определенном интерфейсе и на одном направлении (входящем или исходящем). Таким образом, списки ACL могут быть применены к входящим на маршрутизатор пакетам раньше, чем он примет решение о их перенаправлении. Либо к исходящим пакетам, после того, как маршрутизатор примет решение о перенаправлении и направит пакет на данный интерфейс.

Рассмотрим простой пример. Когда из LAN1 (локальная внутренная сеть) приходит пакет на интерфейс f0/0 роутер проверяет входящий трафик по ACL строго в том порядке, в котором записаны выражения. Если ACL разрешает проходить пакету, то роутер отправляет на интерфейс f0/1. Перед отправкой пакета маршрутизатор проверяет исходящий трафик по ACL и только после этого принимает решение о его передаче в сторону ISP (Internet Service Proiver – провайдер).
При использовании ACL для фильтрации пакетов может быть выбрано только одно из двух действий. Команды конфигурации используют ключевые слова deny (запретить) и permit (разрешить), означающие соответственно отказ от пакета или разрешение его передачи.
Списки доступа ACL бывают двух видов:
- Стандартные (standart) – могут проверять только IP-адреса отправителей пакетов
- Расширенные (extended) – могут проверять адреса источников/получателей, тип протокола, UDP/TCP порты
ACL обозначаются порядковыми номерами (стандартные от 1 до 99, расширенные от 100 до 199), а также символьными именами.
Рассмотрим несколько важных правил, касающихся ACL:
- Нельзя разместить более одного списка доступа на интерфейс, протокол, направление;
- ACL не действует на трафик сгенерированный самим маршрутизатором;
- Для фильтрации пакетов используется обратная WildCard-маска (например 0.0.255.255 соответствует 255.255.0.0)
- Как только обнаруживается соответствие пакета в одной из строк списка ACL, маршрутизатор предпринимает действие, указанное в этой строке списка, и прекращает дальнейшее сравнение
- В конце каждого списка доступа стоит неявное deny any – запретить все
Стандартные нумерованные списки доступа используют следующую глобальную команду:
Каждый нумерованный список доступа ACL содержит одну или несколько команд access-list с любым номером из диапазона, представленного в строке синтаксиса выше. Помимо номера ACL, каждая команда содержит выбранное действие (permit или deny) и логику распознавания. Параметры команды access-list:
- permit – разрешить
- deny – запретить
- adress – запрещаем или разрешаем конкретную сеть (указываем ее Ip-адрес)
- any – запрещаем или разрешаем все
- host – запрещаем или разрешаем хост (указываем его Ip-адрес)
- source-wildcard – обратная маска
После создания списка доступа его необходимо применить на определенном интерфейсе:
Где in – входящее направление, out – исходящее направление.
Перейдем теперь к практике. Для начала настроем простую сеть, в которой будут ноутбук администратора, компьютеры обычных пользователей и сервер. Необходимо сделать так. чтобы доступ к серверу имел только администратор. Ip-план и схема прилагаются.
| Категория хоста | Ip-подсеть | Номер VLAN |
| Администратор | 172.16.0.0/24 | 2 |
| Сервера | 172.16.1.0/24 | 3 |
| Пользователи | 172.16.2.0/24 | 10 |

По традиции для тех кто будет собирать эту схему Packet tracer я привожу полную конфигурацию всех устройств с описанием команд.
Конфигурация для маршрутизатора:
Запускаем пинг с пользовательского компа до сервера

Как видим доступ есть. Нам же необходимо, чтобы доступ имел только админ. Для этого нам необходимо создать список доступа (пусть он будет иметь порядковый номер 10), в котором мы разрешим всем пакетам от администратора (172.16.0.100) доступ в подсеть серверов (172.16.1.0/24). После чего применим это правило на сабинтерфейсе fa0/0.3 (для серверов) для всех исходящих пакетов.
Тестируем настройки. Запускаем пинг с пользовательского компьютера в сторону сервера.
Пишет Destination host unreachable – хост назначения недоступен.
Запускаем пинг с компьютера администратора.

Пинг идет – значит ACL настроили правильно. Что происходит когда мы пингуем сервер с ноутбука администратора? Пакет сначала поступает на саибинтерфейс fa0/0.2 маршрутизатора. На данном интерфейсе не настроены списки доступа значит пакет проходит далее. Роутер смотрит в свою таблицу маршрутизации и видит что подсеть серверов находится на сабинтерфейсе fa0/0.3. Перед отправкой пакета маршрутизатор видит, что к данному интерфейсу прикреплен ACL 10. В данном списке доступа всего одна запись – разрешить отправку пакетов только хосту 172.16.0.100 (ноут админа). Маршрутизатор смотрит в Ip-пакет и видит адрес отправителя 172.16.0.100 после чего отправляет пакет в подсеть серверов. Ip-пакет с любым отличным от 172.16.0.100 будет отбрасываться, так как в конце ACL 10 стоит неявный deny any – запретить все.
Теперь перейдем к расширенным спискам доступа. Пользователям в нашей сети необходимо иметь доступ к файловому хранилищу и веб-сайту. Мы же ранее полностью ограничили им доступ к серверу. Необходимо исправить ситуацию и в этом нам помогут расширенные списки доступа. Расширенные списки доступа могут проверять Ip-адреса источника/отправителя, тип протокола, UDP/TCP-порты. В нашей ситуации необходимо будет проверять номера портов. Если пользователь обращается к серверу по разрешенному порту, то маршрутизатор пропускает такой пакет. Разрешенные порты: 80 (HTTP – доступ к веб-сайту), 21 (FTP – доступ к файловому хранилищу). Протоколы HTTP и FTP работают поверх TCP. Также для распознавания доменных имен на нашем сервере поднят DNS. DNS-сервер работает на порту 53.
Размещать расширенный список доступа будем на сабинтерфейсе fa0/0.3. Но на этом интерфейсе уже размещен список доступа. Вспоминаем правило: Нельзя разместить более одного списка доступа на интерфейс. Так что придется удалить созданный ранее список доступа. Правило, созданное для администратора перенесем в новый расширенный список с именем Server-out.
Конфигурация для маршрутизатора:
С компьютера админа пинг до сервера есть:

С компьютера пользователя пинга нет:

Проверим с компьютера пользователя проходят ли DNS-запросы до сервера. Для этого запустим утилиту nslookup – которая определяет Ip-адрес до доменному имени.

DNS-запросы проходят без проблем. Проверим доступ к нашему условному Web-сайту через браузер:

Напоследок подключимся к FTP-серверу:

Подключение прошло успешно!
Поддержите проект
Друзья, сайт Netcloud каждый день развивается благодаря вашей поддержке. Мы планируем запустить новые рубрики статей, а также некоторые полезные сервисы.
У вас есть возможность поддержать проект и внести любую сумму, которую посчитаете нужной.





