Ktoś powiedział mi, że jest to możliwe, ale nie mogę znaleźć niczego na stronach google lub man.
Muszę zablokować adresy IP przez określony czas, a następnie automatycznie odblokować.
Ktoś powiedział mi, że jest to możliwe, ale nie mogę znaleźć niczego na stronach google lub man.
Muszę zablokować adresy IP przez określony czas, a następnie automatycznie odblokować.
Odpowiedzi:
Jeśli masz na myśli to, że iptables całkowicie usunie regułę, o ile wiem, nie będziesz w stanie tego zrobić. Jaki jest tego cel? Jeśli potrzebujesz jakiegoś rodzaju automatycznego tymczasowego banowania, standardowym rozwiązaniem jest fail2ban .
Alternatywnie możesz użyć zadania cron, aby usunąć dodawaną regułę lub, lepiej, jeśli chcesz to zrobić interaktywnie, at
zadanie:
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
Zobacz także recent
moduł iptables. Może --seconds
to być pomocne w zależności od rzeczywistych potrzeb. man iptables
po więcej informacji.
/bin/sh
domyślnie. Ale prawdopodobnie nie będzie to problemem w tym przypadku.
Umieść w regułach komentarz ze znacznikiem czasu (prawdopodobnie kilka sekund od epoki). Okresowo przeciągnij po wygasłe reguły.
Zauważ, że najnowsze jądro Linuksa obsługuje dynamiczne ładowanie adresów IP do pamięci podręcznej sprawdzanej przez reguły iptable zamiast jako bezpośrednie reguły iptables.
Przykład:
iptables -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'
Możesz oczywiście iptables -D INPUT $1
zamiast wypisać polecenie.
iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'
tam tworzone są zasady, takie jak:iptables -A FORWARD -j DROP -m comment --comment "exp@EPOCH"
iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
iptables ma metodę automatycznego dodawania adresów IP do listy, jeśli spełnione są warunki zdefiniowane przez użytkownika. Używam następujących, aby uniknąć automatycznych prób włamań do mojego portu ssh:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
Pomaga to ograniczyć zautomatyzowane próby uzyskania dostępu do serwera, ograniczając próby połączenia z tego samego adresu IP do jednego co 60 sekund.
Jeśli chcesz zezwolić na określoną liczbę prób w określonym przedziale czasowym, na przykład 4 w ciągu 5 minut, a w przypadku niepowodzenia, umieść je na czarnej liście przez dłuższy czas, na przykład 24 godziny, możesz zrobić coś takiego:
iptables -X black
iptables -N black
iptables -A black -m recent --set --name blacklist -j DROP
iptables -X ssh
iptables -N ssh
iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP
iptables -I ssh 2 -m recent --update --name timer --reap --seconds 600 --hitcount 4 -j black
iptables -I ssh 3 -m recent --set --name timer -j ACCEPT
iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh
Powyżej tworzymy 2 łańcuchy; „ssh” i „black” oraz 2 listy; „timer” i „czarna lista”.
Krótko; ostatni pokazany powyżej łańcuch to „wejście” do łańcucha ssh.
Opcja „--reap” informuje jądro, aby przeszukiwało listę i usuwało wszystkie elementy, które są starsze niż ustawiony limit czasu; 5 minut dla listy „timer” i 24 godziny dla listy „czarnej listy”.
Uwaga: dodatkowe spacje są czytelne i są opcjonalne w skrypcie powłoki.
IPTables ma specjalnie do tego stworzoną funkcję: Zestaw IP. Regułę tworzy się raz, a ona będzie się powtarzać jak zwykle, ale sprawdza, czy w zestawie IPS (lub portach) nie ma zgodności. Fajne jest to, że ten zestaw można dynamicznie i skutecznie aktualizować bez zakłócania reszty zapory.
Tak więc, aby go użyć, nadal będziesz musiał użyć at
lub cron
zaplanować usunięcie.
Możesz użyć fail2ban, aby zablokować adresy IP i skonfigurować czas, przez który adres zostanie zablokowany.
Jak ktoś już powiedział: do tej funkcji należy użyć ipset.
ipset może dodać adres IP z wartością limitu czasu. Po upływie limitu czasu rekord zostanie automatycznie usunięty z ipset.
timeout
All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example:
ipset create test hash:ip timeout 300
ipset add test 192.168.0.1 timeout 60
ipset -exist add test 192.168.0.1 timeout 600
http://ipset.netfilter.org/ipset.man.html
Jest to preferowany sposób kontrolowania tego zachowania.
W zależności od tego, co dokładnie chcesz osiągnąć, w tym celu można użyć modułów najnowszych lub czasowych.
Oba są udokumentowane na stronie podręcznika iptables .