LINUX.ORG.RU

Сообщения BigBan

 

Как сделать ограничение подключений с 1 ip: при новом соединение должно закрываться самое старое?

Есть сервер с Debian 6 x64, принимает по UDP соединения от пользователей, возникла необходимость ограничить кол-во соединений с одного IP.

Изрядно погуглив, я сделал в iptables -

iptables -A INPUT -p udp --dport наш_порт -m connlimit --connlimit-above 3 -j REJECT
получилось прaвило:
REJECT udp --  anywhere anywhere udp dpt:наш_порт #conn/32 > 3 reject-with icmp-port-unreachable
И всё бы вроде хорошо, но возникла проблема - при зависании клиента, обрыве связи и т.п. коннект ещё долгое время виден с сервера, соответственно подключиться заново при превышении лимита не выходит, было бы хорошо, что бы новое соединение происходило всегда, при этом, в случае наличия старых сверх лимита- они бы убивались.

Гугление не привело к результатам, надеюсь на Вашу помощь.

 , , ,

BigBan
()

Буфер вывода в Perl - как отключить? (вывод от wine)

На моем сервера (Debian squeeze 6 AMD64) под wine работают 2 серверных консольных приложения. Запускаю их обычно с SSH с помощью perl скрипта (совместил несколько образцов давным давно), что бы не зависеть от ssh сессий, и писать вывод в файл (фактически получается лог работы приложения). Но, как я понял, пишет в файл он какими-то кусками, причём если приложение аварийно завершилось, последний кусок не вписывается (а он-то как раз нужнее всех), а если приложение было закрыто совсем быстро, так выходной файл вообще оказывался пуст.

вот мой скрипт:

#!/usr/bin/perl
use POSIX qw(setsid);
chdir '*рабочая директория приложений*'       or die "Can't chdir to /: $!";
umask 0;
($sec, $min, $hour, $day, $month, $year) = (localtime)[0..5];
my $dt=($year+1900).'-'.($month+1).'-'.$day.'_'.$hour.':'.$min.':'.$sec.'.log';
open STDIN, '/dev/null'   or die "Can't read /dev/null: $!";
open STDOUT, '>out_'.$dt or die "Can't write to stdout: $!";
open STDERR, '>er_'.$dt or die "Can't write to stderr: $!";
defined(my $pid = fork)   or die "Can't fork: $!";
exit if $pid;
setsid                    or die "Can't start a new session: $!";
system("wine приложение1.exe &");
system("wine приложение2.exe &");
честно, я пытался найти решение в google - и нашёл 2 варианта -
1 - поставить $| = 1;
я пробовал ставить во все места кода, в конце концов вставил между всех строк:
#!/usr/bin/perl
use POSIX qw(setsid);
$| = 1;
chdir '*рабочая директория приложений*'       or die "Can't chdir to /: $!";
umask 0;

($sec, $min, $hour, $day, $month, $year) = (localtime)[0..5];
my $dt=($year+1900).'-'.($month+1).'-'.$day.'_'.$hour.':'.$min.':'.$sec.'.log';
$| = 1;
open STDIN, '/dev/null'   or die "Can't read /dev/null: $!";
$| = 1;
open STDOUT, '>out_'.$dt or die "Can't write to stdout: $!";
$| = 1;
open STDERR, '>er_'.$dt or die "Can't write to stderr: $!";
$| = 1;
defined(my $pid = fork)   or die "Can't fork: $!";
exit if $pid;
setsid                    or die "Can't start a new session: $!";
$| = 1;
system("wine приложение1.exe &");
$| = 1;
system("wine приложение2.exe &");
$| = 1;
и не помогает - всё в прежнем виде.
другой вариант -

если вас не пугают последствия, вообще запретите буферизацию вызовом метода autoflush из модулей IO: use IO::Handle; OUTPUT_HANDLE->autoflush(1);

увы тоже не подошёл (вставил с 2й строки):

Can't locate object method «autoflush» via package «OUTPUT_HANDLE» (perhaps you forgot to load «OUTPUT_HANDLE»?) at tstart.pl line 3.

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

 , ,

BigBan
()

Доступ к файлам с правами, в зависимости от расширения

Ситуация - на VPS (OpenVZ) с Debian 6 x86, под Wine работает один кривинький сервер, который хранит все свои данные в отдельных файлах, на каждого конечного юзера по 5-6 файлов с разными расширениями + несколько общих (логи, банлист и т.п.)

