среда, 6 февраля 2013 г.

Лабораторная работа №2 - конфигурирование Telnet и SSH доступа



Цель данной лабораторной работы - научиться конфигурировать доступ к оборудованию Juniper по протоколам Telnet и SSH. В процессе выполнения работы я также покажу метод подключения эмулируемых устройств среды GNS3 к внешнему миру или вашей локальной сети. Для этого необходимо будет установить несколько пакетов на хостовую машину (напомню, что все действия выполняются на Ubuntu Linux) и соответствующим образом настроить среду GNS3.

Настройка хостовой машины

Для начала необходимо установить пакет для работы с интерфейсами tap и tun:
sudo apt-get install uml-utilities
Далее с помощью утилиты tunctl создаем интерфейс tap0 (к нему будут подключаться устройства из среды GNS3) и сбрасываем настройки нашего физического интерфейса (у меня это eth0). Важно указать ключ -u <user-name> это позволит работать с интерфейсом не запуская GNS3 из под root.
sudo tunctl -t tap0 -u velp
sudo ifconfig tap0 0.0.0.0 promisc up
sudo ifconfig eth0 0.0.0.0 promisc up
Создаем мостр для соединения нашего физического интерфейса eth0 и виртуального tap0, добавляем в него наши интерфейсы, включаем его и получаем ip адрес по dhcp (у меня в сети настроен сервер dhcp):
sudo brctl addbr gns3-br0
sudo brctl addif gns3-br0 tap0
sudo brctl addif gns3-br0 eth0
sudo ifconfig gns3-br0 up
sudo dhclient gns3-br0
После этих не хитрых действий подключение на хостовой машине должно работать через наш мост gns3-br0 (проверить можно командой: ping ya.ru -I gns3-br0).

Настройка среды GNS3

В рабочей области строим топологию сети, добавляем один свитч, одно облако (Cloud), одно устройство Juniper.
Для подключения к локальной сети или интернету конфигурируем элемент Cloud, на вкладке NIO TAP добавляем интерфейс tap0

Конфигурирование Juniper

Делаем базовую настройку роутера
root# set system host-name Juniper
root# set system root-authentication plain-text-password
root# set system login user velp authentication plain-text-password
root# set interfaces em0 unit 0 family inet address 192.168.14.41/24
Проверим внесенные нами изменения
root# show | compare
[edit system]
+  host-name Juniper;
+  root-authentication {
+      encrypted-password "$1$CUW1v$mVB8gr6TG8ox4/TbkGS9h7xV8."; ## SECRET-DATA
+  }
+  login {
+      user velp {
+          class super-user;
+          authentication {
+              encrypted-password "$1$CUW1v$m8ox4/TbkGS9h7xV8."; ## SECRET-DATA
+          }
+      }
+  }
+  services {
+      ssh {
+          protocol-version v2;
+      }
+  }
+  interfaces {
+      em0 {
+          unit 0 {
+              family inet {
+                  address 192.168.14.41/24;
+              }
+          }
+      }                              
+  }
Сохраняем наши изменения
root@# commit
пинг до нашего шлюза (у меня это 192.168.14.1) уже должен появится
root@Juniper# run ping 192.168.14.1 count 5 
PING 192.168.14.1 (192.168.14.1): 56 data bytes
64 bytes from 192.168.14.1: icmp_seq=0 ttl=64 time=4.866 ms
64 bytes from 192.168.14.1: icmp_seq=1 ttl=64 time=4.624 ms
64 bytes from 192.168.14.1: icmp_seq=2 ttl=64 time=5.213 ms
64 bytes from 192.168.14.1: icmp_seq=3 ttl=64 time=3.305 ms
64 bytes from 192.168.14.1: icmp_seq=4 ttl=64 time=6.236 ms

--- 192.168.14.1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 3.305/4.849/6.236/0.948 ms
По-умолчанию на Juniper все порты закрыты, в этом можно убедиться сканировав порты утилитой nmap с хостовой машины
nmap -PN 192.168.14.41

