Защити себя сам

Называются эти средства  iptables. Я решил написать цикл статей, в которых мы постепенно изучим конструирование файрволлов для разных подключений домашнего компьютера. Начнём с простейшего: компьютер подключен к Интернету через DSL-модем, настроенный, как мост, или же просто подключен  через телефонный модем, контролируется только входящий трафик, Интернет не раздаётся.

Что такое iptables
Когда пакет приходит, то он перехватывается  драйвером интерфейса и попадает в файрволл iptables, встроенный в ядро. Далее пакет проходит ряд таблиц и цепочек.
В файрволле Iptables имеется три вида таблиц:
Mangle -- внесение изменений в заголовок пакета,
Nat -- трансляция сетевых адресов (Network Address Translation),
Filter – основная и самая интересная таблица, где и фильтруется трафик.  Ею  и  заимёмся. Таблицы Mangle и Nat пока что оставим в покое и вообще будем считать, что их нет.
При таком подходе файрволл iptables  не слишком сложен. Сначала все  пакеты попадают в цепочку PREROUTING (предмаршрутизационная обработка заголовков) и далее согласно настройке маршрутизатора компьютера направляются либо в цепочку INPUT, либо в цепочку FORWARD. Обе этих цепочки находятся в   таблице filter. Цепочка  FORWARD  предназначена для транзитных пакетов, не адресованных к компьютеру пользователя, в отличие от цепочки INPUT, предназначенной только для пакетов, ему адресованных.  После фильтрации входящего трафика пакеты попадают в  порты пользовательского софта, который порождает исходящий трафик, попадающий в цепочку OUTPUT таблицы filter.  Цепочки  OUTPUT и FORWARD сходятся в цепочку POSTROUTING (постмаршрутизация), которая  отдаёт пакеты в аппаратные сетевые интерфейсы компьютера. Всё!
Цепочками  PREROUTING и  POSTROUTING занимаются при необходимости трансляции сетевых адресов, мы ими пока что заниматься не будем, они у нас  просто поприсутствуют по умолчанию. Форвардинг тоже пока проигнорируем.
Все команды, управляющие файрволлом iptables, выполняются или от имени суперпользователя, или от имени корневого пользователя. Далее для краткости ключ sudo опущен. Для управления файрволлом   iptables служит одноимённая программа iptables. Она позволяет очень многое. Имеются и вспомогательные команды. Например, команда
iptables-save > firewall_filename
сохраняет текущие настройки файрволла в текстовом файле firewall_filename.  Если не указывать имя файла, то настройки выводятся в терминал. Команда
iptables-restore <  firewall_filename
наоборот, восстанавливает настройки при условии, что настройки  предварительно очищены командами сброса правил и удаления цепочек во всех таблицах:
iptables -F <таблица>
iptables -X <таблица>
Если имя таблицы не указывается, то подразумевается таблица filter. Посмотреть текущие настройки таблицы  filter можно командой
iptables -S
и настройки будут выведены в терминал в виде командных строк. Часто для анализа настроек удобнее воспользоваться командой
iptables -L
Последняя команда группирует настройки по именам цепочек, но выведенные строки перестают выглядеть, как командные.

