• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья [Шпаргалка] Iptables Essentials - Общие правила и команды

Приветствую! Решил поделиться c аудиторией небольшой шпаргалкой по IPTables.

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

26772


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

Данная инструкция относится больше к Debian – based дистрибутивам.

Ниже, схематично представлен принцип работы IPTables:

26773


Перейдём непосредственно, к командам:

Посмотреть текущий список правил:

[B]iptables –n –L –v[/B]

26774


Сохранить набор правил:

Код:
iptables-save > /etc/iptables.rules

26775


Восстановить правила:

Код:
iptables-restore < /etc/iptables.rules

Отброс всего трафика:

Код:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Посмотреть текущий список правил с нумерацией строк:

Код:
iptables -n -L -v --line-numbers

26776


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

Код:
iptables –S

26777


Список правил в виде таблиц для цепочки INPUT:

Код:
iptables -L INPUT
  • INPUT — позволяет модифицировать пакет, предназначенный самому хосту.
26778


Специальные правила, действующие для цепочки INPUT:

Код:
iptables –S INPUT

26779


Показать количество пакетов и общий размер:

Код:
iptables -L INPUT –v

26780


Показать правила для цепочек INPUT и OUTPUT с нумерацией строк и подробностями:

Код:
iptables -L INPUT -n -v
iptables -L OUTPUT -n -v --line-numbers
  • OUTPUT — позволяет модифицировать пакеты, исходящие от самого хоста.
26781


Удаление правила по цепочке и номеру:

Код:
iptables -D INPUT 10

26782


Удаление правила по спецификации:

Код:
iptables -D INPUT -m conntrack --ctstate INVALID -j DROP
  • conntrack инструмент, позволяющий системному администратору наблюдать таблицы состояний соединений и взаимодействовать с ними: очищать таблицы целиком, удалять отдельные записи, маркировать соединения вручную (аналог действия CONNMARK), устанавливать тайм-ауты соединений.
  • Состояние INVALID означает, что принадлежность пакета к соединению установить не удалось.
  • DROP — заблокировать пакет, не сообщая источнику об отказе. Более предпочтительна при фильтрации трафика на интерфейсах, подключенных к интернету, так как понижает информативность сканирования портов хоста злоумышленниками.
Сбросить все правила, удалить все цепочки и принять изменения:

Код:
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables –X
  • FORWARD — через эту цепочку проходит транзитный трафик.
  • ACCEPT – принять изменения.
Сброс всех цепочек:

Код:
iptables –F

Сброс одной цепочки:

Код:
iptables –F INPUT

Добавить правило в файрволл:

Код:
iptables -I INPUT 2 -s 192.168.0.101 -j DROP

Разрешить петлевые соединения:

Код:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

Разрешить установленные и связанные входящие соединения:

Код:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

ESTABLISHED — пакеты, принадлежащие к установленным соединениям, состоянию RELATED соответствуют пакеты, открывающие новые соединения, логически связанные с уже установленными (например, соединение данных в пассивном режиме FTP).

Разрешить установленные исходящие соединения:

Код:
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешения маршрутизации между интерфейсами:

Код:
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

NAT для подсети и конкретного порта назначения:

Код:
iptables -A POSTROUTING -p tcp -m tcp -s 172.16.0.0/255.255.0.0 --dport 443 -j MASQUERADE
  • MASQUERADE - может быть использовано вместо SNAT, даже если вы имеете постоянный IP адрес, однако, невзирая на положительные черты, маскарадинг не следует считать предпочтительным в этом случае, поскольку он дает большую нагрузку на систему.
  • Действие MASQUERADE допускается указывать только в цепочке POSTROUTING таблицы nat, так же как и действие SNAT
Отбросить входящие некорректные пакеты:

Код:
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Блокировать нежелательный IP-адрес:

Код:
iptables -A INPUT -s 192.168.0.101 -j DROP

Блокировать нежелательный IP-адрес и отклонить:

