Урок 38. Списки доступа ACL (Access Control List)

 

Краткая теория

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

Запретить/разрешить мы можем на основе IP адресов, портов и задействованных протоколов. На этом принципе и работают списки управления доступом ACL (Access Control List). 

Другим примером использования списков доступа является запрет поступающих на маршрутизатор пакетов протокола ICMP. Как мы знаем с помощью ICMP работают утилиты Ping, Traceroute/Tracert. С помощью данных утилит можно просканировать сеть, а это нежелательно с точки зрения политики безопасности каждой сети. 

Списки доступа позволяют фильтровать трафик на входе и выходе интерфейса маршрутизатора. 

И в чем же разница? 

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

Принцип обработки входящего трафика

Когда ACL настроены на выходе интерфейса, то  трафик фильтруется сразу же после процесса маршрутизации:

Принцип обработки исходящего трафика

Данная особенность может быть полезна при определенных обстоятельствах.  

Так что же из себя представляют списки доступа и как они работают? 

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

При поступлении трафика проверка списка доступа начинается сверху вниз, то есть с первой инструкции. Как только будет найдено совпадение проверка списка прекратится и будет выполнено действие, указанное в инструкции (заблокировать или пропустить).

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

 

Виды  ACL

Cisco IOS поддерживает 3 типа ACL: 

    • стандартные списки
    • расширенные списки
    • именованные списки

Стандартные списки позволяют проверять только IP адрес отправителя. Например,в нашем 1-ом примере доступ в интернет Алисе и Кате можно закрыть с помощью стандартного списка. В данном случае блокируется абсолютно весь трафик, проходящий через маршрутизатор. Стандартные списки доступа рекомендуется устанавливать как можно ближе к отправителю. 

Расширенные списки позволяют фильтровать пакеты на основе адресов, портов и  протоколов получателя и отправителя. Например, Алисе разрешается использовать электронную почту, но все еще запрещается использовать остальной доступ в интернет. Кате же разрешены звонки по интернет и запрещены все остальные службы интернет. 

Электронная почта работает по протоколам POP/SMTP (порты 110/ 25). Следовательно можно внести исключение в списки доступа исходя из выше описанных условий. То же самое касается и IP телефонии - выбираем задействованный протокол и порт и вносим в список доступа. 

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

Именованные списки являются теми же стандартными и расширенными ACL, однако предоставляют более гибкие возможности для редактирования (об этом немного позже).

 

Настройка ACL

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

 

Стандартный список доступа

Router(config)# access-list номер permit | deny IP_адрес_отправителя инвертированная_маска (wildcard mask) 

Например, так 

Router(config)# access-list 1 deny 192.168.1.0 0.0.0.255

Router(config)# access-list 1 permit 10.1.0.0  0.0.255.255

Router(config)# access-list 1 deny any

Номер списка принимает значения от 1 до 99. Цифры не означают приоритет или упорядоченность. Это просто номер списка. Затем следует команда permit (разрешить) или deny (запретить).

С помощью инвертированной маски (wildcard mask) мы можем определить диапазон адресов, на которые будет распространяться запрет/разрешение.  

В первой команде мы запрещаем сеть 192.168.1.0/24, а во второй разрешаем сеть 10.1.0.0/16. 

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

А как работает инвертированная маска (wildcard mask)? 

Работа инвертированной маски основана на следующем принципе.

На тех битовых позициях, где установлен 0 IP адрес устройства должен совпадать с адресом, указанным в настройках ACL.

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

 

Пример №1

Необходимо разрешить доступ диапазону адресов 192.168.1.0 - 192.168.1.255. Так как первые 3 октета должны совпадать полностью, а четвертый может принимать любые значения, то используем маску 0.0.0.255. Вот как это выглядит на рисунке:

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

 

Пример №2

К диапазону 192.168.1.0-192.168.1.255 добавим еще один диапазон 192.168.2.0 - 192.168.2.255.

Теперь у нас должны совпадать первые 2 октета полностью и первые 6 бит третьего октета. Поэтому маска у нас 0.0.3.255. А в настройках ACL мы укажем адрес 192.168.0.0. Можно, конечно, указать сразу 2 отдельные команды на каждый диапазон, с помощью маски мы можем сократить запись:

Пример №2. К диапазону 192.168.1.0-192.168.1.255 добавим еще один диапазон 192.168.2.0 - 192.168.2.255. Теперь у нас должны совпадать первые 2 октета полностью и первые 6 бит третьего октета. Поэтому маска у нас 0.0.3.255. А в настройках ACL мы укажем адрес 192.168.0.0. Можно, конечно, указать сразу 2 отдельные команды на каждый диапазон, с помощью маски мы можем сократить запись

 

Пример №3

Необходимо разрешить/запретить диапазон 200.40.0.4 - 200.40.0.7. У нас совпадают полностью первые 3 октета и первые 6 бит четвертого октета:

Пример №3. Необходимо разрешить/запретить диапазон 200.40.0.4 - 200.40.0.7. У нас совпадают полностью первые 3 октета и первые 6 бит четвертого октета

После того, как список создан, необходимо определить направление (входящий или исходящий)  трафика и на каком интерфейсе он будет фильтроваться: 

Router(config-if)# ip access-group номер_применяемого_списка in | out 

in - входящий трафик

out - исходящий трафик

Алгоритм работы стандартного списка выглядит так:

Алгоритм работы стандартного ACL

 

Расширенный список доступа 

Расширенные списки доступа имеют номера от 100 до 199.

Команды имеют довольно широкий набор опций, поэтому покажу наиболее общий пример команды: 

Router(config)#access-list номер permit | deny протокол IP_адрес_отправителя инвертированная_маска порт_отправителя IP_адрес_получателя инвертированная_маска порт_получателя 

И вот пример:

Router(config)#access-list 100 permit tcp 192.168.1.0 0.0.0.255 eq 80 10.1.1.0 0.0.0.255 eq 443 

Данная  команда разрешает TCP трафик от хостов с диапазоном 192.168.1.0/24 на хосты с диапазоном 10.1.1.0/24. Причем порты отправителя должны быть равны  80, а порты получателя - 443. Если все  эти условия соблюдаются, то пакет пропускается, если нет, то  переходит к следующей команде.

Router(config)#access-list 100 deny tcp  any host 172.16.1.5 gt 5000 - А вот эта команда запрещает весь TCP трафик от любого хоста на конкретный хост с адресом 172.16.1.5. Причем запрет действует при условии, что запросы  идут на порты получателя от 5001 и выше. 

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

Вот как выглядит алгоритм работы расширенных списков:

Алгоритм работы расширенного ACL

Для просмотра настроек используйте следующие команды: 

Router# show running-config

Просмотр настроек ACL в текущей конфигурации

Router# show ip access-lists

Отображение списка настроенных ACL

Router# show ip access-lists interface название_интерфейса

настройки ACL на конкретном интерфейсе

 

 

Именованный список доступа

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

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

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

Синтаксис команд представлен ниже. 

Для стандартных списков: 

Router(config)# ip access-list standard название

Router(config-std-nacl)# permit host IP_адрес_отправителя

Router(config-std-nacl)# deny IP_адрес_отправителя инвертированная_маска

 

Для расширенных списков: 

Router(config)# ip access-list extended название

Router(config-ext-nacl)# permit ip IP_адрес_отправителя инвертированная_маска IP_адрес_получателя инвертированная_маска

Router(config-ext-nacl)# deny tcp  IP_адрес_отправителя инвертированная_маска порт_отправителя  IP_адрес_получателя инвертированная_маска порт_получателя

 

Чтобы удалить ненужную команду достаточно узнать ее номер. Чтобы узнать номер введите команду: 

Router# show ip access-list название

Отображение настроек именованного ACL

а затем указать ее номер при удалении: 

Router(config-ext-nacl)# no 10 - этого уже достаточно. 

Ну а чтобы добавить команду достаточно тоже указать номер и затем саму команду.

Обращаю ваше внимание, что удаление и добавление строк списка происходит в режиме настройки ACL, например так: 

Router(config-ext-nacl)# 5 deny ip any any

 

Пример использования списков доступа

Рассмотрим сеть ниже:

Упрощенная схема сети предприятия

Сеть состоит из 3 частей:

    • Внутренняя сеть - основная инфраструктура локальной сети любого предприятия.
    • Демилитаризованная зона DMZ - в ней располагаются сервера, которые доступны из интернета. Доступ во внутреннюю сеть из этой зоны закрыт из соображений безопасности.
    • Внешняя сеть - связывается напрямую с провайдером. Обычно состоит из маршрутизаторов и сетевых экранов (firewalls).

 

Именно по этому принципу и строятся сети предприятий. Задача у нас следующая:

    1. Всем серверам из DMZ запретить доступ во внутреннюю сеть
    2. Всем серверам из DMZ разрешить двустороннюю связь в интернет
    3. Пользователям из интернета разрешить доступ на серверы в DMZ, учитывая протокол взаимодействия и порты TCP/UDP
    4. Разрешить доступ внутренним пользователям на серверы DMZ
    5. Запретить Алине и Саше доступ в интернет и DMZ, то есть они могут работать только во внутренней сети.

 

Пункт №1 можно решить с помощью расширенного списка на маршрутизаторе LAN_Router:

просмотр ACL в текущей конфигурации

На самом деле в данном примере серверы не имеет доступа к внутренним компьютерам, потому что подключены к различным интерфейсам маршрутизатора Firewall. Данный маршрутизатор ничего не знает о сети 192.168.1.0/24, поэтому не может перенаправить пакеты серверов к маршрутизатору LAN_Router. Однако достаточно маленькой ошибки в конфигурации и внутренние компьютеры станут доступны не только для DMZ, но и для внешней сети.

Поэтому список доступа на маршрутизаторе LAN_router безусловно необходим. 

А какие ошибки могут привести к тому, что сеть LAN будет доступна для DMZ? 

Например, на маршрутизаторе Firewall при настройке статического маршрута может быть по ошибке указан интерфейс, ведущий к маршрутизатору LAN_Router. Или на маршрутизаторе LAN_Router будет выполнена команда redistribute connected. В данный момент между 2-мя маршрутизаторами настроен EIGRP. Если выполнить вышеназванную команду, то маршрутизатор Firewall узнает о сети LAN.

 

Пункты №2  и №3 не требуют списков доступа. Достаточно настроить правильно маршрутизацию и NAT на маршрутизаторе Firewall:

Отображение настроек NAT

Пункт №4. Внутренние пользователи уже имеют доступ в зону DMZ, однако связь будет работать только в одну сторону, так как мы закрыли доступ еще в п.1. 

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

Решение простое - достаточно настроить NAT на маршрутизаторе LAN_Router. Тогда только внутренние пользователи смогут подключаться к серверам, а сервера уже не смогут из-за активированного списка доступа. Однако это не единственное решение:

Настройки NAT и ACL в текущей конфигурации

Пункт №5 решается с помощью стандартного списка:

Отображение настроек стандартного ACl

На этом все.