OpenSSH Server Sikkerhedspraksis

OpenSSH er en sikker måde at tilgå serveren remove. Bruges til remove login,fil overførsel med scp eller sftp, på en sikker måde. Men der er altid plads til forbedring. Det er det jeg vil komme ind på i denne artikel. 16 check som gør din SSH mere sikker.

Her er en terminal på windows til en linux server.

OpenSSH.

  • TCP port 22
    Server config fil er gemt. (/etc/ssh/sshd_config)
  • klient config fil er gemt. (/etc/ssh/ssh_config)

1. Brug SSH public nøgle som login.

Med OpenSSH server kan man bruge flere typer at adgangskontrol. Den anbefalede metode er brug af public nøgle login. For at kunne gøre det kræver det du har en din egen nøgle på din pc’er. For at oprette en skal man bruge programmet ssh-keygen på linux. Man kan også bruge putty programmet til windows. Men jeg viser det på Linux her.

DSA og RSA 1024 eller lavere skal man ikke bruge. Så heller bruge RSA nøgler.

$ ssh-keygen -t nøgle_type -b antal bits -C "kommentar"
$ ssh-keygen -t ed25519 -C "Login til cluster"
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_aws_$(date +%Y-%m-%d) -C "AWS key"

Når du har oprettet nøglerne, skal du copy dem til serveren før du kan bruge dem. Det har OpenSSH også en løsning på med kommandoen ssh-copy-id.

$ ssh-copy-id bruger@server_navn_eller_ip_adressse
$ ssh-copy-id -i path_til_public_nøgle_fil bruger@server_navn_eller_ip_adressse

Den vil derefter spørge om password som du taster ind. Og så sker der magi. Den installere selv din nøgle på serveren, så den er klar til at man kan login uden at oplyse kodeord.

Du kan nu teste om du kan login med ssh.

$ ssh bruger@server_navn_eller_ip_adressse
$ ssh -p 2222 bruger@server_navn_eller_ip_adressse

2. Disable root bruger login på serveren.

Før vi fjerner root login adgang er det en god ide lige af checke om den bruger man normal bruger kan bruge sudo. For at tilføje en bruger til sudo gruppen skriver du. Og checker med id kommandoen.

$ sudo adduser bruger sudo
$ id bruger

test nu at du kan sudo med

$ sudo -i
$ sudo service sshd status
$ sudo systemctl status httpd

Når det spiller skal vi fjerne root login fra sshd. Du skal tilføje disse linjer til  /etc/ssh/sshd_config filen.

PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

3. Fjern password login på serveren.

Alle kodeord baseret login skal disables. Så man kun kan login med keys. Tilføj følgende i konfig filen: /etc/ssh/ssh_config

AuthenticationMethods publickey
PubkeyAuthentication yes
Older version of SSHD on CentOS 6.x/RHEL 6.x user should use the following setting:
PubkeyAuthentication yes

4. Fjern brugers ssh adgang.

Default kan alle bruger login med ssh med kode ord eller public ssh nøgle. Nogle gange har du brug for ftp bruger som ikke må login med ssh. Så der er en mulighed for at fortælle ssh serveren hvilken brugere som må login. Det gør du med at tilføje til sshd konfig filen.

AllowUsers bruger1 bruger2

Eller modsat fjerne adgang med.

DenyUsers root

Der er også mulighed for at bruge Linux PAM til at konfigurere bruger adgang.

5. Disable tomme kodeord.

Du skal igen fortælle sshd at man skal bruge kodeord med denne  linje i config filen.

PermitEmptyPasswords no

6. Brug stærke kodeord.

Det kan ikke understreges nok, hvor vigtigt det er at bruge stærke brugeradgangskoder og adgangskode til dine nøgler. Brute force-angreb fungerer, fordi brugeren går til ordbogsbaserede adgangskoder. Du kan tvinge brugere til at undgå adgangskoder mod et ordbogangreb og bruge john ripper-værktøjet eller hashcat som du kan læse om her til at finde ud af eksisterende svage adgangskoder. Her er en tilfældig adgangskodegenerator som du kan placere i din ~/.bashrc fil. så kan du bare skrive genpasswd.

genpasswd() {
	local l=$1
       	[ "$l" == "" ] && l=20
      	tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}

$ genpasswd
uw8CnDVMwC6vOKgW

7. Firewall og SSH.

Du skal opdatere din firewall og åbne for den port som du bruger som normal er port 22 TCP.

$ sudo iptables -I INPUT -p tcp -s ip_adresse --dport 22 -j ACCEPT

Eller hvis du bruger ufw.

$ sudo ufw allow from 202.54.1.5/29 to any port 22

8. Ændre hvilken ip adresse og port som ssh serveren lytter på

Default lytter SSH serveren på alle interfaces den kan finde. Dette kan ændres ved at rette sshd_config filen. Men disse parametre.

Port 300
ListenAddress 192.168.1.5
ListenAddress 202.54.1.5

9. Brug TCP wrapper.

TCP wrapper er et host baseret system som filtere netværks adgang til internettet. Du skal bare opdatere /etc/host.allow filen som vist her.

sshd: 192.168.0.1 172.16.23.12

10. Stop bruce force angreb mod serveren

For at stoppe disse typer af attack kan du installere nogle værktøjer.

  • Brug DenyHosts filen.
  • fail2ban
  • sshguard
  • sshblock

Du kan finde informationer om dem på internettet.

Iptables eksemple

Dette er et eksempel på hvordan man får iptables til at droppe forbindelsen hvis den laver mere en 5 forbindelser inden for 60 sekunder.

#!/bin/bash

IPT=iptables inet_if=eth0 ssh_port=22 $IPT -I INPUT -p tcp –dport ${ssh_port} -i ${inet_if} -m state –state NEW -m recent –set $IPT -I INPUT -p tcp –dport ${ssh_port} -i ${inet_if} -m state –state NEW -m recent –update –seconds 60 –hitcount 5 -j DROP

 

Call dette script fra dit iptable start script.

En anden mulighed er:

$IPT -A INPUT -i ${inet_if} -p tcp –dport ${ssh_port} -m state –state NEW -m limit –limit 3/min –limit-burst 3 -j ACCEPT
$IPT -A INPUT -i ${inet_if} -p tcp –dport ${ssh_port} -m state –state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o ${inet_if} -p tcp –sport ${ssh_port} -m state –state ESTABLISHED -j ACCEPT

# Eller denne her.

$IPT -A INPUT -i ${inet_if} -m state –state NEW,ESTABLISHED,RELATED -p tcp –dport 22 -m limit –limit 5/minute –limit-burst 5-j ACCEPT

11. Configure idle time før bruger bliver smit af

Du kan sætte time out for brugere, så de ikke står og hænger. Du retter igen i Open sshd_config Og indsætter disse linjer hvis de ikke er der:

ClientAliveInterval 300
ClientAliveCountMax 0

Du sætter idle tiden i sekunder. 300 sekunder = 5 minuter. Og bruger bliver smit af systemet hvis der ikke er noget aktivitet.

12. Lav en login banner til SSH bruger ved login

Du kan lave en banner/warning besked til brugerne ved at tilføje denne linje til sshd_config:
Banner /etc/issue

Og en /etc/issue fil skal du også bruge.

----------------------------------------------------------------------------------------------
You are accessing a XYZ Government (XYZG) Information System (IS) that is provided for authorized use only.
By using this IS (which includes any device attached to this IS), you consent to the following conditions:
+ The XYZG routinely intercepts and monitors communications on this IS for purposes including, but not limited to,
penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM),
law enforcement (LE), and counterintelligence (CI) investigations.
+ At any time, the XYZG may inspect and seize data stored on this IS.
+ Communications using, or data stored on, this IS are not private, are subject to routine monitoring,
interception, and search, and may be disclosed or used for any XYZG authorized purpose.
+ This IS includes security measures (e.g., authentication and access controls) to protect XYZG interests--not
for your personal benefit or privacy.
----------------------------------------------------------------------------------------------

 

13. Disable .rhosts filer (check)

Lad være med at læse brugers ~/.rhosts og ~/.shosts fil. Du skal opdatere sshd_config med denne linje:
IgnoreRhosts yes

14. For at stoppe host based login skal du checke denne sætting (check)

HostbasedAuthentication no

15. Chroot OpenSSH (Lås brugere til deres hjemmebibliotek)

Default kan bruger flytte sig rundt på serveren som de er login på eks /etc biblioteket Du kan beskytte med ssh ChrootDirectory.

16. Disable OpenSSH server på arbejdscomputere

Arbejds pc’er eller labtop skal ikke have SSH Server installeret, med mindre det skal bruges til noget udviklings maskine, hvor det er nødvendigt for at arbejde.

$ sudo apt-get remove openssh-server

Du kan få en liste over cipher supported  af din OpenSSH server med følgende kommando:

$ ssh -Q cipher
$ ssh -Q cipher-auth
$ ssh -Q mac
$ ssh -Q kex
$ ssh -Q key
$ ssh -Q cipher
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
[email protected]
aes128-ctr
aes192-ctr
aes256-ctr
[email protected]
[email protected]
[email protected]

Hvordan tester jeg sshd_config filen og genstarter/reloader min SSH server?

Du kan teste sshd, med:
$ sudo sshd -t
Og en mere dybdegående test:
$ sudo sshd -T

Genstart af ssh gøres med :

$ sudo systemctl start ssh

Loading