Как кошерно сохранить правила iptables?

Нужно, что бы правила iptables подгружались после перезагрузки. Скриптом из под из под хомяка не кошерно ведь?

Если юзаешь Ubuntu/Debian, то есть пакет iptables-persistent.

Это как раз вроде бы не кашерный способ. Как пишут в интернетах.

Я установил, и не экспортировал существующие настройки. Сейчас не знаю как их сохранить. Сервис (системди) у меня в упор не видит и файла в инитах нет. Как настройки можно сохранить с помощью персистента

Не знаю как с приходом Поттеринга, но раньше был iptables-persistent

Так вроде бы пакет, не команда. Можно ссылочку на ман хотя бы.

Надо сделать dpkg-reconfigure iptables-persistent

Не знаю почему, но использую этот способ.

А через firewalld не проще будет правила настроить? Или они сильно замороченные?

Я не разбирался. А в чем его плюсы?

Графическая морда. И есть консольный интерфейс. Можно указать какой интерфейс к какой зоне относится и для каждой зоны прописать свои правила и т.п. Если ничего заумного не требуется, то самое оно. А, если требуется, то что-то мне кажется, что и это можно сделать, пусть и не через гуй.

Да я настроил уже, просто было интересно, что это. Спасибо

www.linux.org.ru

Предложение от 8host.com

Перенос правил iptables на новый сервер

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

Требования

Для выполнения руководства нужно иметь два сервера. Исходный сервер, на котором находятся правила фаервола, называется в руководстве сервером A; целевой сервер – B.

Также нужно иметь права sudo.

Просмотр правил iptables

Прежде чем приступить к переносу правил брандмауэра, нужно просмотреть их. Для этого выполните следующую команду на сервере A:

sudo iptables -S
Example output:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m conntrack —ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp —dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp —dport 80 -j ACCEPT
-A INPUT -s 15.15.15.51/32 -j DROP

Теперь нужно перенести эти правила на другой сервер.

Экспорт правил Iptables

Команда iptables-save сохранит текущие правила брандмауэра в stdout, после чего его можно будет сохранить в файл.

Используйте эту команду на сервере А, чтобы экспортировать правила в файл iptables-export.

sudo iptables-save > iptables-export

После этого в домашнем каталоге появится файл iptables-export, при помощи которого можно перенести правила фаервола на другой сервер.

Просмотр файла (опционально)

Проверьте, содержит ли новый файл все необходимые данные:

cat iptables-export
# Generated by iptables-save v1.4.21 on Tue Sep 1 17:32:29 2015
*filter
:INPUT ACCEPT [135:10578]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [8364:1557108]
-A INPUT -m conntrack —ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp —dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp —dport 80 -j ACCEPT
-A INPUT -s 15.15.15.51/32 -j DROP
COMMIT
# Completed on Tue Sep 1 17:32:29 2015

Как видите, данный файл содержит все текущие правила iptables, и теперь можно скопировать этот файл на целевой сервер.

Перенос правил на целевой сервер

Проще всего для этого использовать scp или же просто скопировать и вставить содержимое файла в новый файл на целевом сервере.

Ниже показано, как при помощи scp скопировать файл по сети в каталог /tmp.

Итак, запустите команду scp на сервере А, указав логин и IP-адрес сервера.

scp iptables-export user@server_b_ip_address:/tmp

Пройдя авторизацию, файл будет скопирован в каталог /tmp на сервер В.

Примечание: Содержимое каталога /tmp будет удалено при перезагрузке системы. Не забудьте переместить файл в более надёжный каталог.

Импорт правил

Теперь можно загрузить перенесённые правила.

Примечание: В случае необходимости сейчас можно обновить их, добавив данные нового сервера; отредактируйте файл /tmp/iptables-export, внеся всё необходимое.

Когда правила будут соответствовать требованиям данного сервера, загрузите их из файла iptables-export при помощи команды iptables-restore.

На сервере В запустите:

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

sudo iptables -S

Сохранение правил

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

Сохранение правил в Ubuntu

Для сохранения правил брандмауэра система Ubuntu предлагает пакет iptables-persistent. Чтобы установить этот пакет, введите команду:

sudo apt-get install iptables-persistent

Во время установки программа предложит сохранить текущие правила iptables. Выберите yes.

В дальнейшем для сохранения новых или обновлённых правил используйте команду:

sudo invoke-rc.d iptables-persistent save

Сохранение правил в CentOS 6 и 7

По умолчанию системы CentOS 6 и 7 используют фаервол FirewallD; чтобы сохранить правила iptables, используйте:

sudo service iptables save

Это сохранит текущие правила iptables в файл /etc/sysconfig/iptables, который загрузится после перезапуска системы.

Перенос правил брандмауэра успешно завершён!

www.8host.com

Загрузка iptables при запуске системы

Есть файл такого содержания

Сначала нужно сказать, какая система инициализации. Или, хотя бы, какой дистрибутив.

Что за дистрибутив-то?

pre-up iptables-restore 21.08.2012 19:05:14 )

Вчера так и делал, но это iptables-restore, а нужно что б через скрипт #!/bin/sh, обратите пожалуйста внимание на эту тему www.linux.org.ru/forum/general/8135577

Тогда pre-up /путь/к/этому/самому/скрипту. Подробнее см. man interfaces.

Тему видел, ничего сказать про неё не могу: цепочки сами по себе не создаются; конкретно это правило предназначено для решения проблем с различающимся MTU у PPP-интерфейсов (особенно когда компьютер, на котором применяется это правило, является роутером).

Добавил исполнительный файл в /etc/network/if-pre-up.d , правила поставились, в iptables.rules для таблицы mangle нет правил, но в списке правил иптеблс они есть, если прописать iptables-save

Значит, их добавляет кто-то ещё. Может быть, NetworkManager?

Восстановление правил ipset и iptable в Centos 7

Скоро поседею с вашим линуксом 🙂

Ну собственно проблема описана. Надо чтобы полсе ребута все было как и раньше.

В Centos 7 service для этих чуд нету.

для iptable вроде можно в конфиге указать сохранять при остановке. Только не понятно подхватит он или нет их.

Но с ipset засада. Не могу понять как и куда это делать.

При этом ipset по идеи должен стартовать раньше iptable и правила в него должны импортироваться раньше чем стартанет iptable. Иначе при импорте настроек iptable материться будет что сообветсвующих таблиц нету в ipset.

Не понимаю почему нету велосипеда для столь распространненной задачи.

В дебчике был велосипед из баш-скрипта в /etc/network/if-pre-up.d/iptables, где из файлы правила восстанавливались с помощью iptables-restore

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

В CentOS6 есть init скрипты для iptables и ipset, с приходом поттеринга их убрали в пользу firewalld. Есть заметка как вернуть все вспять https://www.digitalocean.com/community/tutorials/how-to-migrate-from-firewall. думаю для ipset есть аналогичный ipset-service, сам проверить не могу ибо под рукой 7 центоси нет

ну и чего ну поставил, один фиг после перезагрузки файерволл открыт на распашку.

Вообще очень странное поведение. Во Free такого не наблюдал.

и где оно по вашему есть ? служба есть старт скрипт не обнаружил.

собственно как снести firewalld и поставить iptable этого где угодно написанно. Но там не слова о восстановлении правил после перезагрузки.

Собственно вопрос то у меня в другом.

chkconfig —list iptables Внимание: в выводе отображены только SysV службы (нативные службы systemd отсутствуют) конфигурация SysV может быть сброшена нативной конфигураией systemd.

Для получения списка служб systemd выполните «systemctl list-unit-files». Для просмотра служб для конкретного объекта выполните «systemctl list-dependencies [объект]».

ошибка чтения информации о сервисе iptables: Нет такого файла или каталога

Но там не слова о восстановлении правил после перезагрузки.

ну и чего ну поставил, один фиг после перезагрузки файерволл открыт на распашку.

А сервис то iptables активирован, стартует при загрузке?

мужики вы реально издеваетесь 🙂

все это проделано фаервол стартует тольво правила он чистит

стартует и чистит правила

Ты правила сохраняешь в /etc/sysconfig/iptables перед ребутом? После загрузки в файле все на месте? Сервис iptables стартует нормально?

Это не мы издеваемся, а Ленька Портянкин угробивший старый init, в котором таких проблем не было.

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

systemctl enable iptables.service

systemctl start iptables.service

стартует и чистит правила

может это firewalld

systemctl disable firewalld

его я снес к чертям, может и зря конечно 🙂

Все эти шаги были проделанны выше вывод есть

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

Матерится он на то что в правилах есть ссылка на таблицу ipset но ее то еще нет, и она видимо много позже импортится посредствам rc.local

service таки откапал живет он тут /usr/lib/systemd/system/iptables.service

В принципе от CentOS 6 не отличается, ну systemd, в другом месте скрипт лежит.

/usr/libexec/iptables/iptables.init (примерно такой-же, как в 6-ть /etc/init.d/iptables)

который берет настройки из /etc/sysconfig/iptables-config, как и в 6, должно работать.

Вообщем подход был в корне не правильный, На автомате лучше не сохранять правила Iptables. Лучше всего один раз сохранить, и отредактировать убрав все ipset. Тогда iptables будет правильно стартовать. Спасибо чуваку вот от сюда http://nemgeek.blogspot.ru/2013/07/ipset-for-heavy-use.html

собственно он и навел на то как делать правильно. ipset лучше обновлять при старте через rc.local и по мере обновлений добавлять правила в iptables. Покажу на примере авось кому и пригодится, я сутки потерял в поисках верного решения. Буду показывать на примере блокировки друзей Ошина (дружеских нам стран 🙂 и так поехали:

1) делаем наш скрипт

то есть он создает таблицу ipset импортит в нее все что нужно из любого файла или даже по сети как в примере и только после этого создает правило в iptables

делаем его исполняемым: chmod +x /etc/ipset/ipset_start.sh

добавляем в rc.local (у меня CentOS пути соответствующие) echo «/etc/ipset/ipset_start.sh» >> /etc/rc.d/rc.local

и проверяем /etc/rc.local start

Финит аля комедия, занавес, всем спасибо за участие.

Вот до чего доводят все эти «сервисы» firewall. Народ начинает заново изобретать тратить сутки на то, что бы сделать так как всеми делалось до появления этих «сервисов» 🙂
Тут рядом чудик с дебианом мучался. видиш ли там не такой сервис как в федоре 🙂

ну может такие штуки не везде есть, смотрят то они на организации, то есть на тех кто платит. А в органзациях нафиг не нужен ipset и firewalld удобнее.

а вообще конечно зоопарк развели, Unix way более стандартизирован. Там одни и те же файлы всегда в одних и тех же дирректориях 🙂

а вообще конечно зоопарк развели

Вот я об этом. Возьмем православный дистр, никаких тебе сервисов fw все как было так и осталось, нужен fw бери и пиши скрипт и все зашибись. Так нет же, надо обязательно обертку придумать для этого и в результате пользователи как слепые котята шагу без этой обертки уже ступить не могут, другой дистр, другая обертка, файлик с iptables-save в другом месте и все караууул давай темы плодить «помогите настроить fw в дистре Х». А шо реально везде один и тот же iptables как будто никто не в курсе.
ЗЫ и таки да, вертел я все эти сервисы, на всех дистрах поступаю одинаково, пишу свой скрипт и пихаю в загрузку вчитываться, что там за меня придумали неохото, только время лишнее тратить.

пишу свой скрипт и пихаю в загрузку вчитываться

Раньше тоже так делал, потом решил, что механизм iptables-save все же удобнее. Постоянно что-то меняешь и не всегда нужного результата добиваешься с первого раза. И тут, либо сразу пишешь в скрипт и запускаешь его, либо добавляешь/удаляешь правила по одному командой iptables. В первом случае, в начале срипта должны быть команды которые чистять весь файрвол, иначе куча ругачек, ты по сути перегружаешь весь файрвол. Во втором случае, вероятность забыть внести все изменения в скрипт, после того как получишь нужный результат.

Поэтому в процессе работы, добавляю/удаляю правила по одному, как заработает, — делаю iptables-save. Если сразу много надо, пишу одноразовый скрипт, с тем что сейчас нужно добавить/удалить. Файл в котором iptables-save сохраняет состояние стараюсь руками не править.

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

Это как раз совсем не проблема 🙂
Я привык еще со старых времен, ipfw, ipchains — так что профита от iptables-save так для себя и не увидел. iptables-restore грузит пачкой так что он быстрее, в этом его плюс, но у меня нигде нет 100500 правил, что бы из-за этого переживать. 🙂
А в целом конечно кому как нравиться и главное удобней.
ЗЫ Да и еще плюс iptables-save в том, что он стандартизирован в отличии от срипта где внезапно может оказаться -I или -D да и сами правила одной цепочки могут быть размазаны по всему скрипту, что у читающего его впервые может вызывать мягко говоря «неудобство». 🙂

Ух ты, помню было такое, помню ядро 2.0, с него и начинался у меня Линукс.

правила по одному это удобно но не всегда эффективно, Проблема iptables в том что нельзя воткнуть правило в нужное место, а проверка идет линейно. И вот как у меня в примере есть правило проверки на страну, там дофига ip и проверка займет какое-то время. Логично это правило поставить в начало. Но глупо делать проверку каждого установленного соединения по этому правилу.

Поэтому полезно сохранять, затем делать ревизию руками и ресторить.

Нет ну точно поседею. Хрень какая то творится. Сбрасываю правила iptables -F и моментально получаю дисконект по ssh и сервер не отвечает Че за хня ?

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

Проблема iptables в том что нельзя воткнуть правило в нужное место,

Можно, -I. Еще пользовательские цепочки, можно очень многое.

Блог Владимира ТюрюкОва

Рецепты решения проблем с компьютерами и программами

Сохранение-востановление настроек iptables — брандмауэра Linux

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

Иногда под словом iptables имеется в виду и сам межсетевой экран netfilter.

iptables-save — сохранение iptables в файл

ptables-restore — восстановление iptables из файла

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

Вот пример с сайта Kubuntu.ru как это может быть использовано для настройки перенаправления пакетов между сетевыми картами (фовардинга forvarding)

Сетевая карточка eth0 подключенная с помощью PPPoE к интернету и
eth1 подключенная к сети с адресом 192.168.0.1 к которой подключена сеть с адресами 192.168.0.* в которой нужно раздать интернет.

Для начала включим форвардинг:

Чтобы форвардинг автоматически включался при запуске системы

и добавляем в него строчку:

Затем включаем NAT

Где ppp0 название вашего интерфейса через который выходите в интернет.

Чтобы NAT работал после перезагрузки делаем следующее:

сохраняем настройки iptables в файл

И добавляем в конец файла:

эту строчку, для автоматической подгрузке правил

Так же в этот файл добавляем правила роутинга:

up route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1

up route add -net 0.0.0.0 netmask 255.255.255.255 dev eth0

Утилита iptables-save, как я уже упоминал, предназначена для сохранения текущего набора правил в файл, который затем может быть использован утилитой iptables-restore. Эта команда очень проста в использовании и имеет всего два аргумента.

iptables-save [-c] [-t table]

Первый аргумент -c (допустимо использовать более длинный вариант —counters) заставляет iptables-saveсохранить знчения счетчиков байт и пакетов. Это делает возможным рестарт брандмауэра без потери счетчиков, которые могут использоваться для подсчета статистики. По-умолчанию, при запуске без ключа , сохранение счетчиков не производится.

С помощью ключа -t (более длинный вариант —table) можно указать имя таблицы для сохранения. Если ключ -t не задан, то сохраняются все таблицы. Ниже приведен пример работы команды iptables-save в случае, когда набор не содержит ни одного правила.

Утилита iptables-restore используется для восстановления (загрузки) набора правил, который ранее был сохранен утилитой iptables-save. Набор правил утилита получает со стандартного ввода и не может загружать его из файла напрямую. Команда имеет следующий синтаксис:

iptables-restore [-c] [-n]

Ключ -c (более длинный вариант —counters ) заставляет восстанавливать значения счетчиков.

Указание ключа -n (более длинный вариант —noflush) сообщает iptables-restore о том, что правила должны быть добавлены к имеющимся. По-умолчанию утилита iptables-restore (без ключа -n) очистит содержимое таблиц и цепочек перед загрузкой нового набора правил.

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

cat /etc/iptables-save | iptables-restore -c

В результате выполнения этой команды содержимое файла /etc/iptables-save будет прочитано утилитой cat и перенаправленно на стандартный ввод утилиты iptables-restore. Можно было бы привести еще целый ряд команд, с помощью которых можно организовать загрузку набора правил из файла, но это выходит за рамки темы, поэтому оставлю читателю возможность самому найти более удобный для него вариант.

После исполнения этой команды набор правил должен загрузиться и все должно работать. Если это не так, то скорее всего вы допустили ошибку при наборе команды.

www.tvs-sm.ru