Jakie polecenie basha wyciąga mac adres z syslog 'u do zmiennej?

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4707
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

[Solved] Jakie polecenie basha wyciąga mac adres z syslog 'u do zmiennej?

Post autor: jacekalex »

witam

Składnia poleceń sed i awk to dla mnie na razie black magic.

W związku z tym pytanie:
Jakie polecenie basha zwraca pierwszy wiersz wcześniejszego polecenia wg schematu:

Kod: Zaznacz cały

tail -s 60 /var/log/syslog | grep argument | szukane polecenie 
wynik - 1 -   pierwsza lub ostatnia linia (wiersz rezultatu)
następnie z wyniku - wiersz wyglądający mniej więcej tak:

Kod: Zaznacz cały

Mar  9 13:35:57 localhost kernel: [26178.972204] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:1d:60:63:13:49:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=336 TOS=0x00 PREC=0x00 TTL=128 ID=28883 PROTO=UDP SPT=68 DPT=67 LEN=316 
wyciągał to - co nas interesuje - czyli:

Kod: Zaznacz cały

MAC=00:1d:60:63:13:49:08:00
a następnie przetwarzał ten wynik do postaci docelowej:

Kod: Zaznacz cały

 iptables -I INPUT -i eth0 -m mac --mac-source $MAC -j DROP
Króko mówiąc - małe usprawnienie do denyhosta czy portsentry - oprócz bana po IP jest jeszcze ban po mac-adresie interfejsu.

Po co takie klocki.

WIększość skrypciarzy to dzieci neostrady i innych podobnychusług. Mają zmienne IP - jak dostaną bana - wystarczy restart karty sieciowej -nowe IP - hulaj dusza piekła nie ma - można spamować i hakować ile się chce.

Natomiast - większość (jeśli nie wszyscy) dostawców internetu - obawiając się - aby klient nie podzielił się internetem z sąsiadami - stosuje identyfikacje klienta po mac -adresie.

Numer IP taki skrypciarz czy spamer może zmieniać co 30 sekund - natomiast każda zmiana mac adresu trwa trochę dłużej - i często odcina od netu - proste i skuteczne.

Czy ktoś zna gotowca - lub posiada - w głowie - taki skrypt - i mógłby się nim podzielić?

W imieniu wszystkich - którzy mają na serwerach problemy z atakami na port ssh czy ftp - oraz ludzmi - którzy - prowadząc strony i fora - banują co prawda adresy IP - często niewinnych ludzi, takich - którzy włączając komputer dostali z dhcp adres IP - którego 15 minut wcześniej używał spamer,
a także swoim własnym -

- BARDZO DZIĘKUJĘ I POZDRAWIAM

:clap::clap::clap::clap::clap::clap::clap::clap::clap::clap::clap:
Hagal
Sędziwy Jeż
Sędziwy Jeż
Posty: 41
Rejestracja: 11 sty 2009, 01:35
Płeć: Mężczyzna
Środowisko graficzne: Brak

Odp: Jakie polecenie basha wyciąga mac adres z syslog 'u do zmiennej?

Post autor: Hagal »

* Sprecyzuj pierwsze pytanie.

* Co do reszty, to mały przykład:

Kod: Zaznacz cały

,-[ 22:45:03 ]--[ pts/1 ]--[ ~ ]
`-[  Slawek  ] >>  cat Desktop/xx 
Mar  9 13:35:57 localhost kernel: [26178.972204] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:1d:60:63:13:49:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=336 TOS=0x00 PREC=0x00 TTL=128 ID=28883 PROTO=UDP SPT=68 DPT=67 LEN=316
-- jakaś linia --
Mar  9 13:35:57 localhost kernel: [26178.972204] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:1d:60:6a:1c:49:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=336 TOS=0x00 PREC=0x00 TTL=128 ID=28883 PROTO=UDP SPT=68 DPT=67 LEN=316
-- inna linia --
-- i jeszcze jedna --
Mar  9 13:35:57 localhost kernel: [26178.972204] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:0d:1d:60:63:c1:49:08:67 SRC=0.0.0.0 DST=255.255.255.255 LEN=336 TOS=0x00 PREC=0x00 TTL=128 ID=28883 PROTO=UDP SPT=68 DPT=67 LEN=316
-- MARK --
-- i znów coś --

,-[ 22:45:43 ]--[ pts/1 ]--[ ~ ]
`-[  Slawek  ] >>  sed '/MAC/!d;s/.* MAC=//;s/\ SRC.*//;s/.*ff://' Desktop/xx | uniq | while read mac; do echo "iptables -I INPUT -i eth0 -m mac --mac-source ${mac} -j DROP"; done

