Примеры правил iptables. Ключи iptables и примеры их использования. Настройка netfilter с помощью iptables

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

Приступим. Начнем с простого, и потом будем усложнять конфигурацию. Здесь на сайте уже есть статья про автозагрузку правил iptables, поэтому мы не будем сейчас рассматривать загрузку правил, а сосредоточимся на самих правилах. Настраивается фаервол всегда под учетной записью root.

Сценарии сетевых подключений

Перед настройкой фаервола обязательно нужно иметь точное представление о том, какие сетевые соединения и как должны устанавливаться при работе системы, чтобы все сервисы могли нормально работать. Чем точнее у нас картина работы сетевых сервисов, как работающих на нашем сервере, так и на других серверах, тем более тонко можно настроить систему. Поэтому желательно всегда сначала описывать сценарии того, как всё должно работать, и только потом начинать настраивать фаервол. Сценарий можно написать в любом текстовом редакторе. Сначала описываем все внешние сервисы, с которыми работает сервер, а затем все сервисы, которые работают на сервере. Зачем это надо? Чтобы точно представлять сам процесс работы, без углубления в техническую часть. После написания максимально точного сценария можно приступать к настройке фаервола. Описание в сценарии должно выглядеть примерно так:

1) Все пользователи могут просматривать сайт. По умолчанию сайт на русском языке.
2) Если пользователи пришли с адресов <список-адресов-или-маска-подсети>, то им должен быть показан сайт на украинском. В нашем примере это будет, допустим, интернет-магазин с одним доменным именем, отображаемый на русском или украинском языке, и имеющий в продаже свой набор для России и Украины. У нас будет просто два сайта, один на русском, второй на украинском, и по адресу, с которого пришел клиент, будет определяться, на какой сайт он попадет. Пример взят из головы, на практике, конечно, такие вопросы решаются по другому. Можно также не разрешать просмотр сайта с китайских адресов из-за постоянного спама в комментариях на китайском.
3) Из офиса должна быть доступна почта, из других мест она не должна быть доступна.
4) Извне должна быть обеспечена возможность подключения к ВПН
5) Мы можем использовать только несколько DNS-серверов, которым мы доверяем. Все остальные сервера DNS должны быть недоступны
6) …..

И так далее. Думаю, достаточно для простого примера. Смысл в том, чтобы максимально точно определить картину сетевого взаимодествия. Любой сценарий имеет только одну цель — формализовать взаимодействие с пользователями и сервисами до составления описаний соединений, включающих порт, протокол, адрес источника, адрес назначения для каждого соединения.

Настройка iptables: Самая простая конфигурация

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

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

Iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD

INPUT, OUTPUT, FORWARD — это три основные цепочки, по которым будут идти пакеты, входящие, исходящие и проходящие с интерфейса на интерфейс.

После этого необходимо задать политику по умолчанию. Их всего две — ACCEPT и DROP, принимать пакеты или не принимать. Для боевого сервера всегда необходимо выбирать DROP, а затем открывать всё, что необходимо и не более того.

Для задания таких политик необходимо предварительно разрешить соединения по SSH, будем считать, что мы не меняли стандартный порт (что обычно следует на боевых серверах делать сразу после установки SSH-сервера).

Iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

И после этого уже можно приступать к изменению политик по умолчанию:

Iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP

Для цепочки OUTPUT пока можно оставить политику по умолчанию ACCEPT, разрешающую исходящие соединения, к ней можно переходить после настройки цепочки INPUT, когда мы запретим входящие соединения. На многих серверах достаточно бывает правильно настроить цепочку INPUT, но мы рассмотрим позже также и настройку OUTPUT для более жесткой конфигурации.

Итак. В данный момент у нас открыт только порт SSH-сервера для входящих соединений, на все остальные порты соединения проходить не будут. Теперь надо добавить прием соединений на порты остальных сервисов, если они на вашем сервере запущены.

Iptables -t filter -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT

DNS (обычно достаточно разрешить UDP, но можно также добавить и TCP):

Iptables -t filter -A INPUT -p udp -m udp --dport 53 -j ACCEPT

Iptables -t filter -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Iptables -t filter -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT

Iptables -t filter -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Но это еще не всё. Порты открыты, сервисы доступны извне, но почта не работает и доменные имена не резолвятся. Дело в том, что при запросе DNS-серверов запрос отправляется с произвольного свободного порта из числа непривелегированных, точно так же, как и соединение с другим почтовым сервером. И ответ эти сервисы отправляют на тот же самый порт. А этот порт, как вы понимаете, у нас закрыт. Мы могли бы открыть этот порт, но мы не знаем, с какого порта будет исходящее соединение. Поэтому мы можем сделать самое простое, что может быть,- разрешить соединения с определенных портов удаленного компьютера:

Iptables -t filter -A INPUT -p tcp -m tcp --sport 25 -j ACCEPT

Iptables -t filter -A INPUT -p udp -m udp --sport 53 -j ACCEPT

Эти два правила разрешают входящие соединения с портов 25/tcp и 53/udp, поэтому, когда с этих портов приходят пакеты по соответствующему протоколу, они будут приняты. Если вы планируете обновлять систему, программное обеспечение или устанавливать пакеты, необходимые для работы, то вам придется разрешить соединения с 80 порта удаленных машин.

Вот теперь самая простая конфигурация iptables у нас готова.

После внесения правил в таблицы, необходимо их сохранить. Для этого можно воспользоваться, например, скриптом.

Обработка источника соединения

