Отладка iptables и распространенных ошибок брандмауэра?

18

Это предложенный канонический вопрос о понимании и отладке программного брандмауэра в системах Linux.

В ответ на ответ EEAA и комментарий @ Shog о том, что нам нужны подходящие канонические вопросы и ответы для закрытия общих относительно простых вопросов о iptables.

Что такое структурированный метод для устранения проблем с программным брандмауэром Linux, структурой фильтрации пакетов netfilter , обычно называемой пользовательским интерфейсом iptables ?

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

Даже если вы используете такие инструменты, как UFW , FirewallD (aka firewall-cmd), Shorewall или аналогичные, вы можете извлечь выгоду, заглянув под капот без слоя абстракции, который предлагают эти инструменты.

Этот вопрос не предназначен в качестве практического руководства по созданию брандмауэров: ознакомьтесь с документацией по продукту для этого и, например, рецепты в iptables Trips & Tricks или найдите в вопросы для существующих часто встречающихся и высокой оценкой результатов. Q & в.

HBruijn
источник
1
Как насчет NAT и правил с отслеживанием состояния, которые могут быть размещены ранее в цепочке для повышения производительности и повышения безопасности?
Мэтт
1
@Matt: оптимизация правил брандмауэра сама по себе является полным вопросом и ответами, и в этом
вопросе
1
Если вы не достигли правила, которое вы должны в IPtables, добавьте подобное правило LOG и двигайтесь дальше по цепочке, пока не получите сообщения LOG. Тогда одним из правил ниже будет правило, которое некорректно соответствует вашему пакету.
Мэтью Ифе
1
Да, и установка net.netfilter.nf_conntrack_log_invalid255 будет очень хорошо перехватывать недопустимые пакеты, что может помочь, если состояние netfilter с состоянием приводит к плохому поведению.
Мэтью Ифе

Ответы:

14

В общем:

Для просмотра и изменения конфигурации брандмауэра требуются права администратора ( root), как и открытие служб в ограниченном диапазоне номеров портов. Это означает, что вы должны войти в систему как пользователь rootили использовать его sudoдля запуска команды от имени пользователя root. Я постараюсь пометить такие команды как необязательные [sudo].

Содержание:

  1. Порядок имеет значение или разница между -Iи-A
  2. Показать текущую конфигурацию брандмауэра
  3. Интерпретация результатов iptables -L -v -n
  4. Знай свое окружение
  5. Цепочки INPUT и FORWARD
  6. Модули ядра

1. Порядок имеет значение или разница между -Iи-A

Следует помнить, что правила брандмауэра проверяются в порядке их перечисления. Ядро прекратит обработку цепочки, когда сработает правило, которое разрешит или запретит пакет или соединение.

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

[sudo] iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT

а затем обнаружите, что это не вступит в силу.

Причиной этого является то, что -Aопция добавляет это новое правило после всех существующих правил и, поскольку очень часто последнее правило в существующем брандмауэре было таким, которое блокирует весь трафик, который явно не разрешен, что приводит к

...
7    2515K  327M REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
8        0  0    ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080

Или эквивалент в iptables-save:

...
iptables -A INPUT  -j REJECT
iptables -A INPUT  -p tcp --dport 8080 -j ACCEPT

и новое правило, открывающее TCP-порт 8080, никогда не будет достигнуто. (О чем свидетельствуют счетчики упорно оставшихся в 0 пакетов и нулевых байт).

Вставка правила с -Iновым правилом была бы первой в цепочке и будет работать.

2. Показать текущую конфигурацию брандмауэра

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

Команда [sudo] iptables -L -v -nтвой друг (хотя некоторые люди любят iptables-saveлучше). Часто при обсуждении конфигураций полезно также использовать эту --line-numbersопцию для нумерации строк. Ссылка на правило #X облегчает их обсуждение.
Примечание: правила NAT, включаются в iptables-saveвыходной , но должны перечислены отдельно, добавив -t natопцию т.е. [sudo] iptables -L -v -n -t nat --line-numbers.

