Настройка фаервола в 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
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 - адресов стран.
Комментариев 0