Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Операционные системы -> Linux -> Иммунитет для Linux


Иммунитет для Linux

Александр Красоткин

Перед всеми, кто пользуется сетевыми коммуникациями, встает достаточно серьезная задача сетевой безопасности. Если компьютер подключен к Интернету, то пользователя всегда волнует вопрос: будут или нет взламывать систему? Но подобная формулировка, пожалуй, неверна. Точнее было бы спросить: когда же попытаются ее взломать? Ответ таков: сразу же, как только вы подключитесь к Интернету. Низкий моральный уровень определенного слоя обитателей Сети, доступность автоматизированных программных средств исследования и взлома систем, а также самостоятельные сетевые <черви> и вирусы, охотники за корпоративными секретами, войны, развязываемые хакерами, - все это и многое другое превращает Интернет в довольно небезопасное место, некое подобие мегаполиса, где новейшие технологии используются в бандитских разборках.

Проект Iptables

Основателем и идейным вдохновителем этого проекта стал Пауль Рассел. Сейчас проект развивается и поддерживается группой из пяти разработчиков, задающих основное направление, и множеством энтузиастов Linux. Основная часть функций пакетной фильтрации Iptables, вошедшая в код ядра операционной системы, может быть скомпилирована либо как часть ядра, либо в виде отдельных модулей. Брандмауэр распространяется бесплатно, по условию соблюдения GNU GPL (GPL, General Public License - стандартная публичная лицензия). Web-сайт разработчиков - www.iptables.org.

Использование Iptables предоставляет возможности:

  • пакетной фильтрации сетевого трафика - функции брандмауэра;
  • маскировки или преобразования IP-адресов (DNAT, SNAT, MASQUERADE);
  • прозрачного проксирования трафика;
  • изменения параметров IP-заголовка сетевого пакета (например, изменение параметра TOS - Type Of Service - позволяет установить определенный вариант маршрутизации).

Получение и установка

Последняя доступная на момент публикации статьи версия Iptables 1.2.7a была обнародована 26 августа 2002 г. Переписать дистрибутив брандмауэра, файл с цифровой подписью и PGP-ключом можно по ссылкам: http://www.iptables.org/files/iptables-1.2.7a.tar.bz2 (брандмауэр), http://www.iptables.org/files/iptables-1.2.7a.tar.bz2. sig (цифровая подпись), http://www.iptables.org/files/coreteam-gpg-key.txt (PGP-ключ).

Чтобы установить брандмауэр, включите поддержку Iptables в ядре, а также те опции Iptables, которые вы собираетесь использовать в составе ядра или отдельных модулей. Нужно обратить внимание на перечисленные ниже параметры сборки ядра:

CONFIG_PACKET - требуется для приложений, работающих непосредственно с сетевыми устройствами, например tcpdump или snort.

CONFIG_NETFILTER - необходим тогда, когда компьютер служит сетевым экраном (firewall) или шлюзом (gateway) в Интернете.

CONFIG_IP_NF_CONNTRACK - модуль для трассировки соединений, также используется при трансляции сетевых адресов и маскарадинге (NAT и Masquerading). Так что если вы решили строить сетевой экран - брандмауэр для локальной сети, то вам определенно потребуется эта опция.

CONFIG_IP_NF_FTP - модуль трассировки FTP-соединений. Обмен по FTP происходит слишком интенсивно, чтобы можно было использовать обычные методы трассировки.

CONFIG_IP_NF_IPTABLES - необходим для выполнения операций фильтрации, преобразования сетевых адресов (NAT) и маскарадинга (masquerading).

CONFIG_IP_NF_MATCH_LIMIT - модуль не обязателен. Он предоставляет возможность ограничения количества проверок для некоторого правила. Например, -m limit -limit 3/minute указывает, что заданное правило может пропустить не более трех пакетов в минуту. Таким образом, данный модуль способен защитить от нападений типа Отказ в обслуживании.

CONFIG_IP_NF_MATCH_MAC - модуль позволяет строить правила, основанные на MAC-адресации. Поскольку каждая сетевая карта имеет собственный уникальный Ethernet-адрес, то можно блокировать пакеты, поступающие с определенных MAC-адресов, или выполнять привязку IP-адреса к MAC-адресу карты.

CONFIG_IP_NF_MATCH_MARK - необязательная функция маркировки пакетов (MARK). С ее помощью можно помечать требуемые пакеты, а затем в других таблицах в зависимости от значения метки принимать решение о маршрутизации такого пакета.

CONFIG_IP_NF_MATCH_MULTIPORT - модуль позволяет строить правила с проверкой на принадлежность пакета к диапазону номеров портов источника/приемника.

