Основы компьютерных сетей #10 — ACL (Access Control List)

ACL (Access Control List) в сетях применяется для фильтрации трафика на основе различных параметров, таких как IP адреса, номера портов, протоколы и т.д. Если совсем просто, ACL позволяют ограничить или разрешить доступ хостам к каким-либо частям инфраструктуры или иным ресурсам.

Перейдем сразу к практике и походу дополним ее теорией.

Схема следующая

PC1 — 192.168.10.2/24
PC2 — 192.168.10.3/24
PC3 — 192.168.10.4/24

Шлюз для ПК — 192.168.10.1/24

Web Server — 1.1.1.2/30 1.1.1.1 шлюз

R1

conf t
hostname R1
int e0/0
ip address 1.1.1.1 255.255.255.0
no shutdown
exit
int e1/0
ip address 192.168.10.1 255.255.255.0
no shutdown

Проверим доступность, сделаем пинг с ПК на Web Server и до шлюза.

Далее настроим ACL, например ограничим доступ по  ssh до Web Server для PC2 и PC3.

R1

conf t
access-list 1 permit host 192.168.10.2 // access list под номером 1, в нем разрешить доступ с хоста 192.168.10.2
do sh access-lists // посмотреть наши правила ACL

Здесь важно отметить, с дефолтными настройки разрешено все. При создании первого ACL “включается” правило — запрещено все, что не разрешено. Соответственно если мы сделали для 192.168.10.2 permit, для других автоматически применяется deny (отказ в доступе)

R1

int e1/0  // навешиваем acl на интерфейс
ip access-group 1 in // применить ACL 1 на in (входящий) или out (исходящий) трафик. Как правило используют in чтобы трафик отбрасывался сразу на входящем интерфейсе, в случае с out трафик дойдет до интерфейса и будет обрабатываться на роутере (иногда это бывает нужно, но не в большинстве случаев).

Проверим. Сделаем пинг с ПК1 до WebServer и с ПК2 аналогично. В первом случае все будет работать, во втором мы увидим, что пинг не проходит.

Разрешим доступ для PC2

R1

conf t
access-list 1 permit host 192.168.10.3
do sh access-lists

Проверим с ПК2 и видим, что пинг пошел.

Представим, что нам нужно запретить доступ для ПК2. 

R1

conf t
ip access-list s 1 // s - standard (еще есть e - extended), данной командой мы редактируем хосты из стандартного ACL с именем 1
do sh access-lists
// смотрим под каким номером наше правило для ПК2
no 20 // убираем его

Реализация заключается в том, чтобы снять с ПК2 разрешение, и он автоматически попадет под запрет (говорили об этом выше).

Проверяем. Пинг снова не проходит.

Теперь рассмотрим extended acl. Здесь применяются более гибкие и интересные правила. На Web Server у меня поднят apache в docker. Соответственно разрешим ПК1 доступ по http и https и запретим для ПК2.

R1

conf t
ip access-list extended 111
permit tcp 192.168.10.2 0.0.0.0 1.1.1.2 0.0.0.0 eq 80 //eq позволяет указать порт
permit tcp 192.168.10.2 0.0.0.0 1.1.1.2 0.0.0.0 eq 443
deny tcp 192.168.10.3 0.0.0.0 1.1.1.2 0.0.0.0 eq 80
deny tcp 192.168.10.3 0.0.0.0 1.1.1.2 0.0.0.0 eq 443
exit
int e1/0
ip access-group 111 in
exit
exit
wr mem

Проверяем, видим, что с ПК1 apache открывается, с ПК2 и с ПК3 нет (если возникает вопрос почему на ПК3 нет доступа, читаем еще раз внимательно выше).

Разрешим доступ для ПК3

R1

conf t
ip access-list extended 111
permit tcp 192.168.10.4 0.0.0.0 1.1.1.2 0.0.0.0 eq 80 
permit tcp 192.168.10.4 0.0.0.0 1.1.1.2 0.0.0.0 eq 443

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

sh access-lists