В административных целях часто бывает нужно смотреть/править файлы вручную. Сейчас только я (root) и абсолютно доверенный пользователь (с акка под которым сервер работает) имеем такой доступ к файлам (по sftp). Остальным членам администрации достаточно оставить доступ на чтение к файлам с одним расширением, доступ на чтение и запись к другим, и полностью закрыть к остальным. Ввиду той причины, что проект некоммерческий, компетентность и образованность администрации в тех.плане не очень, потому и нужны ограничения (и для некоторой сохранности данных). Файлы соответственно лежат внутри домашней дир. акка wine-сервера, и генерируются им же.

Я пробовал сделать доступ по ftp- используя sftpd, но этот вариант сразу отпал - на каждый файловый поток он создавал новый процесс, а убивал их лишь со временем, т.о. быстро забивая все ~120 Мб свободной оперативы.

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

Очень надеюсь на Вашу помощь.

p.s. в будущем планирую (не без местной помощи) портировать сервер под *nix и базу вести нормальную. но.. проект некоммерческий, и до ещё этого очень далеко..

BigBan
()

Оценка загрузки сетевых интерфейсов

Имеется VPS сервер с Debian 6 x86, работающий в OpenVZ
Мне необходимо следить за тем, насколько загружен у VPS канал во внешний мир. Т.е. получить текущую информацию вроде используется 5Mb/s из 10 и т.п.
В идеале - более детализированную - по каким процессам, портам, протоколам и направлениям идет соответствующий трафик.
Гуглил много, искал решения.
нашел -
http://ruunix.ru/1274-smotrim-zagruzku-seti-cherez-mrtg.html
проблема возникает на этапе конфигурации-

#cfgmaker --global 'WorkDir: /usr/local/apache/htdocs/stat/mrtg/' public@m254 \
 --output /usr/local/mrtg2/etc/m254.cfg
как и рекомендовано, вместо m254 пишу IP сервера. получаю:
SNMP Error:
no response received
SNMPv1_Session (remote host: "<servip>" [<servip>].161)
                  community: "public"
                 request ID: 461941440
                PDU bufsize: 8000 bytes
                    timeout: 2s
                    retries: 5
                    backoff: 1)
 at /usr/share/perl5/SNMP_util.pm line 629
SNMPWALK Problem for 1.3.6.1.2.1.1 on public@<servip>::::::v4only
 at /usr/bin/cfgmaker line 961
WARNING: Skipping public@<servip>: as no info could be retrieved

ERROR: creating /usr/local/mrtg2/etc/<servip>.cfg: Нет такого файла или каталога
у меня идей нет.
было еще испробовано -
tcpstat - не подходит, т.к. не видит UDP
iftop - смотрит трафик по хостам. и похоже, тоже TCP, ибо мой IP (запущенна консоль) был на 2-м месте (при том, что имеется не менее 20-40 UDP соединений по 1-2 Кб/с)

очень надеюсь на Вашу помощь, т.к. необходимо рассчитать максимально число клиентских подключений для предотвращения отказа от обслуживая и прочих неприятностей.

BigBan
()

Как запустить удаленое X-приложение в Debian6 на OpenVZ на локальный x-сервер?

Имеется Debian squeeze 6 x86, работающий на VPS от REG.ru
Систему, что я получил, изначально была совсем лысой - не было даже nano. Это был готовый образ от reg.ru
есть необходимость запуска X-приложений.
Стоит отметить, для тестов я так же установил Debian 6 x86 под VMWare Workstation 7.

С виртуальной тестовой машиной удалось на ура соединиться из хост-ос WinXP Pro SP3 Corporatie x86, и с использованием PuTTy и Xming запускать X-приложения, с выводом в хост-ос.
Использованный способ полностью повторяет описанный в FAQ.
C VPS-сервером так получается.
Из тестовой машины (по второму способу из FAQ), получаются в точности такие же ошибки.

Терминальное SSH соединение устанавливается нормально, можно управлять сервером, однако при попытке запуска X приложения появляется ошибка -

(<procssename>:<procsid>): Gtk-WARNING **: cannot open display:
или
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
По рекомендации последнего проверил DISPLAY
DISPLAY оказывается не установленной.
Решил сравнить локальные переменные с тестовой машиной, кроме наличия DISPLAY=«localhost:11.0» есть ещё XDG_SESSION_COOKIE=«6630f2f13f18c37f75774e3300000007-1314987756.687847-1438732646» , возможно она тоже нужна.
Ручная установка DISPLAY=«localhost:0.0» или подобных значений не помогло.

Очень надеюсь на помощь, т.к. в linux я новичок, можно сказать на неделе только взялся.

BigBan
()

RSS подписка на новые темы