Идем дальше. соединение по определенным портам нам необходимо не со всем Интернетом, а с определенными машинами, с определенными IP-адресами. Поэтому мы можем немного усложнить правила, добавив в них адрес источника пакетов.

Iptables -t filter -A INPUT -s 123.123.123.123 -p tcp -m tcp --dport 22 -j ACCEPT

Данное правило позволяет принимать пакеты на 22 порт по протоколу TCP только из источника с адресом 123.123.123.123, на это указывает параметр «-s» (source, источник). Таким образом вы можете ограничить соединения с сервером по SSH одним определенным IP-адресом, либо определенной подсетью, если укажете маску подсети, из которой разрешены соединения вместо отдельного IP-адреса.

Если у вас всегда используется один и тот же почтовый шлюз, через который ваш сервер отправляет почту, то вы можете, например, ограничить соединения с порта 25/tcp, указав этот шлюз в качестве источника.

Правила для конкретного сетевого интерфейса или IP-адреса

На сервере может быть несколько сетевых интерфейсов. Обычно их как минимум два — внешний сетевой и так называемый loopback-интерфейс 127.0.0.1, доступ к которому извне невозможен, если отсутствует соответствующее перенаправление пакетов. У вас также может как минимум еще один IP-адрес, используемый совместно с алиасом сетевого интерфейса, или еще один физический сетевой интерфейс. И на каждом IP-адресе или сетевом интерфейсе могут работать определенные сервисы. Например, на одном веб-сервер Apache, а на втором сервер службы доменных имен bind9. И когда вы разрешаете соединения на определенный порт без указания этого сетевого интерфейса, вы открываете доступ к этому порту на всех интерфейсах. Поэтому есть два способа сузить область действия разрешения.

Первый способ — указать IP-адрес, для которого будет разрешен доступ.

Iptables -t filter -A INPUT -d 234.234.234.234 -p tcp -m tcp --dport 22 -j ACCEPT

Этот пример показывает, как можно использовать адрес назначения в правиле iptables. При этом также можно использовать адрес источника:

Iptables -t filter -A INPUT -s 123.123.123.123 -d 234.234.234.234 -p tcp -m tcp --dport 22 -j ACCEPT

В данном пример мы уже ограничиваем доступ двумя адресами, что позволяет получить доступ по SSH к серверу по адресу 234.234.234.234 с адреса 123.123.123.123, с остальных адресов доступ вы получить не сможете.

Второй способ — указать имя сетевого интерфейса. Этот способ также применим, когда внешний адрес может измениться. В случае, если изменится адрес на сетевом интерфейсе, с предыдущим вариантом вы потеряете доступ к серверу. Указание имени интерфейса осуществляется следующим образом:

Iptables -t filter -A INPUT -i eth0 -s 123.123.123.123 -p tcp -m tcp --dport 22 -j ACCEPT

Такой вариант разрешает доступ по SSH на сетевом интерфейсе eth0, на остальных сетевых интерфейсах доступ по SSH будет отсутствовать.

Всё, что мы только что рассмотрели — это только самое начало, в следующей части будет продолжение…

Основная задача файрвола (межсетевого экрана) фильтрация и обработка пакетов, проходящих через сеть. При анализе входного пакета файрвол принимает решение о судьбе этого пакета: выбросить пакет (DROP ), принять пакет (ACCEPT ) или сделать с ним еще что-то.

В Linux файрвол является модулем ядра, называемым netfilter и представляет собой набор хуков (hooks) для работы с сетевым стеком. Интерфейсом для модификации правил, по которым файрвол обрабатывает пакеты, служит утилита iptables для IPv4 и утилита ip6tables для IPv6.

Всю работу по фильтрации трафика выполняет ядро системы. Iptables не является демоном и не создает новых процессов в системе. Включение или выключение iptables это всего лишь отправка сигнала в ядро. Большая скорость фильтрации достигается за счёт анализа только заголовков пакетов.

К основным возможностям iptables относиться:

  • фильтрация трафика на основе адресов отправителя и получателя пакетов, номеров портов;
  • перенаправление пакетов по определенным параметрам;
  • организация доступа в сеть (SNAT);
  • проброс портов из глобальной сети в локальную (DNAT);
  • ограничение числа подключений;
  • установление квот трафика;
  • выполнение правил по расписанию;

Рассмотрим основной процесс работы iptables (источник картинки rigacci.org ).

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

В iptables используется три вида таблиц:

  1. mangle – используется для внесения изменений в заголовок пакета;
  2. nat – используется для трансляции сетевых адресов;
  3. filter – для фильтрации трафика;

Таблица mangle

Основное назначение таблицы mangle - внесение изменений в заголовок пакета. В этой таблице могут производиться следующие действия:

  • установка бита Type Of Service;
  • установка поля Time To Live;
  • установка метки на пакет, которая может быть проверена в других правилах;

Цепочки в таблице mangle :

  • PREROUTING - используется для внесения изменений в пакеты на входе в iptables, перед принятием решения о маршрутизации;
  • POSTROUTING - используется для внесения изменений в пакеты на выходе из iptables, после принятия решения о маршрутизации;
  • INPUT - используется для внесения изменений в пакеты, перед тем как они будут переданы локальному приложению;
  • OUTPUT - используется для внесения изменений в пакеты, поступающие от приложения внутри iptables;
  • FORWARD - используется для внесения изменений в транзитные пакеты;

Таблица nat

Таблица используется для преобразования сетевых адресов (Network Address Translation) и когда встречается пакет, устанавливающий новое соединение. В этой таблице могут производиться следующие действия:

  • DNAT (Destination Network Address Translation) – преобразование адреса назначения в заголовке пакета;
  • SNAT (Source Network Address Translation) – изменение исходного адреса пакета;
  • MASQUERADE – используется в тех же целях, что и SNAT , но позволяет работать с динамическими IP-адресами;

Цепочки в этой таблице:

  • PREROUTING – используется для внесения изменений в пакеты на входе в iptables;
  • OUTPUT – используется для преобразования адресов в пакетах, перед дальнейшей маршрутизацией;
  • POSTROUTING – используется для преобразования пакетов, перед отправкой их в сеть;

Таблица filter

Таблица используется для фильтрации пакетов. В этой таблице есть три цепочки:

  1. INPUT – цепочка для входящих пакетов;
  2. FORWARD – цепочка для пересылаемых (транзитных) пакетов;
  3. OUTPUT – цепочка для исходящих пакетов;

Пакет, проходящий через эти цепочки, может подвергаться действиям: ACCEPT , DROP , REJECT , LOG .

Подытожим, прибывший пакет проходит по цепочке правил. Каждое правило содержит условие и цель (действие). Если пакет удовлетворяет условию то он передается на цель, в противном случае к пакету применяется следующее правило в цепочке. Если пакет не удовлетворил ни одному из условий в цепочке, то к нему применяется действие по умолчанию.

Цепочка Таблица
filter nat mangle
INPUT + +
FORWARD + +
OUTPUT + + +
PREROUTING + +
POSTROUTING + +

Утилита iptables

Установка iptables

# под Arch Linux yaourt -S iptables # под Ubuntu sudo apt-get install iptables

Запуск iptables

# под Arch Linux sudo systemctl enable iptables sudo systemctl start iptables # под Ubuntu sudo service iptables start

Сохранение правил

# под Arch Linux sudo sh -c "iptables-save > /etc/iptables/iptables.rules" # под Ubuntu sudo sh -c "iptables-save > /etc/iptables.rules"

Восстановление правил из файла

Iptables-restore < firewall-config

Каждое правило в iptables - это отдельная строка, сформированная по определенным правилам и содержащая критерии и действия. В общем виде правило имеет такой формат:

Iptables [-t table] command

  • t table - задает имя таблицы, для которой будет создано правило;
  • command - команда, которая определяет действие iptables - добавить правило, удалить правило и т. д.;
  • match - задает критерии проверки, по которым определяется, попадает ли пакет под действие правила или нет;
  • target/jump - какое действие должно быть выполнено при выполнении критерия;

Команды iptables:

  • -A - добавление правила в цепочку, правило будет добавлено в конец цепочки;
  • -D - удаление правила из цепочки;
  • -R - заменить одно правило другим;
  • -I - вставить новое правило в цепочку;
  • -L - вывод списка правил в заданной цепочке;
  • -F - сброс всех правил в заданной цепочке;
  • -Z - обнуление всех счетчиков в заданной цепочке;
  • -N - создание новой цепочки с заданным именем;
  • -X - удаление цепочки;
  • -P - задает политику по умолчанию для цепочки;
  • -E - переименование пользовательской цепочки;

Примеры команд iptables

Пакеты можно фильтровать по таким параметрам:

Источник пакета

Для фильтрации по источнику используется опция -s . Например запретим все входящие пакеты с узла 192.168.1.95:

Iptables -A INPUT -s 192.168.1.95 -j DROP

Можно использовать доменное имя для указания адреса хоста:

Iptables -A INPUT -s test.host.net -j DROP

Также можно указать целую под сеть:

Iptables -A INPUT -s 192.168.1.0/24 -j DROP

Также вы можете использовать отрицание (знак!). Например, все пакеты с хостов отличных от 192.168.1.96 будут уничтожаться:

Iptables -A INPUT ! -s 192.168.1.96 -j DROP

Разрешаем хождение трафика по localhost:

Iptables -A INPUT 1 -i lo -j ACCEPT

Логируем попытки спуфинга с префиксом "IP_SPOOF A: " и дропаем соединение

Iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: " iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Адрес назначения

Для этого нужно использовать опцию -d . Например запретим все исходящие пакеты на хост 192.168.1.95:

Iptables -A OUTPUT -d 192.168.156.156 -j DROP

Запретить доступ к ресурсу

Iptables -A OUTPUT -d vk.com -j REJECT

Как и в случае с источником пакета можно использовать адреса под сети и доменные имена. Отрицание также работает.

Протокол

Опция -p указывает на протокол. Можно использовать all, icmp, tcp, udp или номер протокола (из /etc/protocols ).

Разрешаем входящие эхо-запросы

Iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Порт источника

Разрешаем все исходящие пакеты с порта 80:

Iptables -A INPUT -p tcp --sport 80 -j ACCEPT

Заблокировать все входящие запросы порта 80:

Iptables -A INPUT -p tcp --dport 80 -j DROP

Для указания порта необходимо указать протокол (tcp или udp). Можно использовать отрицание.

Открыть диапазон портов

Iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

Порт назначения

Разрешить подключения по HTTP

Iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT

Разрешаем получать данные от DHCP-сервера

Iptables -A INPUT -p UDP --dport 68 --sport 67 -j ACCEPT

  • Удаленная эксплуатация ошибок в ПО с целью привести его в нерабочее состояние;
  • Flood - посылка на адрес жертвы огромного количества бессмысленных пакетов. Целью флуда может быть канал связи или ресурсы машины. В первом случае поток пакетов занимает весь пропускной канал и не дает атакуемой машине возможность обрабатывать легальные запросы. Во втором - ресурсы машины захватываются с помощью многократного и очень частого обращения к какому-либо сервису, выполняющему сложную, ресурсоемкую операцию. Это может быть, например, длительное обращение к одному из активных компонентов (скрипту) web-сервера. Сервер тратит все ресурсы машины на обработку запросов атакующего, а пользователям приходится ждать. Флуд бывает разным: ICMP-флуд, SYN-флуд, UDP-флуд и HTTP-флуд

Сбор информации о сетевых соединениях

Просмотр открытых соединений

Netstat -ntu | awk "{print $5}" | cut -d: -f1 | sort | uniq -c | sort -n

Количество подключений к 80 порту

Netstat -na | grep ":80\ " | wc -l

TCP-дамп подключений (на какой домен чаще всего идут запросы)

Tcpdump -npi eth0 port domain

SYN-флуд можно проверить через подсчет числа полуоткрытых TCP-соединений

Netstat -na | grep ":80 " | grep SYN_RCVD

Защита от разных видов флуда.

ICMP-флуд. Очень примитивный метод забивания полосы пропускания и создания нагрузок на сетевой стек через монотонную посылку запросов ICMP ECHO (пинг). Легко обнаруживается с помощью анализа потока трафика в обе стороны: во время атаки типа ICMP-флуд они практически идентичны. Почти безболезненный способ абсолютной защиты основан на отключении ответов на запросы ICMP ECHO:

Sysctl net.ipv4.icmp_echo_ignore_all=1

Или с помощью iptabels :

Iptables -A INPUT -p icmp -j DROP --icmp-type 8

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

Надежный фаервол — один из важнейших аспектов защиты любой современной ОС. Большинство дистрибутивов Linux содержат несколько различных инструментов фаервола. Данное руководство посвящено одному из наиболее популярных — iptables.

Итак, iptables — это стандартный фаервол, включенный в большинство дистрибутивов Linux по умолчанию (для его замены разрабатывается nftables). На самом деле, iptables — это пользовательский интерфейс для управления системой netfilter, которая, в свою очередь, управляет сетевым стеком Linux. iptables сравнивает каждый поступающий пакет с набором установленных правил, а затем решает, что с ним делать дальше.

В речь шла о том, как именно работает iptables. Данная статья сконцентрирована на практических примерах, демонстрирующих создание базового набора правил для сервера Ubuntu 14.04.

Базовые команды iptables

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

Запомните : команды iptables нужно запускать с root-привилегиями. Это значит, что нужно выполнить одно из следующих действий:

  • войти в систему как пользователь root;
  • использовать su или sudo -i, чтобы развернуть оболочку root;
  • начинать все команды с sudo (рекомендуемый способ в Ubuntu).

В данном руководстве применяется последний вариант.

Итак, для начала нужно просмотреть список текущих правил iptables. Для этого используется флаг -L:

sudo iptables -L
Chain INPUT (policy ACCEPT)


target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Как можно видеть, список содержит три цепочки по умолчанию (INPUT, OUTPUT и FORWARD), в каждой из которых установлена политика по умолчанию (на данный момент это ACCEPT). Также можно видеть названия столбцов. Но в данном списке нет самих правил, поскольку Ubuntu поставляется без набора правил по умолчанию.

С помощью флага -S данный список можно просмотреть в другом формате, который отражает команды, необходимые для активации правил и политик:

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Чтобы реплицировать конфигурации, нужно только ввести sudo iptables в начале каждой строки результата. (В зависимости от конфигураций, эта процедура может оказаться немного более сложной при удаленном подключении; если правила, разрешающие текущее соединение, еще не установлены, не стоит устанавливать политику DROP).

Чтобы сбросить текущие правила (если таковые есть), наберите:

sudo iptables -F

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

Прежде чем сбросить правила при удаленном подключении необходимо убедиться, что в цепочках INPUT и OUTPUT установлена политика ACCEPT. Это делается так:

sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F

Создав правила, разрешающие удаленное подключение, можно установить политику DROP. Итак, перейдем непосредственно к созданию правил.

Создание правил iptables

Как уже было сказано выше, данное руководство сконцентрировано на работе с цепочкой INPUT, поскольку она отвечает за входящий трафик. Для начала нужно рассмотреть уже упомянутое правило — правило, которое разрешает текущее SSH-подключение.

Оно выглядит так:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Конечно, сначала оно может показаться невероятно сложным; чтобы понять данное правило, ознакомьтесь с его компонентами:

  • -A INPUT : флаг -А добавляет (append ) правило в конец цепочки. Эта часть команды сообщает iptables о необходимости внести правило в конец цепочки INPUT.
  • -m conntrack : кроме набора основных функций iptables также имеет набор расширений, или модулей, которые отвечают за дополнительные возможности фаервола. Данная часть команды говорит о том, что пользователю необходим доступ к функциям модуля conntrack. Этот модуль позволяет использовать команды, решающие, что делать с пакетом, на основе его отношения к предыдущим соединениям.
  • —ctstate : одна из команд, доступных при вызове модуля conntrack. Данная команда позволяет отслеживать отношение пакетов к другим пакетам, просмотренным ранее. Ей заданы значения ESTABLISHED (что позволяет принимать пакеты, которые являются частью существующего соединения) и RELATED (принимает пакеты, которые связаны с уже установленным соединением). Именно эта часть правила отвечает за текущую сессию SSH.
  • j ACCEPT : указывает действие (target), которое нужно выполнить над пакетом, который отвечает правилу. В этом случае iptables будет принимать (accept) пакеты, которые отвечают предыдущим критериям.

Данное правило нужно поместить в начало, чтобы убедиться, что уже существующие соединения совпадают с правилами, приняты и выходят из цепи, не достигнув правил DROP.

Запросив список правил, можно увидеть изменения:

sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Ознакомившись с базовым синтаксисом, создайте еще несколько правил, принимающих соединение.

Принятие других важных подключений

Ранее iptables получил команду не сбрасывать все текущие соединения, а также принять все соединения, имеющие к ним отношение. Теперь нужно создать правила, принимающие соединения, которые не отвечают вышеперечисленным критериям.

Оставьте открытыми два порта: порт SSH (в данном руководстве используется порт по умолчанию — 22; если данное значение было изменено, не забудьте ввести новое значение); кроме того, предположим, что на данном компьютере веб-сервер запущен на порту 80 по умолчанию (не добавляйте это правило, если это не так).

Итак, строки, которые нужно использовать для создания таких правил, выглядят так:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

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

  • p tcp : данная опция пропускает пакеты, использующие TCP (потоко-ориентированный протокол, который используется большинством приложений, поскольку обеспечивает надежную связь).
  • dport : данная опция доступна при использовании флага -p tcp. Она указывает входящий порт, с которым должен совпасть порт пакета. Первое правило пропускает пакеты TCP, направленные на порт 22, а второе правило принимает TCP-трафик, идущий на порт 80.

Теперь нужно создать еще одно правило ACCEPT, чтобы убедиться, что сервер работает должным образом. Как правило, сервисы взаимодействуют путем обмена пакетами; для этого они используют сетевой псевдоинтерфейс кольцевой связи — так называемый loopback device, который направляет трафик обратно на его источник, а не на другие компьютеры.

То есть, если сервису 1 необходимо установить связь с сервисом 2, прослушивающим соединения на порту 4555, то сервис 1 отправляет пакет на порт 4555 с помощью loopback device. Такое поведение нужно разрешить, поскольку оно является важным условием правильной работы многих программ.

Для этого добавьте следующее правило:

sudo iptables -I INPUT 1 -i lo -j ACCEPT

Оно немного отличается от предыдущих правил; рассмотрите его подробнее:

  • I INPUT 1 : флаг -I говорит iptables вставить (insert) правило. Данный флаг отличается от флага -А (который просто вносит правило в конец цепочки); он указывает цепочку, в которую нужно внести правило, и расположение правила в ней. В данном случае, правило нужно вставить в самое начало цепи INPUT, вследствие чего все правила передвинутся на одну позицию. Это правило нужно разместить в начале цепочки, поскольку оно является одним из основных правил и не должно зависеть от остальных.
  • i lo : данный компонент правила пропускает пакеты, которые используют интерфейс lo («lo» — это другое название для loopback device). Это значит, что любой пакет, использующий данный интерфейс, должен быть принят.

Чтобы просмотреть текущие правила, используйте флаг -S, поскольку флаг -L не выводит некоторую информацию (например, интерфейс, к которому привязано правило, что очень важно в случае с последним правилом):

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Создание правил DROP

Итак, на данный момент было создано 4 правила, которые принимают пакеты, основываясь на определенные критерии. Тем не менее, сейчас сервер все равно не блокирует никаких других пакетов.

Если пакет проходит по цепочке INPUT и не отвечает ни одному из четырех правил, будет выполнена политика по умолчанию (ACCEPT), которая так или иначе примет данный пакет. Теперь ее нужно изменить.

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

Первый способ — отредактировать политику по умолчанию цепочки INPUT; для этого наберите:

sudo iptables -P INPUT DROP

Данная политика будет отслеживать и сбрасывать все пакеты, не отвечающие ни одному из правил цепочки INPUT. Одним из последствий этого типа конструкции является то, что она будет сбрасывать пакеты даже после сброса самих правил.

Конечно, это повышает уровень безопасности сервера; тем не менее, это может повлечь за собой серьезные последствия, если у пользователя нет другого способа подключиться к серверу. Чаще всего хостинг-провайдеры предоставляют веб-консоль для подключения к серверу в случае возникновения подобных проблем. Такая консоль работает как виртуальное локальное соединение, потому iptables не отреагирует на нее.

Можно сделать так, чтобы сервер автоматически сбрасывал соединение, если правила удалены. Это сделает сервер более защищенным и труднодоступным. Также это означает, что можно вносить правила в конец цепочки, и при этом все нежелательные пакеты будут сброшены.

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

Чтобы вернуть цепочке INPUT политику ACCEPT, наберите:

sudo iptables -P INPUT ACCEPT

Теперь можно внести в конец данной цепочки правило, которое будет сбрасывать все несоответствующие пакеты:

sudo iptables -A INPUT -j DROP

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

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

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

sudo iptables -D INPUT -j DROP
sudo iptables -A INPUT новое_правило
sudo iptables -A INPUT -j DROP

либо вставив новое правило в конец цепи (но перед правилом сброса), указав номер строки. Чтобы внести правило в строку 4, наберите:

sudo iptables -I INPUT 4 новое_правило

Если правил много, вычислить номер строки вручную достаточно проблематично; в таком случае iptables может пронумеровать строки:

sudo iptables -L --line-numbers
Chain INPUT (policy DROP)

1 ACCEPT all -- anywhere anywhere
2 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
3 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
4 ACCEPT tcp -- anywhere anywhere tcp dpt:http
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

Это позволяет убедиться, что правило было внесено в нужную строку.

Сохранение настроек iptables

По умолчанию все несохраненные правила действуют до следующей перезагрузки сервера; сразу же после перезагрузки несохраненные правила будут потеряны.

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

Это можно сделать несколькими способами; самый простой из них — использовать пакет iptables-persistent, который можно загрузить из репозитория Ubuntu по умолчанию:

sudo apt-get update
sudo apt-get install iptables-persistent

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

По завершении установки появится новый сервис под названием iptables-persistent, который будет запускаться при перезагрузке сервера и возобновлять установленные правила.

Итоги

Данное руководство помогает настроить фаервол согласно требованиям пользователя. Конечно, существует еще огромное множество подобных утилит, и некоторые из них могут оказаться проще в использовании; все же, iptables — один из лучших инструментов, хотя бы потому что он демонстрирует некоторые основные структуры netfilter и включен во многие системы.

Tags: ,

Iptables отвечает преимущественно за фильтрацию пакетов. Настройка Iptables вручную является довольно непростой задачей. Не надейтесь, что разберётесь в этом «снаскока». К счастью, есть много инструментов, которые могут оказать вам помощь в случае, если с iptables вы ещё не разобрались, а обезопасить систему нужно срочно: fwbuilder, firestarter, guarddog, arno firewall - по сути это GUI к iptables. Однозначного ответа что лучше нет. Выбирать вам. Однако, сегодняшняя статья посвящена именно iptables и делится на две части: теория и практика. Самые нетерпеливые могут сразу выполнить практическую часть, хотя подобный подход не рекомендуется.

Внимание! Все действия с iptables производятся от имени привелигированного пользователя!

Теория

Формат записи iptables iptables [-t таблица] [команда] [действие] Пример: iptables -t filter -A INPUT ACCEPT

Действия

  • ACCEPT - Принять пакет
  • DROP - Отбросить пакет
  • DNAT - Преобразовать адрес назначения
  • SNAT - Изменить исходящий IP-адрес в заголовке пакета
  • LOG - Журналирование пакетов и событий
  • MARK - Установить метку на пакет
  • MASQUERADE - Изменить исходящий IP-адрес в заголовке пакета (отличие от SNAT - работа с динамическими IP)
  • QUEUE - Поставить пакет в очередь на обработку
  • REDIRECT - Перенаправить пакет/поток на другой порт
  • REJECT - Отбросить пакет+уведомить удалённую систему о том. что её пакет отвергнут
  • RETURN - Прекратить движение пакета по текущей цепочке и возвратить в вызывающую цепочку

Команды

  • -A - Добавить правило в цепочку
  • -D - Удалить правило из цепочки
  • -R - Заменить одно правило другим
  • -I - Вставить новое правило
  • -L - Вывести список существующих правил
  • -F - Сброс правил
  • -Z - Обнуление счётчиков в заданной цепочке
  • -N - Создание новой цепочки с заданным именем
  • -X - Удаление цепочки
  • -P - Задать политику по умолчанию для выбранной цепочки
  • -E - Переименовать пользовательскую цепочку

Критерии (общие)

  • -p - Указать тип протокола
  • -s - IP-адрес источника пакета
  • -d - IP-адрес получателя пакета
  • -j - Указать действие для правила
  • -i - Интерфейс, с которого был принят пакет
  • -o - Указать имя выходного интерфейса
  • -f - Распространить правило на все фрагменты пакета

TCP критерии:

  • –tcp-flags - Определить маску и флаги пакета

UDP критерии:

  • –sport - Порт,с которого отправлен пакет
  • –dport - Порт,на который адресован пакет

Подробнее в man iptables

Практика

Просмотр текущей конфигурации

$ sudo 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

Если вы узрели подобное, значит ваш файрволл ещё не настроен и разрешает всё. Исправим положение.

Настройка политики по умолчанию

  • iptables -P INPUT DROP - блокирование входящих пакетов
  • iptables -P OUTPUT ACCEPT - разрешить исходящие пакеты
  • iptables -P FORWARD DROP - обработка пакетов, которые попали на сервер с другой машины и ожидают дальнейшего переброса. В примере блокируется. В таком случае вам придётся дописать правила для доверенных машин.

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

$ sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Это разрешит принимать пакеты от ранее установленного соединения и принимать новые пакеты,порождённые этим соединением.

Либо с указанием типа протокола:

$ sudo iptables -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT $ sudo iptables -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT

Теперь локальный интерфейс:

$ sudo iptables -A INPUT -i lo -j ACCEPT

  • NEW - данные, начинающие новое соединение.
  • ESTABLISHED - пакет, приходящий от уже установленного соединения.
  • RELATED - новый пакет данных, но порожденный старым установленным соединением
  • INVALID - итак понятно

$ sudo iptables-save > /etc/iptables.up.rules

Включить эти правила:

$ sudo iptables-restore < /etc/iptables.up.rules

И увидеть разницу:

$ sudo iptables-L

Запуск iptables при старте системы:

В каталоге /etc/init.d создаем файл с именем iptables

$ sudo touch /etc/init.d/iptables

Прописываем в нём следующее:

#!/bin/sh /sbin/iptables-restore < /etc/iptables.up.rules

Делаем файл iptables исполняемым:

$ sudo chmod +x /etc/init.d/iptables

Добавляем его в автозапуск

$ sudo update-rc.d -n iptables defaults

Запуск iptables при подключении к сети:

$ sudo echo "#! /sbin/iptables-restore" > /etc/network/if-up.d/iptables.up.rules $ sudo iptables-save >> /etc/network/if-up.d/iptables.up.rules $ sudo chmod +x /etc/network/if-up.d/iptables.up.rules

Примечание: в любой момент вы можете проверить загружены ли ваши правила, просто введя от рута iptables-save

Для archlinux сохранение правил iptables осуществляется командой:

$ sudo rc.d save iptables

iptables - утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter для ядер Linux версий 2.4 и 2.6. Для использования утилиты iptables требуются привилегии суперпользователя (root).Иногда под словом iptables имеется в виду и сам межсетевой экран netfilter.

1. Что же такое межсетевой экран и зачем он нужен?

Межсетевой экран - комплекс аппаратных или программных средств, осуществляющий контроль и фильтрацию проходящих через него сетевых пакетов на различных уровнях модели OSI в соответствии с заданными правилами.

Основной задачей сетевого экрана является компьютерных сетей или отдельных узлов от несанкционированного доступа. Также сетевые экраны часто называют фильтрами, так как их основная задача - не пропускать (фильтровать) пакеты, не подходящие под критерии, определённые в конфигурации.

2. Принципы работы iptables

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

В Iptables используется три вида таблиц:

  1. Mangle - обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр.
  2. Nat - эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях.
  3. Filter - здесь производится фильтрация трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили.

Соответственно, нас интересует третья таблица Filter. В этой таблицы имеются три встроенные цепочки:

  1. INPUT - для входящих пакетов.
  2. FORWARD - для проходящих через данную машину к другой.
  3. OUTPUT - для исходящих.

Пакет, проходящий через эти цепочки, исходя из правила может быть пропущен (ACCEPT) или отброшен (DROP).

Программа Iptables позволяет редактировать правила через терминал путем ввода команд.

Немного о написании правил:

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

Iptables [-t имя-таблицы ] команда [шаблон] [-j действие ]

Опция -t задает таблицу . Если опция упущена, то по умолчанию предполагается использование таблицы filter. Если предполагается использование другой таблицы, то это требуется указать явно.

Далее, непосредственно за именем таблицы, должна стоять команда. Если спецификатора таблицы нет, то команда всегда должна стоять первой.
Команда определяет действие iptables, например: вставить правило, или добавить правило в конец цепочки, или удалить правило и т.п.

