Списки доступа в маршрутизаторах Cisco
- Font size: Larger Smaller
- Hits: 7206
- 0 Comments
- Subscribe to this entry
- Bookmark
В маршрутизаторах фирмы Cisco существует возможность управления трафиком посредством списков доступа (ACL).
Важной особенностью является то, что они используются не только для управления доступом, а так же как для настройки таких вещей как NAT, IPSec туннелей, QoS и т.д.
Предлагаю перейти к практике и по ходу дела все разъяснится.
Идеалогия работы с ACL очень простая. Для начала создается список доступа по какому-либо критерию, а потом применяется для той или иной функции.
Существует два вида списков доступа: стандартный и расширенный.
Для начала начнем с стандартного списка доступа. Давайте зайдем на маршрутизатор и создадим какой-нибудь список.
Router>en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
Router(config)#exit
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
Router(config)#exit
Router#
Мы создали список доступа под номером 1 (диапазон номеров стандартных списков доступа от 1 до 99) и дали некий доступ (permit) подсети 192.168.1.0, при этом прошу обратить внимание на маску. Мы видим так называемую шаблонную маску. Что бы понять принцип ее работы давайте сопоставим с нашим ACL какой-нибудь ip адрес, к примеру 192.168.1.13. Нам необходимо представить наш ip адрес и шаблонную маску в двоичном коде и потом просуммировать их логически.
11000000.10101000.00000001.00001101 = 192.168.1.13
00000000.00000000.00000000.11111111 = 0.0.0.255
__________________________________
11000000.10101000.00000001.11111111 = 192.168.1.255
Теперь сделаем тоже самое только с адресом подсети 192.168.1.0 и шаблонной маской 0.0.0.255
11000000.10101000.00000001.00000000 = 192.168.1.0
00000000.00000000.00000000.11111111 = 0.0.0.255
__________________________________
11000000.10101000.00000001.11111111 = 192.168.1.255
Мы видим, что результат получился один и тот же, следовательно наш ip адрес 192.168.1.13 попадает под ACL.
Становится очевидно, что шаблонная маска позволяет нам отделить ту часть, которая должна быть уникальной (где в маске стоят нули) и часть которая может быть переменной (где в маске стоят единицы).
Таким образом мы определили диапазон адресов которые попадают под наш ACL (192.168.1.0-192.168.1.255).
Стандартный список доступа мы создали. Дело за малым, применить его. Как я уже говорил ACL можно применить к разным вещам (NAT, IPSec, QoS, ...). Мы применим его к интерфейсу просто для разграничения доступа. Итак, снова идем на наш маршрутизатор и применим созданный нами список доступа на интерфейс FastEthernet0/0
Router>en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#int fa0/0 - заходим в настройку интерфейса
Router(config-if)#ip access-group 1 in - применяем созданный нами ACL на входящий трафик. "in" указывает что ACL будет применяться на входящий трафик.
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#int fa0/0 - заходим в настройку интерфейса
Router(config-if)#ip access-group 1 in - применяем созданный нами ACL на входящий трафик. "in" указывает что ACL будет применяться на входящий трафик.
У нас получилось, что когда пакеты будут приходит на интерфейс fa0/0, они будут проверяться на соответствие с списком доступа 1 и в случае совпадения проходить, в случае несовпадения отбрасываться.
Мы можем настроить список доступа и на исходящие пакеты, тогда вместо "in" нужно указать в команде "out". Давайте перенастроим.
Router>en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#int fa0/0
Router(config-if)#no ip access-group 1 in - снимаем список доступа 1 на входящие пакеты посредством "no" перед командой
Router(config-if)#ip access-group 1 out - назначаем список доступа 1 на исходящий трафик "out"
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#int fa0/0
Router(config-if)#no ip access-group 1 in - снимаем список доступа 1 на входящие пакеты посредством "no" перед командой
Router(config-if)#ip access-group 1 out - назначаем список доступа 1 на исходящий трафик "out"
Теперь фильтроваться по данному списку доступа будут исходящие пакеты, а не входящие.
В первом случае список доступа подходит в ситуации когда мы хотим, что бы через интерфейс fa0/0 обращаться к другим сетям могли только компьютеры из сети 192.168.1.0
Во втором случае список доступа подходит в ситуации когда мы хотим, что бы к сети, подключенной к интерфейсу fa0/0 могли обращаться только из сети 192.168.1.0
Надеюсь разницу вы поняли ;)
Перейдем к расширенному списку доступа.
Принцип похож и так же легко настраивается, но при этом дает нам больше возможностей для фильтрации трафика. Предлагаю создать какой-нибудь расширенный список доступа и рассмотреть его.
Router>en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#access-list 100 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#access-list 100 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
Разберем наш список доступа (рис.1)
Рис.1
V1 - номер списка доступа. Для расширенного списка доступа определен диапазон от 100 до 199
V2 - что мы будем делать с нашим трафиком. permit является разрешающей командой. Если мы хотим запретить, то необходимо вместо permit поставить deny
V3 - указываем протокол с каким хотим работать.
V4 - адрес и шаблонная маска сети источника пакета, т.е. от кого пришел пакет
V5 - адрес и шаблонная маска сети назначения пакета, т.е. то куда направляется пакет
Применим наш список доступа на интерфейс fa0/0
Делается это так же как и с стандартным списком доступа
Router(config)#int fa0/0
Router(config-if)#ip access-group 100 in
Router(config-if)#ip access-group 100 in
В результате проделанных нами настроек получилась следующая ситуация. Когда пакет приходит на порт fa0/0 он проверяется на соответствие с списком доступа 100. Мы разрешили прохождение пакетов из подсети 192.168.1.0 в подсеть 192.168.2.0
Очень важное замечание: В конце каждого списка доступа cisco автоматически добавляет невидимую строку deny ip any any, таким образом запрещая остальной трафик не попавший в наш список доступа. Это относится как к стандартному так и расширенному списку доступа. В нашем случае получается что когда пакеты приходят на интерфейс fa0/0, дальше могу пройти только пакеты с адресом источника из подсети 192.168.1.0 и с адресом назначения из подсети 192.168.2.0. Все остальные пакеты будут отбрасываться.
Если мы не хотим, что бы остальные пакеты сбрасывались можно добавить команду:
Router(config)#access-list 100 permit ip any any - разрешает ip пакеты от любого источника любому получателю
Однако добавляя такую команду есть смысл задуматься зачем мы вообще создаем список доступа :)
Мы с вами разобрали стандартные и расширенные списки доступа и можем видеть, что стандартный список доступа смотрит на адрес источника, в то время как расширенный список доступа может проверять адрес источника и адрес пункта назначения пакета. Мне хочется описать еще одну такую важную возможность расширенных списков доступа как фильтрация по протоколу.
Предположим, что нам нужно сделать так что бы пакеты приходящие их подсети 192.168.1.0 могли обращаться только к подсети 192.168.2.0 причем только по протоколу telnet. Выполнить такую задачу очень просто. Для этого создадим такой вот ACL:
Router(config)#access-list 101 permit tcp 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 eq telnet
Router(config)#int fa0/0
Router(config-if)#no ip access-group 100 in - на забываем снять старый список доступа
Router(config-if)#ip access-group 101 in
Что изменилось по сравнению с предыдущим примером? Вместо протокола ip мы указали tcp, иными словами указали, что фильтрация должна быть более конкретная, а именно по набору протоколов которые работают через tcp. В конце команды добавилось eq telnet, где eq означает равенство и telnet соответственно протокол, который мы разрешаем.
Задача выполнена :)
В заключение хочется сказать, что списки доступа являются довольно обширной темой, их применение довольно широкое и они еще встретятся нам в будущих статьях ;)
Надеюсь данный документ был вам полезен. До встречи в новых постах ;)