Настройка фаервола

1. Основные опасности, подстерегающие компьютер, подключенный к сети
2. Интернет-сеть сетей. Межсетевые экраны.
3. Протоколы, сокеты, порты, интерфейсы... Вкратце о взаимодействии компьютеров через сеть.
4. Настраиваем фаервол на Linux.

Для начала разберемся от чего будем защищаться, перечислим основные неприятности, от которых нас убережет сетевой экран, если его соответствующим образом настроить. Итак, вы подключены к сети. Неважно каким способом (модем, ADSL, Ethernet, GPRS через сотовый телефон, оптический кабель, WiFi), главное что в сети вы не один - помимо вашей рабочей станции в сети могут быть другие компьютеры, от которых могут исходить различного вида угрозы. Если вы подключены к сети Интернет, то, к несчастью, можете стать жертвой злоумышленника.

Вероятность стать мишенью хакеров, вирусов и прочей дряни многократно увеличивается, если вы:
- имеете внешний IP адрес, по которому к вашему компьютеру можно обратиться из сетей всего мира;
- не пользуетесь системой обновлений (и, таким образом, не защитили свою ОС от общеизвестных дыр)
- ваш провайдер не настроил межсетевой фильтр способом, снижающим вероятность атак на юзеров
- используете нестабильный софт, работающий с сетью
- не отключили не задействованные в вашей системе сервисы, установленные по умолчанию

Интернет, как известно, это сеть сетей, которые объединены маршрутизаторами. Маршрутизатор это, как правило, компьютер или другое сетевое устройство, которое находится одновременно в двух или более сетях и играет роль шлюза между ними, т.е. перебрасывает трафик от источника в сеть, для которой он предназначен. Например, если вы подключены к Интернет, то трафик к www.yandex.ru попадёт сначала на маршрутизатор вашего провайдера, маршрутизатор провайдера перебросит его на другой роутер, и так пока пакеты не достигнут цели - сервера "Яндекса". Обычно интернет-провайдеры настраивают своё оборудование особым способом, благодаря чему становится невозможным соединяться с рабочими станциями пользователей извне, но очень многие мелкие организации этим просто пренебрегают и оставляют юзеров открытыми для атак со всего интернета. Существуют опасности и изнутри - вы у своего провайдера не единственный абонент. Клиентов может быть десяток, а могут быть тысячи. Очень часто провайдеры разрешают все соединения внутри своей сети, обычно для предоставления пользователям возможности обмениваться файлами, играть, общаться. Иногда фильтрация трафика просто невозможна - например между соседними компьютерами, соединенными по технологии Ethernet, если разделяет их одно или несколько примитивных устройств - свитчей, бриджей. В любом случае, провайдер может предложить только минимальный уровень защиты вашей системы от наиболее распространенных атак, например, закрыв возможность пинговать ваш хост извне или закрыв возможность соединения с вами по 135 порту (который использует ряд сетевых вирусов). Пользователь же может настроить последний рубеж на пути к его системе - собственный фаервол - сам, гибко описав кто и откуда может соединяться с различными службами своей рабочей станции.

Под фаерволом обычно понимается фильтр IP пакетов, и это означает, что объектом его правил являются именно пакеты, с помощью которых пересылается информация через интернет (IP- Internet Protocol). Пакеты - аналоги почтовых конвертов с полями "Куда", "Откуда", "Кому" и "от кого". Именно на основании этих полей брандмауэры обычно и фильтруют пакеты, пропуская разрешенные и отбрасывая запрещенные правилами, хотя могут манипулировать ими и на основании размера, содержимого, типа и других признаков.