iptables -I INPUT -i eth0 -m mac --mac-source 00:1d:60:63:13:49:08:00 -j DROP
iptables -I INPUT -i eth0 -m mac --mac-source 00:1d:60:6a:1c:49:08:00 -j DROP
iptables -I INPUT -i eth0 -m mac --mac-source 0d:1d:60:63:c1:49:08:67 -j DROP
Pozdrawiam
Nie toleruję zmuszania do reklam...
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4707
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Odp: Jakie polecenie basha wyciąga mac adres z syslog 'u do zmiennej?

Post autor: jacekalex »

Pierwsze pytanie?

Czy to nie jasne? - prosty przykład - denyhosts.
Kiedy następują trzy nieudane próby logowania do ssh - denyhosts bl0okuje adres źródłowy ataku (adres IP).

Nie ma technicznych przeszkód - aby zarówno z denyhosts'a jak i portsentry - czy tez skryptu httpd-guardian ( to do ochrony apacha) - informacja o ataku była kierowana do następnego skryptu - który wykonuje następną akcję - np:

Kod: Zaznacz cały

Atak na SSh - denyhosts [lub np. fail2ban czy sshwatch ]blokuje IP  napastnika - i przesyła informację o zablokowanym IP jako argument do następnego skryptu - który wykonuje następującą akcję:[code}
tail -s15 /var/log/syslog | grep IP-napastnika
generuje wynik - jedną lub kilka linni w mniej więcej takiej postaci:
Mar  9 13:35:57 localhost kernel: [26178.972204] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:1d:60:63:13:49:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=336 TOS=0x00 PREC=0x00 TTL=128 ID=28883 PROTO=UDP SPT=68 DPT=67 LEN=316
następna częsć skryptu - z jednej - np. pierwszej linni tego logu wyciąga mac-adres karty sieciowej 
napastnika wg. postaci:
mac=mac-adres-napastnika
i dalej iptables -I INPUT -m mac --mac-source $mac -j DROP - gdzie $mac - to zmienna przedstawiająca mac adres tej karty  napastnika.
Krótko mówiąc - nawet jak taki napastnik ( zazwyczaj skrypciarz - dziecko neostrady) zrestartuje modem czy sieć,
- i uzyska po chwili inny numer IP - to będzie zablokowany na firewallu.

W kraju - gdzie prawie wszyscy dostawcy internetu stosują identyfikację mac-adresu karty sieciowej klienta - zmiana mac adresu "z palca" blokuje internet - a 20 telefonów dziennie do biura obsługi klienta dostawcy internetu też nie wchodzi w grę.

Dlatego takiego skrypciarza (lub spamera) mamy z głowy na dobre po pierwszej próbie ataku.

Potrzebuję te komendy - aby je poskładać do skryptu - który dokładnie to robi - i to by było na tyle.

Co tu jeszcze jest niejasne?

EDIT:

Co do przykładu - to nie zauważyłem w pierwszej chwili -

Kod: Zaznacz cały

sed '/MAC/!d;s/.* MAC=//;s/\ SRC.*//;s/.*ff://' Desktop/xx | uniq | while read mac; do echo "iptables -I INPUT -i eth0 -m mac --mac-source ${mac} -j DROP"; done
- dokładnie o to chodziło.

Dzięki - mam nadzieję - że zadziała.
Hagal
Sędziwy Jeż
Sędziwy Jeż
Posty: 41
Rejestracja: 11 sty 2009, 01:35
Płeć: Mężczyzna
Środowisko graficzne: Brak

