Часто firewall представляется неким черным ящиком который просто фильтрует проходящие пакеты. Данная заметка поможет понять, что именно происходит при фильтрации и в какой последовательности.<p>Что происходит с пакетом попадающим внутрь PIX/ASA firewall, по каким параметрам принимается решение пропускать пакет дальше или нет?
<p>Прежде всего, замечу, что минимальными требованиями к пакету являются:
<ul>
<li> настроенная трансляция адресов между интерфейсами. Конечно, это требование можно отключить с помощью команды no nat-control, однако поведение по умолчанию именно такое;
<li> политика доступа (access-list) разрешающая доступ.
</ul>
<p>Минимальные условия это конечно здорово, но жизнь была бы слишком скучна, правда? :)
<p>Попробуем разобраться, что происходит на каждом шаге.
К сожалению я не нашел подобной информации на сайте производителя. Зато под рукой оказалась замечательная книга "Cisco ASA PIX and FWSM Handbook" из которой и почерпнута это информация.
<p><b>1. Initial Checking</b>
<p>Базовые проверки на целостность пакета, допустимые опции и прочее.
Именно на этом этапе проводится проверка Reverse Path Forwarding про которую я уже рассказывал.
<p>Отмечу, что RPF будет полноценно работать только в случае спуфинга адресов между интерфейсами. В классическом случае outside - ASA - inside спуфинг на outside интерфейсе определить он не сможет.
<p><b>2. Xlate lookup (outbound)</b>
<p>Именно сейчас проверяется одно из минимальных условий - трансляция адресов между интерфейсами.
Совершенно неважно будет это статическая трансляция one to one или динамическая с применением overload.
<p>Сначала firewall попытается найти уже существующую трансляцию (можно посмотреть по show xlate), в случае неудачи пытается создать, если конечно политика это предусматривает.
<p>Этот шаг происходит на разных этапах в случае входящего/исходящего соединения.
Проверка осуществляется на втором шаге в случае исходящего соединения.
Этому есть логичное объясниение - адрес источника будет переписан и именно он должен фигурировать в дальнейших проверках (acl).
<p>Повторюсь. Это поведение можно выключить используя no nat-control. Однако, до версии прошивки 7.1 этого сделать было нельзя.
<p>Также именно здесь firewall проверяет такие параметры как:
<ul>
<li> лимиты на количество активных соединений;
<li> лимиты на количество полу-открытых соединений (embryonic);
<li> таймауты на соединение.
</ul>
<p><b>3. Connection lookup</b>
<p>Поскольку firewall у нас "умный" и знает, что такое stateful фильтрация, ему необходимо когда-то проверять состояние соединения. Почему бы не на этом этапе? :)
<p>Литературы по stateful фильтрации достаточно, описывать еще раз не буду.
<p><b>4. ACL lookup</b>
<p>Именно на этом этапе происходит что-то знакомое. Как видно из названия проверяется политика доступа - поиск соответствующего access-list
<p>По умолчанию никаких acl не применено. Трафик разрешен с более безопасного интерфейса на менее безопасный. Уровень безопасности определяется значением security level.
<p><b>5. Xlate lookup (inbound)</b>
<p>Происходит та же проверка, что и на шаге 2. Но только для входящего трафика.
<p><b>6. Uauth lookup</b>
<p>В случае если firewall используется как cut-through authentication proxy на этом шаге проверяются логин/пароль пользователя для его аутентификации.
<p>Если это не первое соединение инициируемое пользователем проверяется таймер аутентификации.
<p><b>7. Inspection</b>
<p>На последнем шаге осуществляется инспекция протокола. Конкретные действия выполняемые в этом случае очень сильно зависят от инспектируемого протокола.
<p>Про самые интересные постараюсь рассказать в следующих заметках.
URL: http://techoover.blogspot.com/2007/11/asa-firewall-operation.html
Обсуждается: http://www.opennet.me/tips/info/1509.shtml