О ВЗАИМОДЕЙСТВИИ КОМПЬЮТЕРОВ ЧЕРЕЗ СЕТЬ:
Для уяснения принципов работы фаервола необходимо рассмотреть как компьютеры взаимодействуют через сеть. Для начала необходимо уяснить, что обмен информацией происходит между двумя программами, как бы странно это ни звучало. Программа, запущенная на одном компьютере передаёт приложению, запущенному на другой системе поток данных через сетевое соединение и получает через это же соединение поток данных в ответ. Этот абстрактный конвейер называется на языке программистов сокетом (socket). Пример передачи информации между двумя программами на разных компьютерах в сети - это взаимодействие между почтовым клиентом (например, Outlook) и почтовым сервером (под понятием "почтовый сервер" здесь имеется в виду приложение, управляющая приёмом и отправкой почты пользователям, запущенная на специальной аппаратной системе, тоже называемой почтовым сервером) при приёме или отправке почты. Аналогично сообщаются между собой WWW-сервер и Web-браузер, FTP-сервер и FTP-клиент... Любое "общение" приложений клиент-сервер через сеть выполняется с помощью сокетов. Существует целый ряд стандартов, закрепляющих этот принцип открытого взаимодействия систем (Open Systems Interconnection - OSI). Функции для работы с сокетами реализованы в различных ОС в виде библиотек, с помощью которых упрощённо работают прикладные программы, ничего не зная о сетевых устройствах. Для софта всё это взаимодействие выражается в командах "открыть сокет к 12.34.56.78 на порт 80", "записать в сокет", "прочитать из сокета", "закрыть сокет". Непосредственно с сетевыми адаптерами, модемами работают socket-библиотеки через различные драйвера и ядро операционной системы. Стандарт взаимодействия систем описывает аж целых семь уровней от уровня представления данных до физического уровня электрических сигналов в кабеле. Нас же интересует именно сетевой уровень, уровень на котором фигурируют IP-пакеты.
Вероятно, ваш компьютер имеет один или несколько сетевых соединений. Если на сетевой интерфейс пришел IP пакет, то в соответствии с таблицей маршрутизации он может быть передан на другой сетевой интерфейс (в основном, решение принимается на основании только IP адреса назначения). Если же адрес назначения пакета совпадает с IP адресом вашей системы, то пакет передаётся локальному приложению. Но перед этим он должен пройти ряд проверок фаерволом, последовательно проходя несколько цепочек правил, описывающих условия срабатывания и действия над подпадающими под правила пакетами (пропустить, отбросить, передать сообщение об ошибке, записать в системный журнал, изменить адрес назначения, передать в другую цепочку, и другие).
Большинство приложений взаимодействуют между собой посредством TCP протокола, протокола устойчивых соединений, который предусматривает контроль над передачей (Transmission Control Protocol), что помогает предотвратить потери информации в случаях различного рода сбоев передачи. Некоторые приложения взаимодействуют посредством UDP протокола, работая с User Datagram Protocol - протокола пользовательских дейтаграмм. UDP протокол быстр, но не исключает потерь отдельных пакетов и используется только в программах, не чувствительных к подобным утратам, или в случаях, когда лучше забыть о получении "бракованного" пакета, чем терять время на то, чтобы заново его запросить у отправителя. UDP очень часто используется в играх, мультимедийных конференциях, голосовой связи.
ICMP протокол - Internet Communications Management Protocol - протокол управления соединениями в Интернет. Удобен для тестирования сетевых соединений, проверки доступности хостов. Также ICMP протокол тесно работает с TCP, позволяя, например, согласовать скорость передачи между отправителем и получателем.
Три перечисленных протокола являются основными протоколами передачи информации в Интернет, но наряду с ними существует еще добрая сотня менее известных протоколов поверх IP, например протокол VPN-туннелей GRE (Generic Routing Encapsulation), vnp - voice network protocol, о которых тоже иногда не стоит забывать.
Как же различить, какому приложению на нашей машине предназначен TCP-пакет, чтобы решить отбросить его или нет? Например, у вас может быть запущен веб-сервер, предназначенный для общего доступа, и программа для удалённого управления вашим компьютером, предназначенная для доступа только изнутри офиса. Идентифицировать трафик к различным сервисам можно по портам (это относится только к TCP и UDP протоколам), например, 80 порт обычно "слушают" (ожидают соединения к нему) веб-серверы, а программа удалённого управления может быть доступна, скажем, по порту 12345. Следовательно, нужно отовсюду разрешить устанавливать соединения с портом назначения 80, а запросы на коннект к 12345 порту (или вообще все TCP пакеты) отбрасывать, за исключением, к примеру, пакетов с IP адресов компьютеров внутренней сети офиса. Так же можно принимать решения о допустимости/недопустимости UDP трафика на основании портов и IP адреса источника, и это тоже самый распространённый вариант. Можно запретить весь UDP-трафик, за исключением исходящих DNS-запросов, отправляемых на 53 порт днс-сервера (dport=53) с локальных непривилегированных портов (1024-65535). Привилегированные порты (1-1024) отличаются от непривилегированых тем, что их может открывать и слушать только приложение, запущенное под учётной записью суперпользователя.
ICMP протокол, в отличие от UDP и TCP, не имеет такого поля, как порт, но имеет поле типа, которых насчитывается около двух десятков, представляющих по сути сообщения о различных сетевых проблемах и состояниях сетевых устройств. Например, Network Unreachable, Host Unreachable, Protocol Unreachable, Port Unreachable, Destination network unknown... Вероятно, вам приходилось использовать команду ping для тестирования доступности рабочих станций. Пинги происходят посредством отправки ICMP сообщений "Echo request" и приёма от хоста сообщений "Echo Reply". Команда ping позволяет задать длину пакета и частоту отправки запросов. Посредством фаервола можно запретить вашей рабочей станции реагировать на входящие "ICMP echo request" пакеты, а можно не быть параноиком и защищаться только от возможных флуд-атак, которые можно определить по большому размеру ICMP-пакетов и высокой частотой их приёма (сотни и тысячи в секунды). Про флуд-атаки и их опасности читайте ниже. Хороший фаервол должен уметь реагировать и на частоту, и на размер пакетов для того, чтобы можно было составить гибкие правила фильтрации флуда.
Наиболее удачно в целях защиты заставить фаервол запрещать пропуск пакетов, не подпадающих под действие ни одного правила. Другими словами нужно назначить действием по умолчанию запрет на передачу пакетов (в большинстве фаерволов по умолчанию трафик не отбрасывается). Локальному приложению должны достаться только разрешенные пакеты, описанные набором правил с действием "ПРИНЯТЬ" (ACCEPT).

ОСНОВНЫЕ УГРОЗЫ БЕЗОПАСНОСТИ И СТАБИЛЬНОСТИ РАБОТЫ ОС (РАБОЧЕЙ СТАНЦИИ), ОТ КОТОРЫХ МОЖЕТ УБЕРЕЧЬ БРАНДМАУЭР:
1. доступ к приложениям, не предназначенным для публичного доступа (SSHd, Radmin)
Как правило, софт для осуществления административного доступа к системе не должен быть даже виден снаружи. Даже если инструмент удалённого управления системой предлагает надёжные методы авторизации по паролю или ключу и в том случае, если в настройках приложения можно задать уровни доступа для пользователей разных адресов и сетей, лучше было бы его замаскировать в целях сокрытия версии продукта и самого факта наличия данного сервиса. В программном обеспечении со временем могут обнаруживаться уязвимости, благодаря которым хакер может проникнуть в систему, использовав программную ошибку. В данном случае фаервол понизит вероятность несанкционированного и неавторизованного доступа к сервису до минимума, ограничив список хостов и подсетей, с которых разрешено инициировать соединения к серверному приложению.
2. взлом нестабильных сервисов (в т.ч. предназначенных только для внутренних соединений):
Если сетевой сервис содержит уязвимость, взломщик может использовать дыру для проникновения в систему от имени пользователя, под которым запущен демон. Помимо удалённого выполнения кода, возможна атака, вызывающая отказ в обслуживании (DoS - Denial of Service). В конце девяностых очень популярны были нюки против Win98, замедляющие работу системы и иногда вызывающие зависания и системные сбои. Актуальна проблема уязвимостей и в новом веке - долго еще не забудется эпидемия вирусов Worm и MsBlast, использующих дыры в RPC-сервисах современных версий Windows. Как показывает практика, стабильных серверных приложений намного меньше, чем "дырявых". Со временем выявляются всё новые и новые уязвимости как против новых, так и против старых версий приложений - всё это демонстрирует, что на надёжность демонов надеяться всё-таки не стоит. В любом случае, имеет смысл контролировать доступ к потенциально опасным службам с помощью возможностей фаервола.
Некоторые сервисы предназначены для работы только в "локальной петле", например xfs, Xserver. Как правило, такие сервисы используются в Unix-Like ОС для локального взаимодействия между собой - такова специфика операционной системы. Неправильно сконфигурированные или настроенные по умолчанию локальные сервисы могут прослушивать, помимо интерфейса локальной петли (127.0.0.1), другие соединения, ожидая клиентского соединения. Достаточно обнаружиться уязвимости в этих серверах, злоумышленник может использовать их для проникновения в систему.
3. Бекдоры, трояны.
Не исключена возможность локального (не сетевого) заражения бекдором - приложением, открывающим доступ к системе через сеть. Бекдор, как правило, устанавливается как сервис при запуске злонамеренной программы и ожидает соединения на какой-либо порт в системе (как правило, в целях получения команд от злоумышленника). Если закрыть возможность установления соединения на все порты, кроме разрешенных, бекдор никогда не дождётся соединения клиентской части.
4. ICMP флуд, DoS, DDoS
ICMP протокол предназначен для обмена сообщениями между устройствами о состоянии сетевых соединений. Очень часто доступность узлов проверяется посылкой командой ping ICMP запроса хосту и получения от него ответного эхо-сообщения. Для проверки устойчивости и скорости соединения можно уменьшить интервал отправляемых запросов до тысяч в секунду и указать больший размер ответного ICMP-пакета, ожидаемого от опрашиваемого узла. Скорость и устойчивость соединения оценивается по количеству пропавших пакетов и задержке, однако злоумыщленник может использовать "забрасываение" удалённого компьютера ICMP пакетами далеко не в тестовых целях, а, например, для понижения пропускной способности соединения с Интернет компьютера-жертвы (как правило, для этого атакующий должен иметь более быстрое соединение) или в целях обеспечить увеличение стоимости полученного трафика. Также фрагментированным ICMP флудом можно вызвать значительное замедление работы компьютера - на систему приходится вычислительная нагрузка, направленная на сборку разрозненно пришедших фрагментов - дефрагментацию. Атаки же против серверов, как правило, направлены на достижение отказа в обслуживании (DoS) или значительного замедления их работы. Наиболее сложно защититься от распределенных DDoS-атак - Distributed DoS - (атак, осуществляемых одновременно из разных сетей) защита от подобных инцидентов - головная боль провайдеров. Фаервол конечного пользователя не может защитить от расхода входящего трафика, вызванного флудом, т.к. пришедшие на интерфейс рабочей станции пакеты уже учтены как скачанные данные, однако брандмауер не даст системе ответить на запрос, тем самым избежав отправки нежелательного исходящего трафика. Однако, запретить компьютеру отвечать на ICMP-эхо-запросы, возможно, не совсем правильно. Очень часто необходимо пропинговать хост для решения некоторых сетевых проблем (это, например, может понадобиться технической поддержке вашего провайдера), так что было бы логичнее всего установить лимит на количество разрешенных ICMP сообщений за интервал времени и их максимальный размер. Однако, с учетом того, что с получения отвеченного эхо-запроса обычно начинается "прощупывание" системы злоумышленником, всё же иногда целесообразно запретить ICMP echo replyes/requests.
5. Сканирование диапазонов IP-адресов на наличие в них компьютеров. Сканирование портов. Fingerprint identifying.
При игнорировании вышеназванных ICMP сообщений, значительно понижается вероятность того, что ваша система станет жертвой хакера. Большинсово сканеров диапазонов IP адресов сначала опрашивает ICMP-echo запросами каждый адрес из диапазона, а затем начинает более активно прорабатывать ответившие машины (как правило, сканированием портов). В очень редких случаях злоумышленники предпочитают отказаться от предварительной ICMP разведки и начать сразу со сканирования портов, на это тратится значительно больше трафика и времени. Так что вам решать игнорировать эхо-пакеты или нет, в зависимости от того, насколько вы боитесь хакеров и насколько ценна защищаемая информация. Иногда было бы правильнее разрешить пинговать вас только компьютерам, находящимся только в вашей сети, тем более ICMP-эхо-ответы несут дополнительную информацию о вашей системе. Например, несложно отличить таким способом MacOS, Windows2000, Linux и FreeBSD - каждая из систем имеет свою последовательность байт в теле ответного эхо-сообщения. По содержимому эхо-ответа многие IP-сканеры умеют определять даже версию ядра ОС - данный метод называется Fingerprint identifying. Однако, практически невозможно уберечься от распознания типа ОС - слишком многие параметры TCP/IP привязаны к конкретным операционкам, так что закрывать возможность пинговать хост в целях уберечься от фингерпринт-идентификации не имеет смысла. Тем более, если фильтром не закрыты специфичные для данной ОС сетевые сервисы.
От сканирования портов самый эффективный способ защиты - это применить т.н. TARPIT - ловушку TCP-соединения (речь идёт в частности о Linux iptables с наложенным на ядро патчем Patch-O-Matic - рассказ о возможностях POM не входит в задачи этой статьи).

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

НАСТРАИВАЕМ ФАЕРВОЛ НА LINUX-системе:
К счастью, для установки фаервола на Linux не нужно ставить дополнительный софт - сетевой фильтр встроен в стандартное ядро. Называется фаервол ipfilter, а привычное уху название iptables - не более чем инструмент, интерфейс для конфигурирования фаервола и наполенния его правилами. Если вы пользуетесь нестандартным ядром, необходимо удостовериться, что ipfilter вкомпилирован в него, а пакет iptables установлен в системе. Далее по тексту будем называть фаервол iptables вместо ipfilter, дабы не вводить в заблуждение любителей читать статьи с конца :-)
Сразу оговорюсь, что правила фаервола приведены в качестве примера. В каждом конкретном случае необходимы особенные подходы к конфигурированию, и продумать их должны именно вы, благо статья содержит достаточное количество базовых сведений, необходимых для первоначальной настройки iptables. Очень рекомендуется статья для более грамотного ознакомления с его возможностями
IPTABLES TUTORIAL http://www.opennet.ru/docs/RUS/iptables/index.html
Если есть желание, лучше вдобавок ознакомиться с man iptables.
И в любом случае посмотрите вывод команды iptables --help

Правила распределены по цепочкам и таблицам. Каждый пакет, пришедший на любой из интерфейсов, попадает в соответствующую цепочку и таблицу и обрабатывается последовательно каждым из правил, пока не удовлетворит первому попавшемуся - тогда он подпадает под указанное действие. Для того, чтобы просмотреть содержимое трёх базовых цепочек фильтра, выполните от имени рута команду
#iptables -L [правило]
Без аргумента [правило] команда выводит содержимое таблиц filter цепочек INPUT, OUTPUT, FORWARD.


[root@azazello root]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@azazello root]#

Как видно, все 3 цепочки не содержат ни одного правила, и, действительно, политика по умолчанию (policy) - ACCEPT
Если хоть немного знаете английский, то, наверное, уже поняли, что цепочка INPUT будет содержать правила фильтрации принятых пакетов, OUTPUT - оправляемых, а FORWARD - маршрутизируемых с интерфейса на интерфейс.
Если настраиваем фаервол рабочей станции, вероятно, нам никогда не понадобится маршрутизация, там более, в системе она по умолчанию отключена, так что можно спокойно отбрасывать все пакеты, попадающие в цепочку FORWARD. Для этого меняем Policy на DROP(сбросить, забыть о существовании) вместо ACCEPT. Для этого даём команду iptables -P [цепочка] [действие].
#iptables -P FORWARD DROP
смотрим
#iptables -L FORWARD
видим, что policy сменилось на DROP. Действия по умолчанию остальных цепочек пока не трогаем (особенно, если настаиваете фаервол на удалённой машине - достаточно сделать iptables -P DROP - и через SSH до неё больше не достучитесь до перезагрузки, если, конечно, нет разрешающего правила), до тех пор пока полностью не настроим iptables.
Дальше придётся освоить еще несколько параметров команды iptables
-A (add) добавить правило в конец
-I (insert) вставить правило в начало или вставить под указанным номером
-D (delete) удалить правило с указанным номером
-L (list) показать правила (указанной цепочки) - уже знакомая нам команда, с параметром --line-numbers показывает номера правил

правила описываются примерно таким общим образом
-p [протокол] -s [источник/маска] -d [назначение/маска] -i [приним. интерфейс] -o [отпр. интерфейс] -j [действие]
при использовании дополнительных модулей активизируются дополнительные параметры, например --dport [порт назначения] --sport[порт источника] при указании протокола tcp или udp. При явной подгрузке модуля limit (с помощью опции -m limit) активизируются параметры --limit и --limit-burst.

Подробнее о синтаксисе смотрите
iptables --help и IPTABLES TUTORIAL


Итак, у меня есть интерфейс eth0 - 100 Mbit Fast Ethernet. через него же и выхожу в Интернет. На сетевой карте имеются 2 IP-адреса - внешний и внутренний. В локальной сети имеется десяток пользователей, которым я разрешаю доступ к своему FTP- и вебсерверу по внутреннему адресу. Доступ к вебсерверу хочу открыть для всего интернета, а к FTP и SSH серверам по внешнему адресу - только для своего компьютера на работе, чтобы я мог с работы домой пересылать файлы и управлять своим компом. В мир должен быть виден только WWW сервер на 80 порту. Также я постараюсь обеспечить максимально возможную защиту от ICMP флуда, чтобы в допустимых пределах меня можно было попинговать...
Мой внутренний IP eth0: 192.168.17.147 с маской 255.255.255.0 (192.168.17.147/24)
Мой внешний IP eth0:0: 82.198.172.2 c vfcrjq 255.255.255.252 (82.198.172.2/30) и дефолтгейтвей 82.198.172.1
Мой компьютер на работе имеет IP: 72.9.238.205
Приступим...

для начала разрешим весь трафик по интерфейсу локальной петли для взаимодействия внутренних приложений. В буквальном смысле нижеследующее правило можно будет понимать так: если входящий интерфейс - lo пакет нужно разрешить.

#iptables -A INPUT -i lo -j ACCEPT
то же самое делаем для OUTPUT, только интерфейс lo будет уже исходящим и указать его нужно как -o
#iptables -A OUTPUT -o lo -j ACCEPT

Далее разрешаем tcp пакеты только для уже установленных соединений на интерфейсе eth0. Это достигается путём использования модуля state. Данное правило не позволит установить новое соединение с нашей системой, не препятствуя прохождению трафика уже разрешенных другими правилами соединений
#iptables -m state -p tcp --state ESTABLISHED,RELATED -j ACCEPT

далее разрешим соседям по локалке заходить на наш FTP сервер. FTP демон cлушает 21 порт, и у меня настроен для использования как активного, так и пассивного режимов. Для пассивного нужно открыть еще порт 20 для входящих соединений (для передачи потока данных). При активном режиме FTP сервер сам пытается подключиться к клиенту, не ожидая соединений. Чуть позже, в цепочке исходящих пакетов мы разрешим tcp протокол без ограничений, и активный режим у FTPd не вызовет никаких затруднений при исходящих коннектах, а для пассивного нужно разрешить установку соединений помимо 21, еще и на 20 порт.
#iptables -A INPUT -p tcp -i eth0 --dport 20:21 -s 192.168.17.0/24 -j ACCEPT
(192.168.17.0/24 это подсеть, представляющая собой диапазон адресов с 192.168.17.0-255 - адреса моих соседей по локалке. Данная статья не охватывает методы рассчёта подсети для адресов нужного диапазона - поищите эту информацию где-нибудь в Интернете и постарайтесь разобраться - не раз пригодится)
Теперь также разрешим соединяться с моим FTP сервером с единственного рабочего компа, заодно откроем порт 22 для SSH соединений с работы - вдруг поадминить свой сервант приспичит в свободные часы рабочего времени ;-)
#iptables -A INPUT -p tcp -i eth0 --dport 20:22 -s 72.9.238.205 -j ACCEPT
Как вы заметили, я разрешил не только новые соединения к указанным портам, а вообще все tcp пакеты на перечисленные порты с указанных адресов на eth0 без выяснения статуса. Дело в том, что установленные соединения уже разрешены предыдущими правилами, и нет смысла дополнительно для каждого пакета проводить проверку на статус для оставшихся NEW (и, возможно, потерянных пакетов INVALID, но они не представляют никаких угроз - сервер на них никак не отреагирует).

далее откроем всему миру мой вебсервер, который слушает 80 порт, но если в фаерволе не появится правило, разрешающее весь tcp трафик на порт 80, Apache так никогда и не дождётся внешних коннектов. Меняем ситуацию.
#iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT


Теперь разрешаем все исходящие tcp пакеты, не будем ограничивать себя в возможностях соединяться с кем попало на любой порт.
#iptables -A OUTPUT -p tcp -o eth0 -j ACCEPT
однако, имеет смысл указать еще что для этого должен использоваться диапазон непривилегированных локальных портов параметром --sport 1024:65535, но я, как видите, этим избыточным (на мой взгляд) требованием пренебрёг

С TCP всё ясно, разбираемся с UDP. В основном, по UDP происходят только DNS-запросы на 53 UDP-порт с непривилегированных локальных портов, но ошибкой будет уверенность, что этим использование UDP ограничивается. Именно UDP используется в коллективных сетевых играх, для видеоконференц-связи и голосового общения. Разрешаем исходящие UDP с непривилегированных портов куда угодно
#iptables -A OUTPUT -p udp -o eth0 --sport 1024:65535 -j ACCEPT

Разрешаем UDP пакеты c 53 порта DNS серверов на непривилегированные локальные порты
#iptables -A INPUT -p udp -i eth0 --dport 1024:65535 --sport 53 -j ACCEPT

Открываем ворота для пакетов установленных UDP потоков. Новые DNS пакеты под это правило не попадут, и пропущены внутрь системы не будут
#iptables -A INPUT -p udp -m state --state ESTABLISHED -i eth0 --dport 1024:65535 -j ACCEPT

ICMP протокол...
Предлагаю разрешить ICMP, ограничив скорость поступления пакетов тремя в секунду и максимальным размером 110 байт
#iptables -A INPUT -p icmp -o eth0 -m limit -m length --limit 3/second --limit-burst 6 --length :110 -j ACCEPT
По поводу отправки поскупился чуть меньше - 7 пакетов в секунду того же размера.
#iptables -A OUTPUT -p icmp -o eth0 -m limit -m length --limit 7/second --limit-burst 14 --length :110 -j ACCEPT
Думаю, пояснение понадобится только относительно параметра burst - это максимальная длина очереди, в которой пакеты могут ожидать удовлетворения правилу (смотрите более подробный комментарий в Iptables tutorial). При переполнении очереди пакеты правилом не будут обработаны. Зачем подгружен модуль length и для чего используется параметр --length догадаться несложно. Он определяет минимальную:максимальную длину пакета, который удовлетворит правилу и будет обработан указанным действием.

теперь смотрим что получилось:
#iptables -L
и разбираемся в таблице. Вдумчиво смотрим, всё ли в порядке, проверяем и меняем Policy цепочек INPUT и OUTPUT с ACCEPT на DROP.
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
Если вы имеете дело с удалённым хостом, и сразу после этого он перестал реагировать на команды, или к нему стало невозможно подключиться по SSH значит нужно прологиниться локально под рутом и сбросить все правила командой
#service iptables stop
или
#iptables -F

СОВЕТ:
Очень полезно наблюдать за счётчиком пакетов и байт цепочек и правил для отслеживания лишних элементов, правил с нулевым значением (естесственно, через некоторое время). Также можно наблюдать за счётчиком пакетов, попавших под действие по умолчанию, перед тем, как изменить policy - я обычно проверяю доступность всех служб, которые должны быть видны снаружи, и если счётчик действия по умолчинию по-прежнему на нуле, смело меняю политику на запрещающую, не боясь последствий. Меня этот метод еще никогда не подводил, зато много раз выручал.
Для просмотра правил со счётчиками используйте ключ -vL

Если после изменения политики фаервол работает как и было задумано, лишних правил нет, не присходит никаких косяков и глюков, сохраняем наши правила.
#service iptables save

набор правил будет сохранён в файл /etc/sysconfig/iptables (аналогичный результат можно получить, выполнив команду iptables-save>/etc/sysconfig/iptables), а при загрузке системы сохранённый набор правил будет оттуда прочитан при старте сервиса iptables (проверьте наличие ссылки /etc/rc.d/rcX.d/S**iptables, где X- это уровень загрузки системы, обычно 3 для консольной инициализации и 5 для графического входа; а ** - двузначное десятичное число, обознащающее очередность запуска). Если ссылка в указанном месте не существует, воспользуйтесь утилитой chkcfg:
#chkcfg --level (уровень) iptables on
- ссылка будет создана автоматически

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

Комментарии

Нет комментариев. Вы можете быть первым!

Оставить комментарий