URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 56628
[ Назад ]

Исходное сообщение
"/etc/netstart"

Отправлено Евгений , 20-Май-05 18:28 
У меня проблема в следующем. Когда удаленно запускаю на машине /etc/netstart для перезагрузки правил фаервола из файла, доступ к машине прекращается. Иду в серверную и вижу, что там только первые два правила остались и последнее!!!
Потом при запуске /etc/netstart локально все правила загружаются нормально.
У меня FreeBSD 5.4. На 4.11 такой фигни нету. В чем проблема?

Содержание

Сообщения в этом обсуждении
"/etc/netstart"
Отправлено dvsarc , 20-Май-05 18:39 
>У меня проблема в следующем. Когда удаленно запускаю на машине /etc/netstart для
>перезагрузки правил фаервола из файла, доступ к машине прекращается. Иду в
>серверную и вижу, что там только первые два правила остались и
>последнее!!!
>Потом при запуске /etc/netstart локально все правила загружаются нормально.
>У меня FreeBSD 5.4. На 4.11 такой фигни нету. В чем проблема?
>

sh /etc/netstart


"/etc/netstart"
Отправлено Евгений , 20-Май-05 20:15 

>sh /etc/netstart

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


"/etc/netstart"
Отправлено Brainbug , 24-Май-05 10:44 
>
>>sh /etc/netstart
>
>не помогло. Загружает первое правило и последнее. Пробовал переставить верхние правила в
>середну. После загрузки первого, файервол дальше правила не грузит.

I pravilno delajet.
Jesli pomostret skript zagruzki pravil, to mozno uvidet, 4to pervoje
4to delajetca - flush, posemu srazu obrivajetca svaz i vse. Pravila do
konca ne zagruzeni i ostajutca default (ACCEPT libo DENY).
Dla udalennoi perezegruzki pravil ispolzui at ili cron.
Zdes v uzhe obsuzdalos kak i 4to nado delat.


"/etc/netstart"
Отправлено RCOleg , 01-Июн-05 19:33 
>У меня FreeBSD 5.4. На 4.11 такой фигни нету. В чем проблема?
И на 4.11 такая трабла есть! Такого рода пост я уже поднимал,
http://www.opennet.me/openforum/vsluhforumID1/51206.html#32.
Мое решение:
Webmin - Задания cron etc /etc/rc.firewall - выполнить сейчас. Все правила применяются.



"/etc/netstart"
Отправлено AMDmi3 , 01-Июн-05 21:00 
>У меня проблема в следующем. Когда удаленно запускаю на машине /etc/netstart для
>перезагрузки правил фаервола из файла, доступ к машине прекращается. Иду в
>серверную и вижу, что там только первые два правила остались и
>последнее!!!
>Потом при запуске /etc/netstart локально все правила загружаются нормально.
>У меня FreeBSD 5.4. На 4.11 такой фигни нету. В чем проблема?

Уж сколько раз твердили миру...

nohup /etc/netstart
daemon /etc/netstart
screen /etc/netstart
at
cron


"/etc/netstart"
Отправлено Azazelo , 06-Июн-05 17:27 
>>У меня проблема в следующем. Когда удаленно запускаю на машине /etc/netstart для
>>перезагрузки правил фаервола из файла, доступ к машине прекращается. Иду в
>>серверную и вижу, что там только первые два правила остались и
>>последнее!!!
>>Потом при запуске /etc/netstart локально все правила загружаются нормально.
>>У меня FreeBSD 5.4. На 4.11 такой фигни нету. В чем проблема?
>
>Уж сколько раз твердили миру...
>
>nohup /etc/netstart
>daemon /etc/netstart
>screen /etc/netstart
>at
>cron


вот начало моего firewalla

#!/bin/sh
ipfw="/sbin/ipfw -q"
${ipfw} -f flush
.....

в таком случае работает без проблем , даже если запустить так .
#sh /etc/rc.fire  

а если такая шапка .
#!/bin/sh
ipfw="/sbin/ipfw -q"
/sbin/ipfw -f flush

то работает #sh /etc/rc.fire &

правда тогда ssh конект отвалится , но можно опять подключится .



"/etc/netstart"
Отправлено Azazelo , 06-Июн-05 17:31 
забыл добавить , по умолчанию стоит deny .

"/etc/netstart"
Отправлено AMDmi3 , 06-Июн-05 18:37 
>правда тогда ssh конект отвалится , но можно опять подключится .

Происходит примерно следующее:

1) Вы запускаете скрипт, меняющий правила firewalla, который, разумеется, первым делом делает flush. Т.к. стоит default to deny, любой траффик блокируется.
2) Скрипт работает дальше, добавляя правила по одному. Если нет опции -q, строчки с правилами правила пишутся в stdout.
3) sshd берет stdout скрипта и пытается отправить его вам по сети,
4) и, естественно, обламывается, потому что траффик блокируется. Ошибка считается фатальной и sshd считает сессию разорваной.
5) Вместе с сессией прибивается (сигналом HUP) все, что в ней запущено, т.е. наш скрипт.

Все, сессии нет, в firewall'e пара-тройка правил. Финита.

Как бороться:
1) Можно сделать так, чтобы ipfw не писал ничего в stdout, тогда sshd нечего будет отправлять клиенту во время работы скрипта, и период, когда траффик блокируется, мы успешно минуем. Это делается при помощи указания ipfw опции -q или так: ./my_cool_firewall_script >/dev/null 2>&1. Это будет работать, но все равно гарантии, что sshd не приспичит нам что-нибудь послать пока работает скрипт, нету, так что в один прекрасный миг можно жестоко наколоться.

2) Простейшие варианты:
- Запускать скрипт как nohup имя_скрипта. Наш скрипт будет игнорировать сигнал HUP, который пошлет ему sshd в случае обрыва сессии и отработает целиком. Вывод будет перенаправлен в файл nohup.out в текущем каталоге. Вывод можно будет посмотреть, правда файл можно забыть стереть. Со временем их может много накопиться в разных местах файловой системы :)
- Запускать скрипт как daemon -cf имя скрипта. Тогда скрипт демонизируется, т.е. отвалится от псевдотерминала, и уже не будет частью сессии, т.е. HUP ему не пошлется. Вывода вы не увидите.
- Запускать скрипт в screen. И вывод можно будет посмотреть и скрипт не прервется, и файлов не будет. Если запускать screen в обычном режиме (т.е. не detached), вывод все-таки пойдет через sshd и сессия может отвалиться.
- Запускать скрипт через at. Например at "now +1 min". Вывод придет вам в виде письма, обрыв сессии, разумеется, не страшен.
- Запускать скрипт через cron. Добавить задание как, например, ежеминутное (* * * * *), потом убрать. Дурацкий способ, тем не менее кто-то его использует.

3) Продвинутый способ.
Идеальным решеним будет иметь программу, меняющую правила ipfw, перенаправляя вывод в какой-либо файл (чтобы не беспокоить sshd и не рвать сессию), позаботившись о защите от SIGHUP (чтобы, если сессия все-таки порвется, скрипт доработал и правила не пропали). Кроме того, через некоторый промежуток времени, она должна восстановить предедущую конфигурацию firewall'а. Таким образом вы будете надежно защищены от ошибок при удаленной настройке ipfw. Пожно копнуть еще глубже и, например, останавливать (SIGSTOP/SIGCONT) sshd на время смены правил. Либо настроить ipfw на пропускание пакетов по умолчанию, а последним правилом добавлять deny all, хотя это не особо хороший способ. В общем, думайте. А я думаю кем-то все это уже написано :)


"/etc/netstart"
Отправлено секрет , 07-Июн-05 06:09 
не проще для фаера:
sh /etc/rc.firewall ?

у меня так (примерно):
#cat /etc/rc.firewall
ipfw -q flush
ipfw add pass all from any to any

по идее надо вставлять #!/bin/sh в начало (да ладно, и так пашет)

а netstart использую редко и только для перезагрузки интерфейсов (добавления новых)


"/etc/netstart"
Отправлено Alexey Leonchik , 07-Июн-05 08:46 
>не проще для фаера:
>sh /etc/rc.firewall ?

Поддерживаю. Тоже всегда пользовался sh /etc/rc.firewall

А /etc/netstart - когда надо было IP менять:

route default delete; /etc/netstart stop; /etc/netstart start

Соединение рвалось в обоих случаях, но разве это проблема?