GNU/Linux >> Znalost Linux >  >> Linux

Jak zastavit/zabránit SSH bruteforce

Řešení 1:

Jak získat přístup?

Není jasné, proč nemáte přístup ke svému účtu.

Pokud je váš počítač napaden nebo je vysoce zatížen, měli byste si promluvit se svým poskytovatelem o omezení přístupu (IP Restrictions) nebo uvedení serveru do režimu offline (odpojení od internetu).

Můžete také vyžadovat mimopásmový přístup, se kterým vám může pomoci váš poskytovatel.

Pokud někdo narušil váš server, možná budete muset obnovit ze záloh nebo použít obraz pro obnovení.

Jak zabránit útokům na váš server, zejména SSH

nejlepší způsob, jak zabránit přihlášení hrubou silou?

Především jim nedovolte, aby se dostali k vašemu stroji! Existuje mnoho způsobů, jak zastavit pokusy o hrubou sílu dříve, než se dostanou k vašemu hostiteli, nebo dokonce na úrovni SSH.

Jak už bylo řečeno, chránit váš operační systém pomocí něčeho jako fail2ban je skvělý nápad. http://cs.wikipedia.org/wiki/Fail2ban

Fail2ban je podobný DenyHosts ... ale na rozdíl od DenyHosts, které se zaměřují na SSH, lze fail2ban nakonfigurovat tak, aby sledoval jakoukoli službu, která zapisuje pokusy o přihlášení do souboru protokolu, a namísto použití /etc/hosts.deny pouze k blokování IP adres/hostitelů, fail2ban můžete použít Netfilter/iptables a TCP Wrappery /etc/hosts.deny.

Existuje řada důležitých bezpečnostních technik, které byste měli zvážit, abyste zabránili přihlašování hrubou silou:

SSH:

  • Nepovolit přihlášení root
  • Nepovolovat hesla ssh (použít ověřování soukromým klíčem)
  • Neposlouchejte v každém rozhraní
  • Vytvořte síťové rozhraní pro SSH (např. eth1), které se liší od rozhraní, ze kterého obsluhujete požadavky (např. eth0)
  • Nepoužívejte běžná uživatelská jména
  • Použijte seznam povolených a povolte pouze uživatele, kteří vyžadují přístup SSH
  • Pokud požadujete přístup k internetu...omezte přístup na omezenou množinu adres IP. Ideální je jedna statická IP, ale její zamykání na x.x.0.0/16 je lepší než 0.0.0.0/0
  • Pokud je to možné, najděte způsob, jak se připojit bez přístupu k internetu, tímto způsobem můžete odepřít veškerý internetový provoz pro SSH (např. s AWS můžete získat přímé připojení, které obchází internet, nazývá se Direct Connect)
  • K zachycení jakýchkoli útoků hrubou silou použijte software jako fail2ban
  • Ujistěte se, že operační systém je vždy aktuální, zejména balíčky zabezpečení a ssh

Aplikace:

  • Ujistěte se, že je vaše aplikace vždy aktuální, zejména balíčky zabezpečení
  • Zamkněte „administrátorské“ stránky vaší aplikace. Mnoho z výše uvedených rad platí také pro oblast správy vaší aplikace.
  • Heslo Chraňte svou administrátorskou oblast, něco jako htpasswd pro webovou konzoli promítne veškeré základní zranitelnosti aplikace a vytvoří další překážku vstupu
  • Zamkněte oprávnění k souboru. 'Nahrávací složky' jsou známé tím, že jsou vstupními body pro všechny druhy ošklivých věcí.
  • Zvažte umístění své aplikace za privátní síť a vystavení pouze frontendového nástroje pro vyrovnávání zatížení a jumpboxu (toto je typické nastavení v AWS pomocí VPC)

Řešení 2:

jak mohu potlačit tento útok a zabránit následujícím útokům

Obvykle změním výchozí port ssh z 22 na jiný, jako je 1122. To zabrání mnoha automatickým útokům od botů, ale jednoduchý sken portu to dokáže zjistit. Každopádně:

vi /etc/ssh/sshd_config

a upravte Port 22 na Port 1122 , ale to nestačí.

Automatická pravidla IPTables na bruteforce

používám log2iptables https://github.com/theMiddleBlue/log2iptables místo toho Fail2ban, protože je to jednoduchý skript Bash, který analyzuje jakýkoli soubor protokolu s regulárním výrazem a spouští iptables. Když například dojde k 5 shodám, log2iptables zahodí konkrétní IP adresu. Je to skvělé, protože používám Telegram API a může mi poslat zprávu na můj telefon, když najde problém :)

doufám, že to pomůže!

Řešení 3:

Právě jsem to dal dohromady, spouštím každých 15 minut jako cronjob atd.:

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done

Linux
  1. Jak nastavit SSH tunelování

  2. Jak nastavit klíče SSH

  3. Jak zastavit přidávání IP z EC2 do známých_hostitelů pro ssh?

  1. Jak SSH na server pomocí jiného serveru?

  2. Ssh – Jak funguje Tcp-keepalive v Ssh?

  3. SSH - Jak zahrnout příkaz -t do souboru ~/.ssh/config

  1. Jak zastavit službu systemd

  2. Jak ukončím připojení SSH?

  3. Jak zakázat přístup k zakázaným účtům AD přes kerberos v pam_krb5?