Ubuntu где находится iptables

Обновлено: 04.07.2024

Одним из компонентов ядра операционной системы Linux является сетевой экран.Он позволяет выполнять множество видов фильтрации трафика. Кроме этого в ядре имеется возможность трансляции сетевых адресов.
Например, на базе Linux строятся сетевые шлюзы для подключения локальных сетей к интернету.Пользовательским интерфейсом к сетевому экрану Linux является программа Iptables.Это программа командной строки, она взаимодействует с пользователем посредством текстового терминала.

В ubuntu для разрешения работы транзитного трафика NAT надо раскомментировать в файле /etc/sysctl.conf строчку

Принцип работы

Итак, пребывающий пакет проходит по цепочке правил. Каждое правило содержит условие и цель (действие). Если пакет удовлетворяет условию то он передается на цель, в противном случае к пакету применяется следующее правило в цепочке. Если пакет не удовлетворил ни одному из условий в цепочке, то к нему применяется действие по умолчанию.

Ключевыми понятиями iptables являются:

  • фильтрация трафика на основе адресов отправителя и получателя пакетов, номеров портов;
  • перенаправление пакетов по определенным параметрам;
  • организация доступа в сеть (SNAT);
  • проброс портов из глобальной сети в локальную (DNAT);
  • ограничение числа подключений;
  • установление квот трафика;
  • выполнение правил по расписанию;

Основное назначение таблицы mangle - внесение изменений в заголовок пакета. В этой таблице могут производиться следующие действия:

  • установка бита Type Of Service;
  • установка поля Time To Live;
  • установка метки на пакет, которая может быть проверена в других правилах;

Таблица используется для преобразования сетевых адресов (Network Address Translation) и когда встречается пакет, устанавливающий новое соединение. В этой таблице могут производиться следующие действия:

Прибывший пакет проходит по цепочке правил. Каждое правило содержит условие и цель (действие). Если пакет удовлетворяет условию то он передается на цель, в противном случае к пакету применяется следующее правило в цепочке. Если пакет не удовлетворил ни одному из условий в цепочке, то к нему применяется действие по умолчанию.

Команды iptables:
-A - добавление правила в цепочку, правило будет добавлено в конец цепочки;
-D - удаление правила из цепочки;
-R - заменить одно правило другим;
-I - вставить новое правило в цепочку;
-L - вывод списка правил в заданной цепочке;
-F - сброс всех правил в заданной цепочке;
-Z - обнуление всех счетчиков в заданной цепочке;
-N - создание новой цепочки с заданным именем;
-X - удаление цепочки;
-P - задает политику по умолчанию для цепочки;
-E - переименование пользовательской цепочки;

Действия над пакетами

Для указания действия (цели) с пакетом служит опция -j. Основные действия:

Разница между DROP и REJECT

Опции отбора пакетов

Для ubuntu можно использовать пакет iptables-persistent, который будет сам переподнимать его при каждой загрузке системы:

sudo apt-get install iptables-persistent


1)Показать статус.
iptables -L -n -v

4)Удалить правила файрвола.

5)Добавить правило в файрвол.

Примерный вывод:

Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP all -- 202.54.1.1 0.0.0.0/0
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED

Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP all -- 202.54.1.1 0.0.0.0/0
2 DROP all -- 202.54.1.2 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED

Помощь по iptables.

6)Для фильтрации по источнику используется опция -s. Например запретим все входящие пакеты с узла 192.168.1.95:

iptables -A INPUT -s 192.168.1.95 -j DROP

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

Также можно указать целую под сеть:

iptables -A INPUT -s 192.168.1.0/24 -j DROP

Также вы можете использовать отрицание (знак !). Например, все пакеты с хостов отличных от 192.168.1.96 будут уничтожаться:

iptables -A INPUT ! -s 192.168.1.96 -j DROP

Для этого нужно использовать опцию -d. Например запретим все исходящие пакеты на хост 192.168.1.95:

iptables -A OUTPUT -d 192.168.156.156 -j DROP

Запретить доступ к ресурсу

8)Опция -p указывает на протокол. Можно использовать all, icmp, tcp, udp или номер протокола (из /etc/protocols).

Разрешаем входящие эхо-запросы

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Разрешаем все исходящие пакеты с порта 80:

iptables -A INPUT -p tcp --sport 80 -j ACCEPT

Заблокировать все входящие запросы порта 80:

iptables -A INPUT -p tcp --dport 80 -j DROP

Для указания порта необходимо указать протокол (tcp или udp). Можно использовать отрицание.

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Разрешить подключения по SSH

iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT

Разрешаем получать данные от DHCP-сервера

iptables -A INPUT -p UDP --dport 68 --sport 67 -j ACCEPT


Разрешить CUPS (сервер печати, порт 631) для пользователей внутри локальной сети

iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT

Разрешить синхронизацию времени NTP для пользователей внутри локальной сети

iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

Для примера направим трафик с порта 442 на 22, это значит что входящие ssh-соединения могут быть принятыми с порта 422 и 22.

iptables -t nat -A PREROUTING -p tcp -d 192.168.1.15 --dport 422 -j DNAT --to 192.168.1.15:22

Также надо разрешить входящие соединения с порта 422

iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

Как и в случае с портом источника нужно указать протокол. Можно использовать отрицание.

13). Блокировать только входящие соединения.

14) Сбрасывать или разрешить трафик с определенных MAC адресов.

16). Открыть диапазон портов.

18) Закрыть или открыть стандартные порты.

Заменить ACCEPT на DROP, чтобы заблокировать порт.


Пример минимальной конфигурации своего шлюза:

На сайте настроен iptables. Разрешает коннект к порту 3306 только для одного IP. IP сменился, нужно открыть конфиг фаервола и сменить IP.
Гуглю где находится его конфиг, гугль говорит, смотреть в /etc/sysconfig/iptables.old и в /etc/sysconfig/iptables-config.
Ага, думаю я, то что мне нужно, открываю эти конфиги, в них нет записи с нужным IP. Видимо iptables использует кастомный конфиг. Как узнать где он находится?

littleguga

Выведите список через iptables -L
и удалите старое, добавьте новое

Если я не ошибаюсь, конфиг можно сохранить куда угодно.

или сделайте, как здесь:

In CentOS you have the file /etc/sysconfig/iptables
если его там нет, вы можете его создать, используя iptables-save, чтобы записать текущие правила в файл

iptables-save > /etc/sysconfig/iptables
чтобы загрузить файл, Вам не нужно перезагружать сервер, просто используйте iptables-restore

так добавить разрешение для подключения определенного IP? какую нибудь еще команду нужно вводить или что нибудь перезагружать?

littleguga

mr_blond97: на счет этого, к сожалению помочь не могу. По умолчанию - все подключения разрешены. Надо смотреть, какое правило у Вас запрещало подключаться со всех ip, кроме старого и его менять.
ps
Если ответ помог, отметьте решением, пожалуйста. iptables -S выведет список правил
=========
/etc/sysconfig/iptables-config
Не тот файл вы открываете.
mcedit /etc/sysconfig/iptables
меняете правило и
/etc/init.d/iptables restart

Disen

Итак, шаг номер раз:
iptables -L -n --line-numbers
эта команда выведет список всех имеющихся у Вас правил с номерами.

шаг номер 2:
iptables -D INPUT num, где num - номер запрещающего правила.
этой командой мы удаляем запрещающее правило

наг номер 3:
iptables -I INPUT 1 -p tcp -s x.x.x.x --dport 3306 -j ACCEPT
этой командой мы добавляем новое разрешающее правило в цепочку INPUT и ставим его первым. На случай, если у Вас в конце цепочки написано что-то типа -A INPUT -j REJECT --reject-with icmp-host-prohibited

если что-то не получается - пришлите вывод iptables -L -n --line-numbers, бум думать.

Утилита iptables — это межсетевой экран для операционных систем Linux. С помощью правил iptables можно разрешать или блокировать прохождение трафика. Когда происходит попытка установления соединения с текущей машиной, iptables просматривает список правил в списке, чтобы понять, как нужно поступить в этом случае. Если правила нет, то выполняется действие по умолчанию.

Цепочки правил

Набор правил формируется в цепочки, существуют базовые и пользовательские цепочки. Список базовых цепочек:

  • PREROUTING — правила в этой цепочке применяются ко всем пакетам, которые поступают на сетевой интерфейс извне
  • INPUT — применяются к пакетам, которые предназначаются для самого хоста или для процесса на данном хосте
  • FORWARD — правила, которые применяются к транзитным пакетам, проходящим через хост, не задерживаясь
  • OUTPUT — применяются к пакетам, которые сгенерированы самим хостом или процессами на данном хосте
  • POSTROUTING — применяются к пакетам, которые должны покинуть сетевой интерфейс данного хоста


Таблицы iptables

Над цепочками правил в iptables есть еще один уровень абстракции — таблицы. Таблицы предназначены для выполнения разных действий над пакетами, например для модификации или фильтрации:

  • raw — предназначена для работы с сырыми пакетами, пока они еще не прошли обработку
  • mangle — предназначена для модификации различных заголовков пакета
  • nat — обеспечивает работу NAT, если сервер используется в качестве маршрутизатора
  • filter — основная таблица для фильтрации пакетов, используется по умолчанию

Принцип работы

Если целью пакета является другой компьютер, то пакет фильтруется правилами цепочки FORWARD таблиц mangle и filter , а затем к нему применяются правила цепочки POSTROUTING . На данном этапе можно использовать SNAT/MASQUARADE (подмена источника/маскировка). После этих действий пакет (если выжил) будет отправлен в сеть.

Если назначением пакета является сам компьютер с брандмауэром, то, после маршрутизации, он обрабатывается правилами цепочек INPUT таблиц mangle и filter . В случае прохождения цепочек пакет передается приложению.

Когда приложение на машине с брандмауэром, отвечает на запрос или отправляет собственный пакет, то он обрабатывается цепочкой OUTPUT таблицы filter . Затем к нему применяются правила цепочки OUTPUT таблицы nat — для определения, требуется ли использовать DNAT (модификация назначения). Далее, пакет фильтруется цепочкой OUTPUT таблицы filter и выпускается в цепочку POSTROUTING , которая может использовать SNAT и QoS . В случае успешного прохождения POSTROUTING пакет выходит в сеть.

Утилита iptables

Синтаксис утилиты iptables :

Если таблица не указана, подразумевается таблица filter . Команды могут быть:

  • -A (или --append ) — добавить правило в цепочку
  • -D (или --delete ) — удалить правило из цепочки
  • -I (или --insert ) — вставить правило в цепочку под указанным номером
  • -L (или --list ) — вывести все правила для заданной цепочки
  • -F (или --flush ) — очистить все правила для заданной цепочки (таблицы)
  • -N (или --new-chain ) — создать новую цепочку
  • -X (или --delete-chain ) — удалить цепочку
  • -P (или --policy ) — установить действие по умолчанию для цепочки

Имеются следующие дополнительные опции:

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

Поведение по умолчанию

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

Изначально все три цепочки таблицы filter по умолчанию разрешают прием трафика:

Если же что-то менялось, а теперь нужно вернуть прежние настройки, то сделать это можно с помощью команд:

Можно пойти по другому пути и сначала запретить весь трафик, а затем выборочно разрешать его:

Действия с соединениями

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

  • ACCEPT — пакет покидает данную цепочку и передается в следующую
  • DROP — отбросить пакет, пакет не передается в следующую цепочку
  • REJECT — отбросить пакет, сообщить отправителю пакета об ошибке
  • SNAT — замена ip-адреса источника в пакете, в цепочках POSTROUTING и OUTPUT таблицы nat
  • DNAT — замена ip-адреса назначения в пакете, в цепочке PREROUTING таблицы nat (изредка — в OUTPUT )
  • LOG — записать пакет в лог-файл (отправляется демону syslog ) и обработать остальными правилами
  • MASQUERADE — как SNAT , но для соединений с динамическим ip-адресом, в цепочке POSTROUTING таблицы nat
  • MARK — установить метку на пакет и обработать остальными правилами

Критерии для пакетов

Общие критерии — допустимо употреблять в любых правилах, они не зависят от типа протокола и не требуют подгрузки модулей расширения:

  • -p (или --protocol ) — используется для указания типа протокола ( all , icmp , tcp , udp )
  • -s (или --source ) — используется для указания ip-адреса источника; можно указать единственный ip-адрес (10.10.10.10) или диапазон ip-адресов (10.10.10.0/24)
  • -d (или --destination ) — используется для указания ip-адреса места назначения; можно указать единственный ip-адрес (10.10.10.10) или диапазон ip-адресов (10.10.10.0/24)
  • -i (или --in-interface ) — интерфейс, с которого был получен пакет, допускается только в цепочках INPUT , FORWARD и PREROUTING ; при отсутствии этого критерия предполагается любой интерфейс
  • -o (или --out-interface ) — интерфейс, с которого будет отправлен пакет, допускается только в цепочках OUTPUT , FORWARD и POSTROUTING ; при отсутствии этого критерия предполагается любой интерфейс

Неявные критерии — неявно подгружают модули расширений и становятся доступны при указании критерия --protocol . Рассмотрим некоторые из них:

  • -p tcp --sport (или --source-port ) — исходный порт, с которого был отправлен TCP-пакет. В качестве параметра может указываться номер порта или название сетевой службы. Соответствие имен сервисов и номеров портов можно найти в файле /etc/services . Номера портов могут задаваться в виде интервала из минимального и максимального номеров.
  • -p tcp --dport (или --destination-port ) — порт или диапазон портов, на который адресован TCP-пакет. Аргументы задаются в том же формате, что и для --source-port .
  • -p udp --sport (или --source-port ) — исходный порт, с которого был отправлен UDP-пакет. В качестве параметра может указываться номер порта или название сетевой службы. Соответствие имен сервисов и номеров портов можно найти в файле /etc/services . Номера портов могут задаваться в виде интервала из минимального и максимального номеров.
  • -p udp --dport (или --destination-port ) — порт или диапазон портов, на который адресован UDP-пакет. Аргументы задаются в том же формате, что и для --source-port .

Явные критерии — требуют явной подгрузки модулей расширения с помощью опции -m или --match . Например, если планируется использовать критерий state , то нужно явно указать -m state левее используемого критерия. Рассмотрим некоторые из них:

  • -m conntrack --ctstate STATES — проверяет признак состояния соединения: NEW , ESTABLISHED , RELATED и INVALID . Состояние NEW подразумевает, что пакет открывает новое соединение или пакет принадлежит однонаправленному потоку. Состояние ESTABLISHED указывает на то, что пакет принадлежит уже установленному соединению, через которое пакеты идут в обеих направлениях. Состояние RELATED указывает на то, что пакет принадлежит уже существующему соединению, но при этом он открывает новое соединение. Состояние INVALID подразумевает, что пакет связан с неизвестным потоком или соединением и, возможно содержит ошибку в данных или в заголовке.
  • -m state --state STATES (устарел, не рекомендуется) — проверяет признак состояния соединения: NEW , ESTABLISHED , RELATED и INVALID .
  • -m multiport --source-port PORTS — служит для указания списка исходящих портов, можно указать до 15 различных портов. Названия портов в списке должны отделяться друг от друга запятыми, пробелы в списке недопустимы. Может использоваться только совместно с критериями -p tcp или -p udp . Главным образом используется как расширенная версия обычного критерия --source-port .
  • -m multiport --destination-port PORTS — служит для указания списка входящих портов, можно указать до 15 различных портов. Названия портов в списке должны отделяться друг от друга запятыми, пробелы в списке недопустимы. Может использоваться только совместно с критериями -p tcp или -p udp . Главным образом используется как расширенная версия обычного критерия --destination-port .
  • -m multiport --port PORTS — проверяет как исходящий так и входящий порт пакета. Формат аргументов аналогичен критерию --source-port и --destination-port . Данный критерий проверяет порты обоих направлений, если задан критерий -m multiport --port 80 — под него попадают пакеты, идущие с порта 80 на порт 80.
  • -m mac --mac-source MAC — MAC адрес сетевого узла, передавшего пакет, в формате XX:XX:XX:XX:XX:XX . Имеет смысл только в цепочках PREROUTING , FORWARD и INPUT и нигде более.
  • -m iprange --src-range IP-IP — позволяет указать диапазон ip-адресов источника, например 192.168.1.10-192.168.2.20
  • -m iprange --dst-range IP-IP — позволяет указать диапазон ip-адресов места назначения, например 192.168.1.10-192.168.2.20

Критерий состояния соединения

Как сказано выше, многие протоколы требуют двусторонних коммуникаций. Например, если нужно разрешить соединения по SSH, то добавить правила надо будет и в цепочку INPUT и в цепочку OUTPUT . Но что, если нужно разрешить только входящие SSH-соединения на сервер (т.е. только возможность подключиться к серверу по SSH)? Разрешит ли добавление правила в цепочку OUTPUT и исходящие SSH-соединения (т.е. с сервера можно будет подключиться по SSH к другому хосту)?

Для таких случаев используются состояния соединений. Они позволяют описывать двусторонние коммуникации, в которых разрешается установка только соединений определенной направленности. В примере ниже разрешены SSH-соединения, поступающие от хоста 10.10.10.10, но SSH-соединения к этому хосту запрещены. Однако, системе разрешается отправка информации по SSH в случае уже установленного соединения, что делает возможной SSH-коммуникацию между хостами:

Сохранение изменений

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

Автозагрузка правил

Понятно, что восстанавливать правила вручную после каждой перезагрузки неудобно. Поэтому устанавливаем пакет iptables-persistent :

При установке пакета будет предложено сохранить текущие правила iptables :

  • в файл /etc/iptables/rules.v4 для протокола IPv4
  • в файл /etc/iptables/rules.v6 для протокола IPv6


Теперь, после каких-либо изменений правил, надо сохранить текущее состояние в файл /etc/iptables/rules.v4 , чтобы это состояние восстановилось после перезагрузки:

После установки пакета будет добавлена новая служба netfilter-persistent.service , которая при загрузке системы будет восстанавливать правила iptables :

Судя по всему, скоро пакет iptables-persistent будет заменен на пакет netfilter-persistent (сейчас он устанавливается как зависимость при установке iptables-persistent ).

Удаление всех правил

Для удаления всех сконфигурированных правил таблицы filter можно использовать команду:

Для удаления всех сконфигурированных правил таблицы nat можно использовать команду:

Пример настройки web-сервера

1. Политика ACCEPT для OUTPUT

Первым делом задаем политику по умолчанию:

Разрешаем трафик через интерфейс loopback (будет работать ping для localhost ):

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

Если подходить к настройке не очень фанатично, то можно разрешить работу протокола ICMP (будут работать ping и traceroute ):

Разрешаем нашему серверу получать ответы от DNS-серверов:

Наш web-сервер (Apache или Nginx) прослушивает порты 80 и 443, а SSH-сервер — порт 22. Поэтому разрешаем входящий TCP трафик, который идет на destination port 80, 443 и 22.

Чтобы можно было устанавливать и обновлять пакеты с помощью утилиты apt :

Любой исходящий трафик у нас разрешен, поэтому утилита apt может отправлять запросы на сервер репозитория. Но ей еще нужно получать ответы, поэтому разрешаем входящий TCP трафик, который идет с source port 80. Кроме того, уточняем — что этот трафик в ответ на запрос с нашего сервера.

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

2. Политика DROP для OUTPUT

В этом случае все правила для цепочки INPUT будут такими же, но надо еще добавить правила для цепочки OUTPUT . Итак, первым делом задаем политику по умолчанию:

Разрешаем трафик через интерфейс loopback :

Разрешаем работу протокола ICMP (будут работать ping и traceroute ):

Разрешаем нашему серверу отправлять запросы DNS-серверам:

Разрешаем нашему серверу получать ответы от DNS-серверов:

Чтобы можно было устанавливать и обновлять пакеты с помощью утилиты apt :

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

Настройка маршрутизатора

Есть компьютер с двумя сетевыми интерфейсами. Первый интерфейс eth0 смотрит в интернет и имеет белый ip-адрес 128.68.35.23 . Второй интерфейс eth1 смотрит в локальную сеть и имеет ip-адрес 192.168.100.1 .


Доступ в интернет (SNAT)

Этот компьютер должен обеспечивать выход в интернет для всех компьютеров из локальной сети 192.168.100.0/24 . По умолчанию транзитный трафик отключен, так что редактируем файл /etc/sysctl.conf :

Чтобы настройки вступили в силу:

Теперь настраиваем iptables :

Тем самым разрешили ходить транзитным пакетам для нашего диапазона ip адресов, а всё остальное запретили. Теперь настроим SNAT (подмена адреса источника), что позволит всем компьютерам сети выходить в интернет, используя единственный ip-адрес 128.68.35.23 .

Доступ внутрь сети (DNAT)

Одним из компонентов ядра операционной системы Linux является сетевой экран.Он позволяет выполнять множество видов фильтрации трафика. Кроме этого в ядре имеется возможность трансляции сетевых адресов.
Например, на базе Linux строятся сетевые шлюзы для подключения локальных сетей к интернету.Пользовательским интерфейсом к сетевому экрану Linux является программа Iptables.Это программа командной строки, она взаимодействует с пользователем посредством текстового терминала.

В ubuntu для разрешения работы транзитного трафика NAT надо раскомментировать в файле /etc/sysctl.conf строчку

Принцип работы

Итак, пребывающий пакет проходит по цепочке правил. Каждое правило содержит условие и цель (действие). Если пакет удовлетворяет условию то он передается на цель, в противном случае к пакету применяется следующее правило в цепочке. Если пакет не удовлетворил ни одному из условий в цепочке, то к нему применяется действие по умолчанию.