Многократный запуск команды и проверка на приращение счетчиков могут быть полезными инструментами, чтобы увидеть, действительно ли запускается новое правило.

[root@host ~]# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     784K   65M fail2ban-SSH  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
2    2789K  866M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
3       15  1384 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
4    44295 2346K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    40120 2370K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
6    16409  688K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443
7    2515K  327M REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 25 packets, 1634 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain fail2ban-SSH (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       117.239.37.150       0.0.0.0/0           reject-with icmp-port-unreachable
2        4   412 REJECT     all  --  *      *       117.253.208.237      0.0.0.0/0           reject-with icmp-port-unreachable

В качестве альтернативы вывод команды iptables-saveдает скрипт, который может восстановить указанную выше конфигурацию брандмауэра:

[root@host ~]# iptables-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [441:59938]
:fail2ban-SSH - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A fail2ban-SSH -s 117.239.37.150/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-SSH -s 117.253.208.237/32 -j REJECT --reject-with icmp-port-unreachable
COMMIT

Это вопрос предпочтения того, что вам будет легче понять.

3. Интерпретация результатов iptables -L -v -n

Политика устанавливает действие по умолчанию в цепи использование , когда нет четких правил спичек. В INPUTцепочке, в которой установлено ПРИНЯТЬ весь трафик.

Первое правило в цепочке INPUT сразу интересное: оно отправляет весь трафик (источник 0.0.0.0/0 и пункт назначения 0.0.0.0/0), предназначенный для TCP-порта 22 ( tcp dpt:22), порт по умолчанию для SSH, в пользовательскую цель ( fail2ban-SSH) , Как следует из названия, это правило поддерживается fail2ban (продуктом безопасности, который, среди прочего, сканирует системные журналы на предмет возможных злоупотреблений и блокирует IP-адрес обидчика).

Это правило было бы создано с помощью командной строки iptables, аналогичной iptables -I INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSHили найденной в выходных данных iptables-save as -A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH. Часто вы можете найти любую из этих записей в документации.

Счетчики показывают, что это правило соответствует 784 000 пакетов и 65 мегабайтам данных.

Трафик, соответствующий этому первому правилу, затем обрабатывается fail2ban-SSHцепочкой, которая в виде нестандартной цепочки попадает в список ниже цепочки OUTPUT.

Эта цепочка состоит из двух правил, по одному для каждого обидчика (IP-адрес источника 117.253.221.166 или 58.218.211.166), который заблокирован (с помощью a reject-with icm-port-unreachable).

 -A fail2ban-SSH -s 117.253.221.166/32 -j REJECT --reject-with icmp-port-unreachable
 -A fail2ban-SSH -s 58.218.211.166/32 -j REJECT --reject-with icmp-port-unreachable

Пакеты SSH, которые не получены от этих заблокированных хостов, еще не разрешены и не запрещены, и теперь, когда пользовательская цепочка завершена, будет проверено второе правило в цепочке INPUT.

Все пакеты, которые не были предназначены для порта 22, прошли первое правило в цепочке INPUT и также будут оцениваться в правиле INPUT # 2.

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

Правило ввода № 2 соответствует всем открытым и связанным соединениям, а пакеты, соответствующие этому правилу, не требуют дальнейшей оценки.

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

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

Правило INPUT # 3 довольно скучно, loразрешен весь трафик, соединяющийся с интерфейсом обратной связи ( или 127.0.0.1).

Правила INPUT 4, 5 и 6 используются для открытия TCP-портов 22, 80 и 443 (порты по умолчанию для SSH, HTTP и HTTPS соответственно) путем предоставления доступа к НОВЫМ соединениям (существующие соединения уже разрешены правилом 2 INPUT).

В брандмауэре без сохранения состояния эти правила будут отображаться без атрибутов состояния:

4    44295 2346K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
5    40120 2370K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
6    16409  688K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0

или

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Последнее правило INPUT # 7 - это правило, которое блокирует весь трафик, которому НЕ был предоставлен доступ в правилах INPUT 1-7. Довольно распространенное соглашение: все, что не разрешено, отрицается. Теоретически это правило можно было бы опустить, установив ПОЛИТИКУ по умолчанию ОТКАЗАТЬСЯ.

Всегда исследуйте всю цепочку.

4. Знай свое окружение

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

4.2. Когда ни одна служба не прослушивает, вы не сможете подключиться и получить ошибку отказа в соединении , независимо от настроек брандмауэра. Следовательно:

  • Убедитесь, что служба прослушивает (на правильном сетевом интерфейсе / IP-адресе) и использует номера портов, которые вы ожидаете [sudo] netstat -plnutили альтернативно используете ss -tnlp.
  • Если ваши службы еще не должны работать, эмулируйте простой прослушиватель с помощью, например, netcat: [sudo] nc -l -p 123или openssl s_server -accept 1234 [options] если вам нужен прослушиватель TLS / SSL (проверьте man s_serverпараметры).
  • Убедитесь, что вы можете подключиться с самого сервера, т. Е. telnet <IP of Server> 123Или echo "Hello" | nc <IP of Server> 123или при тестировании защищенной службы TLS / SSL openssl s_client -connect <IP of Server>:1234, прежде чем пытаться сделать это с удаленного хоста.

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

  • используется TCP или UDP или оба (как с DNS)?
  • Служба использует фиксированный порт по умолчанию (например, что-то вроде TCP-порта 80 для веб-сервера)?
  • в качестве альтернативы выбран динамический номер порта, который может варьироваться (например, службы RPC, такие как классическая NFS, которые регистрируются в Portmap)?
  • Печально известный FTP даже использует два порта , как фиксированный, так и динамический номер порта, когда настроен на использование пассивного режима ...
  • описание сервиса, порта и протокола /etc/servicesне обязательно совпадает с реальным сервисом, использующим порт.

4.4. Фильтр пакетов ядра - не единственное, что может ограничивать сетевое соединение:

  • SELinux также может ограничивать сетевые сервисы. getenforceподтвердит, работает ли SELinux.
  • Несмотря на то, что TCP Wrappers становятся немного неясными, они все же являются мощным инструментом для обеспечения безопасности сети. Проверьте с помощью ldd /path/to/service |grep libwrapи /hosts.[allow|deny]контрольных файлов.

5. INPUTили FORWARDЦепи

Концепция цепочек объясняется здесь более подробно, но суть в следующем:

INPUTЦепь , где вы открываете и / или закрыть сетевые порты для служб работают локально, на машине , где вы выдаете команды Iptables.

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

Распространенным заблуждением является то, что, поскольку контейнер Docker или гость KVM работают локально, применяемые правила фильтрации должны быть в цепочке INPUT, но обычно это не так.

6. Ядро модулей

Поскольку фильтр пакетов работает в ядре Linux, он также может быть скомпилирован как динамический модуль, фактически несколько модулей. Большинство дистрибутивов включают netfilter в качестве модулей, и необходимые модули netfilter будут загружаться в ядро ​​по мере необходимости, но для некоторых модулей администратор брандмауэра должен будет вручную убедиться, что они загружаются. Это в первую очередь относится к модулям отслеживания подключений, nf_conntrack_ftpкоторые могут быть загружены с помощью insmod.

Модули, загруженные в настоящее время в работающее ядро, могут отображаться с помощью lsmod.

Способ обеспечения постоянной загрузки модулей при перезагрузке зависит от дистрибутива Linux.

HBruijn
источник
1
При поиске приращения счетчиков пакетов / байтов. Полезным инструментом является использование часов в отличительном режиме. Так вот как то так watch --difference -n 1 iptables -L FORWARD -v -n. Позволяя инструменту периодически запускать команду и выделять изменения, это делает ее намного проще.
Зоредаче
1
Я только что видел твой слабый комментарий. Это хороший ответ, но я не уверен, что смогу многое добавить. Вы можете включить упоминание об использовании функции TRACE .
Zoredache
Я возьму iptables-saveвыходные данные (предпочтительно с -c) каждый раз по этому страшному iptables -L(с различными аргументами) выводу.
0xC0000022L
7

Общие проблемы с разными протоколами

DNS: DNS по умолчанию использует порт 53 UDP, но сообщения, которые не помещаются в одну дейтаграмму UDP, будут передаваться с использованием протокола TCP (обычно для передачи зон и т. Д.), Требующего открытия порта 53 TCP также при запуске сервера имен ,

Электронная почта: многие интернет-провайдеры блокируют SMTP-трафик (или, по крайней мере, порт по умолчанию TCP 25), что делает невозможным прямой прием или отправку электронной почты, а их клиенты вынуждены использовать SMTP-ретранслятор ISP для всей исходящей электронной почты, а иногда и для входящей электронной почты. , Относится к §1.1.

FTP: FTP - это нечетный протокол, поскольку используются два соединения. Первым является управляющее соединение, по умолчанию FTP-сервер будет прослушивать TCP-порт 21 для этого. Управляющее соединение используется для аутентификации и выдачи команд. Фактическая передача файлов и такие вещи, как вывод списка каталогов, проходят через второе TCP-соединение, DATA-соединение, В активном FTP это соединение DATA будет инициировано с FTP-сервера с TCP-порта 20 и подключено к FTP-клиенту. Активный FTP не очень хорошо работает с пользователями за брандмауэрами и шлюзами NAT, поэтому он в основном вышел из употребления. Большинство FTP-серверов поддерживают пассивный FTP. При использовании пассивного FTP FTP-сервер открывает приемник для соединения DATA на втором порту, к которому затем может подключиться FTP-клиент. Проблема для брандмауэра в том, что порт DATA может быть любым доступным непривилегированным портом между 1024-65536.

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

iptables -A INPUT -p tcp --match multiport --dports 21000:21050 -j ACCEPT

В брандмауэре с отслеживанием состояния вам не нужно явно открывать порт DATA, вспомогательный модуль netfilter распознает динамический порт, который назначен, и динамически открывает этот порт для правильного клиента, помечая соединение DATA как RELATEDпосле которого оно будет соответствовать универсальному правилу :

  iptables -I INPUT -p tcp -m state ESTABLISHED,RELATED -j ACCEPT

Для этого необходимо, чтобы загружался правильный модуль ядра, например , в случае FTP вручную, например insmod nf_conntrack_ftp, постоянная зависимость от перезагрузки зависит от дистрибутива.

Примечание. Модуль отслеживания FTP-соединений не будет работать, если FTP используется с SSL, поскольку управляющее соединение будет зашифровано, и nf_conntrack_ftp больше не сможет прочитать ответ PASV.

NFS и аналогичные службы RPC . Проблема со службами RPC заключается в том, что они не используют определенный фиксированный порт. Они могут произвольно выбрать любой доступный порт, который затем будет зарегистрирован демоном RPC Portmap. Клиент, пытающийся подключиться, запросит демон Portmap и затем подключится напрямую к нужному порту. Это решило проблему исчерпания зарезервированных портов ...

С точки зрения брандмауэра должен быть открыт порт 111 TCP / UDP и фактический порт, который в данный момент использует служба RPC. Проблема открытия такого случайного порта в брандмауэре обычно решается путем ограничения службы RPC, такой как сервер NFS, на использование заранее определенного фиксированного порта.

HBruijn
источник
7

Iptables / Firewall "введение"

Брандмауэр - это сетевой фильтр на основе политик. Брандмауэры Linux построены вокруг Netfilter; инфраструктура обработки сетевых пакетов ядра, состоящая из нескольких модулей ядра, выполняющих определенные задачи:

  1. Модуль FILTER (всегда загружаемый по умолчанию) в основном позволяет нам принимать или отбрасывать IP-пакеты на основе определенных критериев соответствия.
  2. Набор модулей NAT позволяет нам выполнять преобразование сетевых адресов (SNAT, DNAT, MASQUERADE).
  3. Модуль MANGLE позволяет нам изменять определенные поля IP-пакетов (TOS, TTL).

Пользователи настраивают среду Netfilter в соответствии со своими потребностями брандмауэра, используя iptables из командной строки. С помощью iptables мы определяем правила, которые инструктируют ядро, что делать с IP-пакетами, когда они приходят, проходят или выходят из нашего Linux-бокса. Каждый основной процесс Netfilter представлен ТАБЛИЦЕЙ (FILTER, NAT, MANGLE) в iptables lingo. У них есть несколько определенных точек подключения на карте потоков сетевых пакетов, где они вызываются ядром для выполнения своих обязанностей. Некоторые специально расположенные последовательности вызовов TABLE обычно называются встроенными ЦЕПЬМИ, получающими имена PREROUTING, INPUT, FORWARD, OUTPUT и POSTROUTING. Легко запомнить, если мы связываем TABLE с «типом процесса», а CHAIN ​​с «местоположением» на карте потока сетевых пакетов, где вызываются экземпляры этих процессов.

введите описание изображения здесь

Поскольку IP-пакет принимается на сетевом интерфейсе или создается локальным процессом, пока он не будет окончательно доставлен или отброшен, механизм Netfilter будет последовательно тестировать и применять правила, содержащиеся в карте потока сетевых пакетов. В каждом блоке, идентифицированном парой TABLE @ CHAIN, пользователь может добавить одно или несколько из этих последовательных правил, содержащих критерии сопоставления IP-пакетов и соответствующий порядок действий. Существуют действия (например, ПРИНЯТЬ, УСТРАНИТЬ и т. Д.), Которые могут быть выполнены несколькими таблицами, а другие действия (т. Е. SNAT, DNAT и т. Д.) Являются специфичными для таблицы.

т. е. когда IP-пакет поступает от сетевого интерфейса, он сначала обрабатывается цепочкой PREROUTING, вызывая пользовательские правила таблицы MANGLE, если таковые имеются. Если нет правил, соответствующих текущему пакету, применяется соответствующий курс действий или «политика» по умолчанию для MANGLE @ PREROUTING. В этот момент, если пакет не был отброшен, процесс продолжится, теперь вызывая правила таблицы NAT в цепочке PREROUTING (см. Карту) и так далее. Чтобы упростить размещение правил, пользователи также могут создавать свои собственные пользовательские цепочки и «прыгать» в них из разных точек карты по своему желанию.

введите описание изображения здесь

Хотя встроенные цепочки могут иметь определенные пользователем политики пакетов ACCEPT или DROP, определенные пользователем цепочки всегда имеют неизменную политику по умолчанию RETURN для вызывающей стороны для продолжения процесса.

Iptables команды

Основные команды iptables заполняют карту потока сетевых пакетов требуемыми правилами обработки.

Общее правило iptables можно записать так:

# iptables <table> <Add/Insert/Delete> <CHAIN> <PKT_MATCHING_CRITERIA> <ACTION>

Это можно прочитать как:

Netfilter (kernel module) please <Add/Insert/Delete> this rule for <table> at <CHAIN> where packets matching <PKT_MATCHING_CRITERIA> have to be <ACTION>ed

<table>
  -t filter       (the filter table is assumed when omitted)
  -t nat
  -t mangle 

<Add/Insert/Delete>
  -A              (append rule at the end of the chain list)
  -I              (insert rule at the begining of the chain list)
  -D              (Delete rule)

<CHAIN>
  PREROUTING
  INPUT
  FORWARD
  OUTPUT
  POSTROUTING
  USER_DEFINED_CHAIN

<PKT_MATCHING_CRITERIA>
ISO Level-2 matching:
  -i [!] <if_name>    or --in-interface [!] <if_name>
          (OUTPUT and POSTROUTING chains cannot match on input  interfaces)
  -o [!] <if_name>    or --out-interface [!] <if_name>
          (INPUT  and PREROUTING  chains cannot match on output interfaces) 
    -mac-source [!] <xx-xx-xx-xx-xx-xx>
            (OUTPUT and POSTROUTING chains cannot match on input  interfaces)

ISO Level-3 matching:
  -s [!] <src_ip>     or --src [!] <src_ip>   or --source [!] <src_ip>
  -d [!] <dst_ip>     or --src [!] <dst_ip>   or --destination [!] <dst_ip>

ISO Level-4 matching:
  -p [!] <prot_name>    or --protocol [!] <prot_name>  (udp|tcp|icmp)

  Also available when ICMP protocol is defined
  --icmp-type [!] <icmp_type>

  Also available when UDP protocol is defined
  --source-port [!] <udp_src_port>      or --sport [!] <udp_src_port>
  --destination-port [!] <udp_dst_port> or --dport [!] <udp_dst_port>

  Also available when TCP protocol is defined
  --source-port [!] <tcp_src_port>      or --sport [!] <tcp_src_port>
  --destination-port [!] <tcp_dst_port> or --dport [!] <tcp_dst_port>
  --tcp-flags [!] <tcp_flags>   (SYN|ACK|FIN|RST|URG|PSH|ALL|NONE)
    --syn
  --tcp-option [!] <tcp_option#>

  --state [!] <state>
  -m <match> [options]

    note: [!] = negation operator

<ACTION>                (also called TARGET)
  -j ACCEPT             (process continues with rules of the next table in map)
  -j DROP               (discard current packet)
  -j REJECT             (discard current packet with ICMP notification)
      option:
      --reject-with <reject_type>
  -j USER_DEFINED_CHAIN   (start traversing USER_DEFINED_CHAIN rules)
  -j RETURN               (return from USER_DEFINED_CHAIN)
  -j LOG                  (log to syslog, then process next rule in table)
      options:
      --log-level <level>
      --log-prefix <prefix>
      --log-tcp-sequence
      --log-tcp-options
      --log-ip-options
      --log-uid

nat table specific
  -j SNAT             (rewrite the source IP address of the packet)
      option:
      --to <ip_address>
  -j SAME             (idem SNAT; used when more than one source address)
      options:
      --nodst 
      --to <a1-a2>
  -j MASQUERADE       (idem SNAT; used when the replace IP is dynamic)
  -j DNAT             (rewrite the destination IP address of the packet)
      option:
      --to <ip_address>
  -j REDIRECT         (rewrite dst IP to 127.0.0.1, PREROUTING and OUTPUT only)
      option:
      –-to-port <port#>

mangle table specific
  -j ROUTE            (explicitly route packets, valid at PREROUTING)
      options:
      --iface <iface_name>
      --ifindex <iface_idx>
  -j MARK             (set Netfilter mark values)
      options:
      --set-mark <value>
      --and-mark <value>
      --or-mark <value> 
  -j TOS              (set the IP header Type of Service field) 
      option:
      --set-tos <value>
  -j DSCP             (set the IP header Differentiated Services Field)
      options:
      --set-dscp <value>
      --set-dscp-class <class>
  -j TTL              (set the IP header Time To Live field)
      options:
      --ttl-set <value>
      --ttl-dec <value>
      --ttl-inc <value>

Вспомогательные команды iptables завершают сценарий, устанавливая условия по умолчанию, списочные правила, правила очистки и т. Д.

#iptables -t <table> -L             
       (Lists the <table> rules in all chains)
#iptables -t <table> -L <CHAIN>     
       (Lists the <table> rules in <CHAIN>)

#iptables -t <table> -N <CHAIN>     
       (Creates a user-defined <CHAIN> for holding <table> rules)
#iptables -t <table> -E <CHAIN> <NEWCHAIN>  
       (Renames <CHAIN> that holds <table> rules to <NEWCHAIN>)

#iptables -t <table> -X   
       (Deletes all user-defined chains created for holding <table> rules)
#iptables -t <table> -X <CHAIN>
       (Deletes user-defined <CHAIN> created for holding <table> rules)

#iptables -t <table> -P <CHAIN> <ACTION>     where <ACTION> = ACCEPT|DROP
       (Sets the default policy of <table> rules at <CHAIN> to <ACTION>)

#iptables -t <table> -F             
       (Flushes (deletes) all <table> rules in all chains)
#iptables -t <table> -F <CHAIN>
       (Flushes (deletes) all <table> rules in <CHAIN>)

#iptables -t <table> -R <CHAIN> <INDEX> <NEWRULE>
       (Replaces <table> rule at position <INDEX> in <CHAIN> with <NEWRULE>

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

#iptables-save > fileName
      (Save the currently active Netfilter ruleset to fileName)

#iptables-restore < fileName
      (Restore Netfilter ruleset to the one saved in fileName)

Сводка Iptables

Netfilter - чрезвычайно гибкая и мощная инфраструктура, но за это нужно платить; Iptables сложный. С точки зрения пользователя, некоторые термины, такие как TABLE, CHAIN, TARGET, не очень хорошо соответствуют концепции, которую они представляют, и поначалу не имеют особого смысла. Тема длинная, команды, кажется, имеют бесконечный список параметров. Что еще хуже, нет ни одной книги, которая действительно справлялась бы с Iptables. Они в основном делятся на две категории: «книга рецептов» или «книга справочников». Я думаю, что это введение дает вам снимок ландшафта Netfilter / Iptables, а также необходимую дозу предварительно обработанного содержимого страницы руководства. Если вы новичок в iptables, после прочтения этих параграфов вы будете готовы прочитать примеры iptables. С некоторой практикой вы скоро найдете свои собственные правила.

Брандмауэры

Брандмауэр в основном предназначен для динамического разрешения или запрета сетевого трафика на основе набора правил. На этом этапе легко понять, почему инфраструктура Linux Netfilter / Iptables идеально подходит для построения брандмауэра. Рассматривая карту потока сетевых пакетов, мы находим два особенно интересных места в таблице FILTER в цепочках INPUT и FORWARD; Мы можем принять решение о IP-адресе источника, IP-протоколе (UDP / TCP), порте назначения (80, 21, 443 и т. Д.) И т. Д., Если мы ПРИНИМАЕМ, ОТКАЗЫВАЕМ или просто УДАЛЯЕМ конкретный IP-пакет. Это то, что брандмауэр делает в 80% случаев, т.е. защищает веб-сервер от несанкционированных сетевых запросов. Другие 20% времени манипулируют сетевыми пакетами (NAT, MANGLE).

Сценарии межсетевых экранов

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

  1. Простой веб-сервер с одним или несколькими интерфейсами, подключенными к Интернету. Политика включает в себя основные правила, разрешающие ограниченный входящий доступ, неограниченный исходящий доступ и правила противодействия спуфингу. Переадресация IP отключена.
  2. Этот брандмауэр подключается к Интернету и к защищенной внутренней области. Политика включает в себя основные правила, разрешающие ограниченный входящий доступ, неограниченный исходящий доступ и правила противодействия спуфингу. Поскольку в защищенной зоне используются частные IP-адреса, необходим источник NAT. Переадресация IP включена.
  3. Этот брандмауэр подключается к Интернету, внутренней защищенной и демилитаризованной зоне. Политика включает в себя основные правила, разрешающие ограниченный входящий доступ, неограниченный исходящий доступ и правила противодействия спуфингу. Поскольку защищенные зоны и зоны DMZ используют частные IP-адреса, им необходимы NAT источника и назначения. Переадресация IP включена. введите описание изображения здесь

Я написал это для: http://www.vercot.com/~jeoss/howto/JeossEasyFirewall.html

похлопывание
источник