Опубликован: 20.02.2006 | Уровень: специалист | Доступ: платный
Лекция 3:

Межсетевые экраны

Написание командных файлов

Часто требуется автоматизировать некоторый процесс или иметь одну команду для запуска нескольких инструкций. Применительно к межсетевому экрану обычно желательно, чтобы все его команды выполнялись при загрузке системы. Лучшим способом сделать это является написание командного файла. Это простой текстовый файл, содержащий команду или список команд. Интерпретатор командного языка выполняет команды, когда он вызывается пользователем, набравшим имя файла.

  1. Чтобы создать командный файл, откройте сначала текстовый редактор, такой как vi или EMACS, и введите свои команды.
  2. Введите в самом верху строку, которая выглядит следующим образом:
    #! /bin/bash

    Данная строка сообщает, какой интерпретатор использовать для выполнения команд. Вы должны иметь его в своей ОС, а команды, помещенные в файл, должны быть его корректными командами. Приведенный пример задает маршрутное имя интерпретатора bash в Mandrake Linux. Можно использовать другой интерпретатор, например, Tcsh или Csh. Просто задайте в первой строке его маршрутное имя. Затем сохраните файл.

  3. Сделайте файл исполнимым, чтобы интерпретатор мог выполнить его как программу. Это делается с помощью команды chmod. Введите
    chmod 700 имя_командного_файла

    Такой режим доступа делает файл читаемым, записываемым и исполнимым.

    Чтобы выполнить командный файл, наберите его имя в командной строке. (В bash необходимо задать ./ перед именем файла, расположенного в текущем каталоге.) После нажатия клавиши ввода должны выполниться команды из файла.

    Вы должны находиться в том каталоге, где размещен командный файл, или задать его маршрутное имя. Чтобы он выполнялся из любого места, можно добавить этот каталог в переменную окружения PATH или поместить файл в один из каталогов, фигурирующих в значении $PATH.

Создание межсетевого экрана Iptables

Опыт - лучший учитель, поэтому давайте рассмотрим пару команд, чтобы увидеть, как они используются в практическом приложении. Далее на примере Iptables показано, как создать межсетевой экран. Можно вводить команды интерактивно, по одной, чтобы сразу видеть результаты. Можно также поместить их в командный файл и выполнять его при загрузке системы, поднимая тем самым межсетевой экран (см. врезку о написании командных файлов). Набирайте их точно так же, как показано, сохраняя, в частности, регистр букв.

В следующем примере предполагается, что диапазон IP-адресов 192.168.0.1 - 192.168.0.254 принадлежит вашей подсети ЛВС, к которой подключен интерфейс eth1, и что интерфейс eth0 является соединением с Интернетом или ГВС.

  1. Начните с удаления всех существующих правил с помощью команды Flush:
    iptables -F FORWARD

    Это стирает все правила цепочки FORWARD, являющейся основной "воронкой" для всех пакетов, пытающихся пройти через межсетевой экран.

  2. Очистите другие цепочки:
    iptables -F INPUT
    iptables -F OUTPUT

    Эти команды стирают все правила на пути пакетов, направленных в локальную машину, и в выходной цепочке.

  3. Поместите стандартную инструкцию "запретить все" в самое начало.
    iptables -P FORWARD DROP
    iptables -A INPUT -i eth0 -j DROP
  4. Решение о допуске фрагментированных пакетов в Iptables необходимо оформить явным образом:
    iptables -A FORWARD -f -j ACCEPT
  5. Существует два типа распространенных атак, которые необходимо сразу заблокировать. Одна из них называется подделкой (подделываются заголовки IP-пакетов, чтобы казалось, будто внешний пакет имеет внутренний адрес). Делая это, злоумышленник может попасть в вашу сеть, даже если вы используете собственные IP-адреса. Другой тип атаки реализуется отправкой потока пакетов на широковещательный адрес сети, чтобы перегрузить ее. Это называется штормовой атакой. Атаки перечисленных типов можно блокировать с помощью двух простых инструкций:
    iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -j DROP
    iptables -A FORWARD -p icmp -i eth0 -d 192.168.0.255 -j DENY

    Первая инструкция предписывает отбрасывать все пакеты, приходящие из Интернет-интерфейса eth0 с внутренним адресом 192.168.0.0/24. По определению ни один пакет не должен приходить из недоверенного интерфейса с внутренним, собственным исходным адресом. Вторая инструкция отвергает все приходящие извне на адрес внутренней сети широковещательные пакеты протокола ICMP.

  6. Вы, как правило, желаете принимать входящие потоки данных, поступающие по соединениям, инициированным изнутри (например, кто-то просматривает web-страницу). Пока соединение, инициированное изнутри, поддерживается - все, наверное, хорошо. Можно, однако, ограничить тип пропускаемого внутрь трафика. Предположим, вы хотите разрешить сотрудникам только web-доступ и электронную почту. Можно определить типы трафика для прохода внутрь и только для уже инициированного соединения. Следующая инструкция разрешает потоки данных по web-протоколу HTTP и почтовому протоколу SMTP на основе этого критерия.
    iptables -A FORWARD -p tcp -i eth0 -d 192.168.0.0/24 --dports
    www,smtp --tcp-flags SYN, ACK -j ACCEPT

    Флаг -m multiport извещает Iptables, что вы будете выдавать инструкции сопоставления с портами. Конструкция - sports разрешает только трафик электронной почты и web-навигации. Опция - syn разрешает пакеты SYN с неустановленным флагом ACKRST), то есть инициирование соединений TCP, а предшествующий восклицательный знак инвертирует смысл этого условия. В результате допускаются только пакеты, не инициирующие соединений.

  7. Чтобы можно было принять входящие соединения извне только на определенных портах (например, входящие соединения электронной почты c вашим почтовым сервером), и разрешить из этих же портов направлять трафик вовне, используйте следующие инструкции:
    iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24
     --dport smtp --syn -j ACCEPT

    Предполагается, что IP-адресом почтового сервера служит 192.168.0.2. Флаги --dport и --sport разрешают только почтовый трафик SMTP.

  8. Можно разрешить пользователям инициировать исходящие соединения и передавать по ним данные, но только для определенных протоколов. Именно здесь вы можете запретить применение FTP и других необязательных программ.
    iptables -A FORWARD -m multiport -p tcp -o eth0 -d
    0.0.0.0 --dports www,smtp --syn -j ACCEPT
  9. Необходимо пропускать некоторые входящие и исходящие пакеты UDP. UDP применяются для DNS, и, если эти пакеты заблокировать, то пользователи не смогут выполнять разрешение адресов. Так как, в отличие от TCP, UDP-пакеты не имеют состояния, нельзя полагаться на проверки флагов SYN или ACK. Вы хотите разрешить UDP только на порт 53, поэтому вы задаете domain (встроенную переменную для порта 53) как единственно допустимый порт. Это делается с помощью следующих инструкций:
    iptables -A FORWARD -m multiport -p udp -i  eth0 -d 
    192.168.0.0/24 --dports domain -j ACCEPT
    iptables -A FORWARD -m multiport -p udp -i  eth0 -s 
    192.168.0.0/24 --sports domain -j ACCEPT
    iptables -A FORWARD -m multiport -p udp -i  eth1 -d 
    0.0.0.0--dports domain -j ACCEPT
    iptables -A FORWARD -m multiport -p udp -i  eth0 -s
    0.0.0.0 --sports domain -j ACCEPT
  10. Первая из двух приведенных выше инструкций разрешает входящие дейтаграммы UDP, а вторая - исходящие. Аналогичные действия стоит проделать и для ICMP-пакетов (информационных сетевых пакетов, рассмотренных в "Средства уровня операционной системы" ). Вы хотите разрешить только определенные типы пакетов, такие, например, как эхо-ответ для входящих ( --icmp-type 0 ) или эхо-запрос для исходящих ( --icmp-type 8). Этого можно добиться с помощью следующих инструкций:
    iptables -A FORWARD -m multiport -p icmp -i eth0 -d
    192.168.0.0/24 --dports 0, 3,11 -j ACCEPT
    iptables -A FORWARD -m multiport -p icmp -i eth1 -d
    0.0.0.0 --dports 8, 3,11 -j ACCEPT
  11. Наконец, вы хотите установить протоколирование, чтобы, просматривая журнал, можно было увидеть, какие пакеты были отброшены. Журнал желательно периодически просматривать, даже если проблем нет, просто чтобы иметь представление о видах отброшенного трафика. Если вы видите повторно отброшенные пакеты из одной и той же сети или одного адреса, то вас, возможно, атаковали. Протоколирование всех видов трафика задается одной инструкцией:
    iptables -A FORWARD -m tcp -p tcp -j LOG
    iptables -A FORWARD -m udp -p udp -j LOG
    iptables -A FORWARD -m udp -p icmp -j LOG

Готово! Вы получили межсетевой экран, защищающий от наиболее распространенных атак из Интернета.

Роман Попов
Роман Попов

После прохождения курса Стандарты инфрмационной безопасности мне предложено получение Удостоверения о повышении квалификации от НИУ ВШЭ по программе Менеджмент информационной безопасности. Программа включает в себя ряд курсов которые я уже ранее проходил. Какой порядок действий в данном случае? Как прозводится перезачет результатов? И какие экщамены мне надо еще доздать чтобы получить удостоверение?

Александр Путятинский
Александр Путятинский

Добрый день по окончании данного курса выдается сертификат?

Гончик Цымжитов
Гончик Цымжитов
Россия, Санкт-Петербург
Александр Косенко
Александр Косенко
Украина, Днепропетровск