Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundację Dzieciom „Zdążyć z Pomocą”.
Więcej informacji na dug.net.pl/pomagamy/.

#1 2014-06-06 08:14:51

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Autoban w oparciu o iptables, ipset i rsyslog

Czy są jakieś gotowe narzędzia, które mogą posłużyć do automatycznego banowania maszyn nawiązujących nowe połączenia z określonym kompem w sieci?

Póki co mi wpadł do głowy taki pomysł:

W konfiguracji rsysloga ustawić taką linijkę:

Kod:

:msg,contains,"IPTABLES:" /var/log/iptables
& stop

ona przekieruje wszystkie komunikaty zawierające IPTABLES: do oddzielnego pliku.

Na iptables ustawiłem sobie standardowy fw dla klientów i dodatkowo:

Kod:

iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j tcp

iptables -t filter -A tcp -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -m limit --limit 30/m --limit-burst 10 -j LOG --log-level 4 --log-prefix "* IPTABLES: TCP_NEW * "

Te połączenia i tak będą zrzucane przez iptables tyle, że zostaną zalogowane.

Log wygląda jak poniżej:

Kod:

Jun  6 07:40:15 morfikownia kernel: [ 6084.887465] * IPTABLES: TCP_NEW * IN=eth1 OUT= MAC=01:28:c4:39:24:b1:00:17:10:03:14:51:08:00 SRC=177.41.229.229 DST=172.163.24.91 LEN=52 TOS=0x00 PREC=0x00 TTL=50 ID=44147 DF PROTO=TCP SPT=39768 DPT=23 WINDOW=14600 RES=0x00 SYN URGP=0

mac i ip zmieniono.

Chodzi o to by wydobyć adres źródłowy z tego logu w oparciu o czas, np 3 zalogowane komunikaty w czasie 10min z tego samego ip, i ten adres dopisać do blacklisty ipseta + zapisanie go do pliku. W późniejszym czasie przy starcie systemu ta lista by była automatycznie ładowana z pliku. Dodatkowo ten skrypt miałby za zadanie porównać ip z logu pod kątem obecności na liście ipseta i jeśli brakuje, to by został dodany.

Sam ip set nie sprawi problemu ale ja niezbyt się czuje jeszcze na siłach by napisać pozostałą część skryptu.

Druga sprawa to jest podgląd tego co się odbywa na zaporze. Wiem, że można to zrobić przez kolejkę fifo, bo mam takie coś już zaimplementowane, tylko chodzi o to, że chciałbym sobie rozgraniczyć logi zawierające IPTABLES i przekierować je do, ja wiem, /dev/fw dajmy na to.

Ogólnie za te moje logi na pulpicie odpowiada poniższa linijka:

Kod:

*.*;auth,daemon,kern,user    -/dev/logi

Ale jak przesłać w taki sposób komunikaty zawierające IPTABLES: ?

To ma być swego rodzaju pułapka zastawiana w czasie kompletnego bezruchu sieciowego, która ma na celu wyłapać ludzi dobijających się do danej maszyny. Chyba, że istnieją inne lepsze sposoby na ogarnięcie tego problemu. W każdym razie podgląd logów przez /dev/fw bardzo by mi się przydał.

I jeszcze taka sprawa, jeśli na iptables tworzy się nowy łańcuch jak powyżej, to trzeba definiować te parametry dla reguł w tym łańcuchu, na podstawie których sam łańcuch został stworzony, czy można zwyczajnie pominąć połowę linijki?


Morfitronik — blog o linux'ach, głównie Debian, OpenWRT/LEDE i Android

Offline

 

#2 2014-06-06 08:23:15

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoban w oparciu o iptables, ipset i rsyslog

Jeśli iptables ma banować coś, co zalogował sam iptables, to w ogóle nie potrzebujesz sysloga do tego interesu.
Tworzysz tablicę Ipseta, a potem:

Kod:

iptables  -I {tablica} {dopasowanie} -j SET {opcje_ipseta}

Sockety, Syslogi, i podobne ustrojstwa są dla usług demonów sieciowych (np Proftpd, Dovecot, Apache) i systemów IPS, jak Snort.

Ostatnio edytowany przez Jacekalex (2014-06-06 08:57:46)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3 2014-06-06 09:58:13

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoban w oparciu o iptables, ipset i rsyslog

Ok, chyba zrobiłem, choć nie wiem czy to jest choć w połowie profesjonalne ale efekt jest zamierzony. xD

Stworzony set:

Kod:

ipset create autoban hash:net family inet maxelem 1000

Połączyłem ten -j SET z -m recent:

Kod:

iptables -t filter -A tcp -m recent --set --name autoban
iptables -t filter -A tcp -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -m recent --update --seconds 3600 --name autoban --hitcount 1 -j SET --add-set autoban src

+ logowanie

Kod:

iptables -t filter -A tcp -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -m limit --limit 30/m --limit-burst 10 -j LOG --log-level 4 --log-prefix "* IPTABLES: TCP_NEW *

No i filtorwanie w oparciu o adresy ip dodane wyżej:

Kod:

iptables -t raw -A PREROUTING -p all -m set --match-set autoban src -j DROP

Te wartości 1 połączenie na 1h są w celach testowych, ale jak sprawdzam:

Kod:

# ipset list autoban
Name: autoban
Type: hash:net
Revision: 4
Header: family inet hashsize 1024 maxelem 1000
Size in memory: 16888
References: 2
Members:
116.10.191.223
116.10.191.186
66.240.236.119

Adresy IP wpadają do listy ipseta, no i pierwszy log jest zapisywany w celach informacyjnych, że dany ip próbował się połączyć. Potem połączenia są blokowane w tablicy raw przy kolejnych próbach ale logu już nie wyrzuca. Czyli mógłbym sobie zapuścić to podczas bezruchu sieciowego i wyłapać wrednych ludzi, a potem ładować normlanie listę do ipseta z pliku. To tak ma wyglądać ta blokada?

Tylko taka sprawa, te listę trzeba manualnie zapisywać do pliku, czy jest jakaś opcja by to iptables/ipset z automatu zrobił?


Morfitronik — blog o linux'ach, głównie Debian, OpenWRT/LEDE i Android

Offline

 

#4 2014-06-06 10:15:26

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoban w oparciu o iptables, ipset i rsyslog

Jest opcja zrzucania listy Ipseta do pliku, poszukaj w manie, chociaż moim zdaniem nie ma to większego sensu, poza robieniem gigantycznej listy, która zawsze trochę przymuli.

Lepiej pakować do Ipseta pacjentów z opcją timeout np 3600, wtedy wszelkie próby skanowania dostaną bana na godzinę,
a tablica Ipseta będzie miała zawsze w miarę rozsądną wielkość.
Potem jeszcze regułka odnawiająca bana w typie

Kod:

iptables -t raw -I INPUT -m set --set --match-set dupa src  -j SET --add-set dupa src --timeout 3600

Działa to wtedy podobnie do hashlimita, ale jest dużo elastyczniejsze w zastosowaniu, można np wywołaniem na port 22,23,113,445,1443 zaopatrzyć pacjenta w bana na cały albo dużo większy zakres portów. :D

W ten sposób klasycznych bootów nie zobaczysz nawet przez 200 lat. :D

EDIT:

ipset --help napisał(-a):

....
save [SETNAME]
        Save the named set or all sets to stdout
restore
        Restore a saved state
....

Praktycznie tak samo, jak w iptables. ;)

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2014-06-06 10:21:19)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5 2014-06-06 10:38:35

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoban w oparciu o iptables, ipset i rsyslog

Póki co tylko 5 adresów wpadło, w porównaniu do tych list bt_level1 gdzie tam ich jest 250k czy coś, to nie jest dużo. xD

Pomonitoruję to sobie przez parę dni i zobaczę jak to będzie wyglądać, potem zaimplementuje zwykłego tempbana na godzinę przez -m recent tak jak jest wyżej tylko bez -j SET i jak ktoś będzie chciał wbić do mojej maszyny bez zezwolenia to będzie mu się ten ban ciągle przedłużał o następną godzinę. xD

Jeśli się to faktycznie będzie dość poważnie rozrastać to popatrzę na ten  --timeout . Póki co, wszystko co zostanie złapane w przeciągu paru następnych dni dostanie dożywotniego bana. xD

Co do zrzucania listy, to jest

Kod:

# ipset save autoban
create autoban hash:net family inet hashsize 1024 maxelem 1000
add autoban 116.10.191.223
add autoban 116.10.191.186
add autoban 222.136.81.56
add autoban 66.240.236.119
add autoban 58.215.43.234

Tylko nie widzę nigdzie by to się robiło np. co 30min i to raczej trzeba załatwić zewnętrznym skryptem + cron ale to nie problem.


Morfitronik — blog o linux'ach, głównie Debian, OpenWRT/LEDE i Android

Offline

 

#6 2014-06-06 11:05:47

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoban w oparciu o iptables, ipset i rsyslog

Jeśli się to faktycznie będzie dość poważnie rozrastać to popatrzę na ten  --timeout . Póki co, wszystko co zostanie złapane w przeciągu paru następnych dni dostanie dożywotniego bana. xD

Troszkę infantylne  spojrzenie na rzeczywistość widzę w tym cytacie.

Np:

Kod:

add autoban 116.10.191.223
add autoban 116.10.191.186

Dwa sąsiednie kompy z jednej sieci.

Pewnie jeden dostał trojana z jakiejś sieci bootnetów, po czym zaraził drugiego, albo na obu ktoś instalował jakiś program z takiej samej instalki z trojanem.
Za kilka tygodni pewnie będzie albo aktualizacja antywira, albo  reinstalacja, czy najszybsza naprawa Windy w warunkach domowych  (przy pomocy format_C), i te adresy się zdezaktualizują.
W dodatku 95% użytkowników internetu w tym kraju ma adresy publiczne przyznawane dynamicznie na czas sesji, a te mogą się zmieniać nawet co godzinę.
Dlatego listę ipseta warto tworzyć, jeśli masz np tablicę

Kod:

bitmap:ip,mac

w której pisze, kogo wpuszczać.
Ale zapisywanie banowanych adresów IP do pliku  ma znacznie mniej sensu, niż się pozornie wydaje.
Sens takiego zapisywania pojawi się prawdopodobnie dopiero przy IPv6, ale wtedy do takiej listy będziesz chyba potrzebował osobny dysk. xD

O wiele skuteczniej blokować NEW i INVALID, wpuszczać REALTED i ESTABHISHED, a jak coś wystawiasz na otwartym porcie, to tam hashlimit i ipset.

Ostatnio edytowany przez Jacekalex (2014-06-06 11:07:13)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#7 2014-06-06 11:22:11

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoban w oparciu o iptables, ipset i rsyslog

No może faktycznie lepiej jest pokonbinować coś z tym banem na godzinę czy cuś. Jeszcze sobie obadam tego  bitmap:ip,mac .

Ja sobie tak patrzę, to już 7 adresów z tej sieci się próbowało wbić. Może tam wszyscy jadą na winxp? xD

Ostatnio edytowany przez morfik (2014-06-06 11:23:41)


Morfitronik — blog o linux'ach, głównie Debian, OpenWRT/LEDE i Android

Offline

 

#8 2014-06-06 11:28:33

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoban w oparciu o iptables, ipset i rsyslog

bitmap:ip,mac Ci się raczej nie przyda, to się stosuje w sieciach LAN, do prostego i szybkiego filtrowania IP/MAC na routerze,
bez zabawy w PPPOE czy inną autoryzację.

W dodatku te adresy, to nie jest koniecznie XP, jak myślisz,
że Seven nie łapie syfu, to możesz sobie myśleć dalej. xD

Ostatnio edytowany przez Jacekalex (2014-06-06 11:38:16)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#9 2014-06-06 12:00:17

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoban w oparciu o iptables, ipset i rsyslog

A nie można by tego użyć na sieci 116.10.191.0/24 i zobczyć czy się im te ip zmieniają? xD No bo jeśli by się pojawił drugi mac przy tym samym ip, to ip się zmieniło komuś tam ale jak ciągle by mi próbowali na 22 port wbić z tej samej pary, to raczej można by bez problemu go zablokować. Czy się mylę?


Morfitronik — blog o linux'ach, głównie Debian, OpenWRT/LEDE i Android

Offline

 

#10 2014-06-06 12:07:23

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoban w oparciu o iptables, ipset i rsyslog

Kod:

iptables -t raw -I PREROUTING -p tcp --dport 22 -j SET --add-set dupa src --timeout 86400

i nie ma co kombinować więcej.
Masz pojęcie, ile klas adresowych ma np Neozdrada, albo jakiś inny duży operator?
Będziesz te wszystkie sieci operatorskie rożnych ISP z całego świata dodawał do konfiga?
Bo mam 99,9% pewności, że po dłuższym czasie w takim konfigu będziesz miał zaledwie 7 całych kontynentów. xD

Względnie możesz się pobawić Denyhostem, jak pojęcia "polityka domyślna firewalla" nie ogarniasz. xD

PS:
Kilka minut działania seta z regułką powyżej:

Kod:

89.46.101.137 timeout 86333
116.10.191.168 timeout 86145

Ta sieć 116.10.191.0/24 jest dosyć pracowita...
xD

Ostatnio edytowany przez Jacekalex (2014-06-08 15:28:08)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#11 2014-06-06 12:18:49

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoban w oparciu o iptables, ipset i rsyslog

Dobra niech będzie. xD


Morfitronik — blog o linux'ach, głównie Debian, OpenWRT/LEDE i Android

Offline

 

#12 2014-06-08 14:30:25

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoban w oparciu o iptables, ipset i rsyslog

Spróbowałem sobie zrobić taki testowy autoban w oparciu o ten timeout ale coś mi nie odświeża czasów w secie.

Przykładowo, chciałbym aby wszystko co mi pingnie maszynę (pingi ze stanem NEW) dostało bana na godzinę i nie tylko na pingi ale na jakąkolwiek komunikację z moim pc. Zrobiłem mniej więcej coś takiego:

Kod:

iptables -t filter -A INPUT -p icmp -j icmp_in
iptables -t filter -A icmp_in -p icmp -m conntrack --ctstate NEW -j LOG --log-prefix "* IPTABLES: ICMP_NEW * "
iptables -t filter -A icmp_in -p icmp -m conntrack --ctstate NEW -j SET --add-set autoban src --timeout 3600
iptables -t filter -A icmp_in -p icmp -m icmp --icmp-type echo-request -m conntrack --ctstate NEW -j DROP -m comment --comment "echo-request"

iptables -t raw -A PREROUTING -m set --match-set autoban src -j DROP

I to generalnie robi co trzeba ale nie mogłem w żaden sposób odnowić czasu bana. Nawet jak spróbowałem dodać przed tą ostatnią regułą czegoś  na wzór:

Kod:

iptables -t raw -A  PREROUTING -m set --match-set autoban src  -j SET --add-set autoban src --timeout 3600

Pakiet przechodzi przez nią ale nie odświeża licznika. Coś tu trzeba dodatkowego jeszcze zrobić?


Morfitronik — blog o linux'ach, głównie Debian, OpenWRT/LEDE i Android

Offline

 

#13 2014-06-08 14:32:07

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoban w oparciu o iptables, ipset i rsyslog

U mnie przy teście grzecznie odświeżał licznik, także nie wiem, co u ciebie nie bangla, może coś przekombinowałeś?

EDIT:
mała poprawka:

Kod:

iptables -S -t raw | grep autoban
-A PREROUTING -m set --match-set autoban src -j SET --add-set autoban src --exist --timeout 7200
-A PREROUTING -p tcp  -m multiport --dports 22,113,445,1433,1512,2175,2176,3306,5432 -j SET --add-set autoban src --timeout 3600

Kod:

echo dupa | nc box 22

# G1 ###   nie cze 08 14:38:51  localhost : ~ 
root ~> ipset list autoban
Name: autoban
Type: hash:net
Revision: 2
Header: family inet hashsize 1024 maxelem 65536 timeout 3600 
Size in memory: 16832
References: 3
Members:
127.0.0.1 timeout 3390

# G1 ###   nie cze 08 14:38:58  localhost : ~ 
root ~> echo dupa | nc box 22
box [127.0.0.1] 22 (ssh) : Connection refused

# G1 ###   nie cze 08 14:39:04  localhost : ~ 
root ~> ipset list autoban
Name: autoban
Type: hash:net
Revision: 2
Header: family inet hashsize 1024 maxelem 65536 timeout 3600 
Size in memory: 16832
References: 3
Members:
127.0.0.1 timeout 7198

SOA#1

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2014-06-08 15:15:08)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#14 2014-06-08 15:33:06

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Autoban w oparciu o iptables, ipset i rsyslog

No teraz działa, brakowało tego --exist .


Morfitronik — blog o linux'ach, głównie Debian, OpenWRT/LEDE i Android

Offline

 

#15 2014-06-08 19:39:39

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Autoban w oparciu o iptables, ipset i rsyslog

U mnie też działa, nawet grzecznie ;)

Kod:

iptables -S -t raw | grep wypad
-A PREROUTING -m set --match-set wypad src -j SET --add-set wypad src --exist --timeout 86400
-A PREROUTING ! -i lo -p tcp -m multiport --dports 22,113,445,1433,1512,2175,2176,3306,5432 -j SET --add-set wypad src --timeout 3600
-A PREROUTING -m set --match-set wypad src -j DROP

Kod:

ipset list wypad
Name: wypad
Type: hash:net
Revision: 2
Header: family inet hashsize 1024 maxelem 65536 timeout 3600 
Size in memory: 18848
References: 4
Members:
185.30.166.35 timeout 85983
62.231.75.133 timeout 81888
93.120.27.62 timeout 1105
117.41.235.15 timeout 119
124.248.195.227 timeout 3113
61.158.162.161 timeout 539
193.219.128.49 timeout 84425
37.48.83.75 timeout 83449
78.40.125.4 timeout 80618
149.156.124.222 timeout 80185

Byle tylko   Nftables nie popieprzyli za bardzo, szkoda byłoby takiej eleganckiej zabawki, jak ipset timeout. :D

Ostatnio edytowany przez Jacekalex (2014-06-09 03:51:11)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)