UnixMountainSkiFun

Unix Горы Лыжи

01-06-2008 16:06

IP Chains


Итак, теперь, когда мы получили работающее ядро, нам осталось сделать две вещи: установить IPChains и настроить несколько правил. Для начала инсталлируем IPChains.

Зайдите на http://netfilter.filewatcher.org/ipchains/, загрузите и инсталлируйте последнюю версию. Когда я скачал версию 1.3.10, то заметил, что у меня уже была собранная версия ipchains. Будучи параноиком, каким я на самом деле являюсь, я удалил имеющийся бинарный код, а затем перекомпилировал пакет из исходных текстов, просто введя команду "make". Даже на моем P75, компиляция заняла меньше минуты. Затем "make install" от имени root, и можно пробовать установить некоторые наборы правил ipchains (ipchains rulesets).

Наборы правил IPChains

Простейший возможный набор правил может выглядеть примерно так:

 /sbin/ipchains -F forward
 /sbin/ipchains -P forward DENY
 /sbin/ipchains -A forward -j MASQ -s 192.168.2.0/24 -d 0.0.0.0/0

Первая строка сбрасывает все forward-правила. Вторая строка говорит, -- "Наша стандартная реакция на forward-запросы -- отказ". Третья строка говорит, -- "Всему, что идет из сети 192.168.2.0, зеленый свет. Любой из этой сети может посылать пакеты куда угодно и получать ответы откуда угодно." Конечно же вам необходимо заменить 192.168.2.0 на свое адресное пространство внутренней сети. Если вы используете адресное пространство 192.168.0.x, то просто замените 192.168.2.0 на 192.168.0.0. Последний 0 означает следующее: "любой IP-адрес, который начинается с предыдущих трех чисел". (На самом деле это определяет, комбинация маски сети (24) и IP-подсети (192.168.2.0), однако если вы не знакомы с понятиями маски сети и подсетями, то не обращайте внимания на этот комментарий.)

Скормите эти правила вашему firewall и ... готово. Вы должны быть в состоянии подключиться с любого внутреннего компьютера к любому внешнему, указывая на внутреннем компьютере IP-адрес firewall-а, в качестве шлюза по умолчанию. Чтобы в Linux установить шлюз по умолчанию, наберите

 route add default gw xxx.yyy.www.zzz

где xxx.yyy.www.zzz это внутренний IP-адрес вашего firewall-а. Внутренний IP-адрес, это IP-адрес назначенный NIC (сетевой карте), которая подключена к вашей внутренней сети. Остальные сетевые карты будут иметь IP-адреса, предоставленные ISP, впрочем они нас не интересуют. Для MS Windows шлюз по умолчанию может быть установлен в секции свойств TCP/IP в панели управления.

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

  1. Правильный ли маршрут по умолчанию на компьютерах из внутренней сети?
  2. Правильно ли вы набрали ipchains-комманды на firewall-е?
  3. То ли ядро вы запустили на firewall-компьютере (вы же помните, что правильным является то ядро, которое собрано с IP Masquerading support)?
  4. Помните ли вы, что необходимо включить IP Forwarding, как мы говорили ранее?
  5. А сам firewall может добраться до того сайта, на котором вы проверяете правильность?
  6. Может ли firewall пропинговать по маршруту по умолчанию через внешнюю сетевую карту?
  7. Есть ли сетевое соединение меж firewall и компьютерами внутренней сети?

Если все эти пункты выполняются, а вы таки не можете получить доступ во внешнюю сеть из внутренней, то... кхм... самое время почитать документацию. Просмотрите IPChains-HOWTO и the IP-Masquerading-HOWTO, доступные на http://www.linuxdoc.org/ или по ссылкам в начале главы.

Если все получилось и работает, то завершите ваш тяжкий труд тем, что поместите эти три команды в что-то типа /etc/rc.d/rc.ipchains или /etc/rc.d/rc.firewall, убедитесь, что файл исполняемый, и что он вызывается из файла rc.local (по крайней мере в RedHat, Mandrake и Turbolinux; в SuSE Вам потребуется создать start-up и shutdown скрипты -- просто скопируйте один из существующих, и слегка его измените по необходимости).

IPChains-правила для обеспечения безопасности

Следующий набор правил, которые я изложу тут, помогут обезопасить вашу систему чуть в большей степени, однако это не все хитрости. Первое, что необходимо сделать, это зайти на firewall-компьютер и деактивировать все ненужные сервисы. Многие из них перечислены в /etc/inetd.conf, -- засучите рукава и деактивируйте большинство из них. Для того, чтобы удаленно конфигурировать firewall, потребуется установить openssh (смотри Главу 14 по SSH?). Никогда не используйте Telnet или FTP (File Transfer Protocol) для соединения с firewall, и уж тем более из внешней сети. Зайдите в каталог /etc/rc.d и создайте в нем каталог unused. И как минимум переместите в этот каталог скрипты nfs, smb и nfsserver. Удалите символические ссылки из /etc/rc.d/rcX.d. Можно даже вовсе деактивировать inetd целиком. Это поможет избежать DoS-атак по inetd, так как inetd не "завалит" систему, если не будет запущен ;) (sshd не запускается из inetd, поэтому sshd останется работающим и без inetd). Короче говоря, не запускайте ничего лишнего на своем firewall. Лично у меня на firewall только openssh и клиент distributed.net. Почему я решил использовать distributed.net клиент? Потому, что используя его могу попытаться выиграть $1000. Тем не менее, эти два приложения это все, что работает на firewall, и ничего больше. Если запустить что-то еще, то получим дыру в безопасности.

Что касается правил безопасности, то вот они:

 /sbin/ipchains -F input
 #фальшивый masquerading? ну уж нет!
 /sbin/ipchains -A input -i eth1 -s 192.168.2.0/24 -d 0.0.0.0/0 -l -j REJECT

 #фальшивая входящая маршрутизация? еще чего!
 /sbin/ipchains -F output
 /sbin/ipchains -A output -i eth1 -s 0.0.0.0/0 -d 192.168.2.0/24 -l -j REJECT

 /sbin/ipchains -F forward
 /sbin/ipchains -P forward DENY
 /sbin/ipchains -A forward -j MASQ -s 192.168.2.0/24 -d 0.0.0.0/0

Сначала сбрасываем все input-правила, затем устанавливаем правило, которое отклоняет IP-пакеты, которые идут из внешней сети, однако имеют внутренние IP-адреса. Так как ни один из внутренних компьютеров не может располагаться снаружи, то явно, кто-то замыслил, что-то нехорошее. Все такие запросы будут записаны в файл /var/log/messages.

Потом сбрасываются все output-правила, и устанавливается правило, которое запрещает "кривую" маршрутизацию пакетов, которые были сконструированы особым образом, чтобы пробить брешь в вашей сети. Не трудно понять почему мы отклоняем такие пакеты. Ни один порядочный житель Internet не позволит себе таких пакетов.

Последние три правила должны быть вам знакомы -- это те самые правила, которые мы уже используем на нашем firewall. Они выполняют все те же самые функции, что и ранее.

Блокировка определенных портов

Вы можете добавить дополнительные правила, чтобы закрыть некоторые сервисы на своем firewall. Эти правила похожи на

 ipchains -A input -p tcp -i eth1 -s 0.0.0.0/0 21 -l -j REJECT

это правило запретит все пакеты проходящие через eth1 на порт 21 (FTP). Кроме того, такое правило, закроет ваши исходящие соединения с FTP, так как это правило не даст пройти входящим FTP-данным. Говоря иначе, вы устанавливаете FTP-соединение, однако все ответы от удаленного сервера отклоняются (да и еще, логируются при этом) firewall-ом.

"Вот тебе и раз! Я не могу блокировать только входящие FTP-пакеты?" Угу, не можете. Однако это не столь уж и важно, если конечно вы не решили установить FTP-сервер на firewall-е -- что впрочем вы не должны делать. Предыдущее правило бесполезно в 99.9% случаев сетевых настроек. Если у вас нет такого правила, и на firewall не запущен ftpd, то такие пакеты с FTP-запросами, ничего ужасного с вами не сотворят. Почему? Попытаемся объяснить по-простецки, -- пусть FTP-запрос поступает на firewall, но так как на нем нет forwarding-правил для FTP (смотри следующую часть этой главы, Forwarding Портов), и ваш firewall не имеет никакого программного обеспечения, прослушивающего порт 21, то пакет отклоняется. Достаточно умный противник может попытаться фальсифицировать трафик, чтобы попытаться обойти такую ситуацию, однако... да, мы уже блокировали фальшивый трафик.

Где правила, блокирующие определенные порты, могут быть полезны, так это для блокировки внутренних пользователей от использования определенных Internet-сервисов. Вы можете не позволить им использовать Gopher (порт 70) или Usenet News (порт 119). Кроме того возможно пожелаете блокировать AIM (AOL Instant Messenger)... однако ничего у вас не выйдет. Программисты в AOL уже учли такой возможный ваш шаг, они встроили в клиентскую часть возможность использования общих портов, которые ни один нормальный человек не отважится закрыть (например, порт 80 www или 25 smtp). Как же быть? Ну... установите громкость динамиков у PC, ваших пользователей, на максимум, и мочите всех козлов, компьютеры которых пищат AIM-овскими login-ами. Шутка :)

Вы можете заблокировать порты, которые используются как backdoor (черный ход) в некотором программном обеспечении, по типу программы BackOrifice от cDc. Из-за того, что BO2K не имеет порта по умолчанию (старая версия использовала 31337, как порт по умолчанию), то вам прийдется дойти до конца, и закрыть целый пучек портов. Возможно будет проще изменить первые три правила так, чтобы допустимым являлись только некоторые сервисы, а все остальные бы блокировались. Не забудьте оставить открытыми icmp и Domain Naming System (DNS)! Без DNS ваши компьютеры будет не в состоянии определять IP-адреса, по которым им необходимо посылать запросы.

<< Конфигурирование ядра | Multi Tool Linux | Forwarding портов >>


edit RightSideBar