Синтаксис, с которым придётся иметь дело
Полный синтаксис командной строки iptables можно прочитать, набрав в терминале man iptables, Приведу только сокращённый синтаксис. На первых порах этого должно хватить c лихвой.
В командной строке за словом iptables  всегда следует собственно команда, состоящая из ключа «минус» и прописной буквы. С командами -F,-X,-S,-L мы уже познакомились. Между словом  iptables и командой можно вписывать  имя таблицы, иначе действие команды будет распространяться только на таблицу filter, что, собственно, нам и надо. Существуют и другие команды, после которых которых явно не указываются правила. Команда
iptables -N <имя цепочки>
создаёт новую цепочку, а команда
iptables -P <имя цепочки> <действие>
устанавливает новое значение политики по умолчанию для существующей цепочки.
Очередную настройку  добавляют командой -A:
iptables  -A <имя цепочки> <выражение> <-j действие>
Сочетание, следующее за командой -A, называется правилом. Правило предусматривает какое-то действие. Обычно применяют 4 действия:
-j ACCEPT – пропустить пакет,
-j DROP – уничтожить пакет,
-j REJECT – уничтожить пакет и сообщить о причине сего,
-j RETURN – вернуться в предыдущую цепочку.
Ключ -j – это --jump, т.е. переход. Он может осуществляться и на пользовательскую цепочку, если она предварительно была создана командой -N. В этом случае после -j  указывается имя пользовательской цепочки, из которой можно выбраться действием -j RETURN. Пользовательские цепочки повышают читаемость таблицы фильтрации и удобны для отладки. Если пользовательская цепочка не существует, то правило не срабатывает.
Для отладки файрволла применяют действие -j LOG. Это действие делает  запись в системном журнале и выполняет переход на следующее правило цепочки. Чтобы не создавать кашу в системном журнале, добавляют конкретику записи: -j LOG --log-prefix "iptables chain nmr: ". Тогда все отладочные записи в системном журнале будут начинаться с  этой конкретики, и их остаётся только выдернуть, например, с помощью утилиты grep:
sudo cat /var/log/syslog | grep "iptables chain nmr: "
Пока что мы отладкой заниматься не будем, но отметим, что записи в журнале при грамотном построении файрволла вскрывают факты  хакерских атак.
Существуют также команды -I и -D, позволяющие вставлять и удалять правила, но ими редко пользуются. Наибольшие затруднения вызывает составление выражений для правил. Тут не обойтись без специфических «сетевых» понятий.

Статус пакета
В Сети соединение устанавливается не звонком, а квитированием первого посланного пакета, содержащего флаг SYN. Поэтому любое соединение в Сети независимо от используемого транспортного протокола имеет состояния NEW (новое)  и  ESTABLISHED (установленное).  Соответственно и пакеты окрашиваются этими состояниями и имеют cтатусы NEW и ESTABLISHED. Однако, tcp-пакеты могут иметь ещё два статуса:  RELATED (пересылаемый) и INVALID (неопознанный).  Для статусной фильтрации пакетов  в выражении используется критерий --state, анализируемый одноименным загружаемым  модулем, для вызова которого в выражение вставляется опция -m state.  Встретившееся в командной строке выражение -m state --state NEW читается, как «если статус пакета «новый»».

Флаги tcp-пакета
tcp-пакет содержит поле из  флагов, по которым можно определить, что это за пакет – первый, не первый, последний, сбрасывающий и т.д. В iptables для анализа флагов пакетов используется критерий фильтрации —tcp-flags <маска> <флаги>, обрабатываемый загружаемым модулем -m tcp. Маску из всех флагов принято обозначать ALL, иначе маскируемые флаги перечисляются через запятую.  В поле <флаги> перечисляются через запятую проверяемые флаги или пишется NONE, если пакет проверяется на отсутствие флагов. По флагам и статусу пакета можно определить его валидность. Например, при статусе ESTABLISHED наличие в пакете флага SYN говорит ненормальности, и такой входной пакет не должен пропускаться ядром.  Встретившееся в командной строке выражение -m tcp --tcp-flags ACK,RST,SYN,FIN SYN читается «если при маске флагов ACK,RST,SYN,FIN имеется флаг SYN».
В выражениях перед критерием фильтрации можно употреблять восклицательный знак. Но это не обычное логическое «нет», а логическое «кроме». Например, выражение  -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW читается как «кроме tcp-пакетов с флагом SYN и статусом NEW».  Кстати,  сочетание   --tcp-flags FIN,SYN,RST,ACK SYN настолько употребительное, что его заменяют кратким эквивалентом --syn. Запомним это.
Пакеты со следующими сочетаниями маски и флагов, естественно,  бракуются:
--tcp-flags ALL NONE
--tcp-flags ALL ALL
--tcp-flags SYN,FIN SYN,FIN
--tcp-flags SYN,RST SYN,RST
--tcp-flags ALL SYN -m state --state ESTABLISHED


Входные интерфейсы
<выражение> может начинаться с указания конкретного источника входящих пакетов – имени интерфейса, предваряемого опцией -i, указывающей, что речь идёт об интерфейсе, из которого поступил пакет:
-i lo – локальный петлевой интерфейс,
-i ppp0 – интерфейс 0 ppp-протокола или pppoe-протокола,
-i eth0 – сетевая карта eth0,
-i eth1 – сетевая карта eth1
и т.д. Если интерфейс явно не указан, то считается, что правило распространяется на все сетевые интерфейсы. Например, правило
INPUT -i lo -j ACCEPT
позволяет всем портам принимать пакеты только из локальной петли, а правило
INPUT -m state --state INVALID -j DROP
уничтожает любые неопознанные пакеты, независимо от того, по какому  интерфейсу они пришли. В то же время правило
INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
разрешает приём пакетов в установленных соединениях для всех интерфейсов.


