Автор Тема: Грешка в скрипт  (Прочетена 1496 пъти)

KPETEH

  • Напреднали
  • *****
  • Публикации: 584
    • Профил
Грешка в скрипт
« -: Feb 21, 2007, 19:38 »
Ето го и скрипта,който съм преработил за slackware:
Примерен код

#!/usr/bin/perl -w
use Sys::Syslog;

$max=10; # maximum permited atempts
$watchfile=         '/var/log/messages';
$iptables=          '/usr/sbin/iptables';
$iptables_save=     '/usr/sbin/iptables-save';
$iptables_restore=  '/usr/sbin/iptables-restore';
$cfgfile=           '/etc/ipkungfu/custom.conf';


open(LFILE, "<$watchfile");

%tries=();      # number of attempts per ip
%blocked=();    # already blocked ip's

# restore iptables configuration
`$iptables_restore < $cfgfile`;

# load currently blocked ips from iptable list
open(IPTPIPE, "$iptables -L -v -n|");
$blockChain=0;
while (<IPTPIPE>){
  $blockChain=1 if (/^Chain block \(\d+ references\)$/);
  next unless $blockChain;
  last if (/^$/ );
  $blocked{$1}=1 if (/(\d+\.\d+\.\d+\.\d+)/);
}
close IPTPIPE;

$blk_ips=join(", ",keys(%blocked));
syslog('warning',"sshwatch.pl started. currently blocked ip's are: $blk_ips");

# watch the messages file
while (1) {
  for ($curpos = tell(LFILE); $_ = <LFILE>; $curpos = tell(LFILE)) {
    if (/sshd\[\d+\]: Failed password for .+ from \D+(\d+\.\d+\.\d+\.\d+)/) {
      $ip=$1;
      next if defined($blocked{$ip});
      $tries{$ip}+=1;
      if ($tries{$ip} eq $max){
         `$iptables -I block -s $ip -j DROP; $iptables_save > $cfgfile`;
         $blocked{$ip}=1;
         syslog('warning', "IP $ip has been blocked !");
      }
    }
  }
  sleep 1;
  seek(LFILE, $curpos, 0);
}

След изпълнение на командата
# perl sshwatch.pl
iptables-restore: line 20 failed
не мога да разбера къде е грешката при положение че
съществува /usr/sbin/iptables-restore ?
Активен

Най-добрата страна на алчността е способността и да стопява коефициента на интелигентност дори на най-умния човек.

PERMANENT

  • Напреднали
  • *****
  • Публикации: 94
    • Профил
Грешка в скрипт
« Отговор #1 -: Feb 21, 2007, 20:05 »
аз съм със slackware и като изпълня iptables-restore програмата си свършва работата но не се затвяря просто си седи така.Виж как при теб стоят нещата
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Грешка в скрипт
« Отговор #2 -: Feb 21, 2007, 20:14 »
А я пробвай да замениш
`$iptables_restore < $cfgfile`;
с
printf FILE_OUT "$iptables_restore < $cfgfile \n";
и
`$iptables -I block -s $ip -j DROP; $iptables_save > $cfgfile`;
с
printf FILE_OUT "$iptables -I block -s $ip -j DROP \n";
printf FILE_OUT "$iptables_save > $cfgfile \n";
да видим какво ще стане.

edit: Възможно е и PERMANENT да е прав. Да се наложи в скрипта да зададеш край на изпълнението.



Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

KPETEH

  • Напреднали
  • *****
  • Публикации: 584
    • Профил
Грешка в скрипт
« Отговор #3 -: Feb 21, 2007, 20:24 »
Това че така си стои е ясно но идеята е че ми дава грешката :
iptables-restore: line 20 failed
Активен

Най-добрата страна на алчността е способността и да стопява коефициента на интелигентност дори на най-умния човек.

KPETEH

  • Напреднали
  • *****
  • Публикации: 584
    • Профил
Грешка в скрипт
« Отговор #4 -: Feb 21, 2007, 20:31 »
Замених ги както ми каза и се получава грешка
printf() on unopened filehandle FILE_OUT at sshwatch.pl line 18.
Активен

Най-добрата страна на алчността е способността и да стопява коефициента на интелигентност дори на най-умния човек.

PERMANENT

  • Напреднали
  • *****
  • Публикации: 94
    • Профил
Грешка в скрипт
« Отговор #5 -: Feb 21, 2007, 21:17 »
printf не преобразува ли подадените му числа в различни броини системи
пример
printf "%x",10 което изписва a тоест 0xa

edit
сетих се че при php-то ставаше нещо подобно.просто там като не може да се изпълни някаква операция за определено време(дефалта беше 30 секунди) изкарваше едно хубаво ерорче а до колкото съм чувал php-то и perl-а си приличат в доста отношения



Активен

KPETEH

  • Напреднали
  • *****
  • Публикации: 584
    • Профил
Грешка в скрипт
« Отговор #6 -: Feb 21, 2007, 21:34 »
Добре не знам аз този скрипт съм го взел от оригиналния
и нищо не разбирам от perl,хайде някой с различна дистрибуция от slackware да пробва дали ще работи,но естествено с променени пътища за iptables.
Активен

Най-добрата страна на алчността е способността и да стопява коефициента на интелигентност дори на най-умния човек.

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Грешка в скрипт
« Отговор #7 -: Feb 21, 2007, 21:35 »
':crazy:' Съжалявам, разсеях се и пиша глупости. printf се използва за извеждане на текст. Както echo в bash например. Сега ще разгледам нещата по-спокойно и, ако стигна до отговор, ще го постна тук.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти