Crmgo Blog

Dynamické otevírání/zavírání SSH portu

Dynamické otevírání/zavírání SSH portu

Omezení počtu připojení Pro ochranu proti útoku hrubou silou (brute force) lze omezit počet připojení na port 22 z jedné IP adresy na několik pokusů za minutu, poté blokovat další pokusy o připojení z této IP adresy. recent je modul jádra (Core…

Dynamické otevírání/zavírání SSH portu

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


 

 

 

Port se otevírá pouze pro IP adresu, z které byl otevřen.

 

 

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.

Poznámka: příspěvek mohl vzniknout s pomocí AI a lidskou redakcí. Odpovědný: Dmytro Lomaka, Kaltenkirchen.