Главная > Экономика / Культура > Настройка netfilter с помощью iptables
Настройка netfilter с помощью iptables23-01-2023, 15:35. Разместил: GIG |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Настройка netfilter с помощью iptables Обновлено: Опубликовано: Утилита командной строки iptables используется для настройки брандмауэра netfilter, встроенного в систему на базе ядра Linux. Данная инструкция подходит как для чайников, которые хотят разбираться в аспектах защиты сети, так и опытных специалистов в качестве шпаргалки. Общий синтаксис Принцип настройкиОбщий синтаксис использования iptables: iptables -t <таблица> <команда> <цепочка> [номер] <условие> <действие> <таблица> Правила netfilter распределены по 4-м таблицам, каждая из которых имеет свое назначение (подробнее ниже). Она указывается ключом -t, но если данный параметр не указан, действие будет выполняться для таблицы по умолчанию — filter. <команда> Команды указывают, какое именно действие мы совершаем над netfilter, например, создаем или удаляем правило. <цепочка> В каждой таблице есть цепочки, для каждой из которых создаются сами правила. Например, для вышеупомянутой таблицы filter есть три предопределенные цепочки — INPUT (входящие пакеты), OUTPUT (исходящие) и FORWARD (транзитные). [номер] Некоторые команды требуют указания номера правила, например, на удаление или редактирование. <условие> Условие описывает критерии отработки того или иного правила. <действие> Ну и, собственно, что делаем с пакетом, если он подходит под критерии условия. * справедливости ради, стоит отметить, что ключ с действием не обязан идти в конце. Просто данный формат чаще всего встречается в инструкциях и упрощает чтение правил. Ключи iptables и примеры их использованияДля работы с таблицами (iptables -t)Напоминаю, все правила в netfilter распределены по таблицам. Чтобы работать с конкретной таблицей, необходимо использовать ключ -t.
КомандыНижеперечисленные ключи определяют действия, которые выполняет утилита iptables.
УсловияДанные ключи определяют условия правила.
Перечисленные ключи также поддерживают конструкцию с использованием знака !. Он инвертирует условие, например, ДействияДействия, которые будут выполняться над пакетом, подходящим под критерии условия. Для каждой таблицы есть свой набор допустимых действий. Указываются с использованием ключа -j.
Примеры часто используемых команд iptablesОбщие командыПросмотр правил с их номерами: iptables -L --line-numbers Для каждой таблицы смотреть правила нужно отдельно: iptables -t nat -L --line-numbers Удалить все правила: iptables -F Установить правила по умолчанию: iptables -P INPUT DROP iptables -P OUTPUT DROP * в данных примерах по умолчанию для всех входящих (INPUT) и исходящих (OUTPUT) пакетов будет работать запрещающее правило (DROP). Разрешить всеСпособ 1. С помощью добавления правила: iptables -I INPUT 1 -j ACCEPT iptables -I OUTPUT 1 -j ACCEPT iptables -I FORWARD 1 -j ACCEPT * данные три команды создадут правила, которые разрешают все входящие, исходящие и транзитные пакеты. Способ 2. Чисткой правил: iptables -F iptables -S * здесь мы сначала удаляем все правила (-F), затем устанавливаем политику по умолчанию — разрешать входящие, исходящие и транзитные (-S). Способ 3. Отключение сервиса (удобно для диагностики проблем на время отключить firewall): service iptables stop iptables stop Работа с правилами1. Добавить правило в конец списка: iptables -A INPUT -p tcp --dport 25 -j ACCEPT iptables -A INPUT -p tcp -s ! 192.168.0.25 --dport 993 -i eth0 -j ACCEPT 2. Добавить диапазон портов: iptables -A INPUT -p tcp --dport 3000:4000 -j ACCEPT * в данном случае, от 3000 до 4000. 3. Вставить правило: iptables -I FORWARD 15 -p udp -d 8.8.8.8 --dport 53 -i eth1 -j ACCEPT 4. Заблокировать определенный IP-адрес для подключения по 25 порту: iptables -I INPUT 1 -s 1.1.1.1 -p tcp --dport 25 -j DROP 5. Разрешить несколько портов: iptables -A INPUT -p tcp --match multiport --dports 20,21,25,80,8080,3000:4000 -j ACCEPT Проброс портов (port forwarding)Рассмотрим пример проброса одного порта и диапазона портов. Один порт (одинаковые порты)Существует два способа настройки. 1. Правила PREROUTING + POSTROUTING: iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 --dport 22 -j DNAT --to-destination 192.168.1.15:22 iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 --sport 22 -j SNAT --to-source 19.8.232.80:22 * где 19.8.232.80 — адрес, на котором слушаем запросы на подключение; 22 — порт для проброса; 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы. 2. Правила PREROUTING + FORWARD: iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 22 -j DNAT --to-destination 192.168.1.15:22 iptables -A FORWARD -p tcp -d 192.168.1.15 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT * где eth1 — сетевой интерфейс, на котором слушаем запросы; 22 — порт для проброса; 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы. Один порт (разные порты)Рассмотрим ситуацию, когда мы слушаем один порт, а пробрасываем на другой. iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 8022 -j DNAT --to-destination 192.168.1.15:22 iptables -A FORWARD -p tcp -d 192.168.1.15 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT * где eth1 — сетевой интерфейс, на котором слушаем запросы; 8022 — порт для проброса, на котором будем слушать запросы; 22 — порт для проброса на внутренний адрес; 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы. Диапазон портовПри необходимости пробросить диапазон портов, используем команды: iptables -t nat -I PREROUTING -p tcp -m tcp --dport 1000:5000 -j DNAT --to-destination 192.168.1.15:1000-5000 iptables -A FORWARD -d 192.168.1.15 -i eth1 -p tcp -m tcp --dport 1000:5000 -j ACCEPT * где eth1 — сетевой интерфейс, на котором слушаем запросы; 1000:5000 — порты для проброса (от 1000 до 5000); 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы. Стартовая настройкаМы можем начать настройку брандмауэра на сервере с этих команд. Разрешаем SSH: iptables -A INPUT -p tcp --dport 22 -j ACCEPT Создаем правила для нормальной работы apt или yum: iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Разрешаем ICMP (для выполнения команды ping): iptables -A INPUT -p icmp -j ACCEPT Разрешаем все входящие на адрес локальной петли: iptables -A INPUT -i lo -j ACCEPT Ставим политику запрета на входящие и разрешаем все исходящие: iptables -P INPUT DROP iptables -P OUTPUT ACCEPT Настройка по умолчаниюЕсли мы хотим вернуть настройки в первоночальное значение (разрешено все, правил нет), выполняем команды ниже. Сначала ставим разрешающую политику для основных цепочек: iptables -S Ставим политику разрешения на входящие и исходящие: iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT Удаляем все правила во всех таблицах: iptables -F iptables -t nat -F iptables -t mangle -F Удаляем все цепочки, которые не используются: iptables -X Сохранение правил (permanent)По умолчанию, все правила перестают работать после перезапуска сети или компьютера. Для сохранения правил после перезагрузки есть несколько способов настройки. Способ 1. iptables-save (универсальный)Сохраняем правила в файл: iptables-save > /etc/iptables.rules Чтобы восстановить правила, достаточно ввести команду: iptables-restore < /etc/iptables.rules А для автоматического восстановления правил при загрузке сервера или перезагрузки сети, создадим файл: vi /etc/network/if-pre-up.d/iptables #!/bin/bash И делаем его исполняемым: chmod +x /etc/network/if-pre-up.d/iptables
Способ 2. iptables-persistent (Debian/Ubuntu)Ставим пакет iptables-persistent: apt install iptables-persistent Для сохранения правил вводим команду: netfilter-persistent save Способ 3. service iptables (CentOS)Работает в старых версиях Linux и CentOS. Необходима установка пакета: yum install iptables-services apt install iptables-services * первая команда для CentOS, вторая — для Ubuntu. Сохраняем правила командой: service iptables save * правила будут сохранены в файл /etc/sysconfig/iptables. Чтобы правила восстанавливались автоматически при старте компьютера, разрешаем автозапуск сервиса. а) в более новых версиях Linux: systemctl enable iptables б) в версиях постарше: chkconfig iptables on update-rc.d iptables defaults * первая команда для CentOS, вторая для Ubuntu. Ubuntu и CentOSВ современных операционных системах Ubuntu и CentOS по умолчанию нет iptables. Необходимо его установить или пользоваться более новыми утилитами. В CentOSВ качестве штатной программы управления брандмауэром используется firewall-cmd. Подробнее читайте инструкцию Как настроить firewalld в CentOS. Если необходимо пользоваться iptables, устанавливаем пакет с утилитой: yum install iptables-services Отключаем firewalld: systemctl stop firewalld systemctl disable firewalld Разрешаем и запускаем iptables: systemctl enable iptables systemctl start iptables В UbuntuДля управления брандмауэром теперь используется ufw. Для работы с iptables, устанавливаем следующий пакет: apt install iptables-persistent Отключаем ufw: ufw disable Вернуться назад |