Список команд:

  • -A имя-цепочки правило (добавить правило в конец цепочки; ключ --set-counters позволяет установить счётчики пакетов и байтов)
  • -I имя-цепочки номер правило (вставить правило в цепочку перед правилом с указанным номером, нумерация с 1; ключ --set-counters позволяет установить счётчики пакетов и байтов)
  • -R имя-цепочки номер правило (заменить;
    ключ --set-counters позволяет установить счётчики пакетов и байтов)
  • -D имя-цепочки номер (удалить правило с указанным номером, нумерация с 1)
  • -D имя-цепочки правило (удалить правило по текстуальному совпадению)
  • -C имя-цепочки пакет (тестировать прохождение пакета;
    исходящий адрес, адрес назначения, протокол, интерфейс, порты задаются соответствующими ключами)
  • -L [имя-цепочки ] (показать список правил; дополнительные ключи:
    • -v (вывести дополнительную информацию, в частности, счётчики)
    • --exact (показывать счётчики без округления до KB, MB и т.д.)
    • --numeric (показывать адреса и номера портов в виде чисел)
    • --line-numbers (выводить номера правил)
  • -F имя-цепочки (удалить все правила из цепочки)
  • -Z имя-цепочки (обнулить счетчики)
  • -N имя-цепочки (создать цепочку)
  • -X имя-цепочки (удалить пустую цепочку, на которую нет ссылок)
  • -P имя-цепочки действие (изменить действие по умолчанию: ACCEPT,
    DROP, QUEUE, RETURN)
  • -E старое-имя-цепочки новое-имя-цепочки (переименовать цепочку)

Раздел шаблон задает критерии проверки, по которым определяется подпадает ли пакет под действие этого правила или нет.Здесь можно указать самые разные критерии - IP-адрес источника пакета или сети, сетевой интерфейс. IP-адрес места назначения, порт, протокол и т.д. Остальные параметры для фильтации можно посмотреть в справке по утилите iptables(man iptables)

И наконец действие указывает, какое действие должно быть выполнено при условии выполнения критериев в правиле. Здесь можно заставить ядро передать пакет в другую цепочку правил, "сбросить" пакет, выдать на источник сообщение об ошибке и т.п.

Список некоторых действий:

  • ACCEPT - пропустить пакет; просмотр таблицы завершается
  • DROP - выбросить молча; просмотр завершается не только для текущей цепочки, но и для других таблиц
  • REJECT - выбросить, известив отправителя (--reject-with тип-извещения )

3. Порядок следования сетевого пакета, предназначенного локальному процессу/приложению:

Для локального приложения

Шаг Таблица Цепочка Примечание
1 Кабель (т.е. )
2 Входной
3 mangle PREROUTING Обычно используется для внесения изменений в заголовок пакета, например для установки битов TOS и пр.
4 nat PREROUTING Преобразование адресов (Destination Network Address Translation). Фильтрация пакетов здесь допускается только в исключительных случаях.
5 Принятие решения о маршрутизации.
6 mangle INPUT Пакет попадает в цепочку INPUT таблицы mangle. Здесь внесятся изменения в заголовок пакета перед тем как он будет передан локальному приложению.
7 filter INPUT Здесь производится фильтрация входящего трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили.
8 Локальный процесс/приложение (т.е., программа-сервер или программа-клиент)

Важно помнить, что на этот раз пакеты идут через цепочку INPUT, а не через FORWARD.

Порядок движения пакетов, созданных локальными процессами.

От локальных процессов

Шаг Таблица Цепочка Примечание
1 Локальный процесс (т.е., программа-сервер или программа-клиент).
2 Принятие решения о маршрутизации. Здесь решается куда пойдет пакет дальше -- на какой адрес, через какой сетевой интерфейс и пр.
3 mangle OUTPUT Здесь производится внесение изменений в заголовок пакета. Выполнение фильтрации в этой цепочке может иметь негативные последствия.
4 nat OUTPUT Эта цепочка используется для трансляции сетевых адресов (NAT) в пакетах, исходящих от локальных процессов брандмауэра.
5 Filter OUTPUT Здесь фильтруется исходящий траффик.
6 mangle POSTROUTING Цепочка POSTROUTING таблицы mangle в основном используется для правил, которые должны вносить изменения в заголовок пакета перед тем, как он покинет брандмауэр, но уже после принятия решения о маршрутизации. В эту цепочку попадают все пакеты, как транзитные, так и созданные локальными процессами брандмауэра.
7 nat POSTROUTING Здесь выполняется Source Network Address Translation. Не следует в этой цепочке производить фильтрацию пакетов во избежание нежелательных побочных эффектов. Однако и здесь можно останавливать пакеты, применяя политику по-умолчанию DROP.
8 Сетевой интерфейс (например, eth0)
9 Кабель (т.е., Internet)

Порядок движения транзитных пакетов

Шаг Таблица Цепочка Примечание
1 Кабель (т.е. Интернет)
2 Сетевой интерфейс (например, eth0)
3 mangle PREROUTING Обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр..
4 nat PREROUTING Эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях
5 Принятие решения о дальнейшей маршрутизации, т.е. в этой точке решается куда пойдет пакет -- локальному приложению или на другой узел сети.
6 mangle FORWARD Далее пакет попадает в цепочку FORWARD таблицы mangle, которая должна использоваться только в исключительных случаях, когда необходимо внести некоторые изменения в заголовок пакета между двумя точками принятия решения о маршрутизации.
7 Filter FORWARD В цепочку FORWARD попадают только те пакеты, которые идут на другой хост Вся фильтрация транзитного трафика должна выполняться здесь. Не забывайте, что через эту цепочку проходит траффик в обоих направлениях, обязательно учитывайте это обстоятельство при написании правил фильтрации.
8 mangle POSTROUTING Эта цепочка предназначена для внесения изменений в заголовок пакета уже после того как принято последнее решение о маршрутизации.
9 nat POSTROUTING Эта цепочка предназначена в первую очередь для Source Network Address Translation. Не используйте ее для фильтрации без особой на то необходимости. Здесь же выполняется и маскарадинг (Masquerading).
10 Выходной сетевой интерфейс (например, eth1).
11 Кабель (пусть будет LAN).

Есть три различных варианта прохождения пакетов.

1. Из вне на локальную службу (сервер) этого компьютера (INPUT).

2. От локальной службы (сервера) этого компьютера во вне (OUTPUT).

3. Прохождение мимо, шлюзование, мимо этого сетевого интерфейса этого компьютера (FORWARD).

4. Несколько примеров настройки:

пример скрипта:

#задаем переменные для обозначения внешнего и внутреннего сетевого интерфейса

LOCAL_IF="eth0"
INET_IF="eth0:g"

#=======================
# Удалить все правила из цепочки.
#=======================
iptables -F
iptables -X

#=======================
# Устанавливаем политику по умолчанию.
#=======================

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD ACCEPT

#=======================
# Создаем правила для всех интерфейсов.
#=======================

# http - открываем 80 порт
iptables -A INPUT -i ALL -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -i ALL -p icmp -j ACCEPT

#=======================
# Создаем правила для внутреннего интерфейса.
#=======================

# ssh - открываем 22

iptables -A INPUT -p tcp -i $LOCAL_IF -m tcp --dport 22 -j ACCEPT

осталось запустить скрипт

примеры отдельных цепочек:

Разрешаем все на внутренних интерфейсах (lo, eth0, eth1 - внутренние интрефейсы)
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

Разрешаем доступ к заданному порту из инета
iptables -A INPUT -p tcp -m tcp -d внешний_ip --dport 80 -j ACCEPT

Открываем протокол
iptables -A INPUT -p gre -j ACCEPT

5. Ссылки на документацию по настройке iptables

http://www.posix.ru/network/iptables/ -статья Дмитрия Кулакова "Настройка межсетевого экрана Iptables"

http://www.opennet.ru/docs/RUS/iptables/ - статья Оскара Андерсона в переводе Андрея Киселева "Руководство по iptables"

http://system-administrators.info/?p=396 - статья "netfilter и iptables в Linux: принципы работы, настройка"

http://www.iptables.ru/ - пошаговое конфигурирование iptables. технической поддержки


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

Понравилась статья? Поделиться с друзьями: