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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Jacekalex napisał(-a):
Tak to działało do niedawna, ale teraz coś się zmieniło w ipsecie, już pokazuje timeouty (jak w poleceniu tworzenia dałem timeout 3600), ale nikt jeszcze nie dostał 86400, więc nie wiem, czy bierze 3600 z domyślnej wartości, czy z regułki nr 2 w przykładzie.
Jutro będę znał więcej szczegółów. :D
Przy tworzeniu ipseta podanie timeoutu ustawia go defaultowo.
Teraz jak dodasz do ipseta coś bez podawania timeoutu to zostanie wykorzystany defaultowy, jak podasz jakąś wartość to zostanie ustawiona ta
Offline
Nicram napisał(-a):
Jacekalex napisał(-a):
Tak to działało do niedawna, ale teraz coś się zmieniło w ipsecie, już pokazuje timeouty (jak w poleceniu tworzenia dałem timeout 3600), ale nikt jeszcze nie dostał 86400, więc nie wiem, czy bierze 3600 z domyślnej wartości, czy z regułki nr 2 w przykładzie.
Jutro będę znał więcej szczegółów. :DPrzy tworzeniu ipseta podanie timeoutu ustawia go defaultowo.
Teraz jak dodasz do ipseta coś bez podawania timeoutu to zostanie wykorzystany defaultowy, jak podasz jakąś wartość to zostanie ustawiona ta
Zgadza się, już mam wyniki:
ipset list wypad Name: wypad Type: hash:net Revision: 6 Header: family inet hashsize 1024 maxelem 65535 timeout 3600 Size in memory: 2848 References: 4 Members: 103.56.112.243 timeout 1852 212.83.135.73 timeout 65582 183.60.48.25 timeout 84252 61.153.107.73 timeout 84190 180.97.215.72 timeout 3520 91.122.27.205 timeout 58601 194.63.140.74 timeout 61191 193.104.41.141 timeout 52225 1.93.1.142 timeout 48393
Po prostu w działaniu ipseta zaszła chyba malutka zmiana, ale to na szczęście nie jest żaden poważny problem.
Ostatnio edytowany przez Jacekalex (2016-02-27 12:38:40)
Offline
Z drugiej strony, takie ustawianie bana już na pierwszym połączeniu na tak długi czas to chyba w pewnych sytuacjach może być strzałem w kolano. Co jeśli z szybkości źle wprowadzimy hasło? ssh zamknie połączenie a my w tym czasie będziemy nawiązywali drugie i ban na cały dzień.
fakt, tu przydaje się "dodatkowy" serwer.
ale moim zdaniem lepiej pierwszego timeouta ustawić na 60s, wtedy wiemy, że jak coś skopaliśmy za pierwszym razem to musimy chwilę odczekać a nie cały dzień. boty złapią się na te 60s.
Offline
To nie jest regułka na usługi dla pacjentów, tylko na ochronę krytycznych usług, gdzie tylko zaufane osoby mogą się logować.
W praktyce opisana w wątku o ipset autoban konfiguracja stanowi elegancką "śrutówkę" na skanery portów.
Zawsze też możesz łączyć różne moduły netfiltera do uzyskania pożądanego efektu, np:
iptables -A INPUT -p tcp --dport 22 -m hashlimit \ --hashlimit-mode srcip --hashlimit-above 3/minute --hashlimit-burst 1 -j SET --add-set wypad src --timeout 3600
Linux ma bardzo dużo narzędzi obrony przed potencjalnymi atakami, każdy może sobie dobrać takie, które najlepiej pasują do jego konfiguracji, pod warunkiem,
że jest świadom istnienia i zasady działania tych narzędzi.
Ja staram się na krytycznych usługach jak SSH czy *SQL w ogóle nie używać haseł tylko kluczy kryptograficznych w standardach SSH2, X509 albo PKCS#12,
w zależności od usługi.
Pozdro
Ostatnio edytowany przez Jacekalex (2016-02-27 14:49:36)
Offline
chcę zrobić na serwerze brzegowym zabezpieczenie przed DDoS na DNS i NTP.
Z tym, że w sieci mam osobiście takie serwery i być może któryś z klientów też i nie chciałbym im tego blokować.
wymyśliłem, że zrobię to analogicznie ale chcę by pierwsze pakiety nie były blokowane a jeśli w przciągu 5 s pojawią się nowe to wówczas ban na dłużej.
zrobiłem coś takiego:
# Generated by iptables-save v1.4.14 on Sun Feb 28 14:45:36 2016 *raw :PREROUTING ACCEPT [623316849:486932354078] :OUTPUT ACCEPT [659696:187238493] -A PREROUTING ! -i lo -p udp -m multiport --dports 53,123 -m set --match-set ddos dst -j SET --add-set ddos dst --exist --timeout 3600 -A PREROUTING -d 192.9.32.0/21 ! -i lo -p udp -m multiport --dports 0,53,123 -j SET --add-set checkDDoS dst -A PREROUTING -d 32.11.232.0/21 ! -i lo -p udp -m multiport --dports 0,53,123 -j SET --add-set checkDDoS dst -A PREROUTING -m set --match-set checkDDoS dst -j SET --add-set checkDDoS dst --exist --timeout 60 COMMIT # Completed on Sun Feb 28 14:45:36 2016 # Generated by iptables-save v1.4.14 on Sun Feb 28 14:45:36 2016 *filter :INPUT ACCEPT [21615:3810964] :FORWARD ACCEPT [111520904:87636931130] :OUTPUT ACCEPT [122949:34821937] :fail2ban-named-refused-tcp - [0:0] :fail2ban-ssh - [0:0] :fail2ban-ssh-ddos - [0:0] -A INPUT -p tcp -m multiport --dports 53,953 -j fail2ban-named-refused-tcp -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh-ddos -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A FORWARD -p udp -m multiport --dports 53,123 -m set --match-set ddos dst -j DROP -A FORWARD -d 32.11.232.192/28 -p udp -m udp --sport 123 -j DROP -A FORWARD -d 32.11.232.192/28 -p udp -m udp --dport 123 -j DROP -A FORWARD -p udp -m set ! --match-set servers dst -m multiport --dports 53,123 -m set --match-set checkDDoS dst -j DROP -A fail2ban-named-refused-tcp -j RETURN -A fail2ban-ssh -j RETURN -A fail2ban-ssh-ddos -j RETURN COMMIT # Completed on Sun Feb 28 14:45:36 2016
zrobiłem ręcznie ipseta o nazwie ddos, gdzie właśnie w nocy walczyłem z tym ruchem.
na potrzeby zapobiegania zrobiłem ipseta checkDDoS i tu właśnie chcę limitować. checkDDoS ma defaultowo ustawiany timeout 5s.
chciałym aby pierwsze połączenie z sieci do ipka wewnątrz przeszło a jesli w ciągu 5 sekund pojawi się kolejne to wtedy update na kolejny czas i DROP dalej.
pomińmy na razie tego fail2bana i dropowanie 123 dla 32.11.232.192/28
to to powyżej zrobiłem nie przepuszcza pierwszego pakietu.
może jakiś mały fix i podpowiedź.
z góry dzięki.
Ostatnio edytowany przez Nicram (2016-02-28 14:53:52)
Offline
:INPUT ACCEPT [21615:3810964]
Czy Ty pierwszy raz w życiu netfiltera konfigurujesz? :D
Pokaż lepiej wyniki w formacie:
iptables -t raw -S iptables -t filter -S
są dużo czytelniejsze, niż wyjście z iptables-save czy z iptables -Ln.
:OUTPUT ACCEPT [122949:34821937]
tutaj też nie wypuszczałbym całego systemu, ale tylko niektóre usługi i programy, które dostępu do netu bezwzględnie potrzebują.
Dzięki modułom owner i cgroup filtrowanie OUTPUT jest dosyć banalne.
Te łańcuchy fail2ban* istnieją tylko w FW, czy jeszcze fail2ban w tle coś miesza?
Jak nie możesz żyć bez fail2bana, to zrób mu tablicę ipseta i niech pakuje adresy do tablicy ipseta, a nie robi burdel w regułach firewalla.
Skąd się biorą adresy w tablicy ddos ipseta, których używasz jako dopasowania w pierwszej regule tablicy RAW?
Ostatnio edytowany przez Jacekalex (2016-02-28 15:06:31)
Offline
Jacekalex napisał(-a):
:INPUT ACCEPT [21615:3810964]
Czy Ty pierwszy raz w życiu netfiltera konfigurujesz? :D
Nie, ale zostawmy to na razie. :) Będzie uporządkowane.
Ten FW od początku miał tylko blokować niektóry ruch FORWARD :)
Jacekalex napisał(-a):
Pokaż lepiej wyniki w formacie:
Te łańcuchy fail2ban* istnieją tylko w FW, czy jeszcze fail2ban w tle coś miesza?
miesza, ale jak się z tym uporam i dopieszczę zrezygnuję z niego
Jacekalex napisał(-a):
Skąd się biorą adresy w tablicy ddos ipseta, których używasz jako dopasowania w pierwszej regule tablicy RAW?
adresy w tablicy ddos biorą się z ręcznego dodawania. w innym wątku napisałeś mi o tcpdumpie i właśnie to bierze się z tego grepowania - nadal ręcznego.
wolałbym to zautomatyzować by nie trzeba było o 3 rano wstawać i diagnozować ruch jak ostaniej soboty :/
to regułki wyglądają tak. pomińmy na razie defaultowe polityki, to jest do poprawienia, i pomińmy ipseta ddos. rozchodzi się jedynie o automatyczne updateowanie seta checkDDoS
-P PREROUTING ACCEPT -P OUTPUT ACCEPT -A PREROUTING ! -i lo -p udp -m multiport --dports 53,123 -m set --match-set ddos dst -j SET --add-set ddos dst --exist --timeout 3600 -A PREROUTING -d 192.9.32.0/21 ! -i lo -p udp -m multiport --dports 0,53,123 -j SET --add-set checkDDoS dst -A PREROUTING -d 32.11.232.0/21 ! -i lo -p udp -m multiport --dports 0,53,123 -j SET --add-set checkDDoS dst -A PREROUTING -m set --match-set checkDDoS dst -j SET --add-set checkDDoS dst --exist --timeout 60 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-named-refused-tcp -N fail2ban-ssh -N fail2ban-ssh-ddos -A INPUT -p tcp -m multiport --dports 53,953 -j fail2ban-named-refused-tcp -A INPUT -p tcp -m multiport --dports 22,60022 -j fail2ban-ssh-ddos -A INPUT -p tcp -m multiport --dports 22,60022 -j fail2ban-ssh -A FORWARD -p udp -m multiport --dports 53,123 -m set --match-set ddos dst -j DROP -A FORWARD -d 32.11.232.192/28 -p udp -m udp --sport 123 -j DROP -A FORWARD -d 32.11.232.192/28 -p udp -m udp --dport 123 -j DROP -A FORWARD -p udp -m set ! --match-set servers dst -m multiport --dports 53,123 -m set --match-set checkDDoS dst -j DROP -A fail2ban-named-refused-tcp -j RETURN -A fail2ban-ssh -j RETURN -A fail2ban-ssh-ddos -j RETURN
Ostatnio edytowany przez Nicram (2016-02-29 14:54:23)
Offline
chcialem to jeszcze ztuningowac. testuje sobie na lapciku.
mam tak:
-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N ICMP -A INPUT -p icmp -j ICMP -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 60022 -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A ICMP -p icmp -m set --match-set checkDDoS src -j SET --add-set checkDDoS src --exist --timeout 60 -A ICMP -p icmp -m set --match-set checkDDoS src -j DROP -A ICMP -p icmp -m limit --limit 10/sec --limit-burst 20 -j SET --add-set checkDDoS src -A ICMP -p icmp -j ACCEPT
generalnie działa prawie jak powinno, mówię prawie bo nie działa ten limit, już pierwszy pakiet powoduje wrzucenie ipka do ipseta.
czy limit nie powinien być spełniony jeśli byłoby tych pakietów 11/sec a nie już na pierwszym?
Offline
Nicram napisał(-a):
chcialem to jeszcze ztuningowac. testuje sobie na lapciku.
mam tak:Kod:
-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N ICMP -A INPUT -p icmp -j ICMP -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A ICMP -p icmp -m set --match-set checkDDoS src -j SET --add-set checkDDoS src --exist --timeout 60 -A ICMP -p icmp -m set --match-set checkDDoS src -j DROP -A ICMP -p icmp -m limit --limit 10/sec --limit-burst 20 -j SET --add-set checkDDoS src -A ICMP -p icmp -j ACCEPTgeneralnie działa prawie jak powinno, mówię prawie bo nie działa ten limit, już pierwszy pakiet powoduje wrzucenie ipka do ipseta.
czy limit nie powinien być spełniony jeśli byłoby tych pakietów 11/sec a nie już na pierwszym?
ok, zrobiłem tak i działa :)
-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N ICMP -A INPUT -p icmp -j ICMP -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A ICMP -p icmp -m set --match-set checkDDoS src -j SET --add-set checkDDoS src --exist --timeout 60 -A ICMP -p icmp -m set --match-set checkDDoS src -j DROP -A ICMP -p icmp -m limit --limit 10/sec --limit-burst 20 -j ACCEPT -A ICMP -p icmp -j SET --add-set checkDDoS src -A ICMP -p icmp -j DROP
Offline
30 pakietów icmp to 30 wpisów w tablicy conntrack i maksymalnie 30*65507 bit (maksymalna długość pinga ).
Ja daję zazwyczaj daję 6-10 bez żadnych burstów.
Ostatnio edytowany przez Jacekalex (2016-03-01 18:03:59)
Offline
Jacekalex napisał(-a):
Ja daje zazwyczaj daję 6-10 bez żadnych burstów.
Akurat na pinga mam zamiar właśnie zrobić 10/s. jeśli nie wprowadzę bursta to ustawiany jest defaultowo na 5
Offline