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

скрипт iptables, пересчет конфигурации без рестарта сервиса

 


1

1

Всем доброго времени суток. Помогите решить маленькую проблему. Есть скрипт настройки правил iptables, в качестве примера приведу его некоторые части:

#!/bin/bash
#Подключаем необходимые модули#
#Включить перенаправление пакетов через ядро
echo 1 > /proc/sys/net/ipv4/ip_forward

#Задаем настройки по умолчанию#
#Очищаем все правила в таблицах filter, nat и mangle
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
#Удаляем все пользовательские цепочки в таблицах filter, nat и mangle
iptables -t filter -X
iptables -t nat -X
iptables -t mangle -X
#Задаем политики по умолчанию
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT

#Разрешаем прохождение любого трафика по интерфейсу обратной петли
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#Разрешим передачу трафика уже открытым соединениям
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#Открываем icmp
iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 12 -j ACCEPT
#Открываем DNS запросы
iptables -A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
#Открываем 80 порт для апача
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

#Прокидываем RDP
for IP in `cat /root/scripts/rdp`;
do
        PROV=`grep -o "#" <<<"$IP" | wc -l`;
        if [ $PROV -eq 0 ]
        then
        iptables -t nat -A PREROUTING -s $IP -d 77.77.77.77 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.1.100:3389
        fi;
done

#НАТ
iptables -t nat -A POSTROUTING -s 192.168.1.101 -j SNAT --to-source 77.77.77.77
iptables -t nat -A POSTROUTING -s 192.168.1.102 -j SNAT --to-source 77.77.77.77

#Применяем правила
#переписываем iptables
iptables-save > /etc/sysconfig/iptables

#перезапускаем сервис iptables
service iptables restart

Команда iptables-save > /etc/sysconfig/iptables позволяет как бы пересчитать конфигурацию фаервола без перезапуска службы, то есть все коннекты которые установлены и разрешены не будут сброшены при выполнении этой команды.

Но! При перезагрузки самого шлюза, в iptables нет правил, если не использовать в скрипте команду service iptables restart

Так вот вопрос: что же такое и куда прописать чтобы прописывать новые правила без перезапуска самого сервиса iptables и быть уверенным что если шлюз перезагрузится то все что в скрипте прописано применялась?

Я ничего не понял.

dada ★★★★★
()

iptables-restore < /etc/sysconfig/iptables

sfi
()

Учи матчасть. Правила применяются непосредственно после выполнения команды iptables - одно за другим. Хочешь добавить чего - пишешь iptables -t blablabla... и всё. Правило уже в силе до следующего ребута. iptables-save для сохранения правил в файл и применения их после ребута машины.

aol ★★★★★
()

В /etc/sysctl.conf меняешь строчку «net.ipv4.ip_forward = 0» на «net.ipv4.ip_forward = 1». Запускаешь эту порнографию, затем делаешь следующее:

sysctl -p
iptables-save > /etc/sysconfig/iptables
chkconfig --level 345 iptables on
service iptables start
и стираешь это рукоблудие. Всё.

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

хорошо, тогда где прописать iptables-restore для того что бы после ребута шлюз подхватил ранее сохраненные правила?

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

В /etc/sysctl.conf стоит net.ipv4.ip_forward = 1

в конфиге приведенном в топе уберу это рукоблудие, спасибо.

сервис iptables уже прописан в автозагрузку

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

а зачем тебе этот скрипт??? при запуске iptables берет правила из /etc/init.d/iptables, соотвественно все скрипты уже есть, чтобы все настроить, просто настраиваешь работающий iptables, потом делаешь iptables-save >> /etc/init.d/iptables и все. Если в настройках покопатся можно сделать автосохранение правил и вообще не парится.

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

я думаю что скрипт удобней, например в той части которую я не описал идет отправка на почту о том что сервис Iptables был перезапущен, или есть такая конструкция как так называемый «белый лист» с ip адресами перечисленными в отдельном файле, к тому же в скрипте можно коменты писать... короче удобней

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

Скрипт не удобнее. Это вообще крайне дебильная идея, дело в том что другие службы, например ppp имеют свой «взгляд» скрипт на то как должен быть настроен iptables, в результате после того как каждый демон внесет свой «вклад» в работу iptables нихрена не работает.

white_ghost
()
Ответ на: комментарий от fordiego

я думаю что скрипт удобней,

Тогда chkconfig iptables off, и тот скрипт, который init.d/iptables, никогда не используешь. Про iptables-save/iptables-restore забываешь тоже. Тут или, или.

к тому же в скрипте можно коменты писать...

-m comment --comment «bla-bla-bla»

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

Скрипт не удобнее.

Не всегда.

например ppp имеют свой «взгляд» скрипт

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

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

Тогда chkconfig iptables off, и тот скрипт, который init.d/iptables, никогда не используешь. Про iptables-save/iptables-restore забываешь тоже. Тут или, или

то есть правильно ли я понимаю что я выключу сервис iptables и буду просто применять этот скрипт при загрузки шлюза, то есть вставлю ссылку на него куда-нибудь в /etc/rc.local

но как все таки быть с применением правил без рестарта сервиса?

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

но как все таки быть с применением правил без рестарта сервиса?

На самом деле, сервиса iptables не существует. :-)
Для понимания достаточно просто посмотреть, что же делает init.d/iptables.

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

выкидываем это из конфига

#Применяем правила
#переписываем iptables
iptables-save > /etc/sysconfig/iptables

#перезапускаем сервис iptables
service iptables restart

вставляем это

#Применяем правила
service iptables reload

теперь осталось проверить после ребута шлюза правила останутся или нет

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

в топике муть написал

Команда iptables-save > /etc/sysconfig/iptables позволяет как бы пересчитать конфигурацию фаервола без перезапуска службы, то есть все коннекты которые установлены и разрешены не будут сброшены при выполнении этой команды.

это конечно чушь :)

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

не понял куда смотреть

$ locate init.d/iptables
/etc/rc.d/init.d/iptables

Это именно то, что запускается командой service. То есть,
service iptables restart ровно то же самое, что и
/etc/rc.d/init.d/iptables restart

У меня не Centos, так что расположение, с небольшой степенью вероятности, может чуть отличаться.

И главное уже сказано. Кстати, сейчас заметил, что и white_ghost тоже говорил про то. Забудь про init.d/iptables. И про save, и про start, и про restart, если свой скрипт используешь. И не сервис это никакой, на деле.

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