Access-lists (ACL) – списки доступа. В основном используются для ограничения доступа пользователей куда-либо или для фильтрации нежелательного трафика из внешнего мира, согласно политикам безопасности, утвержденными в организации. Помимо традиционных способов использования списков доступа, их используют для настройки NAT, IPSec VPN, для создания карт маршрутизации и многих других функций.
Два главных атрибута любого списка доступа – это команды permit (разрешить) и deny (запретить), после которых обычно прописывается IP адрес устройства и его Wildcard Mask.
На устройствах Cisco наиболее распространены так называемые стандартные (standard) и расширенные (extended) списки доступа:
- Standard. В стандартном списке доступа можно задавать только IP адреса или IP подсети, которые являются источником отправки данных. Стандартному списку доступа можно присвоить либо числовое значение, как правило, от 1 до 99, либо буквенное. Предпочтительно задавать именно буквенное значение, чтобы в дальнейшем было проще ориентироваться среди списков доступа.
Предположим, нам необходимо указать IP адрес рабочей станции администратора сети, с которого будет разрешен удаленный доступ на устройство, а доступ с остальных хостов нужно запретить. Для этого необходимо создать список доступа командой ip access-list standard VTY_Access, где VTY_Access — название списка доступа. Далее разрешим удаленный доступ рабочей станции администратора с IP адресом 192.168.1.55 командой permit host 192.168.1.55. Нет необходимости указывать явный запрет для всех остальных IP адресов командой deny any, так как подобный запрет по умолчанию добавляется в конец любого списка доступа. Все это будет выглядеть так:
telecombook(config)#ip access-list standard VTY_Access telecombook(config-std-nacl)#permit host 192.168.1.55
Теперь повесим данный список доступа на интерфейс VTY командой access-class VTY_Access in, где in – направление трафика, т.е. наш список доступа будет учитывать весь входящий трафик, что нам и нужно.
Если вы хотите вести учет событий и просматривать IP адреса устройств, с которых происходили несанкционированные попытки доступа, то данную функцию можно активировать командой deny any log, прописав ее в конце списка доступа.
Вместо отдельного хоста можно также разрешить IP адреса подсети администраторов, например, 192.168.1.64 с маской 255.255.255.192 командой permit 192.168.1.64 0.0.0.63, где 0.0.0.63 обратная маска, ее также называют wildcard маской. Подробнее о wildcard масках можно прочитать в статье Wildcard Mask.
Пример:
telecombook(config)#ip access-list standard VTY_Access telecombook(config-std-nacl)#permit 192.168.1.64 0.0.0.63
Важно учитывать, что устройство читает список доступа сверху вниз, поэтому нужно заранее продумывать порядок команд. Например:
telecombook(config)#ip access-list standard VTY_Access telecombook(config-std-nacl)#permit 192.168.1.64 0.0.0.63 telecombook(config-std-nacl)#deny host 192.168.1.70
…и…
telecombook(config)#ip access-list standard VTY_Access telecombook(config-std-nacl)#deny host 192.168.1.70 telecombook(config-std-nacl)#permit 192.168.1.64 0.0.0.63
…это не одно и тоже. В первом случае все IP адреса подсети 192.168.1.64/26 будут разрешены, фактически вторая команда оказывается бесполезной. Во втором случае список доступа разрешает также все адреса подсети 192.168.1.64/26 кроме адреса 192.168.1.70.
- Extended. Расширенные списки доступа. В расширенном списке доступа можно задавать IP адреса, IP подсети, порты и даже протоколы. Здесь также указываются адреса не только отправителя, как в стандартном списке доступа, но и адреса назначения. Расширенному списку доступа можно присвоить либо числовое значение от 100 до 199, либо буквенное.
Расширенный список доступа можно использовать, например, для разграничения трафика между VLAN. Допустим нам необходимо запретить трафик из IP подсети VLAN 100 192.168.1.0/24 в IP подсеть VLAN 200 192.168.2.0/24, а во все остальные сети разрешить. Для этого нам понадобится расширенный список доступа. Создадим его командой ip access-list extended VLAN_100_to_200_Access. Теперь явно запретим трафик из сети 192.168.1.0/24 в сеть 192.168.2.0/24 командой deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255, а весь остальной трафик разрешим командой permit ip any any, где ip — есть IP протокол. Повесим этот список доступа на VLAN 100 командой ip access-group VLAN_100_to_200_Access in. Таким образом, всем устройствам, подключенным к VLAN 100 будет запрещен доступ в сеть VLAN 200.
Пример:
telecombook(config)# ip access-list extended VLAN_100_to_200_Access telecombook(config-ext-nacl)#deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 telecombook(config-ext-nacl)#permit ip any any telecombook(config)#interface VLAN100 telecombook(config-if)#ip access-group VLAN_100_to_200_Access in
Правилом хорошего тона считается ставить примечания к строчкам любого списка доступа командой remark, напрмер, remark — from VLAN100 to VLAN200 — и remark — from VLAN100 to VLAN300 —.
Пример:
telecombook(config)# ip access-list extended VLAN_Access telecombook(config-ext-nacl)#remark - from VLAN100 to VLAN200 – telecombook(config-ext-nacl)#deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 telecombook(config-ext-nacl)#remark - from VLAN100 to VLAN300 – telecombook(config-ext-nacl)#deny ip 192.168.1.0 0.0.0.255 192.168.3.0 0.0.0.255 telecombook(config-ext-nacl)#permit ip any any
При желании можно также указать время, когда тот или иной список доступа будет работать командой time-range Work, где Work – название диапазона времени. Затем укажем, допустим, рабочие часы командой periodic weekdays 9:00 to 18:00. Далее необходимо создать расширенный список доступа, в котором разрешим сотрудникам просматривать web-страницы по протоколу 80 и 443 только с 9.00 до 18.00 в рабочие дни. Для этого нужно прописать команды permit tcp any any time-range Work eq 80 и permit tcp any any time-range Work eq 443.
Если у вас достаточно длинный и неорганизованный в плане порядковых номеров расширенный список доступа, то можно привести нумерацию в порядок командой ip access-list resequence (номер списка) (начальный порядковый номер) (шаг).
Пример изменения порядковых номеров списка доступа для NAT:
telecombook(config)#do sh ip access-lists 100 Extended IP access list 100 10 deny ip 172.16.0.0 0.0.255.255 10.72.0.0 0.0.255.255 20 deny ip 172.16.0.0 0.0.255.255 192.168.0.0 0.0.255.255 (7838 matches) 27 permit tcp host 199.99.99.99 eq 443 host 172.16.16.16 eq 443 28 deny ip 199.99.99.0 0.0.0.255 any (34602 matches) 30 permit ip any any (298676 matches) telecombook(config)#ip access-list resequence 100 10 10 telecombook(config)#do sh ip access-lists 100 Extended IP access list 100 10 deny ip 172.16.0.0 0.0.255.255 10.72.0.0 0.0.255.255 20 deny ip 172.16.0.0 0.0.255.255 192.168.0.0 0.0.255.255 (7936 matches) 30 permit tcp host 199.99.99.99 eq 443 host 172.16.16.16 eq 443 40 deny ip 199.99.99.0 0.0.0.255 any (34904 matches) 50 permit ip any any (299146 matches)
Рефлексивный список доступа
Рефлексивный список доступа используется для фильтрации трафика в одну сторону с возможностью получения ответных пакетов. Рефлексивные списки доступа не доступны на коммутаторах.
В качестве примера, реализуем с помощью рефлексивного списка доступа модель одностороннего доступа в незащищенную сеть с рабочей станции администратора, как показано на рисунке:
interface VLAN50 description Untrusted ip access-group INBOUND in ip access-group OUTBOUND out ! ip access-list extended OUTBOUND permit tcp host 10.0.0.1 any reflect ADMINACCESS permit udp host 10.0.0.1 any reflect ADMINACCESS ! ip access-list extended INBOUND evaluate ADMINACCESS deny ip any 10.0.0.0 0.255.255.255 permit ip any any
Команда reflect используется для создания обратного ACL, который мы добавили на входящий интерфейс с помощью команды evaluate.