Код:
iptables -A INPUT -s 192.168.252.10 -j REJECT
  • REJECT — заблокировать пакет и сообщить его источнику об отказе. По умолчанию об отказе сообщается отправкой ответного ICMP-пакета «icmp-port-unreachable». Однако, это действие поддерживает опцию --reject-with, позволяющую указать формулировку сообщения об отказе (возможные значения: icmp-net-unreachable, icmp-host-unreachable, icmp-proto-unreachable, icmp-net-prohibited, icmp-host-prohibited). Для протокола TCPподдерживается отказ в форме отправки RST-пакета (--reject-with tcp-reset).
Заблокировать соединение на сетевой интерфейс:

Код:
iptables -A INPUT -i eth0 -s 192.168.252.10 -j DROP

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

Код:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1:65535 -j ACCEPT

Разрешить входящие SSH соединения:

Код:
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить входящий SSH с определенного IP-адреса или подсети:

Код:
iptables -A INPUT -p tcp -s 192.168.240.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
  • NEW — соединение не открыто, то есть пакет является первым в соединении.
Разрешить исходящие SSH соединения:

Код:
iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить входящий Rsync с определенного IP-адреса или подсети:
  • rsync — программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодирование данных при необходимости.
Код:
iptables -A INPUT -p tcp -s 192.168.240.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить все входящие HTTP соединения:

Код:
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить все входящие HTTPS соединения:

Код:
iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить все входящие HTTP и HTTPS соединения:

Код:
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить MySQL с определенного IP-адреса или подсети:

Код:
iptables -A INPUT -p tcp -s 192.168.240.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить MySQL подключение на определенный сетевой интерфейс:

Код:
iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

PostgreSQL с определенного IP-адреса или подсети:

Код:
iptables -A INPUT -p tcp -s 192.168.240.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить PostgreSQL для конкретного сетевого интерфейса:

Код:
iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Блокировать исходящие письма SMTP:

Код:
iptables -A OUTPUT -p tcp --dport 25 -j REJECT

Разрешить все входящие подключения SMTP:

Код:
iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить все входящие подключения IMAP:

Код:
iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить все входящие подключения IMAPS:

Код:
iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить все входящие подключения POP3:

Код:
iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Разрешить все входящие подключения POP3S:

Код:
iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Отбросить сетевые подключения из локальных сетей на внешний интерфейс:

Код:
iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Отбросить все исходящие подключения на сети Facebook:

Получаем информацию о Facebook AS:

Код:
whois -h v4.whois.cymru.com " -v $(host facebook.com | grep "has address" | cut -d " " -f4)" | tail -n1 | awk '{print $1}'

26783


Добавляем правила в IPTables:

Код:
for i in $(whois -h whois.radb.net -- '-i origin AS32934' | grep "^route:" | cut -d ":" -f2 | sed -e 's/^[ \t]*//' | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 | cut -d ":" -f2 | sed 's/$/;/') ;
do iptables -A OUTPUT -s "$i" -j REJECT
Done

26784


Заблокировать домен:

Код:
iptables -A OUTPUT -p tcp -d www.fаcebook.com -j DROP
iptables -A OUTPUT -p tcp -d fаcebook.com -j DROP

Логирование и отброс пакетов:

Код:
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
  • Занесение информации о пакетах в системный журнал (LOG и LOGMARK).
Просмотр файла логов по умолчанию:

Код:
tail -f /var/log/messages
grep --color 'IP SPOOF' /var/log/messages

Логировать и отбрасывать пакеты, с занесением ограниченного количества записей в лог:

Код:
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Отбросить или принять трафик с Mac-адреса:

Код:
iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

Блокировать или разрешить запрос ICMP Ping:

Код:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP

Указание нескольких портов c multiport:
  • multiport — позволяет указать несколько (до 15) портов и/или их диапазонов (для протоколов TCP, UDP, SCTP, DCCP и UDP Lite)
Код:
iptables -A INPUT -i eth0 -p tcp -m state --state NEW -m multiport --dports ssh,smtp,http,https -j ACCEPT

Балансировка нагрузки с random или nth:

Код:
_ips=("172.31.250.10" "172.31.250.11" "172.31.250.12" "172.31.250.13")
for ip in "${_ips[@]}" ; do
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth –
counter 0 --every 4 --packet 0 \ -j DNAT --to-destination ${ip}:80
done

Или

Код:
_ips=("172.31.250.10" "172.31.250.11" "172.31.250.12" "172.31.250.13")
for ip in "${_ips[@]}" ; do
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m random --average 25 \-j DNAT --to-destination ${ip}:80
done