CONFIG_IP_NF_MATCH_TOS - модуль помогает строить правила на основе состояния поля TOS (Type Of Service) в пакете, а также устанавливать или сбрасывать биты этого поля в правилах таблицы mangle.

CONFIG_IP_NF_MATCH_TCPMSS - опция добавляет возможность проверки поля MSS для TCP-пакетов.

CONFIG_IP_NF_MATCH_STATE - одно из самых серьезных усовершенствований по сравнению с ipchains. Этот модуль предоставляет возможность управления TCP пакетами на основе их состояния (state).

CONFIG_IP_NF_MATCH_UNCLEAN - модуль реализует проведение дополнительной проверки IP-, TCP-, UDP- и ICMP-пакетов для обнаружения в них несоответствий, <странностей>, ошибок.

CONFIG_IP_NF_FILTER - модуль реализации таблицы filter, где в основном и происходит фильтрация и где находятся цепочки INPUT, FORWARD и OUTPUT. Он обязателен, если вы планируете осуществлять фильтрацию пакетов.

CONFIG_IP_NF_TARGET_REJECT - добавляется действие REJECT, обеспечивающее передачу ICMP-сообщения об ошибке в ответ на входящий пакет, отвергаемый заданным правилом. TCP-соединения, в отличие от UDP и ICMP, всегда завершаются или отвергаются пакетом TCP RST.

CONFIG_IP_NF_TARGET_MIRROR - возможность отправки обратно полученного пакета, поменяв местами адреса отправителя и получателя (отражение).

CONFIG_IP_NF_NAT - NAT, т. е. трансляция сетевых адресов в различных ее видах. С помощью этой опции вы сможете предоставить выход в Интернет всем компьютерам локальной сети при наличии лишь одного уникального IP-адреса.

CONFIG_IP_NF_TARGET_MASQUERADE - маскарадинг, в отличие от NAT используемый тогда, когда IP-адрес в Интернете неизвестен заранее, т.е. для DHCP, PPP, SLIP или какого-либо другого способа подключения, подразумевающего динамическое получение IP-адреса. Маскарадинг несколько повышает высокую нагрузку на компьютер по сравнению с NAT, однако он работает в таких ситуациях, когда нельзя заранее указать собственный внешний IP-адрес.

CONFIG_IP_NF_TARGET_REDIRECT - перенаправление. Вместо того чтобы просто пропустить пакет дальше, это действие перенаправляет его на другой порт сетевого экрана. Обычно это действие применяется совместно с proxy. Иными словами, есть возможность выполнять <прозрачное проксирование>.

CONFIG_IP_NF_TARGET_LOG - модуль добавляет действие LOG в iptables, фиксирует отдельные пакеты в системном журнале (syslog), что бывает весьма полезно при отладке сценариев.

CONFIG_IP_NF_TARGET_TCPMSS - опция, помогающая преодолевать ограничения, накладываемые отдельными провайдерами (Internet Service Providers), блокирующими пакеты ICMP Fragmentation Needed.

CONFIG_IP_NF_COMPAT_IPCHAINS - добавляет совместимость с более старой технологией ipchains. Вполне возможно, что совместимость подобного рода будет сохранена и в ядрах серии 2.6.x.

CONFIG_IP_NF_COMPAT_IPFWADM - обеспечивает совместимость с ipfwadm, несмотря на то, что это очень старое средство построения брандмауэров.

Информация по конфигурированию и установке брандмауэра находится в файле INSTALL. В данном случае установка выглядит так:

$ bzip2 -cd iptables-1.2.7a.tar.bz2 | tar
 -xvf -
$cd iptables-1.2.7a
$make KERNEL_DIR=/usr/src/linux
$/bin/su root
# make install KERNEL_DIR=/usr/src/linux

В переменной KERNEL_DIR следует указать путь к исходнным текстам ядра.

Если требуется установить файлы для разработчика: дополнительные библиотеки и документацию, выполните:

# make install-devel

Хотите использовать статическую компиляцию библиотек Iptables к ядру, что освобождает от необходимости загружать модули при запуске, выполните:

$make NO_SHARED_LIBS=1

Если нужно установить систему по определенному пути, отличному от используемого по умолчанию (/usr/local/bin, /usr/local/lib, /usr/local/man), то:

$make BINDIR=/usr/bin LIBDIR=/usr/lib
 MANDIR=/ usr/man
$make BINDIR=/usr/bin LIBDIR=/usr/lib
 MANDIR=/ usr/man install

После изменения конфигурации ядра его необходимо перекомпилировать и установить.

Методика работы

Когда пакет приходит на брандмауэр, то сначала он попадает на сетевое устройство, перехватывается соответствующим драйвером и направляется в ядро. Далее пакет проходит ряд таблиц (Mangle, Nat, Filter) и цепочек в составе этих таблиц (например, предопределенные цепочки PREROUTING, OUTPUT, POSTROUTING в таблице Nat) и либо передается локальному приложению, либо переправляется на другую машину. Порядок следования пакета приведен в табл. 1.

