Руководства, Инструкции, Бланки

подробное руководство Iptables img-1

подробное руководство Iptables

Рейтинг: 4.1/5.0 (1859 проголосовавших)

Категория: Руководства

Описание

Администрирование: Краткое Руководство по iptables

Администрирование

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

Таблица Mangle Эта таблица предназначена, главным образом для внесения изменений в заголовки пакетов (mangle - искажать, изменять. прим. перев.). Т.е. в этой таблице вы можете устанавливать биты TOS (Type Of Service) и т.д. Еще раз напоминаю вам, что в этой таблице не следует производить любого рода фильтрацию, маскировку или преобразование адресов (DNAT, SNAT, MASQUERADE ).
В этой таблице допускается выполнять только нижеперечисленные действия:
  • TOS
  • TTL
  • MARK

    Действие TOS выполняет установку битов поля Type of Service в пакете. Это поле используется для назначения сетевой политики обслуживания пакета, т.е. задает желаемый вариант маршрутизации.
    Действие TTL используется для установки значения поля TTL (Time To Live) пакета. Мы можем присваивать определенное значение этому полю, чтобы скрыть наш брандмауэр от чересчур любопытных провайдеров (Internet Service Providers).
    Действие MARK устанавливает специальную метку на пакет, которая затем может быть проверена другими правилами в iptables или другими программами, например iproute2. С помощью "меток" можно управлять маршрутизацией пакетов, ограничивать траффик и т.п.

    Таблица Nat Эта таблица используется для выполнения преобразований сетевых адресов NAT (Network Address Translation). Как уже упоминалось ранее, только первый пакет из потока проходит через цепочки этой таблицы, трансляция адресов или маскировка применяются ко всем последующим пакетам в потоке автоматически. Для этой таблицы характерны действия:
  • DNAT
  • SNAT
  • MASQUERADE

    Действие DNAT (Destination Network Address Translation) производит преобразование адресов назначения в заголовках пакетов. Другими словами, этим действием производится перенаправление пакетов на другие адреса, отличные от указанных в заголовках пакетов.

    SNAT (Source Network Address Translation) используется для изменения исходных адресов пакетов. С помощью этого действия можно скрыть структуру локальной сети, а заодно и разделить единственный внешний IP адрес между компьютерами локальной сети для выхода в Интернет. В этом случае брандмауэр, с помощью SNAT, автоматически производит прямое и обратное преобразование адресов, тем самым давая возможность выполнять подключение к серверам в Интернете с компьютеров в локальной сети.

    Маскировка (MASQUERADE) применяется в тех же целях, что и SNAT, но в отличие от последней, MASQUERADE дает более сильную нагрузку на систему. Происходит это потому, что каждый раз, когда требуется выполнение этого действия - производится запрос IP адреса для указанного в действии сетевого интерфейса, в то время как для SNAT IP адрес указывается непосредственно. Однако, благодаря такому отличию, MASQUERADE может работать в случаях с динамическим IP адресом, т.е. когда вы подключаетесь к Интернет, скажем через PPP, SLIP или DHCP.

    Таблица Filter

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

    Как строить правила

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

    Команды

    -A. --append
    iptables -A INPUT.
    Добавляет новое правило в конец заданной цепочки.

    -D. --delete
    iptables -D INPUT --dport 80 -j DROP. iptables -D INPUT 1
    Удаление правила из цепочки. Команда имеет два формата записи, первый - когда задается критерий сравнения с опцией -D (см. первый пример), второй - порядковый номер правила. Если задается критерий сравнения, то удаляется правило, которое имеет в себе этот критерий, если задается номер правила, то будет удалено правило с заданным номером. Счет правил в цепочках начинается с 1.

    -R. --replace
    iptables -R INPUT 1 -s 192.168.0.1 -j DROP
    Эта команда заменяет одно правило другим. В основном она используется во время отладки новых правил.

    -I. --insert
    iptables -I INPUT 1 --dport 80 -j ACCEPT
    Вставляет новое правило в цепочку. Число, следующее за именем цепочки указывает номер правила, перед которым нужно вставить новое правило, другими словами число задает номер для вставляемого правила. В примере выше, указывается, что данное правило должно быть 1-м в цепочке INPUT .

    -L. --list
    iptables -L INPUT
    Вывод списка правил в заданной цепочке, в данном примере предполагается вывод правил из цепочки INPUT. Если имя цепочки не указывается, то выводится список правил для всех цепочек. Формат вывода зависит от наличия дополнительных ключей в команде, например -n. -v. и пр.

    -F. --flush
    iptables -F INPUT
    Сброс (удаление) всех правил из заданной цепочки (таблицы). Если имя цепочки и таблицы не указывается, то удаляются все правила, во всех цепочках. (если не указана таблица ключом -t (--table). то очистка цепочек производится только в таблице filter )

    -Z. --zero
    iptables -Z INPUT
    Обнуление всех счетчиков в заданной цепочке. Если имя цепочки не указывается, то подразумеваются все цепочки. При использовании ключа -v совместно с командой -L. на вывод будут поданы и состояния счетчиков пакетов, попавших под действие каждого правила. Допускается совместное использование команд -L и -Z. В этом случае будет выдан сначала список правил со счетчиками, а затем произойдет обнуление счетчиков.

    -N. --new-chain
    iptables -N allowed
    Создается новая цепочка с заданным именем в заданной таблице В выше приведенном примере создается новая цепочка с именем allowed. Имя цепочки должно быть уникальным и не должно совпадать с зарезервированными именами цепочек и действий (такими как DROP. REJECT и т.п.)

    -X. --delete-chain
    iptables -X allowed
    Удаление заданной цепочки из заданной таблицы. Удаляемая цепочка не должна иметь правил и не должно быть ссылок из других цепочек на удаляемую цепочку. Если имя цепочки не указано, то будут удалены все цепочки заданной таблице кроме встроенных.

    -P. --policy
    iptables -P INPUT DROP
    Задает политику по-умолчанию для заданной цепочки. Политика по-умолчанию определяет действие, применяемое к пакетам не попавшим под действие ни одного из правил в цепочке. В качестве политики по умолчанию допускается использовать DROP и ACCEPT .

    -E. --rename-chain
    iptables -E allowed disallowed
    Команда -E выполняет переименование пользовательской цепочки. В примере цепочка allowed будет переименована в цепочку disallowed. Эти переименования не изменяют порядок работы, а носят только косметический характер.

    Команда должна быть указана всегда. Список доступных команд можно просмотреть с помощью команды iptables -h (iptables --help ). Некоторые команды могут использоваться совместно с дополнительными ключами. Ниже приводится список дополнительных ключей и описывается результат их действия. При этом заметьте, что здесь не приводится дополнительных ключей, которые используются при построении критериев (matches) или действий (targets). Эти опции мы будем обсуждать далее.

    Таблица 6-3. Дополнительные ключи

    -v. --verbose
    Используется c: --list. --append. --insert. --delete. --replace
    Используется для повышения информативности вывода и, как правило, используется совместно с командой --list. Для того, чтобы заставить команду --list выводить полное число (без употребления множителей) требуется применять ключ -x. который описан ниже. Если ключ -v. --verbose используется с командами --append. --insert. --delete или --replace. то будет выведен подробный отчет о произведенной операции.

    -x. --exact
    Используется c: --list
    Для всех чисел в выходных данных выводятся их точные значения без округления и без использования множителей K, M, G.

    -n. --numeric
    Используется c: --list
    Заставляет iptables выводить IP-адреса и номера портов в числовом виде предотвращая попытки преобразовать их в символические имена.

    --line-numbers
    Используется c: --list
    Ключ --line-numbers включает режим вывода номеров строк при отображении списка правил командой --list. Номер строки соответствует позиции правила в цепочке.

    -c. --set-counters
    Используется c: --insert. --append. --replace
    Этот ключ используется для установки начального значения счетчиков пакетов и байт в заданное значение при создании нового правила. Например, ключ --set-counters 20 4000 установит счетчик пакетов = 20, а счетчик байт в 4000.

    --modprobe
    Используется c: Все
    Ключ --modprobe определяет команду загрузки модуля ядра. Данный ключ может использоваться в случае, когда модули ядра находится вне пути поиска (search path)

    Критерии

    Здесь мы подробнее остановимся на критериях выделения пакетов.
    Общие критерии могут использоваться в любых правилах;
    TCP критерии которые применяются только к TCP пакетам.
    UDP критерии которые применяются только к UDP пакетам.
    ICMP критерии для работы с ICMP пакетами.

    Общие критерии

    Их допустимо употреблять в любых правилах, они не зависят от типа протокола и не требуют подгрузки модулей расширения. К этой группе я умышленно отнес критерий --protocol несмотря на то, что он используется в некоторых специфичных от протокола расширениях. Например, мы решили использовать TCP критерий. тогда нам необходимо будет использовать и критерий --protocol которому в качестве дополнительного ключа передается название протокола -- TCP. Однако критерий --protocol сам по себе является критерием, который используется для указания типа протокола.

    Таблица 6-4. Общие критерии

    -p. --protocol
    iptables -A INPUT -p tcp
    Этот критерий используется для указания типа протокола. Примерами протоколов могут быть TCP. UDP и ICMP. Прежде всего, в качестве имени протокола в данный критерий можно передавать один из трех вышеупомянутых протоколов, а также ключевое слово ALL. В качестве протокола допускается передавать число - номер протокола, так например, протоколу ICMP соответствует число 1, TCP -- 6 и UDP -- 17. Соответствия между номерами протоколов и их именами вы можете посмотреть в файле /etc/protocols. который уже упоминался. Если данному критерию передается числовое значение 0, то это эквивалентно использованию спецификатора ALL, который подразумевается по умолчанию, когда критерий --protocol не используется. Для логической инверсии критерия, перед именем протокола (списком протоколов) используется символ !. например --protocol. tcp подразумевает пакеты протоколов, UDP и ICMP .

    -s. --src. --source
    iptables -A INPUT -s 192.168.1.1
    IP-адрес(а) источника пакета. Адрес источника может указываться так, как показано в примере, тогда подразумевается единственный IP-адрес. А можно указать адрес в виде address/mask, например как 192.168.0.0/255.255.255.0. или более современным способом 192.168.0.0/24. т.е. фактически определяя диапазон адресов Как и ранее, символ. установленный перед адресом, означает логическое отрицание, т.е. --source. 192.168.0.0/24 означает любой адрес кроме адресов 192.168.0.x .

    -d. --dst. --destination
    iptables -A INPUT -d 192.168.1.1
    IP-адрес(а) получателя. Имеет синтаксис схожий с критерием --source. за исключением того, что подразумевает адрес места назначения. Точно так же может определять как единственный IP-адрес, так и диапазон адресов. Символ. используется для логической инверсии критерия.

    -i. --in-interface
    iptables -A INPUT -i eth0
    Интерфейс, с которого был получен пакет. Использование этого критерия допускается только в цепочках INPUT. FORWARD и PREROUTING. в любых других случаях будет вызывать сообщение об ошибке. При отсутствии этого критерия предполагается любой интерфейс, что равносильно использованию критерия -i +. Как и прежде, символ. инвертирует результат совпадения. Если имя интерфейса завершается символом +. то критерий задает все интерфейсы, начинающиеся с заданной строки, например -i PPP+ обозначает любой PPP интерфейс, а запись -i. eth+ -- любой интерфейс, кроме любого eth.

    -o. --out-interface
    iptables -A FORWARD -o eth0
    Задает имя выходного интерфейса. Этот критерий допускается использовать только в цепочках OUTPUT. FORWARD и POSTROUTING. в противном случае будет генерироваться сообщение об ошибке. При отсутствии этого критерия предполагается любой интерфейс, что равносильно использованию критерия -o +. Как и прежде, символ. инвертирует результат совпадения. Если имя интерфейса завершается символом +. то критерий задает все интерфейсы, начинающиеся с заданной строки, например -o eth+ обозначает любой eth интерфейс, а запись -o. eth+ - любой интерфейс, кроме любого eth.

    -f. --fragment
    iptables -A INPUT -f
    Правило распространяется на все фрагменты фрагментированного пакета, кроме первого, сделано это потому, что нет возможности определить исходящий/входящий порт для фрагмента пакета, а для ICMP-пакетов определить их тип. С помощью фрагментированных пакетов могут производиться атаки на ваш брандмауэр, так как фрагменты пакетов могут не отлавливаться другими правилами. Как и раньше, допускается использования символа. для инверсии результата сравнения. только в данном случае символ. должен предшествовать критерию -f. например ! -f. Инверсия критерия трактуется как "все первые фрагменты фрагментированных пакетов и/или нефрагментированные пакеты, но не вторые и последующие фрагменты фрагментированных пакетов".

    Неявные критерии

    В этом разделе мы рассмотрим неявные критерии. точнее, те критерии, которые подгружаются неявно и становятся доступны, например при указании критерия --protocol tcp. На сегодняшний день существует три автоматически подгружаемых расширения, это TCP критерии. UDP критерии и ICMP критерии(при построении своих правил я столкнулся с необходимостью явного указания ключа -m tcp. т.е. о неявности здесь говорить не приходится, поэтому будьте внимательнее при построении своих правил, если что-то не идет -- пробуйте явно указывать необходимое расширение. прим. перев .). Загрузка этих расширений может производиться и явным образом с помощью ключа -m, -match, например -m tcp.

    Этот набор критериев зависит от типа протокола и работает только с TCP пакетами. Чтобы использовать их, вам потребуется в правилах указывать тип протокола --protocol tcp. Важно: критерий --protocol tcp обязательно должен стоять перед специфичным критерием. Эти расширения загружаются автоматически как для tcp протокола, так и для udp и icmp протоколов. (О неявной загрузке расширений я уже упоминал выше прим. перев. ) .

    Таблица 6-5. TCP критерии

    --sport. --source-port
    iptables -A INPUT -p tcp --sport 22
    Исходный порт, с которого был отправлен пакет. В качестве параметра может указываться номер порта или название сетевой службы. Соответствие имен сервисов и номеров портов вы сможете найти в файле /etc/services. При указании номеров портов правила отрабатывают несколько быстрее. однако это менее удобно при разборе листингов скриптов. Номера портов могут задаваться в виде интервала из минимального и максимального номеров, например --source-port 22:80. Если опускается минимальный порт, т.е. --source-port :80. то в качестве начала диапазона принимается число 0. Если опускается максимальный порт, т.е. --source-port 22:. то в качестве конца диапазона принимается число 65535. Как и раньше, символ ! используется для инверсии. Так критерий --source-port. 22. или --source-port. 22:80 .

    --dport. --destination-port
    iptables -A INPUT -p tcp --dport 22
    Порт или диапазон портов, на который адресован пакет. Аргументы задаются в том же формате, что и для --source-port .

    --tcp-flags
    iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
    Определяет маску и флаги tcp-пакета. Пакет считается удовлетворяющим критерию, если из перечисленных флагов в первом списке в единичное состояние установлены флаги из второго списка. Так для вышеуказанного примера под критерий подпадают пакеты у которых флаг SYN установлен, а флаги FIN и ACK сброшены. В качестве аргументов критерия могут выступать флаги SYN, ACK, FIN, RST, URG, PSH. а так же зарезервированные идентификаторы ALL и NONE. ALL -- значит ВСЕ флаги и NONE - НИ ОДИН флаг. Так, критерий --tcp-flags ALL NONE означает -- "все флаги в пакете должны быть сброшены". Как и ранее, символ ! означает инверсию критерия Важно: имена флагов в каждом списке должны разделяться запятыми, пробелы служат для разделения списков.

    --syn
    iptables -p tcp --syn
    Критерий --syn является по сути реликтом, перекочевавшим из ipchains. Критерию соответствуют пакеты с установленным флагом SYN и сброшенными флагами ACK и FIN. Этот критерий аналогичен критерию --tcp-flags SYN,ACK,FIN SYN. Такие пакеты используются для открытия соединения TCP. Заблокировав такие пакеты, вы надежно заблокируете все входящие запросы на соединение, однако этот критерий не способен заблокировать исходящие запросы на соединение. Как и ранее, допускается инвертирование критерия символом !. Так критерий ! --syn означает -- "все пакеты, не являющиеся запросом на соединение". т.е. все пакеты с установленными флагами FIN или ACK .

    --tcp-option
    iptables -p tcp --tcp-option 16
    Удовлетворяющим условию данного критерия будет будет считаться пакет, TCP параметр которого равен заданному числу. TCP Option - это часть заголовка пакета. Она состоит из 3 различных полей. Первое 8-ми битовое поле содержит информацию об опциях, используемых в данном соединении. Второе 8-ми битовое поле содержит длину поля опций. Если следовать стандартам до конца, то следовало бы реализовать обработку всех возможных вариантов, однако, вместо этого мы можем проверить первое поле и в случае, если там указана неподдерживаемая нашим брандмауэром опция, то просто перешагнуть через третье поле (длина которого содержится во втором поле). Пакет, который не будет иметь полного TCP заголовка, будет сброшен автоматически при попытке изучения его TCP параметра. Как и ранее, допускается использование флага инверсии условия ! .

    Эти расширения подгружаются автоматически при указании типа протокола --protocol udp. Важно отметить, что пакеты UDP не ориентированы на установленное соединение, и поэтому не имеют различных флагов которые дают возможность судить о предназначении датаграмм. Получение UDP пакетов не требует какого либо подтверждения со стороны получателя. Если они потеряны, то они просто потеряны (не вызывая передачу ICMP сообщения об ошибке). Это предполагает наличие значительно меньшего числа дополнительных критериев, в отличие от TCP пакетов. Важно: Хороший брандмауэр должен работать с пакетами любого типа, UDP или ICMP. которые считаются не ориентированными на соединение, так же хорошо как и с TCP пакетами. Об этом мы поговорим позднее, в следующих главах.

    Таблица 6-6. UDP критерии

    --sport. --source-port
    iptables -A INPUT -p udp --sport 53
    Исходный порт, с которого был отправлен пакет. В качестве параметра может указываться номер порта или название сетевой службы. Номера портов могут задаваться так же как и для TCP

    --dport. --destination-port
    iptables -A INPUT -p udp --dport 53
    Порт, на который адресован пакет. Формат аргументов полностью аналогичен принятому в критерии --source-port .

    Этот протокол используется, как правило, для передачи сообщений об ошибках и для управления соединением. Он не является подчиненным IP протоколу, но тесно с ним взаимодействует, поскольку помогает обрабатывать ошибочные ситуации. Заголовки ICMP пакетов очень похожи на IP заголовки, но имеют и отличия. Главное свойство этого протокола заключается в типе заголовка, который содержит информацию о том, что это за пакет. Например, когда мы пытаемся соединиться с недоступным хостом, то мы получим в ответ сообщение ICMP host unreachable. Полный список типов ICMP сообщений, вы можете посмотреть в приложении Типы ICMP. Существует только один специфичный критерий для ICMP пакетов. Это расширение загружается автоматически, когда мы указываем критерий --protocol icmp. Заметьте, что для проверки ICMP пакетов могут употребляться и общие критерии, поскольку известны и адрес источника и адрес назначения и пр.

    Таблица 6-7. ICMP критерии

    --icmp-type
    iptables -A INPUT -p icmp --icmp-type 8
    Тип сообщения ICMP определяется номером или именем. Числовые значения определяются в RFC 792. Чтобы получить список имен ICMP значений выполните команду iptables --protocol icmp --help. или посмотрите приложение Типы ICMP. Как и ранее, символ ! инвертирует критерий, например --icmp-type. 8 .

    SAPE все усложнил?

    Размещена 01 января 2012 года

    Иду по лесу… Дождь, ветер, ночь… Замерз весь… Смотрю — машина стоит, подхожу, в окошко смотрю — там никого. Дверцу попробовал — открыто, ну я залез и сижу… вдруг машина поехала! Я в шоке… машина едет, я сзади сижу, за рулем никого… тут рука волосатая появляется откуда-то, порулила и исчезла… у меня волосы на попе зашевелились… тут деревня показалась, вот уже дома первые… тут машина останавливается, в салон другой мужик заглядывает и говорит:
    — а ты че тут делаешь.
    — да вот, еду…
    — ах**ть просто. я толкаю, а он б*** едет!

    Запуск приложений на отдельном X-сервере

    Размещена 18 ноября 2011 года

    Запуск игр в отдельном X сервере на примере Warcraft

  • Другие статьи

    Настройка Linux-файрвола iptables: Руководство для начинающих

    Настройка Linux-файрвола iptables: Руководство для начинающих

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

    Что такое iptables

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

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

    sudo apt-get install iptables

    Существуют и графические инструменты-альтернативы iptables, например Firestarter. но и работа в командной строке не является очень уж сложной. Однако следует соблюдать особенную осторожность при настройке iptables через удаленное ssh-соединение, поскольку одна неверная команда может заблокировать возможность подключения к удаленному серверу — придется каким-то образом вносить изменения в настройки машины физически получив к ней доступ.

    Типы правил

    Существует три типа правил iptables — input, forward и output.

    Input — Такие цепочки используются для контроля поведения входящих соединений. К примеру, если пользователь попробует подключиться к серверу по SSH, то iptables сравнит его IP-адрес со своим списком, чтобы разрешить или запретить доступ.

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

    Output — Такие цепочки используются для исходящих соединений. К прмиеру, если пользователь пытается отправинг запрос ping к сайту 1cloud.ru, iptables изучит цепочку правил, чтобы понять, что нужно делать в случае ping и этого сайт, и только потом разрешит или запретит соединение.

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

    Поведение по умолчанию

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

    Увидеть текущие настройки iptables по умолчанию можно с помощью команды iptables –L:

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

    iptables --policy INPUT ACCEPT
    iptables --policy OUTPUT ACCEPT
    iptables --policy FORWARD ACCEPT

    Предварительно разрешил весь трафик, затем уже можно запрещать соединения с определенных IP-адресов и на определенные порты.

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

    iptables --policy INPUT DROP
    iptables --policy OUTPUT DROP
    iptables --policy FORWARD DROP

    Действия с соединениями

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

    • Accept — разрешить соединение;
    • Drop — игнорировать соединение, вести себя так, будто его никогда не было. Действие подходит для случаев, когда нужно сделать так, чтобы источник запроса не узнал о его блокировке.
    • Reject — заблокировать соединение и отправить в ответ сообщение об ошибке. Действие подходит для тех случаев, когда владелец сервера хочет дать понять, что соединение заблокировано файрволом.

    Вот так выглядит ответ на пинг в каждом из трех случаев

    Разрешаем и блокируем конкретные соединения

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

    Мы будем использовать комманду iptables –A, чтобы добавлять правила к существующим цепочкам. Iptables будет начинать с начала списка и проходить по всем правилам, пока не найдет совпадение. Если нужно поместить какое-то правило перед уже имеющимся, то можно использовать команду iptables -I [цепочка] [номер], чтобы указать номер позиции в списке, которую должно занять новое правило.

    Соединения с одного IP-адреса

    Правило ниже позволяет заблокировать все соединения с IP-адреса 10.10.10.10:

    iptables -A INPUT -s 10.10.10.10 -j DROP

    Соединения с диапазона адресов

    Правило ниже позволяет заблокировать соединения из диапазона IP-адресов 10.10.10.0/24. Для указания диапазона адресов можно использовать стандартную запись маски подсети через слэш или описывать ее в полном варианте:

    iptables -A INPUT -s 10.10.10.0/24 -j DROP

    iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

    Соединения на конкретный порт

    Ниже показано, как заблокировать SSH-соединения с хоста 10.10.10.10:

    iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

    Вместо SSH можно указать любой протокол или номер порта. Часть кода –p tcp говорит iptables о типе соединения, которое использует протокол. Если вы блокировали протокол, который использует UDP вместо TCP, то тогда нужно было бы написать –p udp.

    Вот так можно заблокировать SSH-соединения с любого IP-адреса.

    iptables -A INPUT -p tcp --dport ssh -j DROP

    Состояния соединений

    Как сказано выше, многие протоколы требуют двусторонних коммуникаций. Например, если нужно разрешить соединения по SSH, то добавить правила надо будет и в цепочку input и в цепочку output. Но что, если нужно только разрешить доступ только входящим соединениям? Разрешит ли добавление правила в цепочку output и исходящие SSH-соединения?

    Для таких случаев используются состояния соединений. Они позволяют описывать двусторонние коммуникации, в которых разрешается установка только соединений определенной направленности. В примере ниже разрешены SSH-соединения, поступающие от хоста 10.10.10.10, но SSH-соединения к этому хосту запрещены. Однако, системе разрешается отправка информации по SSH в случае уже установленной сессии, что делает возможной SSH-коммуникацию между хостами:

    iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

    Сохранение изменений

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

    Red Hat / CentOS:

    /sbin/service iptables save

    Другие команды

    Вывод уже сконфигурированных правил iptables:

    Добавление ключа –v позволит просматривать информацию по пакетам и байтам, добавление –n выведет информацию в цифровом формате — имена хостов, протоколы и сети будут описаны цифрами.

    Для удаления всех сконфигурированных правил можно использовать такую команду:

    Средняя оценка: 5.0. всего оценок: 3 Спасибо за Вашу оценку! К сожалению, проголосовать не получилось. Попробуйте позже

    191014 Санкт-Петербург ул. Кирочная, 9

    2015-10-16 Настройка Linux-файрвола iptables: Руководство для начинающих

    191014 Санкт-Петербург ул. Кирочная, 9

    Как работает фаервол IPTables

    Размещение серверов в надежных дата-центрах Европы. Откройте облачный VPS/VDS сервер на быстрых SSD за 1 минуту!

    Лучший хостинг:
    - оградит данные от нежелательного доступа в охраняемом европейском ЦОДе
    - примет оплату хоть в bitcoin.
    - позволит поставить свой дистрибутив

    - защита от DDos-атак
    - бесплатный backup
    - Uptime 99,9999%
    - ЦОД - TIER III
    - провайдер - TIER I

    Поддержим на русском языке 24/7/365 Работаем с юрлицами и физлицами. Вам прямо сейчас нужно 24 ядра и 72 Gb RAM. Пожалуйста!

    Наши выгодные тарифы докажут, что дешевый хостинг вы еще не знали!

    Минутное дело: выберите конфигурацию, оплатите и CMS на VPS готова.
    Money Back – 30 дней!

    Банковскими картами, электронной валютой, через терминалы Qiwi, Webmoney, PayPal, Новоплат и др.

    Задайте вопрос в службу поддержки 24/7/365

    Найдите ответы в нашей базе и познакомьтесь с рекомендациями

    Cloud Server. Linux. VPS

    Вступление

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

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

    В данном руководстве речь пойдет о том, как работ iptables. Следующая статья демонстрирует, как создать базовый набор правил для защиты сервера Ubuntu 14.04.

    Как работает iptables

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

    Фаервол iptables работает путем сравнения сетевого трафика с набором правил. Правило — это свойства, которыми должен обладать пакет, чтобы получить доступ к серверу, а также действие, которое нужно выполнить над пакетами, соответствующими правилам.

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

    target указывает, какое действие должно быть выполнено, если пакет соответствует правилу. Target может содержать окончательное решение относительно данного пакета (принять его или сбросить соединение), а также может передать пакет для обработки другой цепочке или же просто внести пакет в журнал.

    Правила фаервола объединяются в группы, которые называются цепочками (chains). Цепочка представляет собой последовательность правил, относительно которой проверяется пакет. Если пакет совпадает с одним из правил, фаервол выполняет указанное действие; при этом пакет не проверяется остальными правилами в цепочке.

    Такие цепочки создаются пользователем по мере необходимости. По умолчанию существует три цепочки:

    • INPUT: обрабатывает все входящие на сервер пакеты;
    • OUTPUT: содержит правила для исходящего трафика;
    • FORWARD: используется для обработки предназначенного для других серверов трафика, который не был создан на данном сервере. Эта цепочка в основном необходима для маршрутизации запросов на другие серверы.

    Каждая цепочка может содержать ноль или больше правил, а также имеет политику по умолчанию (policy). Политика определяет действие, которое необходимо выполнить в случае если пакет не соответствует ни одному правилу (такой пакет можно сбросить — «drop», или принять — «accept»).

    С помощью модуля, который можно загрузить через правила, Iptables может также отслеживать соединения. Это означает, что можно создать правила, определяющие, что делать с пакетом, на основе его отношения к предыдущим пакетам. Эта функция называется «отслеживанием состояния» (state tracking), «отслеживанием соединений» (connection tracking) или же «механизмом определения состояний» (state machine).

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

    Важные примечания

    Ознакомившись с тем, как iptables управляет поступающими пакетами (передает его соответствующей цепочке, проверяет его согласно каждому правилу, и если пакет не отвечает ни одному из правил, выполняет политику по умолчанию), нужно рассмотреть некоторые «подводные камни», которые нужно иметь ввиду при составлении правил.

    Для начала нужно убедиться, что iptables уже содержит правила, которые сохраняют текущие соединения даже при выполнении политики сброса по умолчанию. Это особенно важно при подключении к серверу по SSH. При случайном внедрении правила или политики, блокирующих вас на собственном сервере, можно войти на VPS с помощью веб-консоли, которая предоставляет вспомогательный доступ.

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

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

    Политика цепочки по умолчанию диктует типы правил, которые будут включены в саму цепочку. Цепочка с политикой DROP должна содержать правила, которые отбрасывают пакеты. Цепочка с политикой ACCEPT должна содержать исключения для пакетов, которые нужно принять.

    Итоги

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

    Чтобы найти инструкции по настройке iptables, читайте следующие статьи:

    Комментарии (2)

    По этой причине политика цепочки по умолчанию диктует типы правил, которые будут включены в саму цепочку. Цепочка с политикой ACCEPT должна содержать правила, которые явно отбрасывают пакеты. Цепочка с политикой DROP должна содержать исключения для пакетов, которые нужно принять.