LINUX.ORG.RU
решено ФорумAdmin

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

 ,


0

1

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

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

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

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

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

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

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


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

USF
()

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

Гуй чтоль?

/etc/sysconfig/iptables-config

Там:

IPTABLES_SAVE_ON_xxxxxxxx

lvi ★★★★
()

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

Deleted
()
Ответ на: комментарий от lvi

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

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

luk911
() автор топика
Ответ на: комментарий от Deleted

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

luk911
() автор топика
Ответ на: комментарий от Deleted

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

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

luk911
() автор топика
Ответ на: комментарий от Deleted

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

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

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

luk911
() автор топика
Ответ на: комментарий от Deleted
➜  ~  yum -y install iptables-services
Загружены модули: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: mirror.imt-systems.com
 * epel: mirrors.n-ix.net
 * extras: mirror.imt-systems.com
 * ius: mirror.amsiohosting.net
 * updates: mirror.imt-systems.com
Пакет iptables-services-1.4.21-16.el7.x86_64 уже установлен, и это последняя версия.
Выполнять нечего
➜  ~  service iptables-services status
Redirecting to /bin/systemctl status  iptables-services.service
● iptables-services.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

luk911
() автор топика
Ответ на: комментарий от luk911

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

yum install iptables-services
iptables-save > /etc/sysconfig/iptables
systemctl enable iptables

systemctl disable firewalld
systemctl mask firewalld

Типа того.

Deleted
()
Ответ на: комментарий от luk911

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

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

lvi ★★★★
()
Ответ на: комментарий от Deleted

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

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

luk911
() автор топика
Ответ на: комментарий от luk911

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

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

Deleted
()
Последнее исправление: log4tmp (всего исправлений: 2)

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

echo "cat /etc/ipset/ipset.rules | ipset restore" >> /etc/rc.d/rc.local
echo "iptables-restore < /etc/sysconfig/iptables" >> /etc/rc.d/rc.local
echo "systemctl restart  iptables" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
luk911
() автор топика
Ответ на: комментарий от lvi

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

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

luk911
() автор топика

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

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

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

пошел править.

luk911
() автор топика
Ответ на: комментарий от luk911

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

iptables.service запускает

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

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

lvi ★★★★
()

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

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

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

cat << 'EOF' > /etc/ipset/ipset_start.sh
#!/bin/sh
ipset -N geoblock nethash
for IP in $(wget -O – http://www.ipdeny.com/ipblocks/data/countries/{cn,kr,pk,tw,sg,hk,pe}.zone)
do
ipset -A geoblock $IP
done
iptables -I INPUT -m set --match-set geoblock src -j REJECT --reject-with icmp-port-unreachable
EOF

то есть он создает таблицу 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

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

luk911
() автор топика
Ответ на: комментарий от luk911

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

anc ★★★★★
()
Ответ на: комментарий от anc

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

luk911
() автор топика
Ответ на: комментарий от anc

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

luk911
() автор топика
Ответ на: комментарий от luk911

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

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

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

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

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

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

lvi ★★★★
()
Последнее исправление: lvi (всего исправлений: 1)
Ответ на: комментарий от lvi

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

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

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

ipchains

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

lvi ★★★★
()
Ответ на: комментарий от lvi

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

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

luk911
() автор топика

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

luk911
() автор топика

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

luk911
() автор топика
Ответ на: комментарий от luk911

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

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

lvi ★★★★
()
Ответ на: комментарий от luk911

что изменилось то ?

Может политики по-умолчанию.

lvi ★★★★
()
Ответ на: комментарий от luk911

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

4.2 ключ -I для этого вообще и существует

anc ★★★★★
()
Ответ на: комментарий от luk911

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

Гыыы, сорри не удержался. Это грабли на которые очень многие наступали и я в том числе, у вас полиси по умолчанию запрещающие, типа -P DROP. Очистив правила у вас получилось все запрещено.
Кстати я наступив на эти грабли вернулся к старому доброму принципу, полиси ACCEPT и последними добавляю запрещающие правила, т.е. -P ACCEPT, а вот в конце скрипта -A INPUT -j DROP, -A FORWARD -j DROP

anc ★★★★★
()
Ответ на: комментарий от anc

политики по умолчанию ? а они где вообще ? Я так понимаю -F это очистить все правила. Не совсем понял где политики по умолчанию хранятся?

luk911
() автор топика
Ответ на: комментарий от anc

I вставляет в начало цепочки и вот вам ситуация, ipset не может стартовать одновременно с iptables, по крайней мере на centos 7 так и не понял как их подружить. Соотвествственно мы можем сохранить все правила исключая ipset. Они естественно содержат правила для эстеблешед и lo. А вот ipset и fail2ban будт вставлять скриптами с опцией -I и попадут эти правила в начало. Только вот нафига проверять по этим правилам каждый запрос на локалхост и установленные соединения ?

luk911
() автор топика
Ответ на: комментарий от luk911

То что вы видите в начале вывода iptables-save

:INPUT ACCEPT
:FORWARD ACCEPT
и т.д.
устанавливаются ключем -P например
iptbales -P INPUT -j REJECT

anc ★★★★★
()
Ответ на: комментарий от luk911

I вставляет в начало цепочки

-I вставит в начало если не указать номер правила. -I INPUT 2 .... вставит правило на второе место в цепочке INPUT
PS Посмотреть номера правил -L --line-numbers

ipset не может стартовать одновременно с iptables

Ну во первых как раз одновременно может и еще как, например дома у меня это вообще в одном скрипте в начале очищаются правила, удаляются цепочки как iptables так и ipset и в нем же потом создаются заново.
Во вторых для случая когда они разделены стартуйте ipset потом iptables в чем проблема?

anc ★★★★★
()
Ответ на: комментарий от luk911

Вообще-то это написано даже в iptables --help

  --insert  -I chain [rulenum]
				Insert in chain as rulenum (default 1=first)
про man уж и говорить нечего.

anc ★★★★★
()
Ответ на: комментарий от anc

когда много однотипных примеров, в ман вроде и смотреть лезть не охото вроде и так все очевидно :)

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

luk911
() автор топика
Ответ на: комментарий от anc

вот в манах про ipset save ничего толком не понятно и поидеи должна работать также как и с iptables save тоесть кудата сохранять по дефолту и их же подхватывать, ан нет в centos 7 вроде так не работает, может старенький ipset ?

luk911
() автор топика
Ответ на: комментарий от luk911

Точно также как и iptables-save, ipset с ключем --save выдает на stout
Узнал об этот только, что просто прочитав ман.

       -S, --save [setname]
              Save the given set, or all sets if none is given to stdout in  a
              format that --restore can read.

Где-то здесь я уже писал, у лично меня эти ...-save не прижились, я по старинке в скрипте прописываю.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
9 ноября 2017 г.

Вот рабочий вариант, для ленивых. Вешается на cron: * * * * * read -d. uptime < /proc/uptime; [ $uptime -gt 600 ] && [ $uptime -lt 650 ] && (/sbin/iptables-restore < /etc/sysconfig/iptables)

egideus
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.