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

Исходное сообщение
"интерфейс добавления правил в ipfw"

Отправлено Tonya_aka_Slim , 12-Авг-08 17:27 
доброго времени!

Подскажите пожалуйста каким образом можно прикрутить к ipfw простейший web-интерфейс удаленого добавления правил?

Иными словами, человеку, не разбирающемуся в Unix и не имеющему доступ к консоли трубется дать инструмент запрета определенных внешних ресурсов (предположительно, путем добавления правил фаера, либо есть другие соображения?)
БЫть может есть готовые решения? я не нашел

зараннее спасибо!


Содержание

Сообщения в этом обсуждении
"интерфейс добавления правил в ipfw"
Отправлено Pahanivo , 12-Авг-08 18:07 
>Иными словами, человеку, не разбирающемуся в Unix и не имеющему доступ к консоли трубется дать инструмент запрета определенных внешних ресурсов

это тоже самое что дать макаке в зоопарке гранату ))


"интерфейс добавления правил в ipfw"
Отправлено hate , 12-Авг-08 18:41 

>Иными словами, человеку, не разбирающемуся в Unix...

... нехрен в нем и ковыряться...


"интерфейс добавления правил в ipfw"
Отправлено Tonya_aka_Slim , 12-Авг-08 19:10 

>
> ... нехрен в нем и ковыряться...
>

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


"интерфейс добавления правил в ipfw"
Отправлено Pahanivo , 12-Авг-08 20:09 
ты видимо сам в никсах неселен ибо несеш чушь, и вообще путаешь понятия ipfw,ip,site.
Начнем с того что речь о разных уровнях модели ISO/OSI.



"интерфейс добавления правил в ipfw"
Отправлено Tonya_aka_Slim , 14-Авг-08 16:19 
>ты видимо сам в никсах неселен ибо несеш чушь, и вообще путаешь
>понятия ipfw,ip,site.
>Начнем с того что речь о разных уровнях модели ISO/OSI.

Действительно не силен, и тем не менее спасибо за проявленный интерес к теме.



"интерфейс добавления правил в ipfw"
Отправлено Vitaly_loki , 12-Авг-08 21:08 
>[оверквотинг удален]
>
>Подскажите пожалуйста каким образом можно прикрутить к ipfw простейший web-интерфейс удаленого добавления
>правил?
>
>Иными словами, человеку, не разбирающемуся в Unix и не имеющему доступ к
>консоли трубется дать инструмент запрета определенных внешних ресурсов (предположительно, путем добавления
>правил фаера, либо есть другие соображения?)
>БЫть может есть готовые решения? я не нашел
>
>зараннее спасибо!

Не знаю насчет готовых "решений", но написать простенький web-интерфейс на самом деле не сложно: например, используя Perl + CGI, затем на этот скрипт установать атрибут (+s) чтоб скрипты от имени root выполнялись


"интерфейс добавления правил в ipfw"
Отправлено angra , 13-Авг-08 07:10 
>установать атрибут (+s) чтоб скрипты от имени root выполнялись

Также поставить пользователя root и установить perl-suid, который еще с perl 5.8 не рекомендуется к использованию.



"интерфейс добавления правил в ipfw"
Отправлено Vitaly_loki , 13-Авг-08 09:51 
>>установать атрибут (+s) чтоб скрипты от имени root выполнялись
>
>Также поставить пользователя root и установить perl-suid, который еще с perl 5.8
>не рекомендуется к использованию.

ну это да, согласен


"интерфейс добавления правил в ipfw"
Отправлено mr_gfd , 13-Авг-08 00:48 
Если все касательно только http то по пунктам:

поставить squid;
настоить в нем поддержку режима прозрачного прокси;
путем ipfw forward завернуть на него весь http трафик;
поставить webmin;

(завести в нем пользователя. кторому дать доступ только на модуль сквида;
1 раз показать как добавлять ACL.) или
(средствами sudo дать возможность сказать ee /usr/local/etc/squid/squid.conf и /usr/local/etc/rc.d/squid reload)

все.


"интерфейс добавления правил в ipfw"
Отправлено Никита , 13-Авг-08 20:42 
Поправлю вышеотписавшегося участника ...

Только webmin ставить нафик. Есть ход проще

Собственно после того как сквид поставлен к нему либо ACL`ом либо редиректором (в зависимости от обьемов), если порядка сотни сайтов тогда можно без редиректора^ прикручивается список сайтов. Что сквид, что редиректо этот список может брать из файла ... так что =) Далее ставится апач, в нем заводится папка, на которую прикручивается авторизация (бейсик авторизация вполне пойдет, настраивается просто да и вполне оправдана) и в эту папку ложится перловый скрипт, который добавляет это все дело в файл, который собственно и прицеплен в качестве файла для ACL. Я лично взял скрипт гостевой книги и переписал ... если нужно - отпишитесь кому, кто в перле вообще не силен - пришлю, хотя его самому написать - час работы. Ну и далее в крон /path_to_squid -k reconfigure. Время зададите по вкусу =) Учтите что во время перечитывания конфигов он перечитывает ацл`ы тоже. Так что это обязательно. Вот и все дела =) Главное чаще раз в 15 минут не ставте реконфигурение сквида.


"интерфейс добавления правил в ipfw"
Отправлено angra , 14-Авг-08 00:08 
Фигасе час работы. Да там шелл cgi скриптом на пару строчек можно обойтись :)



"интерфейс добавления правил в ipfw"
Отправлено Tonya_aka_Slim , 14-Авг-08 16:38 
>[оверквотинг удален]
>настраивается просто да и вполне оправдана) и в эту папку ложится
>перловый скрипт, который добавляет это все дело в файл, который собственно
>и прицеплен в качестве файла для ACL. Я лично взял скрипт
>гостевой книги и переписал ... если нужно - отпишитесь кому, кто
>в перле вообще не силен - пришлю, хотя его самому написать
>- час работы. Ну и далее в крон /path_to_squid -k reconfigure.
>Время зададите по вкусу =) Учтите что во время перечитывания конфигов
>он перечитывает ацл`ы тоже. Так что это обязательно. Вот и все
>дела =) Главное чаще раз в 15 минут не ставте реконфигурение
>сквида.

спасибо большое (!) за столь подробное описние. довольно интересен метод- попробую его. Если не сложно пришли свой скрипт ( с перлом знакомлюсь). А вообще хотелось бы обойтись без прокси.


"интерфейс добавления правил в ipfw"
Отправлено Никита , 14-Авг-08 19:46 
>Если не сложно пришли свой скрипт ( с перлом знакомлюсь). А
>вообще хотелось бы обойтись без прокси.

Чего-то с первого раза не отправилось сообщение ... дубль 2

А почему бы и нет? Никто ведь не заставляет включать кэш. И никто не заставляет прикручивать авторизацию если таковая не требуется. Зато можно поиметь бонус в виде лоад-балансинга. Настроить delay pools и поставить ограничения по скорости на закачку больших файлов. =) Делается очень просто.

Собственно сам скрипт:

#!/usr/bin/perl
$file = "disabled.users";
$html_file = "add.cgi";
print "Content-Type: text/html\n\n";
print "Users in access-denied list:\n";
use CGI qw (:standard);
$q=new CGI ();
$action = $q->param (action);
&post if ($action eq 'post');
&view;
sub post {
$nick = $q->param (nick);
$to_base = "$nick\n";
open (OUT, ">>$file");
print OUT $to_base;
close (OUT);
}
sub view {
open (BASE, "<$file");
@base = <BASE>;
close (BASE);

{
print "@base";
}
print "
<form action=$html_file method=get>
Add user to acces denied list: <input name=nick>
<input name=action value=post type=hidden>
<input type=submit value=Add>
</form>
";
}

Помещается в файл (у меня add.cgi, если будете другое имя использовать - поправте переменную $html_file)

По скрипту
1) Скрипт был найден в гугле, это БЫЛА примитивнейшая гостевая книга, которая была облегчена под мои нужды. Если автор узнает свое творение - спасибо ему огромное.

2) Он делает 2 действия, выводит существующие записи, и есть форма для добавления новых. Удалять через него нельзя. (В моем случае это не нужно, у меня удалением занимается крон и сш-скрипт раз в месяц, а пользуюсь я им исключительно для добавления "охреневших" пользователей в deny-лист.

3) На апач авторизация обязательна потому как за пару часов этим скриптом можно забить весь раздел ... это не есть гут.

Успехов =)


"интерфейс добавления правил в ipfw"
Отправлено Vitaly_loki , 14-Авг-08 21:46 
>[оверквотинг удален]
>2) Он делает 2 действия, выводит существующие записи, и есть форма для
>добавления новых. Удалять через него нельзя. (В моем случае это не
>нужно, у меня удалением занимается крон и сш-скрипт раз в месяц,
>а пользуюсь я им исключительно для добавления "охреневших" пользователей в deny-лист.
>
>
>3) На апач авторизация обязательна потому как за пару часов этим скриптом
>можно забить весь раздел ... это не есть гут.
>
>Успехов =)

Ну вот, я же говорил :) Perl + CGI :) Можно еще поставить модуль DBI, DBD-mysql и хранить не в файле, а в базе данных список правила ipfw


"интерфейс добавления правил в ipfw"
Отправлено Bani , 13-Сен-08 17:17 
>[оверквотинг удален]
>>
>>
>>3) На апач авторизация обязательна потому как за пару часов этим скриптом
>>можно забить весь раздел ... это не есть гут.
>>
>>Успехов =)
>
>Ну вот, я же говорил :) Perl + CGI :) Можно еще
>поставить модуль DBI, DBD-mysql и хранить не в файле, а в
>базе данных список правила ipfw

попробуй WebGui m0n0wall или PfSense


"интерфейс добавления правил в ipfw"
Отправлено Vasily Jakunin , 15-Сен-08 13:19 
>Ну вот, я же говорил :) Perl + CGI :) Можно еще
>поставить модуль DBI, DBD-mysql и хранить не в файле, а в
>базе данных список правила ipfw

А подробнее можно? Каким образом заставить ipfw брать правила из MySQL? Я весь инет перерыл :( но так и не нашел примеров реализации этого... :(


"интерфейс добавления правил в ipfw"
Отправлено angra , 15-Сен-08 14:41 
Похоже вы не так поняли. С базой работать должен перловый скрипт и на основе данных генерировать правила для ipfw.

"интерфейс добавления правил в ipfw"
Отправлено Vasily Jakunin , 15-Сен-08 14:44 
>Похоже вы не так поняли. С базой работать должен перловый скрипт и
>на основе данных генерировать правила для ipfw.

Нет! Понял я правильно!
Написал же человек:

"Ну вот, я же говорил :) Perl + CGI :) Можно еще поставить модуль DBI, DBD-mysql и хранить не в файле, а в базе данных список правила ipfw"

Если так, то правила лежат не в файле rc.firewall а как раз в базе MySQL, только как такое реализовать, я так и не понял. В манах по IPFW ни чего про это... :(


"интерфейс добавления правил в ipfw"
Отправлено angra , 15-Сен-08 15:06 
мда, безнадежен :(

"интерфейс добавления правил в ipfw"
Отправлено Vasily Jakunin , 15-Сен-08 15:54 
>мда, безнадежен :(

Можно и не хамить! :)

Понятно что к MySQL-у обращается не IPFW а скрипт при чем на чем он, не суть важна, мне интересен механизм... допустим, я написал программу на Delphi через ODBC подключил MySQL и запихиваю себе в базу приспокойно правила для IPFW, дальше некий скриптик через крон обращается к базе забирает от туда все что я там накропал и пихает это все IPFW, вот вопрос собственно в том, каким образом он это пихает... ведь надо:

1. Либо заново постоянно генирировать файл правил, либо как-то дописывать в конец файла то, что изменилось.

2. Перезапускать IPFW после изменения правил.

Так? :)


"интерфейс добавления правил в ipfw"
Отправлено angra , 15-Сен-08 20:33 
что мешает вызывать из скрипта консольный ipfw и при помощи него добавлять правила?



"интерфейс добавления правил в ipfw"
Отправлено Vasily Jakunin , 16-Сен-08 10:09 
>что мешает вызывать из скрипта консольный ipfw и при помощи него добавлять
>правила?

Мешает то, что добавлять правила должен не один человек, а допустим несколько и проблема в том, что консольный набор осилит только тот, кто это все делал, остальные в этом ни как. То есть, грубо горя есть 2 администратора, которые от Unix далеки, но вполне могут выполнять эту работу. Пускать на сам сервер под root, как-то не хотелось бы. По этому и такие вот извращения. :)

Проблема еще в том, что в Perl я как-то не силен. Ну не нравится мне его синтаксис...
Накропал на PHP скриптик. Работает. Но, придется его руками запускать после добавления правил в БД.

<?php

$filename = '/etc/rc.firewall';
$conn = mysql_connect("localhost", "user", "password");

if (!$conn)
{
echo "Unable to connect to DB: " . mysql_error();
exit;
}

if (!mysql_select_db("network"))
{
echo "Unable to select table: " . mysql_error();
exit;
}

$sql = "SELECT * FROM ipfw";
$result = mysql_query($sql);

if (!$result)
{
echo "Error run ($sql) from DB: " . mysql_error();
exit;
}

if (mysql_num_rows($result) == 0)
{
echo "No record in table!";
exit;
}

if (is_writable($filename))
{

if (!$handle = fopen($filename, 'w+'))
{
echo "Error open ($filename)";
exit;
}

while ($row = mysql_fetch_assoc($result))
{
$somecontent = $row["rule"];
if (fwrite($handle, $somecontent. "\n") === FALSE) {
        echo "No write to ($filename)";
        exit;
}
$somecontent = '';
}
fclose($handle);

}
    mysql_free_result($result);
?>

Вот, как-то так.


"интерфейс добавления правил в ipfw"
Отправлено frol , 15-Авг-12 05:06 
>[оверквотинг удален]
> ($filename)";
>         exit;
>  }
>  $somecontent = '';
>  }
>  fclose($handle);
> }
>     mysql_free_result($result);
> ?>
> Вот, как-то так.

а нафига это БАЗОЙ впихивать в файл???