Значит, прежде чем пакет будет перенаправлен далее, он пройдет несколько этапов. Причем на каждом из них пакет может быть остановлен, будь то цепочка Iptables или что-либо еще, но нас интересует Iptables. Заметьте, что нет никаких цепочек, специфичных для отдельных интерфейсов или чего-либо подобного. Цепочку FORWARD проходят все пакеты, перемещающиеся через наш брандмауэр/роутер. Не используйте цепочку INPUT для фильтрации транзитных пакетов, они туда просто не попадают. Через эту цепочку движутся только те пакеты, которые предназначены данному хосту!

А теперь рассмотрим порядок движения пакета, предназначенного локальному процессу/приложению (он приведен в табл. 2).

Важно помнить, что на этот раз пакеты идут через цепочку INPUT, а не через FORWARD. И в заключение рассмотрим порядок движения пакетов, созданных локальными процессами (табл. 3).

Более подробную информацию о видах таблиц и цепочек можно получить из документации, поставляемой с системой, или из приведенных ниже источников.

Вопросы и примеры

?Каким образом с помощью одного внешнего сетевого адреса могут работать в Интернете все клиенты локальной сети?

Это классический случай применения SNAT. Использовать действие MASQUERADE целесообразно лишь в случае получения динамического IP-адреса.

#!/bin/sh
IPTABLES="/usr/local/sbin/iptables"
INET_IFACE = eth0
INET_IP_1="XXX.XXX.XXX.XXX"
...

#включить здесь или в sysctl.conf разрешение на пересылку пакетов - необходимо для шлюза

echo "1">/proc/sys/net/ipv4/ip_forward
...
$IPTABLES -t nat -A POSTROUTING -o
 $INET_IFACE -j SNAT -to-source $INET_IP_1

?Как поступить, если один адрес из локальной сети ($INNER) нужно транслировать во внешнюю сеть отдельно от остальных в случае, когда есть несколько внешних IP-адресов?

Необходимо создать фиктивный внешний интерфейс (например, когда имеется реальный интерфейс eth0, то фиктивный будет eth0:0) и присвоить ему требуемый IP-адрес ($INET_IP_2). Дальнейшие действия в Iptables:

$IPTABLES -t nat -A POSTROUTING
 -s $INNER -j SNAT -to-source $INET_IP_2
$IPTABLES -t nat -A POSTROUTING
 -o $INET_IFACE -j SNAT
-to-source $INET_IP_1

?Как перенаправить сетевой трафик на локальный порт?

Все это выполняется действием Redirect. Перенаправление производится на другой порт той же самой машины. Действие может выполняться только в цепочках и подцепочках PREROUTING и OUTPUT таблицы Nat.

Действие REDIRECT очень удобно для прозрачного проксирования (transparent proxying), когда машины в локальной сети даже не подозревают о существовании прокси. В частности, пакеты, поступающие на HTTP-порт можно перенаправить на порт HTTP proxy, например:

$IPTABLES -t nat -A PREROUTING -p tcp
 -dport 80 -j REDIRECT -to-ports 3128

Можно произвести перенаправление на диапазон портов, указываемый ключом, например:

-to-ports 40000-40100.

В этом случае необходимо указать используемый протокол (TCP или UDP) ключом -protocol.

?Как перенаправить сетевой трафик на порт удаленного сервера?

Для выполнения данной операции следует в цепочке PREROUTING таблицы Nat изменить адрес и порт получателя полученного сетевого пакета (действие DNAT). Затем нужно разрешить прохождение транзитного трафика между отправителем и новым получателем в цепочке FORWARD. И наконец, требуется заменить адрес отправителя пакета (действие SNAT) в цепочке POSTROUTING таблицы Nat.

В приведенном отрывке скрипта показан пример перенаправления smtp- и pop-трафика с одного сервера на другой.

$cat rc.add2mail
#!/bin/sh
#
IPTABLES="/usr/local/sbin/iptables"
MAILEXT="XXX.XXX.XXX.XXX"
MAILINT="YYY.YYY.YYY.YYY"
# для сети 192.168.1.0/24
# pop3-сервис
$IPTABLES -t nat -I PREROUTING -i eth1
 -s 192.168.1.0/24 -d $MAILEXT -p tcp
 -dport 110
 -j DNAT -to $MAILINT:110
$IPTABLES -I FORWARD -s 192.168.1.0/24
 -d $MAILINT -i eth1 -o eth1
 -p tcp -dport 110 -j ACCEPT
# smtp-сервис
$IPTABLES -t nat -I PREROUTING -i eth1
 -s 192.168.1.0/24 -d $MAILEXT -p tcp
 -dport 25
 -j DNAT -to $MAILINT:25
$IPTABLES -I FORWARD -s 192.168.1.0/24
 -d $MAILINT
 -i eth1 -o eth1 -p tcp -dport 25 -j ACCEPT
# общая часть
$IPTABLES -t nat -I POSTROUTING -o eth1
 -s 192.168.1.0/24 -d $MAILINT -j SNAT
 -to 192.168.1.5

Поддержка

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

Заключение

Сетевая безопасность - комплексный вопрос. После настройки брандмауэра не стоит забывать об уязвимости сетевых сервисов. Можно проверить надежность, исследовав защиту с внешней стороны и попробовав ее взломать. Если взлом не увенчается успехом, то все равно рано радоваться. Не исключено, что просто вам не хватило квалификации. Кроме того, не забывайте про пользователей в вашей локальной сети и социальную инженерию. Бывает, деятельность отдельных самонадеянных индивидов просто приводит всех в изумление. Так что, возможно, установка и настройка брандмауэра будут самыми несложными задачами.

В общей сложности нужно контролировать не только сетевой трафик (пакетная фильтрация), но и содержимое потоков обмена данными на уровне приложений (например, для Web и трафика e-mail это элементы ActiveX, Java-аплеты, cookies и т. д.), а также сетевую активность системных сервисов и пользовательских приложений (возможные <троянские> программы и вирусы). В общем, задача обеспечения сетевой безопасности насколько интересная, настолько и сложная. Она требует постоянного внимания, и вряд ли удастся ее окончательно решить, не предприняв такие кардинальные меры, как отключение от сети, выключение питания, разбивка жесткого диска и установка охраны.

Об авторе
Александр Красоткин - программист, системный администратор, начальник отдела предоставления Интернет-услуг ОАО <ТМБЦ>.
С автором можно связаться по адресу: shura@tibc.ru


Ссылки и дополнительные материалы

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

С этого нужно начинать
http://www.tldp.org/LDP/solrne/ Securing-Optimizing-Linux-TheUltimate-Solution-v2.0.pdf

Руководство по Iptables. Автор Oskar Andreasson
http://www.iptables.org/documentation/ tutorials/blueflux/

Часто задаваемые вопросы по Iptables
http://www.iptables.org/documentation/ FAQ/netfilter-faq.html

Packet Filtering HOWTO
http://www.iptables.org/documentation/ HOWTO//packet-filtering-HOWTO.html

Networking Concepts HOWTO
http://www.iptables.org/documentation/ HOWTO/networking-concepts-HOWTO.html

NAT HOWTO
http://www.iptables.org/documentation/ HOWTO/NAT-HOWTO.html

Разное
Securing & Optimizing Linux: The Ultimate Solution
http://www.tldp.org/LDP/solrhe/ Securing-Optimizing-Linux-The-Ultimate-Solution-v2.0.pdf

Сайты
http://www.linuxguruz.org/iptables/

Другие брандмауэры
Ipchains
Ipfw
IPFilter для OpenBSD
Packet Filter


Дополнительные программы

Наряду с продуктами, рассмотренными в статье, рекомендую обратить внимание на несколько достаточно важных и интересных программ.

Nessus - сетевой сканер вторжения. Предназначен для поиска уязвимых и слабо защищенных сетевых сервисов. Сканер разработан по технологии клиент - сервер. Применяется модульная архитектура, расширяющая функциональность сканера. Для описания уязвимых мест используется специальный язык NASL (Nessus attack script language). Материал о сетевом сканере Nessus см.в <Мире ПК>, №3/03. Сайт разработчика: www.nessus.org.

Nmap - сетевой сканер портов. Рекомендуется для определения доступных и закрытых брандмауэром сетевых сервисов. В процессе работы доступны несколько оригинальных методик сканирования. Позволяет с высокой степенью точности произвести оценки типа и версии операционной системы сканируемого хоста. Изначально разработанный для UNIX-систем, сканер был портирован на Windows-платформу. Сайт разработчика: www.nmap.org. Существует локализованная версия nmap с некоторыми дополнениями на русском языке (www.nmap.ru).

Snort - система анализа сетевого трафика системы. Позволяет по характерным признакам распознавать попытки проведения сетевых атак, сканирования системы и сетевой активности <троянских> программ. Имеется возможность оповещения администратора в случае обнаружения атаки. На базе snort можно построить свою систему IDS (Intrusion Detection System - система обнаружения вторжения). Сайт разработчика: www.snort.org

Все рассмотренные программные продукты распространяются свободно, в исходных кодах на условиях лицензии GNU GPL (General Public License).



 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100