Ключевыми понятиями iptables являются:

  • фильтрация трафика на основе адресов отправителя и получателя пакетов, номеров портов;
  • перенаправление пакетов по определенным параметрам;
  • организация доступа в сеть (SNAT);
  • проброс портов из глобальной сети в локальную (DNAT);
  • ограничение числа подключений;
  • установление квот трафика;
  • выполнение правил по расписанию;

Основное назначение таблицы mangle - внесение изменений в заголовок пакета. В этой таблице могут производиться следующие действия:

  • установка бита Type Of Service;
  • установка поля Time To Live;
  • установка метки на пакет, которая может быть проверена в других правилах;

Таблица используется для преобразования сетевых адресов (Network Address Translation) и когда встречается пакет, устанавливающий новое соединение. В этой таблице могут производиться следующие действия:

Прибывший пакет проходит по цепочке правил. Каждое правило содержит условие и цель (действие). Если пакет удовлетворяет условию то он передается на цель, в противном случае к пакету применяется следующее правило в цепочке. Если пакет не удовлетворил ни одному из условий в цепочке, то к нему применяется действие по умолчанию.

Команды iptables:
-A - добавление правила в цепочку, правило будет добавлено в конец цепочки;
-D - удаление правила из цепочки;
-R - заменить одно правило другим;
-I - вставить новое правило в цепочку;
-L - вывод списка правил в заданной цепочке;
-F - сброс всех правил в заданной цепочке;
-Z - обнуление всех счетчиков в заданной цепочке;
-N - создание новой цепочки с заданным именем;
-X - удаление цепочки;
-P - задает политику по умолчанию для цепочки;
-E - переименование пользовательской цепочки;

Действия над пакетами

Для указания действия (цели) с пакетом служит опция -j. Основные действия:

Разница между DROP и REJECT

Опции отбора пакетов

Для ubuntu можно использовать пакет iptables-persistent, который будет сам переподнимать его при каждой загрузке системы:

sudo apt-get install iptables-persistent


1)Показать статус.
iptables -L -n -v

4)Удалить правила файрвола.

5)Добавить правило в файрвол.

Примерный вывод:

Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP all -- 202.54.1.1 0.0.0.0/0
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED

Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP all -- 202.54.1.1 0.0.0.0/0
2 DROP all -- 202.54.1.2 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED

Помощь по iptables.

6)Для фильтрации по источнику используется опция -s. Например запретим все входящие пакеты с узла 192.168.1.95:

iptables -A INPUT -s 192.168.1.95 -j DROP

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

Также можно указать целую под сеть:

iptables -A INPUT -s 192.168.1.0/24 -j DROP

Также вы можете использовать отрицание (знак !). Например, все пакеты с хостов отличных от 192.168.1.96 будут уничтожаться:

iptables -A INPUT ! -s 192.168.1.96 -j DROP

Для этого нужно использовать опцию -d. Например запретим все исходящие пакеты на хост 192.168.1.95:

iptables -A OUTPUT -d 192.168.156.156 -j DROP

Запретить доступ к ресурсу

8)Опция -p указывает на протокол. Можно использовать all, icmp, tcp, udp или номер протокола (из /etc/protocols).

Разрешаем входящие эхо-запросы

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Разрешаем все исходящие пакеты с порта 80:

iptables -A INPUT -p tcp --sport 80 -j ACCEPT

Заблокировать все входящие запросы порта 80:

iptables -A INPUT -p tcp --dport 80 -j DROP

Для указания порта необходимо указать протокол (tcp или udp). Можно использовать отрицание.

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Разрешить подключения по SSH

iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT

Разрешаем получать данные от DHCP-сервера

iptables -A INPUT -p UDP --dport 68 --sport 67 -j ACCEPT


Разрешить CUPS (сервер печати, порт 631) для пользователей внутри локальной сети

iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT

Разрешить синхронизацию времени NTP для пользователей внутри локальной сети

iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

Для примера направим трафик с порта 442 на 22, это значит что входящие ssh-соединения могут быть принятыми с порта 422 и 22.

iptables -t nat -A PREROUTING -p tcp -d 192.168.1.15 --dport 422 -j DNAT --to 192.168.1.15:22

Также надо разрешить входящие соединения с порта 422

iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

Как и в случае с портом источника нужно указать протокол. Можно использовать отрицание.

13). Блокировать только входящие соединения.

14) Сбрасывать или разрешить трафик с определенных MAC адресов.

16). Открыть диапазон портов.

18) Закрыть или открыть стандартные порты.

Заменить ACCEPT на DROP, чтобы заблокировать порт.


Пример минимальной конфигурации своего шлюза:

Читайте также: