Ograničavanje broja konekcija
Za zaštitu od brute force (pucanja lozinki), možete ograničiti broj konekcija na port 22 sa jedne IP adrese na nekoliko puta u minuti, nakon čega se blokiraju pokušaji konekcije za tu IP adresu.
## Создание цепочки правил sshguard
# Максимум 2 новых запроса в минуту для одного ip
/sbin/iptables -N sshguard
# Вкл. лог по желанию
#/sbin/iptables -A sshguard -m state --state NEW -m recent --name SSH --rcheck --seconds 60 --hitcount 2 -j LOG --log-prefix "SSH-shield: "
/sbin/iptables -A sshguard -m state --state NEW -m recent --name SSH --update --seconds 60 --hitcount 2 -j DROP
/sbin/iptables -A sshguard -m state --state NEW -m recent --name SSH --set -j ACCEPT
/sbin/iptables -A sshguard -j ACCEPT
## Применение для трафика ssh цепочку sshguard
/sbin/iptables -A INPUT -p tcp --dport 22 -j sshguard
recent je modul jezgra (Core Netfilter Configuration) koji omogućava kreiranje dinamičkih lista IP adresa. Modul podržava niz opcija
-
--name name : ime liste sa kojom radi komanda. Podrazumevano ime liste je DEFAULT
-
--rcheck : opcija proverava da li je adresa pošiljaoca paketa prisutna u listi. Ako adresa nije u listi, vraća se vrednost false.
-
--update : opcija proverava da li je adresa pošiljaoca paketa prisutna u listi. Ako je adresa prisutna, odgovarajući zapis se ažurira. Ako adresa nije u listi, vraća se vrednost false.
-
--hitcount hits : brojač, vraća true ako je adresa u listi i ako je broj primljenih paketa sa te adrese veći ili jednak zadatoj vrednosti. Koristi se zajedno sa rcheck ili update
-
--seconds seconds : određuje period (od trenutka dodavanja adrese u listu) tokom kojeg adresa može ostati u listi
-
--set : služi za dodavanje adrese pošiljaoca paketa u listu. Ako ta adresa već postoji u listi, zapis će se ažurirati
-
--remove : uklanja adresu iz liste. Ako adresa nije pronađena, vraća false.
Opcije se mogu koristiti sa negacijom (!)
Malo pravilo za iptables koje pomaže da se portovi ne drže otvorenima bez potrebe.
Primer za pristup SSH, mada, kao što sami shvatate, možete ga koristiti na bilo koji način.
Suština pravila je jednostavna - da biste otvorili pristup shell-u, prvo morate "kucati" na port 1500:
npr. putem telnet-a:
telnet myserver 1500
ili preko pregledača:
http://192.168.0.100:1500
shodno tome, ako "kucnete" na port 1499, port će se zatvoriti
iptables -N sshguard # Если адрес в списке, то подключение разрешено iptables -A sshguard -m state --state NEW -m recent --rcheck --name SSH -j ACCEPT # Разрешить пакеты для уже установленных соединений iptables -A sshguard -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A sshguard -j DROP # Заносит адрес в список #iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1500 -j LOG --log-prefix "SSH-open: " iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1500 -m recent --name SSH --set -j DROP # Удаляет адрес из списка iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1499 -m recent --name SSH --remove -j DROP # Применение для трафика ssh цепочку sshguard iptables -A INPUT -p tcp --dport 22 -j sshguard
Otvaranje SSH porta na određeno vreme
Još jedan primer prikazuje način otvaranja SSH porta za određenu IP adresu na zadato vreme.
## определяем цепочку для SSH трафика
iptables -N sshguard
iptables -F sshguard
# Разрешить подключение если ip есть в списке и последнее подключение осуществлялось не позднее 108000 секунд (30 часов)
iptables -A sshguard -m state --state NEW -m recent --update --seconds 108000 --name SSH -j ACCEPT
# Разрешить пакеты для уже установленных соединений
iptables -A sshguard -m state --state ESTABLISHED,RELATED -j ACCEPT
# Заблокировать если нет в списке
iptables -A sshguard -j DROP
## Открытие SSH
iptables -A INPUT -m state --state NEW -p tcp --dport 222 -m recent --name SSH --set
## Фильтрация ssh трафика через цепочку sshguard
iptables -A INPUT -p tcp --dport 22 -j sshguard
Sada, da biste dobili SSH pristup, prvo morate "kucnuti" na port 222, npr. ovako:
ssh user@server.name -p 222
nakon toga, pristup za vašu IP adresu na port 22 biće dozvoljen na navedeno vreme, pri čemu svaka nova konekcija na SSH produžava to vreme. Ako ne želite produženje vremena, zamenite --update --seconds 108000 sa --rcheck.
