The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Освоение скриптописания под shell, !*! Vadim_nsk, 11-Дек-09, 06:23  [смотреть все]
#!/bin/sh
cat /var/log/auth.log | grep "Invalid user" | expand | tr -s ' ' | cut -d' ' -f8 -f10 > /tmp/block_users_ip_list.txt
cat /var/log/auth.log | grep "authentication error" | expand | tr -s ' ' | cut -d' ' -f13 -f15 >> /tmp/block_users_ip_list
.txt
cat /tmp/block_users_ip_list.txt | cut -d' ' -f1 | sort | uniq -c > /tmp/block_users_list.txt
cat /tmp/block_users_ip_list.txt | cut -d' ' -f2 | sort | uniq -c | sort -n > /tmp/block_ip_list.txt
rm -rf /tmp/block1.txt
cat /tmp/block_users_list.txt /tmp/block_ip_list.txt | while read cnt text; do
    if [ $cnt -ge 3 ]; then
        cat /tmp/block_users_ip_list.txt | grep $text | cut -d' ' -f2 | while read ip; do
            case $ip in
                *[!01-9.]*|"");;
                *) echo $ip >> /tmp/block1.txt;;
            esac
        done
    fi
done
cat /tmp/block1.txt /etc/block_list_ip.txt | sort -n | uniq > /tmp/block2.txt
cp /tmp/block2.txt /etc/block_list_ip.txt

Задача простая. Например, раз в час, анализируем файл /var/log/auth.log, ищем в нем подстроки "Invalid user" и "authentication error", создаем список имен и адресов. и если, имя или адрес встретились более 3-х раз, пишем адрес в файл /etc/block_list_ip.txt.
Но уж сильно топорно и ресурсоемко у меня все это получилось...
Попытался переписать:
bunzip2 -kcf /var/log/auth.log.0.bz2 | cat - /var/log/auth.log | grep "Invalid user\|authentication error" | while read str; do
    echo $str > /tmp/block1.txt
done

И на этом застрял...
Задача: в найденных строках выделить слово, следующее за "user" и слово, следующее за "from". Т.е. username и ip-address. Далее, хочу пока сформировать также два файла или массива имен и адресов. подсчитать количество повторений и вторым проходом уже вычленить адреса. Может кто подскажет как выделить слово в строке, следующее за искомым? При этом, чтобы это работало в потоке.
В идеале конечно, хотелось бы сформировать файл из двух столбцов: "username ip-addreess". И считать повторы по первому и второму столбцу. Но на это у меня нет даже идей...
Моя задача сейчас, изучить получше работу с shell, потом уже перейду к Perl. Поэтому примеры на Perl это хорошо, но не то, что нужно мне сейчас...
  • Освоение скриптописания под shell, !*! phpcoder, 07:08 , 11-Дек-09 (1)
    • Освоение скриптописания под shell, !*! Vadim_nsk, 08:06 , 11-Дек-09 (2)
      >>Задача простая.
      >Я бы её на awk сделал. (К сожалению, у меня нет под
      >рукой файла с тестовыми данными, чтобы написать и опробовать такой скрипт.)

      Dec 10 05:43:08 gw sshd[1157]: error: PAM: authentication error for illegal user acosta from 92.79.128.167
      Dec 10 06:05:31 gw sshd[2005]: Invalid user oracle from 218.76.193.140
      Dec 10 06:05:35 gw sshd[2007]: Invalid user test from 218.76.193.140
      Dec 10 06:05:38 gw sshd[2011]: Invalid user test from 218.76.193.140
      Dec 10 06:05:42 gw sshd[2013]: Invalid user test from 218.76.193.140
      Dec 10 06:05:45 gw sshd[2015]: Invalid user user from 218.76.193.140
      Dec 10 06:05:49 gw sshd[2017]: Invalid user apache from 218.76.193.140
      Dec 10 06:17:15 gw sshd[2485]: Invalid user hesse from 217.136.232.11
      Dec 10 06:17:15 gw sshd[2485]: error: PAM: authentication error for illegal user hesse from 217.136.232.11
      Dec 10 06:24:51 gw sshd[2730]: Invalid user hh from 99.234.5.98
      Dec 10 06:24:51 gw sshd[2730]: error: PAM: authentication error for illegal user hh from 99.234.5.98
      Dec 10 07:48:53 gw sshd[5621]: Invalid user hr from 211.143.78.2
      Dec 10 07:48:54 gw sshd[5621]: error: PAM: authentication error for illegal user hr from 211.143.78.2
      Dec 10 08:03:26 gw sshd[6134]: Invalid user http from 99.234.5.98
      Dec 10 08:03:27 gw sshd[6134]: error: PAM: authentication error for illegal user http from 99.234.5.98
      Dec 10 08:53:29 gw sshd[8092]: error: PAM: authentication error for vadim from 192.168.114.26
      Dec 10 08:53:36 gw sshd[8092]: error: PAM: authentication error for vadim from 192.168.114.26
      Dec 10 10:18:57 gw sshd[11523]: Invalid user info from 81.189.96.100
      Dec 10 10:18:57 gw sshd[11523]: error: PAM: authentication error for illegal user info from 81.189.96.100
      Dec 10 11:13:41 gw sshd[13447]: Invalid user internet from 80.169.105.159
      Dec 10 11:13:41 gw sshd[13447]: error: PAM: authentication error for illegal user internet from 80.169.105.159
      Dec 10 11:55:05 gw sshd[14823]: Invalid user irina from 85.70.129.57
      Dec 10 11:55:07 gw sshd[14823]: error: PAM: authentication error for illegal user irina from 85.70.129.57
      Dec 10 12:16:26 gw sshd[15777]: Invalid user is from 209.203.56.150
      Dec 10 12:16:27 gw sshd[15777]: error: PAM: authentication error for illegal user is from 209.203.56.150
      Dec 10 12:19:46 gw sshd[15984]: Invalid user istvan from 200.75.72.185
      Dec 10 12:19:46 gw sshd[15984]: error: PAM: authentication error for illegal user istvan from 200.75.72.185
      Dec 10 12:20:14 gw sshd[16030]: Invalid user roto from 121.52.214.105
      Dec 10 12:20:55 gw sshd[16058]: Invalid user thx1138 from 121.52.214.105
      Dec 10 12:20:58 gw sshd[16060]: Invalid user 0123456789 from 121.52.214.105
      Dec 10 12:21:02 gw sshd[16064]: Invalid user root123 from 121.52.214.105
      Dec 10 12:21:06 gw sshd[16090]: Invalid user r00t from 121.52.214.105
      Dec 10 12:21:13 gw sshd[16094]: Invalid user toor123 from 121.52.214.105
      Dec 10 12:21:17 gw sshd[16096]: Invalid user t00r from 121.52.214.105
      Dec 10 12:21:21 gw sshd[16100]: Invalid user acces from 121.52.214.105
      Dec 10 12:21:24 gw sshd[16102]: Invalid user access from 121.52.214.105
      Dec 10 12:21:28 gw sshd[16104]: Invalid user acc3ss from 121.52.214.105
      Dec 10 12:21:32 gw sshd[16106]: Invalid user acc3s from 121.52.214.105
      Dec 10 12:21:36 gw sshd[16110]: Invalid user acce$$ from 121.52.214.105
      Dec 10 12:21:39 gw sshd[16112]: Invalid user acce55 from 121.52.214.105
      Dec 10 12:21:43 gw sshd[16114]: Invalid user tomcat from 121.52.214.105
      Dec 10 12:21:47 gw sshd[16116]: Invalid user tomcat1 from 121.52.214.105

      С тестовыми данными у меня проблем нет, у меня со знаниями проблемы...
      Это после:
      bunzip2 -kcf /var/log/auth.log.0.bz2 | cat - /var/log/auth.log | grep "Invalid user\|authentication error" > /tmp/block1.txt

      Никак не могу понять как записать в sed следующее: удалить начало строки до "user" (а лучше включая). sed 's/^ * user//g' нужного эффекта не дает. Тут главное понять механизм работы sed, чего у меня не получается...
  • Освоение скриптописания под shell, !*! ACCA, 08:31 , 11-Дек-09 (4)
  • Освоение скриптописания под shell, !*! L0n3R4ng3r, 12:08 , 11-Дек-09 (10)



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру