GNU/Linux >> Znalost Linux >  >> Linux

Jak (dále) zajistit bezpečnost SSH?

Udělejte co nejvíce zmírňujících opatření.

Vaším cílem je donutit širokou škálu potenciálních útočníků, aby vynaložili více úsilí, zdrojů, počítačového času (a tím i účtu za elektřinu) a především „kvalifikovaných“ (vzácných nebo vzácných, a tedy cenných) osobohodin. Žádná ochrana nefunguje proti každé hrozbě. Ne proti každé hrozbě lze chránit a přitom zůstat na internetu.

Velké množství hrozeb (skriptové děti a útočníci s nízkou kvalifikací nebo s nízkými zdroji) však lze porazit téměř vždy tím, že budete mít obranu do hloubky – mnoho vrstev dobrého a solidního zabezpečení, z nichž každá by – teoreticky – měla stačit k tomu, aby porazit mnoho hrozeb sám. Když tedy pravidla iptables vašeho systému někoho nechtěně pustí dovnitř, autentizace certifikátem SSHD ho zadrží. Když má vaše služba SSHD chybu, vaše VPN zabrání komukoli, aby ji viděl. Když má vaše VPN i vaše SSHD zároveň chybu, vaše pravidla brány firewall zabraňují většině světových IP adres, aby se o to vůbec pokusila, takže pouze místní obyvatelé a velké botnety budou moci vyzkoušet a zneužít zranitelnosti, které opravíte jako co nejdříve.

Znovu tedy říkám, zaveďte co nejvíce zmírnění na co nejvíce úrovních. Nemůžete předem vědět, které z nich mají neobjevené zranitelnosti a v jakém pořadí budou zneužity.

  • Ujistěte se, že povolujete pouze SSH v2

    • sshd_config

      • Protokol 2
  • Zůstaňte v záplatě

  • Použijte své iptables k povolení POUZE IP adres nebo rozsahů, které skutečně používáte

  • Nastavte si SSH tak, aby umožňoval přístup POUZE pomocí certifikátu, nikoli pomocí uživatelského jména/hesla, na stránce nápovědy Ubuntu SSH/OpenSSH/Konfigurace

    • sshd_config

      • PubkeyAuthentication ano

      • PasswordAuthentication no

    • Pokud používáte šifrovaný domovský adresář

      • AuthorizedKeysFile /etc/ssh/%u/authorized_keys
    • Pokud ne, normální nastavení pro domovské adresáře může fungovat

      • AuthorizedKeysFile %h/.ssh/authorized_keys

      • Ujistěte se, že pro něj nejsou nadměrná oprávnění.

        • chmod 700 ~/.ssh

        • chmod 600 ~/.ssh/authorized_keys

        • chmod go-w ~

    • A nastavte si tak silný certifikát, jak jen můžete. Generování klíčů je popsáno na stránce nápovědy Ubuntu SSH/OpenSSH/Keys

      • Začal bych 4096bitovým klíčem RSA nebo klíčem ed25519 s dlouhou a silnou přístupovou frází. Ujistěte se, že jej vygenerujete lokálně, na výzvu zadejte dlouhou a silnou přístupovou frázi, použijte -o, abyste zajistili nový formát klíče OpenSSH 6.5, a ujistěte se, že server nikdy nemá nic jiného než veřejný klíč.

        • ssh-keygen -o -t ed25519 -f ~/.ssh/id_ed25519

        • ssh-keygen -o -b 4096 -t rsa -f ~/.ssh/id_rsa

        • Chcete-li zkontrolovat délku existujícího klíče, použijte ssh-keygen -e -f mykeyfile

    • Pokud můžete, omezte klíče v souboru author_keys na konkrétní IP adresu nebo sadu názvů hostitelů

    • Pokud používáte OpenSSH 6.8 nebo vyšší, můžete také omezit autorizované klíče na určité typy v sshd_config

      • PubkeyAcceptedKeyTypes ssh-ed25519*,ssh-rsa*
  • Použijte fail2ban, aby pokusy o hrubou sílu vyžadovaly více úsilí (tj. přiměli je používat botnet místo pouze jednoho počítače nebo aby zabraly spoustu času)

    • Nastavení certifikátů (klíčů) je lepší, pokud se ptáte, který z nich udělat jako první
  • Zkraťte dobu odkladu přihlášení

    • Pokud používáte certifikáty, máte možnost to DÁLE snížit, pokud nepoužíváte velmi, velmi pomalá připojení

      • LoginGraceTime 8
    • Jinak, jak rychle píšete?

      • LoginGraceTime 20
  • Kontrolujte své volby šifrovací sady pomocí informací z Mozilla.org Security/Guidelines/OpenSSH

    • Protože je to váš server a do něj vstupujete pouze vy, můžete vybrat velmi, velmi těsné seskupení, takže jsou povoleni pouze nejmodernější klienti. Možná

    • HostKey /etc/ssh/ssh_host_rsa_key

      • sudo ssh-keygen -o -N '' -b 4096 -t rsa -f /etc/ssh/ssh_host_rsa_key

        • nebo

        • HostKey /etc/ssh/ssh_host_ed25519_key

        • sudo ssh-keygen -o -N '' -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

      • zjevně přesně odpovídají vašim názvům souborů HostKey!

        • nebo obojí (nejvýhodnější první)

        • zcela odstranit všechny klíče DSA; jsou opraveny na žalostných 1024 bitů pro SSH

    • Pomocí direktiv ssh -Q určete, co váš systém podporuje pro možnosti šifrovací sady

    • KexAlgorithms [email protected]

    • Šifry [email protected],[email protected],[email protected]

    • MAC [email protected]

    • Nebo jakákoli konkrétní volba, díky které se cítíte nejbezpečněji

    • A držet krok s literaturou; když je v něčem, co jste si vybrali, chyba, vyberte něco, co v daném okamžiku nemá žádné známé chyby.

  • Použijte své iptables (nebo firewall) se seznamy blokovaných z I-blocklist

  • Používejte své iptables (nebo firewall) s geografickými seznamy IP nebo seznamy IP založené na ISP; jedním takovým zdrojem geografických seznamů je maxmind.com

  • Přepněte na port v dynamickém (efemérním) rozsahu portů 49152 až 65535 na RFC6335

    • A vázat se pouze na požadované adresy IP
  • Blokujte všechny ostatní porty na tomto serveru přes iptables; je pravděpodobné, že vás zasáhne HODNĚ útoků

    • Obzvláště zpevněte svou databázi MySQL, pokud existuje - vidím spoustu útoků MySQL (a SQL Serveru) na můj IDS a nikdy jsem žádný z nich nespustil ani neměl otevřený žádný port. Nastavte je pouze na místní, nesměrovatelné IP atd., dlouhá hesla, deaktivujte je atd.

    • Zejména deaktivujte jakékoli webové servery, nastavte je pouze na místní, nesměrovatelné IP atd.

  • Použijte klepání portů na webu nápovědy Ubuntu nebo v článku DigitalOcean

  • Omezení nových pokusů o připojení podle této odpovědi na otázku ServerFault "Stovky neúspěšných přihlášení ssh"

iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP

iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT

  • Zvažte použití chrootu podle dokumentace k Debianu "OpenSSH SFTP chroot() with ChrootDirectory"

  • Zajistěte, aby byl rhosts zakázán pomocí možnosti sshd_config

    • IgnorovatRhosts ano

    • RhostsRSAAč. ověření

    • RhostsAuthentication no

  • Přidejte další omezení do neprivilegovaného procesu předběžného ověření

    • Použijte izolovaný prostor PrivilegeSeparation
  • Pokud nepoužíváte fowarding nebo tunelování, deaktivujte je v sshd_config

    • X11Přesměrování ne

    • AllowTcpForwarding no

    • GatewayPorts č

    • PovoleníTunnel č

  • Zabraňte dalšímu nezabezpečenému nastavení v adresářích nebo oprávnění

    • StrictModes ano

    • A pak si projděte svá oprávnění a nastavení, dokud to nebude zase fungovat :)

  • Zakázat ověřování založené na hostiteli

    • HostbasedAuthenticationNo.
  • Všimněte si, že podle odpovědi This Serverfault na "Démon OpenSSH ignoruje direktivu ServerKeyBits" již není použitelná stará direktiva ServerKeyBits sshd_config, protože v první řadě nepovolujete SSH v1.

  • Nepovolit root v sshd_config

    • Číslo přihlášení PermitRoot
  • Nedovolte různým uživatelům – možná uživatelům služeb na některém balíčku, který nainstalujete – mít jiné možnosti

    • Č. PermitUserEnvironment
  • Nainstalujte mezi tento počítač a okolní svět samostatný, kompletní firewall, jako je pfSense nebo Ubiquiti Edgerouter Lite.

    • A pak použijte vestavěnou VPN DOPLNĚK vaše tvrzené přihlášení SSH

    • Také s přihlášeními na základě certifikátu, nikoli přihlášením na základě uživatelského jména/hesla

    • Pokud používáte OpenVPN

      • Ujistěte se, že používáte také předsdílený klíč --tls-auth "ta.key"

      • A vyberte lepší šifry než výchozí

    • A na této úrovni také používejte výše uvedené blokované seznamy

Jak zmínil DeerHunter, změna ssh a/nebo iptables a/nebo jiných nastavení firewallu bez jakéhokoli jiného způsobu může mít za následek nedostatek schopnosti vstoupit SSH.


Tady to je:

  • Vygenerujte klíče SSH a chraňte je heslem
  • Povolit přihlášení pouze konkrétnímu uživateli (AllowUsers)
  • Povolit z konkrétní adresy IP [email protected]
  • Změnit výchozí port
  • Vytvořte pravidla brány firewall
  • a poslední věc nainstalujte fail2ban.

Linux
  1. Jak změnit port SSH v Linuxu

  2. Jak nastavit SSH tunelování

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

  1. Jak přimět ssh, aby se přihlásil jako správný uživatel?

  2. Jak zajistit, aby sdílené klíče .ssh/authorized_keys a sudo spolupracovaly?

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

  1. Jak vytvořit VPN

  2. CentOS / RHEL :Jak omezit přihlašování SSH podle denní doby

  3. Jak zajistit vypršení platnosti pravidel iptables?