Протоколы пакетов
После необязательного указания типа интерфейса указывают тип протокола, на который распространяется правило. Если тип протокола не указан, то  правило распространяется на все протоколы. Обычно файрволл iptables имеeт дело с тремя типами протоколов – tcp, udp и icmp. Тип протокола предваряется опцией -p. Например, правило
INPUT -p tcp -m tcp ! --syn -m state --state NEW -j DROP
распространяется только на все входящие  tcp-пакеты, не угрожающие syn-наводнением.  А правило
INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
распространяется на все входящие пакеты, независимо от протокола, если пакеты относятся к ранее установленному соединению.
Несколько особняком стоит протокол icmp межсетевых управляющих сообщений.  Согласно этому протоколу сообщения кодируются номером.  Код icmp-сообщения фильтруется по критерию --icmp-type модулем -m icmp. Например, правило
INPUT -i eth1 -p icmp -m icmp --icmp-type 4 -j ACCEPT
разрешает принимать приостановы исходящего потока, но распространяется только на сетевую карту eth1.
Умышленная фрагментация icmp-пакетов может быть использована хакерами, как средство наводнения, поэтому фрагментированные icmp-пакеты принимать нельзя. Для выявления фрагментации пакета служит критерий -f.  Следующее правило запрещает приём фрагментированных icmp-пакетов, откуда бы они не пришли:
INPUT -p icmp -f -j DROP


IP-адреса
tcp и udp протоколы предусматривают наличие в пакетах адресов источника и приёмника. Адреса и их диапазоны в выражениях iptables  можно указывать явно. Адрес источника пакета предваряется ключом -s, а адрес приёмника – ключом -d. Например, правило
INPUT -s 127.0.0.0/8 ! -i lo -j DROP
уничтожает все пакеты в диапазоне адресов  127.0.0.0 –  127.255.255.255, кроме пакетов, поступивших из локального петлевого интерфейса lo. Адреса назначения могут указываться и в цепочках INPUT таблицы filter. Например, следующее правило устраняет приём широковещательных пакетов, поступающих из всех интерфейсов:
INPUT -d 255.255.255.255/0.0.0.255 -j DROP

Порты
Порты приложений и диапазоны номеров портов в правилах файрволла iptables  также можно указывать явно, если подгружается модуль tcp. При составлении правила порт источника пакетов предваряется ключом -sport, а порт приёмника пакетов – ключом -dport. Например, правило
INPUT -i ppp0 -p tcp -m tcp --sport 53 --dport 1024:65353 -j ACCEPT
позволяет принимать ответы от DNS при разрешении символьного веб-имени в эквивалентной IP-адрес программам, порты которых находятся в диапазоне 1024--65353.
Защищать пользовательские порты от проникновения из сети можно по двум  принципам: запретительному и разрешительному. Запретительный принцип применяют при многоадресности источника пакетов, например, DSL-модем, настроенный, как мост. При этом устанавливают запретительную политику по умолчанию:
-P INPUT DROP,
затем открывают нужные порты. Например, откроем порт 68 для приёма пакетов из порта 67 для динамического назначения IP-адреса компьютеру:
INPUT -i ppp0 -p udp -m udp --sport 67  --dport 68 -j ACCEPT
Разрешительный принцип применяют, если адрес источника пакетов заранее известен. Такое бывает, если источником пакетов является шлюз или другой компьютер. Шлюзом может быть и модем, подключённый к сетевой карте, но настроенный, как маршрутизатор. Тогда предварительно разрешают прохождение корректных пакетов от доверенного IP-адреса устройства-источника:
INPUT -s 192.168.1.1-p tcp -m tcp ! --syn -j ACCES
Здесь 192.168.1.1 – адрес шлюза. Затем закрывают нужные порты:
INPUT -i eth1 -p tcp --dport 3389 -j DROP
В этом примере закрывается порт 3389, а источник подключен к сетевой карте eth1. Далее для простейшего файрволла мы будем применять запретительный принцип. Полный список всех  возможных(!) портов можно посмотреть командой:
sudo cat /etc/services
Посмотреть список активных портов можно вот такой командой:
sudo netstat -antpu
Правда, будут выведены и петлевые порты. Если информация о последних излишняя, то можно воспользоваться более простой командой:
sudo nmap localhost

Фильтрация по частоте и количеству соединений
Файрволл iptables позволяет контролировать прохождение пакетов через правило, наблюдая за частотой этого события.  Для этого подгружается модуль -m limit, который фильтрует поток пакетов согласно параметрам  критериев --limit и --limit-burst.  Параметры этих критериев описывают реверсивный счётчик пакетов. Каждый счётчик – атрибут только своего правила. Выражение  -m limit --limit 5/s --limit-burst 10 означает, что каждый пакет, пришедший через время, меньшее, чем через 1/5 с (т.е. 200 мс) после предыдущего пакета, инкрементирует счётчик, иначе через 200 мс после предыдущего пакета счётчик декрементируется. Правило срабатывает, если содержимое счётчика достигло или превышает порог 10. Критерий  --limit-burst <порог> не обязательно указывать. По умолчанию он равен 5.
Файрволл iptables позволяет контролировать  количество подключений к конкретному порту.  Для этого подгружается модуль -m conlimit, который фильтрует количество соединений согласно параметру  критерия --сonnlimit-above. Например, Выражение  -m connlimit --сonnlimit-above 5 означает, что правило срабатывает при пяти и более подключений.
Ограничения по частоте и количеству соединений можно эффективно использовать для предотвращения затопления и попыток подбора паролей. Вот пример для порта 80 (веб-сервер):
-N is-flood
INPUT -p tcp --syn --dport 80 -m state --state NEW -j is-flood
# новые подключения к порту 80 попадают в пользовательскую цепочку is-flood:
is-flood -p tcp -m limit  --limit 5/s --limit-burst 10 -j DROP
is-flood -j RETURN
# вернулись в цепочку INPUT (-j INPUT – плохое решение):
INPUT -p tcp --dport 80 ! --syn -m state --state NEW -j DROP
INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP
INPUT -p tcp --dport 80 -j ACCEPT
Существует также и возможность ограничения интенсивности подключений с одного и того же адреса. Допустим, в цепочке INPUT обнаружена попытка внешнего корректного подключения к порту 3306, после чего совершён переход на пользовательскую цепочку is_bad, в которой прописаны следующие правила:
is_bad -m tcp dport 3306 -m recent --name psc --set -j LOG --log-prefix "Bad_guy: "
is_bad -m recent --name psc --update --seconds 60 --hitcount 2 -j DROP
is_bad -j RETURN
Модуль  recent  позволяет вести список адресов отправителя psc (имя выбирает пользователь). Список пополняется оператором --set. Список в данном примере автоматически очищается один раз в минуту. Если в течение этой минуты происходят 2 и более обращений с одного и того же адреса, то правило срабатывает.


Правила составления правил
Обычно при создании файрволла сосредоточиваются на фильтрации входящего трафика. Однако, контроль за исходящим трафиком тоже  полезен, чтобы предотвратить утечку данных, организуемую нехорошими программами, установленными не из репозиториев.
Файрволл iptables очень исполнителен и, получив пакет, скрупулёзно продвигает его, просматривая правило за правилом, до тех пор, пока не выполнит действие DROP или REJECT, после чего забывает о пакете. После действия ACCEPT пакет не уничтожается! Отсюда следует правило: при запретительном принципе сначала следуют правила, разрешающие акцепт, затем следуют правила, уничтожающие пакеты; при разрешительном принципе – наоборот.

