Iptables базовый набор правил для защиты Linux в 2024

Введение

В данной заметке разберем базовую защиту Linux сервера с помощью набора правил Iptables.


Список базовых правил Iptables для защиты Linux

Защищать будем в формате – запрещаем все что не разрешено правилами.

Тут будет базовый набор, который открывает распространенные рабочие порты, такие как SSH, 80 и 443 (по аналогии открываем свои нужные порты) и закрывает все остальное, углубляться в цепочки таблицы и прочее не будем, для этого рекомендую почитать хотя бы man.

# Устанавливаем входящие и исходящие политики по умолчанию на ACCEPT, очищаем все правила и цепочки
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X

# Разрешаем все локальные, запрещаем все со значением "INVALID" и разрешаем уже установленные соединения
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Открываем нужные порты, SSH, 80, 443, по аналогии добавляем свои
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# По аналогии открываем остальные порты

# Разрешаем Ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Исходящие локальные соединения и соединения через внешний интерфейс
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o ВАШ_ВНЕШНИЙ_ИНТЕРФЕЙС -j ACCEPT

# Запрещаем политиками все что не разрешено выше
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Запрещаем политиками по умолчанию все для ipv6, если не планируете пользоваться ipv6
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP

Сохраняем правила, для этого воспользуемся утилитой iptables-persistent:

apt install iptables-persistent

При первом запуске у нас спросит про сохранение текущих правил ipv4 и ipv6, соглашаемся, что бы сохранить новые правила уже после установки, воспользуемся данной командой:

netfilter-persistent save или dpkg-reconfigure iptables-persistent

Что бы полностью отчистить все правила с помощью iptables-persistent используем данную команду:

netfilter-persistent flush

Шпаргалка по некоторым ключам с примерами для Iptables:

  • Посмотреть имеющиеся правила и политики по умолчанию для цепочек в Iptables можно с помощью данных команд:
iptables -L
iptables -L | grep policy
iptables -L -nv
iptables -L -nv --line-numbers
iptables -S
  • Для удаления правила сначала используем команду iptables -L -nv --line-numbers для того что бы узнать номер правила (столбец num слева), далее используем команду ниже с указанием цепочки и номера:
iptables -D INPUT номер
# Или пишем полностью правило с ключом -D
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
  • Удаляем все правила и цепочки, можно указать конкретную цепочку или таблицу:
iptables -F
iptables -X
  • Посмотреть текущие соединения и порты который прослушиваются, бывает полезно посмотреть перед ограничениями, что бы открыть полный список нужных портов для работы:
netstat -tulpan
lsof -i -nP
ss -lntu
  • -A (–append): Добавить правило в конец цепочки.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • -I (–insert): Вставить правило под указанным номером в цепочке, если правило уже существует под этим номером, то оно опустится ниже добавленного.
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
  • -D (–delete): Удалить правило из цепочки.
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
iptables -D INPUT 4 # Сначала смотрим номер правила iptables -L -nv --line-numbers
  • -R (–replace): Заменить правило под указанным номером в цепочке.
iptables -R INPUT 1 -p tcp --dport 22 -j ACCEPT
  • -P (–policy): Установить политику по умолчанию для цепочки.
iptables -P INPUT DROP
  • -E (–rename-chain): Переименовать цепочку.
iptables -E OLDNAMECHAIN NEWNAMECHAIN
  • -t –table (table): Указать таблицу (filter, nat, mangle, raw).
iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
  • -p (–protocol): Указать протокол (tcp, udp, icmp).
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • -s (–source): Указать источник (IP-адрес или подсеть).
iptables -A INPUT -s 192.168.1.100 -j DROP
  • -d (–destination): Указать назначение (IP-адрес или подсеть).
iptables -A OUTPUT -d 8.8.8.8 -j ACCEPT
  • -i (–in-interface): Указать входной интерфейс.
iptables -A INPUT -i ens3 -j ACCEPT
  • -o (–out-interface): Указать выходной интерфейс.
iptables -A OUTPUT -o ens3 -j ACCEPT
  • –sport (–source-port): Указать исходный порт или диапазон портов.
iptables -A INPUT -p tcp --sport 1024:65535 -j ACCEPT
  • –dport (–destination-port): Указать порт назначения.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • -m state –state: Указать состояние соединения (NEW, ESTABLISHED, RELATED).
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • -m limit –limit: Ограничить количество пакетов в секунду.
iptables -A INPUT -p icmp -m limit --limit 1/second -j ACCEPT
  • -m connlimit –connlimit-above: Ограничить количество одновременных соединений с одного IP.
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j REJECT
  • -m time –timestart –timestop: Указать временной интервал для применения правила.
iptables -A INPUT -m time --timestart 08:00 --timestop 17:00 --days Mon-Fri -j ACCEPT
  • -m comment –comment “Ваш комментарий”: Указать комментарий к правилу.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT -m comment --comment "Ваш комментарий"
  • -h: Показать краткую помощь по синтаксису команд Iptables

Остальные ключи с примерами welcome в man iptables.


Заключение

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

Что бы не потерять инструкцию рекомендую подписаться на мой личный блог-канал в Telegram в котором я делюсь в формате заметок своими знаниями и интересным из мира IT, спасибо за потраченное время на чтение и доброго времени суток!)

Так же вы можете отблагодарить автора материально:

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