Odp: Jakie polecenie basha wyciąga mac adres z syslog 'u do zmiennej?

Post autor: Hagal »

jacekalex pisze:Pierwsze pytanie?
Czy to nie jasne?
(...)
Potrzebuję te komendy - aby je poskładać do skryptu - który dokładnie to robi - i to by było na tyle.
Co tu jeszcze jest niejasne?
Chodziło mi o doprecyzowanie tego pytania:
jacekalex pisze:Jakie polecenie basha zwraca pierwszy wiersz wcześniejszego polecenia
Bo gdyby brać to dosłownie, to odpowiedź brzmiała by:

Kod: Zaznacz cały

pierwsze_polecenie | head -n 1

Gdyby co, to pisz śmiało.


Pozdrawiam
Nie toleruję zmuszania do reklam...
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4707
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Odp: Jakie polecenie basha wyciąga mac adres z syslog 'u do zmiennej?

Post autor: jacekalex »

WItaj

W twoim przykładzie jest niewielki błąd - chyba łatwy do poprawienia.

Kod: Zaznacz cały

Ta komenda zwraca za długi ciąg znaków - jak na mac adres, oraz - w logach widzę - że często - zamiast ff:ff:ff::ff:ff:ff:ff - jest mac mojej karty sieciowej.

Dlatego konieczne jest aby przetworzenie wyniku odbywało się w nastepujący sposób:
Przykład 
Mar 10 07:57:33 localhost kernel: [19287.251183] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:16:ec:f4:22:01:08:00 SRC=83.230.27.213 DST=83.230.27.255 LEN=78 TOS=0x00 PREC=0x00 TTL=128 ID=9823 PROTO=UDP SPT=137 DPT=137 LEN=58

~$arping 83.230.27.213
Unicast reply from 83.230.27.213 [00:16:EC:F4:22:01]  16.137ms
czyli - w ciągu ff:ff:ff:ff:ff:ff:00:16:ec:f4:22:01:08:00 - tylko wytłuszczone znaki stanowią mac-adres i powinny być wycięte do zmiennej - niezależnie - czy przed nimi są litery ff:ff... czy mac adres interfejsu docelowego.

Nawiasem mówiąc - jeszcze ciekawszy pomysł przyszedł mi do głowy:
Coś w stylu:

sudo iptables -A INPUT - s 0/0 -d ................. -j LOG --log-prefix "ssh-atak"
tail -f /var/log/syslog | grep "ssh-atak" | xargs sed '/MAC/!d;s/.* MAC=//;s/\ SRC.*//;s/.*ff://'  | uniq | while read mac; do echo "iptables -I INPUT -i eth0 -m mac --mac-source ${mac} -j DROP"; done
m - czy czegoś nie pokręciłem w tym kodzie - ale taka drobna poprawka ( wycinanie precyzyjnie 6-cio członowego mac-adresu - niezależnie co przed nim i za nim) - i mamy bardzo fajnego demona -który wycina skrypciarzy ze zmiennym IP.

Doskonały patent - który się przyda wielu ludziom - można go skomponować z swatchem - pilnującym pliku auth.log lub error.log - z apacha - który może pracować przy zabezpieczeniach każdej usługi na hoście - np wycinanie spamu przy pomocy reguł mod security, np: modsecurity.log=>tail lub swatch => taki demon - z troszkę zmienioną składnią ( do każdego pliku logów trzeba go dopasować) ale patent na banowanie po mac-adresach jest świetny.

W Polskim standardzie - drogo i licho - bardzo rzadko ktoś ma stałe IP - natomiast zawsze dostawcy internetu kombinują (jak przypilnować - żeby ktoś nie podłączył sąsiada, jak wytargać dodatkową kasę za używanie 2 kompów na łączu, itp) - czyli - jak wydoić klienta - takie rozwiązanie wtych warunkach jest o wiele lepsze - niż wszytkie sposoby banowania po IP i czarne listy razem wzięte.

Są po prostu w tych warunkach skuteczniejsze.

Dlatego muszę jakoś wykombinować - jak to uruchomić - i niech działa.

To by było na tyle

Pozdrawiam i dziękuję. ;-)

:clap::clap::clap::clap::clap::clap::clap::clap:
Hagal
Sędziwy Jeż
Sędziwy Jeż
Posty: 41
Rejestracja: 11 sty 2009, 01:35
Płeć: Mężczyzna
Środowisko graficzne: Brak

Odp: Jakie polecenie basha wyciąga mac adres z syslog 'u do zmiennej?

Post autor: Hagal »

Cóż z tego, że wiem co chcesz osiągnąć, skoro nie mam materiału do obróbki? :)

Jak możesz, to wstaw tu jakiś obszerny log zawierający wpisy do wyłapania, na którym można popracować, bo tak "na sucho" to raczej ciężko mi będzie wymyślać wszelkie możliwe przypadki.


Pozdrawiam
Nie toleruję zmuszania do reklam...
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4707
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Odp: Jakie polecenie basha wyciąga mac adres z syslog 'u do zmiennej?

Post autor: jacekalex »

Dobry przykład podałeś Prezesie w swoim pierwszym poście.

Kod: Zaznacz cały

* Co do reszty, to mały przykład:
     Kod:
     ,-[ 22:45:03 ]--[ pts/1 ]--[ ~ ]
`-[  Slawek  ] >>  cat Desktop/xx 
Mar  9 13:35:57 localhost kernel: [26178.972204] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:1d:60:63:13:49:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=336 TOS=0x00 PREC=0x00 TTL=128 ID=28883 PROTO=UDP SPT=68 DPT=67 LEN=316
-- jakaś linia --
Mar  9 13:35:57 localhost kernel: [26178.972204] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:1d:60:6a:1c:49:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=336 TOS=0x00 PREC=0x00 TTL=128 ID=28883 PROTO=UDP SPT=68 DPT=67 LEN=316
-- inna linia --
-- i jeszcze jedna --
Mar  9 13:35:57 localhost kernel: [26178.972204] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:0d:1d:60:63:c1:49:08:67 SRC=0.0.0.0 DST=255.255.255.255 LEN=336 TOS=0x00 PREC=0x00 TTL=128 ID=28883 PROTO=UDP SPT=68 DPT=67 LEN=316
-- MARK --
-- i znów coś --

,-[ 22:45:43 ]--[ pts/1 ]--[ ~ ]
`-[  Slawek  ] >>  sed '/MAC/!d;s/.* MAC=//;s/\ SRC.*//;s/.*ff://' Desktop/xx | uniq | while read mac; do echo "iptables -I INPUT -i eth0 -m mac --mac-source ${mac} -j DROP"; done

iptables -I INPUT -i eth0 -m mac --mac-source 00:1d:60:63:13:49:08:00 -j DROP
iptables -I INPUT -i eth0 -m mac --mac-source 00:1d:60:6a:1c:49:08:00 -j DROP
iptables -I INPUT -i eth0 -m mac --mac-source 0d:1d:60:63:c1:49:08:67 -j DROP 
Z ta różnicą - że polecenie - które podałeś - wycina zbyt długi ciąg znaków - o 4 znaki dłuższy - niż faktyczna długość mac-adresu karty sieciowej.
Ponadto - przeważnie w takich liniach logu jakie firewall przekazuje do sysloga - mac adres interfejsu docelowego przedstawia jako
ff:ff:ff:ff:ff:ff - jednak czasami - zamiast tych ff:ff:... pokazuje się mac-adres interfejsu
- czyli mojej u mnie, a twojej u Ciebie karty sieciowej.

Wtedy wycinanie ff - których tam nie ma (w tej linni jest nieskuteczne) - natomiast
wynik

Kod: Zaznacz cały

iptables -I INPUT -i eth0 -m mac --mac-source 00:1d:60:6a:1c:49:08:00 -j DROP
wyjdzie np. tak:

Kod: Zaznacz cały

iptables -I INPUT -i eth0 -m mac --mac-source 00:05:2b:be:f4:rr:00:1d:60:6a:1c:49:08:00 -j DROP
I pytanie -czy te reguły ze zbyt długim mac adresem -zdadzą egzamin.
Poprawa funkcji wycinającej mac-adres z linii logu - idealnie by było - gdyby wycinała precyzyjnie mac adres.
Na wszystkich przykładach zaznaczyłem (wytłuściłem) prawdziwy mac adres.

Jeśli uda się tak poprawić twoją funkcję - to w linuxie pojawi się dobre narzedzie do banowania spamerów ze zmiennym IP.
Cały dowcip polega na tym - że do ideału brakuje jeden malutki krok - tak -aby wycinała dokładnie 6-członowy macadres - który w obecnym działaniu ma 2 dodatkowe człony - (4 cyfry) z tyłu, a jeśli zamaiast ff:ff:ff:ff:ff:ff pojawi się mac-adres interfejsu -docelowego - to mamy 14 członów zamiast 6
i 28 liter i cyfr zamiast dwunastu.


Pozdrawiam i dziękuję. ;-)
Hagal
Sędziwy Jeż
Sędziwy Jeż
Posty: 41
Rejestracja: 11 sty 2009, 01:35
Płeć: Mężczyzna
Środowisko graficzne: Brak

Odp: Jakie polecenie basha wyciąga mac adres z syslog 'u do zmiennej?

Post autor: Hagal »

No to tak na szybko:

Kod: Zaznacz cały

,-[ 02:09:19 ]--[ pts/4 ]--[ ~ ]
`-[  Slawek  ] >>  cat Desktop/aa
Mar  9 13:35:57 localhost kernel: [26178.972204] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:1d:60:63:13:49:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=336 TOS=0x00 PREC=0x00 TTL=128 ID=28883 PROTO=UDP SPT=68 DPT=67 LEN=316
-- jakaś linia --
Mar  9 13:35:57 localhost kernel: [26178.972204] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:1d:60:6a:1c:49:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=336 TOS=0x00 PREC=0x00 TTL=128 ID=28883 PROTO=UDP SPT=68 DPT=67 LEN=316
-- inna linia --
-- i jeszcze jedna --
Mar  9 13:35:57 localhost kernel: [26178.972204] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:0d:1d:60:63:c1:49:08:67 SRC=0.0.0.0 DST=255.255.255.255 LEN=336 TOS=0x00 PREC=0x00 TTL=128 ID=28883 PROTO=UDP SPT=68 DPT=67 LEN=316
-- MARK --
-- i znów coś --
Mar 10 07:57:33 localhost kernel: [19287.251183] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:16:ec:f4:22:01:08:00 SRC=83.230.27.213 DST=83.230.27.255 LEN=78 TOS=0x00 PREC=0x00 TTL=128 ID=9823 PROTO=UDP SPT=137 DPT=137 LEN=58
==xxxx===


,-[ 02:09:32 ]--[ pts/4 ]--[ ~ ]
`-[  Slawek  ] >>  sed '/MAC/!d;s/.* MAC=//;s/\ SRC.*//' Desktop/aa | cut -c 19-35 | uniq | while read mac; do echo "iptables -I INPUT -i eth0 -m mac --mac-source ${mac} -j DROP"; done

iptables -I INPUT -i eth0 -m mac --mac-source 00:1d:60:63:13:49 -j DROP
iptables -I INPUT -i eth0 -m mac --mac-source 00:1d:60:6a:1c:49 -j DROP
iptables -I INPUT -i eth0 -m mac --mac-source 0d:1d:60:63:c1:49 -j DROP
iptables -I INPUT -i eth0 -m mac --mac-source 00:16:ec:f4:22:01 -j DROP
Teraz sobie to dopracuj :)

P.S.
dodaj sobie regułę wykluczającą własny MAC, bo możesz sobie zrobić "kuku" :)


Pozdrawiam
Nie toleruję zmuszania do reklam...
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4707
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Odp: Jakie polecenie basha wyciąga mac adres z syslog 'u do zmiennej?

Post autor: jacekalex »

Witam

Ostatni przykład działa - dzięki. :-)

Pozdrawiam
;-)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Bing [Bot] i 22 gości