Omezení počtu připojení
Pro ochranu před brute force (hrubou silou/lomením hesel) lze omezit počet připojení na port 22 z jedné IP adresy na několik pokusů za minutu, poté co jsou pokusy o připojení z dané IP adresy zablokovány.
## Создание цепочки правил 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 jádra (Core Netfilter Configuration), který umožňuje vytvářet dynamické seznamy IP adres. Modul podporuje řadu voleb
-
--name name : název seznamu, se kterým příkaz pracuje. Ve výchozím nastavení se pro seznam používá jméno DEFAULT
-
--rcheck : tato volba zkontroluje, zda se adresa odesílatele paketu nachází v seznamu. Pokud adresa v seznamu není, vrátí hodnotu false.
-
--update : tato volba zkontroluje, zda se adresa odesílatele paketu nachází v seznamu. Pokud adresa je přítomna, odpovídající záznam bude aktualizován. Pokud adresa v seznamu není, vrátí hodnotu false.
-
--hitcount hits : počítadlo, které vrací true, pokud se adresa nachází v seznamu a počet přijatých paketů z této adresy je větší nebo roven zadané hodnotě. Používá se společně s rcheck nebo update
-
--seconds seconds : určuje období (od okamžiku přidání adresy do seznamu), po které může adresa v seznamu zůstat
-
--set : slouží k přidání adresy odesílatele paketu do seznamu. Pokud je tato adresa již v seznamu, záznam bude aktualizován
-
--remove : odstraní adresu ze seznamu. Pokud adresa nebyla nalezena, vrátí false.
Volby mohou být použity s inverzí (!)
Malé pravidlo pro iptables, které pomáhá nepouštět porty otevřené zbytečně.
Příklad pro přístup k SSH, ačkoli, jak sami chápete, lze jej použít libovolně.
Podstata pravidla je jednoduchá – pro otevření přístupu k shellu je nejprve nutné „klepnout“ na port 1500:
například pomocí telnetu:
telnet myserver 1500
nebo přes prohlížeč:
http://192.168.0.100:1500
příslušně, pokud „klepnete“ na port 1499, port se uzavře.
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
Otevření SSH portu na určený čas
Další příklad ukazuje způsob otevření SSH portu pro určitou IP adresu na určený čas.
## определяем цепочку для 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
Nyní, abyste získali přístup přes SSH, musíte nejprve „klepnout“ na port 222, například takto:
ssh user@server.name -p 222
po tomto kroku bude přístup pro vaši IP adresu na port 22 povolen na uvedený čas, přičemž každý nový připojení k SSH tento čas prodlouží. Pokud nechcete prodloužení času, nahraďte --update --seconds 108000 za --rcheck.
