====== Шаблон для настройки коммутаторов catalyst2950 ====== ~~NOTOC~~ !\\ ! 1. Данный шаблон предназначен для коммутаторов Catalyst 2950,\\ ! но с минимальными изменениями может быть использован для других Catalyst'ов\\ ! 2. Такие настройки использовались для подключения к интернету небольших офисных сетей.\\ !\\ ------ ! алгоритм обработки пакетов rlogin и telnet для оптимизации ими полосы пропускания. Смысл его - при работе telnet-а происходит\\ ! передача каждого символа в отдельном пакете. Соотвественно к 40 байтам IP/TCP заголовков добавляется 1 байт полезной нагрузки.\\ ! Алгоритм Нагля накапливает байты и отправляет их не в соответствии с механизмом плавающего окна, а только после получения ACK\\ ! от удаленного узла. Таким образом алгоритм Нагля оптимизирует полосу пропускания.\\ ! Включать имеет смысл только на каналах с маленькой полосой пропускания.\\ ! Алгоритм описан в RFC[[rfc>896]]\\ **service nagle**\\ !\\ ! на каталистах этот сервис не нужен. Насколько знаю это что-то связанное с X.25\\ **no service pad**\\ !\\ ! Периодически посылать пакеты, даже если сессия неактивна\\ ! Нужно чтобы:\\ ! 1. NAT не разрывал соединение\\ ! 2. Чтоб зависшая сессия не висела долго - если нет keepalive пакетов сессия сбрасывается.\\ ! об этом можно почитать на cisco.com в статье [[http://www.cisco.com/en/US/tech/tk801/tk36/technologies_tech_note09186a00801365f3.shtml|Using service tcp-keepalives to Avoid Hung Telnet Sessions]]\\ **service tcp-keepalives-in**\\ **service tcp-keepalives-out**\\ !\\ ! В дебаге указывать месное время с точностью до миллисекунд\\ **service timestamps debug datetime msec localtime**\\ !\\ ! В логе указывать местное время\\ **service timestamps log datetime localtime**\\ !\\ ! Скрывать пароли от случайного подглядывания.\\ ! На вид они не читаются, но есть алгоритм который позволяет узнать исходный пароль.\\ **service password-encryption**\\ !\\ ! Нумеровать сообщения которые пишутся в лог\\ ! это позволяет узнать, что какие то сообщения были потеряны либо из за rate-limit на самой циске,\\ ! либо при передаче по сети (это возможно так как протокол syslog использует udp и повторной отправки сообщений нет)\\ **service sequence-numbers**\\ !\\ ! отключем dhcp - все равно на какталисте он не нужен, только занимает память и снижает защищенность\\ **no service dhcp**\\ !\\ ! Имя это sw порядковый номер коммутатора . обозначение PoP **hostname sw1.msk8**\\ !\\ ! Выделить в оперативной памяти буфер 256 Кб для записи логов\\ ! не смотря на то, что логи пишутся по сети на сервер, если связь по сети временно отсутствовала, то\\ ! посмотреть ошибки можно будет тоолько в локальном буфере командой show logging\\ **logging buffered 262144 debugging**\\ !\\ ! Писать в лог не больше 10 сообщений (уровня debugging, informational и notifications) в секунду, чтоб не вызвать этим перегрузку\\ ! сообщетия уровня warnings и выше (errors, critical, alerts, emergencies) пишутся не смотря на это ограничение скорости\\ **logging rate-limit 10 except warnings**\\ !\\ ! На консоль (rs-232) выводить только критические сообщения, т. к. вывод сообщений на консоль замедляет работу\\ **logging console critical**\\ !\\ ! Включаем AAA\\ **aaa new-model**\\ !\\ ! По умолчанию при заходе на каталист (через telnet или console) аутентификацмя идет через tacacs+ ! Если tacacs+ сервер недоступен, то для входа используется enable secret (логин при этом не спрашивается, сразу пароль)\\ **aaa authentication login default group tacacs+ enable**\\ !\\ ! Авторизация идет через tacacs+, если он недоступен то авторизацию проходит любой,\\ ! кто прошёл аутентификацию, т. е. ввел enable secret\\ **aaa authorization exec default group tacacs+ if-authenticated**\\ !\\ ! Посылать stop-пакет, если был неправильно введен логин/пароль\\ ! нужно, чтобы в /var/log/tac_plus.acct попадали попытки подобрать пароль\\ **aaa accounting send stop-record authentication failure**\\ !\\ ! Для учета работы через телнет использовать tacacs+\\ ! записи о том, что когда заходил на циску и когда выходил пишутся в /var/log/tac_plus.acct\\ **aaa accounting exec default start-stop group tacacs+**\\ !\\ ! Посылать на tacacs+ сообщения о перезагрузке каталиста\\ **aaa accounting system default start-stop group tacacs+**\\ !\\ ! Задаем enable, чтоб если tacacs+ не работает по нему мы зайти на каталист\\ **enable secret good_password**\\ !\\ ! Указываем часовой пояс, разница времени по сравнению с UTC - 3 часа\\ **clock timezone MSK 3**\\ !\\ ! Когда переводить часы на летнее время\\ **clock summer-time MSD recurring last Sun Mar 2:00 last Sun Oct 2:00**\\ !\\ ! Автоматически восстанавливать работу порта если он отключился по port security по прошествии errdisable recovery interval\\ ! если мака который вызвал отключение на порту больше нет\\ **errdisable recovery cause security-violation**\\ !\\ ! В состоянии errdisable порт находится 120 секунд, после этого пробует включиться если\\ ! для данной причины была указана команда errdisable recovery cause\\ **errdisable recovery interval 120**\\ !\\ ! Разрешить использование 0 в номере подсети\\ **ip subnet-zero**\\ !\\ ! Запретить обработку опций ip пакета source routing\\ ! в современных сетях это не используется для нормальной работы и нужно отключить из соображений безопасности\\ **no ip source-route**\\ !\\ ! Ограничить скорость посылаемых каталистом icmp пакетов типа destination unreachable до 1-го пакета в секунду (1000 мс)\\ **ip icmp rate-limit unreachable 1000**\\ !\\ ! То же самое но для icmp destination unreachable, подтип fragmentation is needed and DF set\\ **ip icmp rate-limit unreachable DF 1000**\\ !\\ ! Включаем TCP Selective Acknowledgment для повышения производительности tcp на каналах, где есть потери пакетов\\ ! Более подробно про SACK можно прочитать в [[http://www.ietf.org/rfc/rfc2018.txt|RFC2018]]\\ ! если в пределах окна было потеряно несколько пакетов SACK позволяет повторно отправить только потерянные пакеты,\\ ! а не все пакеты начиная с первого потеряно. Например, без SACK если были посланы пакеты с 1-го по 8-й и потеряны\\ ! 4-й и 7-й пакеты, то передающий хост получить подтверждение о приеме только 1, 2 и 3-го пакетов и должен будет повторно\\ ! отправить 4, 5, 6, 7, 8. Если включить SACK то будет получены подтверждения для пакетов 1, 2, 3, 5, 6, 8 и повторно\\ ! нужно будет отправить только 4-й и 7-й пакеты.\\ **ip tcp selective-ack**\\ !\\ ! Включаем опцию TCP timestamp для более точного измерения RTT что повышает производительность TCP\\ ! более подробно описано в [[http://www.ietf.org/rfc/rfc1323.txt|RFC1323]]\\ **ip tcp timestamp**\\ !\\ ! Включаем path mtu discovery, который необходим если по маршруту есть участки с mtu меньше чем 1500 байт\\ ! более подробно можно прочитать про эту команду на [[http://www.cisco.com/en/US/products/ps6350/products_configuration_guide_chapter09186a00804550e4.html#wp1045590|cisco.com]] **ip tcp path-mtu-discovery**\\ ! указываем список доменов, который подставляют когда указано только имя хоста, без домена (в командах ping, traceroute, telnet и др.)\\ **ip domain-list example.ru**\\ **ip domain-list msk8.example.ru**\\ ! имя домена для данного хоста\\ **ip domain-name example.ru**\\ ! наши ДНС сервера\\ **ip name-server 192.168.144.68**\\ **ip name-server 192.168.146.6**\\ !\\ ! per vlan spanning tree\\ **spanning-tree mode pvst**\\ ! включать по умолчанию bpdufilter для портов с настройкой spanning-tree portfast\\ **spanning-tree portfast bpdufilter default**\\ ! описание этой команды на cisco.com найти не удалось\\ **no spanning-tree optimize bpdu transmission**\\ ! исползовать расширения 802.1t для pvst\\ **spanning-tree extend system-id**\\ !\\ !\\ ! Порт, подключенный к маршрутизатору или серверу\\ ! на котром настроен inter-vlan routing\\ **interface FastEthernet0/1**\\ \_\_\_! перед любым description ставим -- чтобы он не сливался с конфигом, а выделялся\\ \_\_\_**description -- to gw1.msk8**\\ \_\_\_! 802.1q транк\\ \_\_\_**switchport mode trunk**\\ \_\_\_! не распозновать режим (mode access или mode trunk) автоматически\\ \_\_\_**switchport nonegotiate**\\ \_\_\_! загрузка интерфейса, показываемая в show int вычисляется за последние 60 секунд\\ \_\_\_**load-interval 60**\\ \_\_\_! сразу переводить порт в forwarding без задержки\\ \_\_\_**spanning-tree portfast trunk**\\ !\\ ! Порт, к которому подключен другой коммутатор\\ ! Обращаю внимание, что spanning-tree portfast в этом случае прописывать нельзя\\ **interface FastEthernet0/2**\\ \_\_\_**description -- to sw2.msk8**\\ \_\_\_**switchport mode trunk**\\ \_\_\_**switchport nonegotiate**\\ \_\_\_**load-interval 60**\\ !\\ ! Настройки порта для клиента, подключенного к общему vlan\\ ! чтобы он не мог менять IP на маршрутизаторе с помощью static arp привязываем ip к mac\\ ! а чтобы не мог менять MAC прописываем на порту port-security\\ **interface FastEthernet0/3**\\ \_\_\_**description ""--"" 1111 Firmname, office 303**\\ \_\_\_**switchport access vlan 100**\\ \_\_\_**switchport mode access**\\ \_\_\_**switchport nonegotiate**\\ \_\_\_**switchport port-security**\\ \_\_\_**load-interval 60**\\ \_\_\_! отключаем на клиентских портах cdp - клиентам не нужно знать технически подробности нашего оборудования \_\_\_**no cdp enable**\\ \_\_\_! сразу переводить порт в forwarding без задержки, кроме того на таких портах у нас по умолчанию включается bpdufilter\\ \_\_\_**spanning-tree portfast**\\ !\\ ! Клиент для которого выделен отдельный vlan\\ **interface FastEthernet0/4**\\ \_\_\_**description -- 2222 Firm2name, room 302**\\ \_\_\_**switchport access vlan 14**\\ \_\_\_**switchport mode access**\\ \_\_\_**switchport nonegotiate**\\ \_\_\_**load-interval 60**\\ \_\_\_**no cdp enable**\\ \_\_\_**spanning-tree portfast**\\ !\\ ! Неиспользуемые порты помещаем в 1001 vlan чтоб они не имели доступа к сети.\\ ! shutdown на таких портах не делам, чтоб видеть подключено к ним что то или нет.\\ !\\ **interface FastEthernet0/5**\\ \_\_\_**switchport access vlan 1001**\\ \_\_\_**switchport mode access**\\ \_\_\_**switchport nonegotiate**\\ \_\_\_**load-interval 60**\\ \_\_\_**spanning-tree portfast**\\ !\\ ! .........................\\ ! .........................\\ !\\ **interface FastEthernet0/24**\\ \_\_\_**switchport access vlan 1001**\\ \_\_\_**switchport mode access**\\ \_\_\_**switchport nonegotiate**\\ \_\_\_**load-interval 60**\\ \_\_\_**spanning-tree portfast**\\ !\\ ! Интерфейс, через который мы получаем доступ к коммутатору\\ **interface Vlan1**\\ \_\_\_**description -- management interface**\\ \_\_\_**ip address 192.168.144.51 255.255.255.248**\\ \_\_\_**no ip redirects**\\ \_\_\_**no ip proxy-arp**\\ \_\_\_**no ip route-cache**\\ !\\ ! Шлюз по умолчанию\\ **ip default-gateway 192.168.144.49**\\ ! Отключаем веб интерфейс. Во многих версиях IOS он подвержен DoS.\\ **no ip http server**\\ !\\ ! Ограничиваем доступ к коммутатру по telnet\\ ! это особенно актуально учитывая что пароль при подключении по telnet передается открытым текстом\\ ! и нужны дополнительные меры для защиты от подключения извне\\ **ip access-list extended vty-access**\\ \_\_\_**remark -- hosts permitted to access the router**\\ \_\_\_**permit tcp 192.168.144.0 0.0.0.255 any**\\ \_\_\_**permit tcp 192.168.146.0 0.0.0.7 any**\\ \_\_\_**deny tcp any any range 0 65535 log-input**\\ \_\_\_**deny ip any any log-input**\\ !\\ ! сервер на который мы по сети пишем логи. На нем настрое syslogd\\ **logging 192.168.144.67**\\ !\\ ! Сервера по которым мы можем синхронизировать время\\ ! если не использовать этот access list то у злоумышленника будет шанс изменить время на коммутаторе\\ **access-list 2 remark -- ntp hosts to which the router can synchronize**\\ **access-list 2 permit 192.168.144.80**\\ **access-list 2 permit 192.168.144.68**\\ **access-list 2 deny any log**\\ !\\ ! Указываем на какие сервера можно можно копировать конфигурацию (или с каких)\\ ! если дана команда по snmp\\ ! без этого включать WR snmp community небезопасно\\ **access-list 4 remark -- tftp servers to/from which config download/upload is permitted**\\ **access-list 4 permit 192.168.144.67**\\ **access-list 4 deny any**\\ !\\ ! Ограничиваем доступ по snmp на чтение\\ **access-list 5 remark -- hosts permitted to read snmp MIBs on the switch**\\ **access-list 5 permit 192.168.144.34**\\ **access-list 5 permit 192.168.144.64 0.0.0.7**\\ **access-list 5 deny any log**\\ !\\ ! Ограничиваем доступ по snmp на запись. Чем меньше хостов здесь указаны, тем спокойнее можно спать.\\ **access-list 6 remark -- hosts permitted to write snmp MIBs on the switch**\\ **access-list 6 permit 192.168.144.67**\\ **access-list 6 deny any log**\\ ! snmp community для доступа на чтение. Я предпочитаю генерировать случайную строку программой pwgen\\ ! 5 - номер акцесс листа.\\ **snmp-server community XXXXX RO 5**\\ ! То же саме но с доступом на запись. Обязательно указываем aceess list\\ **snmp-server community XXXXX RW 6**\\ ! Физическое расположение сервера.\\ ! Настоятельно рекомендую указывать, чтоб не перепутать что где стоит. Когда каталистов в сети много помнить наизусть это нерельно.\\ **snmp-server location Dmitrovka 98, 2 floor**\\ ! контактная информация\\ **snmp-server contact noc@example.ru**\\ !\\ ! акцесс лист с адресами куда можно по tftp копировать конфиг, если была команда на это по snmp\\ **snmp-server tftp-server-list 4**\\ tacacs-server host 192.168.144.67 key XXXXXX\\ ! \\ ! Текст, который показывается при подключении к коммутатору\\ **banner motd * ** ________________________________________________________________________________ Example Inc ! Internet Backbone, Moscow, Russia, PoP MSK8 Warning : Authorized access only !!! Disconnect IMMEDIATELY if you are not an authorized person !!! Contact information: email: noc@example.ru phone: +7 495 1231234 ________________________________________________________________________________ ** * **\\ !\\ ! Короткие алиасы к частоиспользуемым командам, для ускорения работы.\\ **alias exec acl show access-lists**\\ **alias exec sm show mac-address-table**\\ **alias exec srb sh run | b**\\ **alias exec uptime show version | i uptime**\\ **alias exec cpu show proces cpu | inc CPU**\\ **alias exec d debug**\\ **alias exec nd undebug all**\\ **alias exec sd show debug**\\ **alias exec mn terminal monitor**\\ **alias exec nm terminal no monitor**\\ **alias exec sl show log**\\ **alias exec cl clear log**\\ **alias exec ct configure terminal**\\ **alias exec sr show running-config**\\ !\\ **line con 0**\\ \_\_\_! Увеличиваем кол-во запоминаемых команд\\ \_\_\_**history size 256**\\ \_\_\_! Что бы не пытался ресолвить через ДНС то что получилось в результате опечатки при наборе команды\\ \_\_\_**transport preferred none**\\ \_\_\_! Перывать traceroute по нажатию Ctrl+C\\ \_\_\_**escape-character 3**\\ **line vty 0 15**\\ \_\_\_! Указываем aceess list которым ограничен доступ по telnet\\ \_\_\_**access-class vty-access in**\\ \_\_\_! После 300 минут неактивности закрываем сессию\\ \_\_\_**exec-timeout 300 0**\\ \_\_\_**history size 256**\\ \_\_\_**transport preferred none**\\ \_\_\_**transport input telnet**\\ \_\_\_**transport output telnet**\\ \_\_\_**escape-character 3**\\ !\\ ! Ключ, который используется для уатентификации в ntp\\ **ntp authentication-key 1 md5 xxxxxx xx**\\ ! Включаем его использование\\ **ntp authenticate**\\ **ntp trusted-key 1**\\ ! Акцесс лист в котором указаны сервера\\ **ntp access-group peer 2**\\ ! ntp сервера, по которым синхронизируем время\\ **ntp server 192.168.144.80 key 1**\\ **ntp server 192.168.144.68 key 1**\\ !\\ **end**