Starting Nmap 5.21 ( http://nmap.org ) at 2013-02-05 17:26 MSK
Nmap scan report for 192.168.14.41
Host is up (0.011s latency).
All 1000 scanned ports on 192.168.14.41 are closed

Nmap done: 1 IP address (1 host up) scanned in 1.38 seconds
Настраиваем протокол SSH. Указываем какую использовать версию протокола
root@Juniper# set system services ssh
root@Juniper# set system services ssh protocol-version v2
запрещаем подключаться по ssh с лгином root
root@Juniper# set system services ssh root-login deny
ограничиваем количество одновременных подключений (в примере 10)
root@Juniper# set system services ssh connection-limit 10
ограничиваем число попыток ввода пароля за одну минуту (в примере не более 5 попыток в минуту)
root@Juniper# set system services ssh rate-limit 5
Настраиваем протокол telnet. Ограничиваем количество одновременных подключений (в примере 10)
root@Juniper# set system services telnet connection-limit 10
ограничиваем число попыток ввода пароля за одну минуту (в примере не более 5 попыток в минуту)
root@Juniper# set system services telnet rate-limit 5
Посмотрим все изменения внесенные нами в конфигурацию
root# show | compare
[edit system]
+  services {
+      ssh {
+          root-login deny;
+          protocol-version v2;
+          connection-limit 10;         
+          rate-limit 5;
+      }
+      telnet {
+          connection-limit 10;
+          rate-limit 5;
+      }
+  }
Сохраняем наши изменения
root@# commit
Проверим порты
nmap -PN 192.168.14.41

Starting Nmap 5.21 ( http://nmap.org ) at 2013-02-05 19:25 MSK
Nmap scan report for 192.168.14.41
Host is up (0.0078s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
23/tcp open  telnet

Nmap done: 1 IP address (1 host up) scanned in 1.30 seconds

Подключение к устройству

Попробуем подключиться к устройству
ssh velp@192.168.14.41
velp@192.168.14.41's password: 
--- JUNOS 12.1R1.9 built 2012-03-24 12:52:33 UTC

velp@Juniper> 
подключение по SSH работает. Проверим подключение Telnet
telnet 192.168.14.41
Trying 192.168.14.41...
Connected to 192.168.14.41.
Escape character is '^]'.

Juniper (ttyp0)

login: velp
Password:

--- JUNOS 12.1R1.9 built 2012-03-24 12:52:33 UTC
velp@Juniper>

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

JunOS позволяет осуществлять подключение к устройству по протоколу SSH с использование ключей. Для настройки авторизации по ключам, из опрерационного режима запускаем shell режим
root@Juniper> start shell
Создаем директорию для хранения файлов ключей
root@Juniper% mkdir /root/.ssh
создаем файл для хранения публичной части ключа утилитой vi (встроенная утилита Unix) и копируем публичную часть ключа в файл (в моем примере файл называется velp.pub)
root@Juniper% vi /root/.ssh/velp.pub
далее переходим в конфигурационный режим
root@Juniper% cli
root@Juniper> edit
root@Juniper# set system login user velp authentication load-key-file /root/.ssh/velp.pub
в конфигурации появятся следующие строки (содержимое файла будет вставлено в конфигурацию)
root@Juniper# show | compare                                
[edit system]
+   login {
+       user velp {
+           uid 2000;
+           class super-user;
+           authentication {
+               ssh-rsa "ssh-rsa AAAAB3NzaC1yc2EAAAADAQAB...nS5h++XerOr velp@velp-siemens"; ## SECRET-DATA
+           }
+       }
+   }
Не забываем сохранить изменения (commit) и пробуем подключиться к устройству
ssh velp@192.168.14.41 -i ~/.ssh/velp
--- JUNOS 12.1R1.9 built 2012-03-24 12:52:33 UTC

velp@Juniper> 
пользователь успешно прошел авторизацию по ключу, JunOS не запрашивал пароль Добавим проверку (фильтр) адреса источника подключения по протоколу SSH для защиты доступа к нашему устройству. Для фильтрации трафика используются firewall filter JunOS о которых речь будет идти в следующих лабораторных работах, поэтому здесь я только укажу ряд команд для настройки и не буду подробно разъяснять принцип их работы. В примере мы разрешаем подключение к устройству по SSH только из сети 192.168.1.0/24 (это заведомо не верная настройки для демонстрации функционала).
root@Juniper# set interfaces em0 unit 0 family inet filter input SSH
root@Juniper# set firewall family inet filter SSH term SSH-accept from source-address 192.168.1.0/24
root@Juniper# set firewall family inet filter SSH term SSH-accept from protocol tcp
root@Juniper# set firewall family inet filter SSH term SSH-accept from destination-port ssh
root@Juniper# set firewall family inet filter SSH term SSH-accept then accept
root@Juniper# set firewall family inet filter SSH term SSH-deny from destination-port ssh
root@Juniper# set firewall family inet filter SSH term SSH-deny then count Discard-SSH-Packets
root@Juniper# set firewall family inet filter SSH term SSH-deny then discard
изменения в конфигурации
root@Juniper# show | compare 
[edit interfaces em0 unit 0 family inet]
+       filter {
+           input SSH;
+       }
[edit]
+  firewall {
+      family inet {
+          filter SSH {
+              term SSH-accept {
+                  from {
+                      source-address {
+                          192.168.1.0/24;
+                      }
+                      protocol tcp;
+                      destination-port ssh;
+                  }
+                  then accept;
+              }
+              term SSH-deny {
+                  from {
+                      destination-port ssh;
+                  }
+                  then {
+                      count Discard-SSH-Packets;
+                      discard;
+                  }
+              }
+          }
+      }
+  }
после применения настроек пробуем подключиться к устройству
ssh velp@192.168.14.41 -i ~/.ssh/velp
ssh: connect to host 192.168.14.41 port 22: Connection timed out
и получаем сообщение об ошибке (так как наша сеть не добавлена в список разрешенных), пакеты отбрасываются:
root@Juniper# run show firewall filter SSH    

Filter: SSH                                                    
Counters:
Name                                                Bytes              Packets
Discard-SSH-Packets                                  2160                   36
Исправим это добавив нашу подсеть в фильтр
root@Juniper# set firewall family inet filter SSH term SSH-accept from source-address 192.168.14.0/24
доступ к устройству восстановился
ssh velp@192.168.14.41 -i ~/.ssh/velp
--- JUNOS 12.1R1.9 built 2012-03-24 12:52:33 UTC
velp@Juniper> 

Комментариев нет:

Отправить комментарий