Конструируем файрволл
Теперь, вооружившись знаниями, можно начинать настраивать файрволл. Конечно, можно настраивать, набирая в терминале строки команд  iptables -A c последующими правилами. Но это утомительно и грозит ошибками. Известно  несколько графических интерфейсов (GUI), призванных облегчить конструирование файрволла на базе iptables. Наиболее распространенные – webmin (см. http://www.upubuntu.com/2011/09/how-to-install-webmin-on-ubuntu.html) и fwbuilder (см. fwbuilder.org). Автор пробовал работать с ними. Увы, они малоудобны: приходится много кликать, трудно использовать шаблоны выражений и отлаживать. Напоминает Windows-путь. Большинство линуксоидов предпочитают иное: описывают файрволл в текстовом файле, а потом делают из него скрипт, позволяющий управлять файрволлом. Поступим так же и мы. Особых знаний языка bash не потребуется, так как в сценарии нет циклов.
Привлекателен один нехитрый приём конструирования файрволла. Все входящие пакеты можно разбить на следующие виды:
Bogus – искажённые,
Always – безусловно принимаемые,
Enemies – вражеские,
Allow – разрешаемые.
Для каждого вида пакета создаём свою цепочку правил, и получается вот такой сценарий:

#!/bin/bash
# путь к файлу запуска iptables.
IPT="/sbin/iptables"
# сетевой интерфейс
INET_IFACE="ppp0"
# Номера непривилегированных портов
UNPRIPORTS="1024:65535"

start_fw()
{
# Сбросить правила и удалить цепочки.
$IPT -F
$IPT -X

# Политики по умолчанию.
$IPT -P INPUT DROP
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT

# Новые пользовательские цепочки:
$IPT -N Bogus
$IPT -N Always
$IPT -N Enemies
$IPT -N Allow

$IPT -A INPUT -j Bogus
$IPT -A INPUT -j Always
$IPT -A INPUT -j Enemies
$IPT -A INPUT -j Allow

# Если интерфейс не lo, то запрещаем входить в список его адресов:
$IPT -A Bogus -s 127.0.0.1/8 ! -i lo -j DROP
# Отбрасывать все неопознанные пакеты :
$IPT -A Bogus   -m state --state INVALID -j DROP
# Противодействовать SYN наводнению:
$IPT -A Bogus -p tcp ! --syn -m state --state NEW -j DROP
# Не принимать фрагментированные icmp-пакеты:
$IPT -A Bogus -f -p ICMP -j DROP
# Запрет на адреса, зарезервированные для сети:
$IPT -A Bogus -s 10.0.0.0/8 -j DROP
$IPT -A Bogus -j RETURN

# Разрешаем приём трафика по локальному интерфейсу :
$IPT -A Always -i lo -j ACCEPT
# Принимать все пакеты из уже установленного соединения:
$IPT -A Always   -m state --state ESTABLISHED,RELATED -j ACCEPT
# Принимать  DHCP-ответы (если IP-адрес динамический).
$IPT -A Always -p udp -m udp -i $INET_IFACE --dport 68 --sport 67 -j ACCEPT
$IPT -A Always -p udp -s 0/0 --sport 67 --dport 68 -j ACCEPT  
$IPT -A Always -j RETURN

# Запрещаем любые новые подключения, кроме lo :
$IPT -A Enemies -m state ! -i lo --state NEW -j DROP
# Защитить службы, использующие UDP:
$IPT -A Enemies -p udp -m udp -s 0/0 --dport 138 -j DROP
$IPT -A Enemies -p udp -m udp -s 0/0 --dport 113 -j DROP
# Запрещаем запросы аутентификации на свой компьютер:
$IPT -A Enemies -p tcp -m tcp -i $INET_IFACE --dport 113 -j DROP
# Запрещаем подключение к X-серверу:
$IPT -A Enemies -p tcp -m tcp -i $INET_IFACE --dport 6000:6063 -j DROP --syn
# Закрываем порты, которые не должны быть видны извне:
$IPT -A Enemies -p tcp -m tcp -m multiport -i $INET_IFACE -j DROP --dports 10000
# Тут можно ещё добавить портов... :)
$IPT -A Enemies -j RETURN

# Разрешить принимать  ICMP-сообщения:
$IPT -A Allow -p icmp -m icmp -i $INET_IFACE --icmp-type source-quench -j ACCEPT
$IPT -A Allow -p icmp -m icmp -i $INET_IFACE --icmp-type echo-reply -j ACCEPT
$IPT -A Allow -p icmp -m icmp -i $INET_IFACE --icmp-type parameter-problem -j ACCEPT
# Ответы от DNS разрешаем.
$IPT -A Allow -p udp -m udp -i $INET_IFACE --dport $UNPRIPORTS --sport 53 -j ACCEPT
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 53 -j ACCEPT
# Разрешаем AUTH-запросы на удаленные сервера:
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --sport $UNPRIPORTS --dport 113 -j ACCEPT
# SMTP клиент (25) :
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 25 -j ACCEPT
# POP3 клиент (110):
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 110 -j ACCEPT
# IMAP4 клиент (143):
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 143 -j ACCEPT
# SSH клиент (22) :
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 22 -j ACCEPT
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport 1020:1023 --sport 22 -j ACCEPT
# FTP клиент (21) :
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 21 -j ACCEPT
# HTTP/HTTPS клиент (80, 443) :
$IPT -A Allow -p tcp -m tcp -m multiport -i $INET_IFACE --dport $UNPRIPORTS -j ACCEPT --sports 80,443
# Разрешаем finger, whois, gorper, wais. Traceroute - разрешаем себе, Telnet не разрешаем
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 20 -j ACCEPT
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport $UNPRIPORTS -j ACCEPT
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 23 -j ACCEPT
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 79 -j ACCEPT
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 43 -j ACCEPT
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 70 -j ACCEPT
$IPT -A Allow -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 210 -j ACCEPT
$IPT -A Allow -j RETURN  
}

case "$1" in
start)    echo -n "Start firewall: iptables "
start_fw
echo "."
;;
stop)    echo -n "Stop firewall: iptables "
iptables -F
iptables -X
echo "."
;;
save)    echo -n "Save firewall: iptables "
    iptables-save > /etc/rules-save
    echo "."
    ;;
restart) echo -n "Restart firewall: iptables "
    iptables -F
    iptables -X
    cat /etc/rules-save | iptables-restore
echo "."
;;
reload|force-reload) echo -n "Reload firewall: iptables "
echo "."
;;
*)    echo "Usage: /etc/init.d/rc.firewall start|stop|restart|reload|force-reload "
exit 1
;;
esac
exit 0

Скопируйте этот сценарий в файл /etc/init.d/rc.firewall и сделайте его исполняемым командой:
sudo chmod +x /etc/init.d/rc.firewall
Чтобы не запускать файрволл вручную командой
sudo /etc/init.d/rc.firewall start
наберите в любом редакторе вот такой сценарий-пускач:
#!/bin/bash
sudo /etc/init.d/rc.firewall start
exit 0
Сохраните его где угодно под именем, например, fw_start, сделайте его исполняемым и скопируйте (понадобятся права суперпользователя) в директорий /usr/sbin. Посмотрите, есть ли у вас файл /etc/rc.local. Если его нет, то создайте его. Этот файл является сценарием, содержащим вызовы сценариев, которые должны выполняться при старте системы. Файл должен иметь вид:
#!/bin/sh -e
….
exit 0
Перед строчкой exit 0 вставьте вызов стартёра файрволла iptables:
fw_start
И всё.

Промежуточное послесловие.
Промежуточное потому, что я планирую рассказать о файрволлах для более сложных сетевых подключений домашнего компьютера. Возможно, кому-то изложенное показалось чересчур сложным, не хочется разбираться и  конструировать собственный файрволл. В таком случае просто установите Firestarter или, что лучше, – ufw – универсальный файрволл, эти приложения есть в репозиториях. Просто запустите один из этих продуктов, это разумнее, чем оставить систему незащищённой. Но лучшее решение – использовать iptables.  Всё равно удобняшки, которые вы, возможно, установите, будут работать с   iptables.
Примеры построения файрволла iptables можно найти здесь:
http://www.liniac.upenn.edu/sysadmin/security/iptables.html
http://www.lammertbies.nl/comm/info/iptables.html
http://posix.ru/network/iptables/
http://linux-admin.ru/archives/62
http://www.ingineer.ru/linux/iptables/index.html
http://wikiadmin.net/Iptables._Настройка_для_начинающих
http://www.ingineer.ru/linux/iptables/
Если у вас редактор vim, то можно организовать подсветку синтаксиса правил  iptables: http://help.ubuntu.ru/wiki/подсветка_синтаксиса_iptables_в_vim. Xороший, простой, но в то же время достаточно полный учебник по работе с iptables: http://www.computerbooks.ru/книга/iptables%20tutorial%201.1.19/1

 
Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 0
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Читайте также