Cisco PIX 501 Firewall

Первой игрушкой компании Cisco мне попался Cisco PIX 501 Firewall. Он довольно стар (последняя совместимая с ним прошивка — 6.3 вышла 31.07.2008 — 6.3.5.145, более свежие экземпляры требуют большего объёма flash и RAM), но для начала пойдёт.

Настроим его под 1 внешний статический IP с пробросом портов под HTTP, HTTPS, SSH и RDP.

Под капотом у него скрывается одноядерный процессор 133 МГц, 8 МБ flash и 16 МБ RAM. Согласно спецификации внешний интерфейс держит 10 Мб/сек (хотя в последней версии оптимизировали до 100 Мб/с), внутренние интерфейсы 100 Мб/с, а VPN с шифрованием 168 бит (что нынче совсем не круто) до 3 Мб/с. Так же у него нет UPNP и встроенного DNS (ибо это же серьёзная игрушка для безопасности сетей), резервирования для DHCP и вменяемого проброса диапазонов портов (древний аппарат). В общем в современном мире это ненужная штука.

Все команды в консоли можно сокращать до первых букв, но только если на эти же буквы не начинается другая команда. Начиная с IOS 7 можно использовать клавишу Tab для дополнения команды, но PIX 501 ограничен версией 6.3. Так же при написании команды можно для подсказок использовать вопросительный знак ?.

Первое, что я делаю с новыми железками — прошиваю их до последней версии. Для этого необходимо найти по имени файла в сети прошивку последней версии, потом воспользоваться tftpd-сервером и воспользоваться инструкцией по обновлению. Если утеряны пароли для настроек, воспользоваться инструкцией по восстановлению паролей.

Все настройки лучше всего проводить с чистого листа подключившись с помощью COM-порта (у Cisco для этого особый провод RJ45-COM втыкается в порт Console). Для этого в привилегированном режиме надо стереть сохранённый конфиг и перезапустить PIX:

enable
write erase
reload

После перезагрузки откроется мастер, который поможет провести настройку пароля для повышения привилегий (Enable password), времени, имени и домена хоста, а так же внутреннего IP. IP для Device Manager (веб интерфейс управления, совместимый только с IE 6 и Java 1.4) я пишу тот же что и у внутреннего интерфейса. На вопрос сохранения настрек Use this configuration and write to flash? надо согласиться нажав y.

Как вариант, можно воспользоваться командой для сброса настроек сразу с настройкой внутреннего IP для доступа через telnet:

enable
config factory-default 192.168.2.1 255.255.255.0
write memory
reload

Все настройки делаются в привилегированном режиме:

enable

А сохраняются следующей командой:

write memory

Иначе все сделанные настройки не переживут перезагрузку аппарата — reload

Если внешний IP мы получаем по DHCP, то необходима следующая команда:

ip address outside dhcp setroute

Если же внешний IP настраивается статикой, то так:

ip address outside 212.16.197.226 255.255.255.252
route outside 0.0.0.0 0.0.0.0 212.16.197.225 1

В обоих случаях нам понадобится и это (параметры этих команд позволяют определить какие IP из внутренней сети транслировать в какие из внешней, но это не мой случай):

global (outside) 1 interface
nat (inside) 1 0.0.0.0 0.0.0.0 0 0

Далее настроим время:

ntp server 129.6.15.28 source outside
clock timezone UTC 10

Настроим DHCP-сервер во внутренней сети:

dhcpd address 192.168.2.100-192.168.2.199 inside
dhcpd dns 8.8.8.8 8.8.4.4
dhcpd lease 3600
dhcpd ping_timeout 750
dhcpd domain hq.kami-no.ru
dhcpd enable inside

Если внешний IP получаем по DHCP, то строки с dns и domain можно заменить на следующую команду:

dhcpd auto_config outside

Рулить через COM-порт конечно надёжно, но я люблю управлять по SSH. Притом из-за древности прошивки и невозможности авторизоваться сертификатом, я бы не стал светить его во внешний мир:

ca zeroize rsa
ca generate rsa key 2048
sh ca mypubkey rsa
ca save all
ssh 0.0.0.0 0.0.0.0 inside
ssh timeout 60
passwd Ace$$D3n13d

Пользователь по умолчанию для SSH — pix, а протокол поддерживается только SSH-1 (ssh -1 pix@192.168.2.1).

Проброс портов бывает 2х видов. Первый — пробросить полностью внешний 1 IP в 1 внутренний IP (согласно терминологии Cisco — NAT):

static (inside,outside) interface 192.168.2.100

Подходит для тех, у кого есть несколько внешних IP. Второй вариант — пробросить отдельный порты (ssh, http и https на сервер с Linux, а 3389 и 1025-1026 на сервер с Windows (согласно терминологии Cisco — PAT):

static (inside,outside) tcp interface ssh 192.168.2.3 ssh
static (inside,outside) tcp interface www 192.168.2.3 www
static (inside,outside) tcp interface https 192.168.2.3 https
static (inside,outside) tcp interface 3389 192.168.2.4 3389
static (inside,outside) udp interface 1025 192.168.2.4 1025
static (inside,outside) udp interface 1026 192.168.2.4 1026

Команда static не поддерживает диапазоны, а это большая печаль…

Теперь откроем доступ по внешним портам:

access-list acl_outside permit tcp any interface outside eq ssh
access-list acl_outside permit tcp any interface outside eq www
access-list acl_outside permit tcp any interface outside eq https
access-list acl_outside permit tcp any interface outside eq 3389
access-list acl_outside permit udp any interface outside range 1025 1026
access-group acl_outside in interface outside

Для полного счастья чуток повысим безопасность (защита от IP-spoofing, блокировка атак и пароль на привилегированный режим):

ip verify reverse-path interface outside
ip verify reverse-path interface inside
ip audit attack action alarm drop
enable password hArd2Gue$$

И выключим веб-интерфейс (подключаться надо старой Java и браузером, не отличается надёжностью и грузит и так дохлый проц):

no http server enable
no http 192.168.2.1 255.255.255.0 inside

Так же можно настроить по официальной инструкции VPN-сервер на PIX.

С основной настройкой закончили. Есть так же дополнительные плюшки (names, object-group и т.п.), но на этом с PIX я завязываю.