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

Введение

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

Раздел 1. Что такое iptables?

iptables - это программа пользовательского пространства, которая используется для настройки брандмауэра netfilter в ядре Linux. iptables - это всего лишь инструмент для настройки брандмауэра, встроенного в ядро Linux.
iptables разделен на две части с отдельными инструментами для IPv4 и IPv6. Для IPv4 вы используете, iptablesа для IPv6 ip6tables. Все следующие команды можно использовать с обоими инструментами одинаково.
С помощью netfilter можно:
  • фильтровать входящие пакеты, прежде чем они будут перенаправлены в целевое приложение.
  • фильтровать исходящие пакеты до того, как они покинут компьютер.
  • проверять пакеты, маршрутизируемые через компьютер (роутер).
  • выполнять манипуляции с пакетами.

Раздел 1.1 - Структура

Проверка пакетов с помощью iptables состоит из трех этапов (сверху вниз):
  • столы
  • цепи
  • правила фильтрации
Если применяется одно из заданных правил фильтрации в таблицах / цепочках, оно будет выполнено. Если правило не определено или ни одно из определенных правил не применяется, будет применяться определенная политика (подробнее об этом позже).

Столы

В таблицах разные цепочки сгруппированы по основной задаче.
ТаблицаОписание
фильтрВ стандартной таблице здесь хранятся все правила фильтрации
нацЭта таблица используется для NAT (трансляции сетевых адресов) и переадресации портов.
калечитьЭта таблица используется для обработки пакетов.
сыройЭта таблица используется для определения исключений отслеживания соединений.

Цепи

Цепочки определяют, когда пакет проверяется, например, перед его отправкой. Цепочка может состоять из нескольких таблиц.
ЦепьТаблицаОписание
ВВОДфильтр, катушкаПрименяется ко всем пакетам, направленным на локальный адрес.
ВЫХОДfilter, nat, mangle, rawПрименяется ко всем пакетам, приходящим с локального адреса.
ВПЕРЕДфильтр, катушкаПрименяется ко всем маршрутизируемым пакетам.
ПЕРЕДАЧАнат, калечить, сыройприменяется ко всем пакетам до их маршрутизации.
РАЗМЕЩЕНИЕнат, калечитьПрименяется ко всем пакетам после их маршрутизации.

Раздел 2 - Определение правил фильтрации

Здесь перечислены наиболее распространенные параметры интерфейса командной строки для создания правил фильтрации, а также их значение.
ВариантОписание
-t ТаблицаЭто правило фильтра применяется к указанной таблице.
-I Цепь (Позиция)Правило добавлено в выбранную позицию цепочки. По умолчанию правило добавляется в начало цепочки.
-ЦепьПравило добавлено в цепочку.
-D ЦепьПравило удаляется из цепочки.
-F ЦепьУдалите все правила в цепочке.
-L ЦепьПеречислите все правила в цепочке.
-p ПротоколПакет проверяется только в том случае, если он соответствует протоколу (например, TCP, UDP, ICMP).
-s IP-адресПакет проверяется только в том случае, если он исходит из определенного IP-адреса / IP-сети.
-d IP-адресПакет проверяется только в том случае, если он отправлен на указанный IP-адрес.
-i Сетевой интерфейсПакет проверяется только в том случае, если он прибыл через соответствующий сетевой интерфейс.
-o Сетевой интерфейсПакет проверяется только в том случае, если он отправлен через соответствующий сетевой интерфейс.
--sport (порт) или --source-port (порт)Пакет проверяется только в том случае, если он исходит из определенного порта. Должен использоваться вместе с -p
--dport (порт) или --destination-port (порт)Пакет проверяется только в том случае, если он отправлен на указанный порт. Должен использоваться вместе с -p
-j ДействиеОпределяет, какое действие следует применить к пакету.

Раздел 2.1 - Определение действий

ДействиеОписание
ПРИНЯТЬПакет принят и принят.
УДАЛИТЬПакет не принят, отправитель не получает сообщения.
ОТКАЗАТЬПакет не принимается, отправитель уведомляется.
ЖУРНАЛДанные пакета записываются в системный журнал, затем проверяется и применяется следующее правило в цепочке при необходимости.

Раздел 2.2 - Определение политик

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

Раздел 3 - Интерфейс обратной связи (127.0.0.1)

В каждой системе Linux есть локальный сетевой адаптер с именем lo. Через него работают внутренние хост-приложения, которые иногда обмениваются данными через IPC (Inter Process Communication) с помощью этого адаптера. Поэтому рекомендуется не применять к этому адаптеру какие-либо правила фильтрации, так как это может привести к проблемам со связью.
Этому адаптеру должно быть разрешено обмениваться данными без ограничений:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

Раздел 4 - Практические примеры

Создать правило фильтрации пакетов

Это правило разрешает входящий HTTPS-трафик:
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Создайте правило фильтра хоста

Это правило разрешает входящий трафик с указанного хоста:
iptables -A INPUT -s 10.0.0.1 -j ACCEPT
Это правило запрещает входящий трафик с указанного хоста:
iptables -A INPUT -s 10.0.0.1 -j DROP
Правила также можно добавить в определенное место:
iptables -I INPUT 2 -s 10.0.0.1 -j DROP
Это правило, например, на втором месте.

Удалить все правила

Удаляет все правила во всех цепочках:
iptables -F
Удаляет все правила в цепочке INPUT:
iptables -F INPUT

Удалить правило

Это определяет правила с соответствующими числами:
iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
Этот номер теперь можно использовать для удаления нужного правила:
iptables -D INPUT 1

Состояние подключения

Можно использовать фильтры состояния подключения, чтобы не каждый пакет проходил через фильтр для уже установленных подключений.
Разрешить входящие пакеты для существующих подключений:
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Разрешить исходящие пакеты для существующих подключений:
iptables -A OUTPUT -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Подсказка: правила состояния подключения должны быть в верхней части списка брандмауэра, в противном случае они потеряют свою актуальность.

Удаление недействительных пакетов

Эта команда отбрасывает все входящие пакеты, не соответствующие формату TCP / IP:
iptables -A INPUT --ctstate INVALID -j DROP

Защита от Syn-Flood

Эти записи предотвращают перегрузку сервера слишком большим количеством запросов:
iptables -N syn_floodiptables -A INPUT -p tcp --syn -j syn_floodiptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A syn_flood -j DROP
iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j LOG --log-prefix PING-DROP:
iptables -A INPUT -p icmp -j DROP
iptables -A OUTPUT -p icmp -j ACCEPT

Раздел 5 - Стойкость

Настроенные правила брандмауэра не сохраняются автоматически. Чтобы изменить это, пакет iptables-persistentдолжен быть установлен.
После этого вы можете использовать команду:
iptables-save > /etc/iptables/rules.v4 # For IPv4
ip6tables-save > /etc/iptables/rules.v4 # For IPv6
Текущая конфигурация может быть сохранена.

Раздел 6 - Блок стран

С помощью включенного скрипта вы можете создавать правила удаления IP-адресов для всех стран.
Примечание. Эта блокировка ограничена адресами IPv4.
#!/bin/bash
###PUT HERE SEPARATED LIST OF COUNTRY CODE###
COUNTRIES=(de at)
WORKDIR=$(mktemp -d)
#######################################
for i in "${COUNTRIES[@]}";
do
curl http://www.ipdeny.com/ipblocks/data/countries/$i.zone >> $WORKDIR/iptables-blocklist.txt;
done

if [ -f $WORKDIR/iptables-blocklist.txt ]; then
  iptables -F
  BLOCKDB="$WORKDIR/iptables-blocklist.txt"
  IPS=$(grep -Ev "^#" $BLOCKDB)
  for i in $IPS
  do
    echo iptables -A INPUT -s $i -j DROP >> input.sh
    echo iptables -A OUTPUT -d $i -j DROP >> output.sh
  done
fi
rm -r $WORKDIR
В приведенном выше сценарии переменные "СТРАНЫ" могут быть обновлены, чтобы включить любые страны, которые вы хотите заблокировать. При выполнении сценария он создает два файла input.shи output.shкоторые содержат Iptables команды , необходимые для блокирования IP - адресов стран.

Резюме

В этой статье объяснялась функциональность iptables. Кроме того, были использованы практические примеры, чтобы проиллюстрировать различные способы оптимального использования iptables.

Добавить комментарий

Автору будет очень приятно узнать обратную связь о своем руководстве.

Комментариев 0