Ограничение количества соединений с limit и iplimit*:

Код:
iptables -A FORWARD -m state --state NEW -p tcp -m multiport --dport http,https -o eth0 -i eth1 \-m limit --limit 20/hour --limit-burst 5 -j ACCEPT

Или

Код:
iptables -A INPUT -p tcp -m state --state NEW --dport http -m iplimit --iplimit-above 5 -j DROP

Ведение списка последних подключений для сравнения:

Код:
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 100 -j DROP
iptables -A FORWARD -p tcp -i eth0 --dport 443 -m recent --name portscan --set –j DROP

Сопоставление с string* в полезной нагрузке пакета:

Код:
iptables -A FORWARD -m string --string '.com' -j DROP
iptables -A FORWARD -m string --string '.exe' -j DROP

Основанные на времени правила с time*:

Код:
iptables -A FORWARD -p tcp -m multiport --dport http,https -o eth0 -i eth1 \ -m time --timestart 21:30 --timestop 22:30 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT

Сравнение и отброс пакетов на основе значений TTL:

Код:
iptables -A INPUT -s 1.2.3.4 -m ttl --ttl-lt 40 -j REJECT

Создание защиты от сканирования портов:

Код:
iptables -N port-scanning
iptables -A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN
iptables -A port-scanning -j DROP

26785


Создание защиты от SSH brute-force:

Код:
iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

Защита от Syn-flood:

Код:
iptables -N syn_flood
iptables -A INPUT -p tcp --syn -j syn_flood
iptables -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

Смягчение Syn-flood с помощью SYNPROXY:

Код:
iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack
iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Блокировать новые пакеты, которые не являются SYN:

Код:
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Или

Код:
iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

Быстрая проверка фрагментированных пакетов:

Код:
iptables -A INPUT -f -j DROP

Отброс XMAS пакетов:

Код:
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
  • XMAS пакеты - можно использовать в качестве метода снятия отпечатков стека TCP/IP, отправляя пакеты, а затем ожидая и анализируя ответы.
Отбросить все NULL пакеты:
  • Согласно нормам RFC заголовок IP-пакета должен содержать сведения об используемом протоколе транспортного уровня в поле “Protocol”. При использовании IP Null атаки отправляются пакеты с нулевым значением этого поля. Пограничные маршрутизаторы и файрволлы, скорее всего, беспрепятственно пропустят такой пакет, как не классифицированный. Не смотря на то, что в настоящее время нулевое значение в поле “протокол” зарезервировано для указания IPv6 Hop-by-Hop Option (HOPOPT), далеко не каждый сервер может принять и корректно обработать такой пакет. А если такие пакеты поступают в большом количестве, их анализ будет занимать достаточно значительную часть системных ресурсов, вплоть до их полного исчерпания и отказа сервера.
Код:
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

Блокировать необычные значения MSS:
  • MSS - является параметром протокола TCP и определяет максимальный размер полезного блока данных в байтах для TCP-пакета.
Код:
iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP

Блокировать пакеты с поддельными флагами TCP:

Код:
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

Блокировка пакетов из частных подсетей (Spoofing):

Код:
_subnets=("224.0.0.0/3" "169.254.0.0/16" "172.16.0.0/12" "192.0.2.0/24" "192.168.0.0/16" "10.0.0.0/8" "0.0.0.0/8" "240.0.0.0/5")
for _sub in "${_subnets[@]}" ; do
iptables -t mangle -A PREROUTING -s "$_sub" -j DROP
done
iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP

Надеюсь, такая шпаргалка кому-то, да пригодится.

Специально для Codeby.net.
 

cryhack

Green Team
18.04.2018
20
5
BIT
0
Расшарить интернет с машины на которой работает vpn ?
 

w3n0m41k

Green Team
30.10.2016
68
46
BIT
0
А вот за шпаргалку отдельный + в карму! Крайне просто и понятно изложено! Однозначно полезно новичкам!!!!!
 

zxv_zz

Well-known member
26.12.2019
97
0
BIT
15
Если порт SSH не стандартный, будут работать эти правила?
iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

Или нужен аргумент на порт?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!