ssh-serveur.md 5.2 KB
Newer Older
kyodev's avatar
kyodev committed
1 2
# serveur ssh, authentification par clé

kyodev's avatar
kyodev committed
3 4 5 6 7

* chmod 700 sur ~/.ssh (pas obligatoire mais conseillé)
* chmod 600 sur les fichiers key (obligatoire, vérification par openssh)
* root requis pour la configuration du serveur ssh

kyodev's avatar
kyodev committed
8

kyodev's avatar
kyodev committed
9
## installation debian
kyodev's avatar
kyodev committed
10

kyodev's avatar
kyodev committed
11
si nécessaire
kyodev's avatar
kyodev committed
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

```shell
apt install openssh-server
```
les clés du serveur sont générées automatiquement à l'installation du serveur



## configuration

```text
editor /etc/ssh/sshd_config
```

par défaut:

* PubkeyAuthentication yes 
* AuthorizedKeysFile  .ssh/authorized_keys .ssh/authorized_keys2
* ChallengeResponseAuthentication no
* PermitRootLogin prohibit-password (synonyme de without-password)


modification:

* `PasswordAuthentication no` pour désactiver l'accès par pass (**important**)
* `Port 5555` pour éviter le port standard 22, voir [ports iana](https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml)


pour faire simple, ajout bloc suivant en fin de fichier :
```text
	# modifications ultérieures éventuelles facilitées
 #LogLevel DEBUG
 #AuthorizedKeysFile  .ssh/authorized_keys

	# standard répété
ChallengeResponseAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes

	# changement port d'écoute
Port 5555
	# suppression accès par mot de passe
PasswordAuthentication no
	# même pas avec une clef !
PermitRootLogin no
kyodev's avatar
kyodev committed
57 58
```

kyodev's avatar
kyodev committed
59

kyodev's avatar
kyodev committed
60
```text
kyodev's avatar
kyodev committed
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
	# facultatif ipv4
AddressFamily inet

	# facultatif, restreindre l'accès à certains
AllowUsers <user>
```

relancer le service: `systemctl restart sshd`



## connexion client

le client a une clé autorisée sur le serveur. pour la génération et la publication, voir 
<https://kyodev.frama.io/kyopages/trucs/ssh/ssh-client/>


```shell
ssh <user>@SRV

```
le **mot de passe de la clé** n'est pas demandé et la connexion se fait correctement



## ça marche

* commenter `LogLevel DEBUG` pour désactiver debug éventuel



## ça marche pas

* activer `LogLevel DEBUG` sur le serveur 
* surveiller `tail -n 20 -f /var/log/auth.log`
* côté client, se connecter avec `ssh -vv user@SRV`


* vérifier les droits
* vérifier les **droits**
* **vérifier les droits**
  * chmod 700 sur ~/.ssh
  * chmod 600 sur les fichiers
* droits sur le serveur, du côté user 600 sur les keys


* **MAIS AUSSI**, un /home/user correct, 777 proscrit, 755 c'est un minimum mieux

* journalctl -xe
* systemctl status sshd.service

* systemctl list-units | grep ssh
* systemctl list-unit-files | grep ssh



## config serveur rapide

```text
	# modifications ultérieures éventuelles facilitées
 #LogLevel DEBUG
 #AuthorizedKeysFile  .ssh/authorized_keys

	# standard
ChallengeResponseAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes

	# modifications
Port 5555
PasswordAuthentication no
PermitRootLogin no

	# ipv4
AddressFamily inet
	# restreindre l'accès à certains
AllowUsers user1 user2
```

kyodev's avatar
kyodev committed
140 141 142 143 144 145 146 147 148 149
de manière plus ou moins aléatoire?, la connexion inactive provoque une erreur genre:
```shell
packet_write_wait: Connection to <ip server> port <port>: Broken pipe
```

selon [cette page](https://patrickmn.com/aside/how-to-keep-alive-ssh-sessions/), essai:
```text
ClientAliveInterval 300
ClientAliveCountMax 2
```
kyodev's avatar
kyodev committed
150

kyodev's avatar
kyodev committed
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
## fail2ban

```shell
su
apt install fail2ban
systemctl enable fail2ban.service
systemctl start fail2ban.service

echo [sshd]               > /etc/fail2ban/jail.d/90sdeb.local
echo "enabled = true"    >> /etc/fail2ban/jail.d/90sdeb.local
echo "filter  = sshd"    >> /etc/fail2ban/jail.d/90sdeb.local
echo "#port = ssh, sftp, 5555"    >> /etc/fail2ban/jail.d/90sdeb.local
echo "mode = extra"      >> /etc/fail2ban/jail.d/90sdeb.local
echo "maxretry = 3"      >> /etc/fail2ban/jail.d/90sdeb.local
echo "findtime = 3600"   >> /etc/fail2ban/jail.d/90sdeb.local
echo "bantime = 86400"   >> /etc/fail2ban/jail.d/90sdeb.local

fail2ban-client reload
```

* par défaut, port = 0:65535
* si pas de syslog (journal systemd): `echo "backend = systemd" >> /etc/fail2ban/jail.d/90sdeb.local`
* enabled = true dans /etc/fail2ban/jail.d/defaults-debian.conf
* .local surcharge .conf, fail2ban/jail.d/ surcharge fail2ban/


vérifier:
```shell
systemctl status fail2ban.service
kyodev's avatar
kyodev committed
180 181 182 183 184

fail2ban-client -d

su

kyodev's avatar
kyodev committed
185
iptables -S | grep f2b
kyodev's avatar
kyodev committed
186 187 188 189 190
	-N f2b-sshd
	-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
	-A f2b-sshd -s <xyz> -j REJECT --reject-with icmp-port-unreachable
	-A f2b-sshd -j RETURN

kyodev's avatar
kyodev committed
191
iptables -L
kyodev's avatar
kyodev committed
192 193
	target     prot opt source               destination 
	REJECT     all  --  <xyz>                  anywhere             reject-with icmp-port-unreachable
kyodev's avatar
kyodev committed
194 195 196 197 198 199 200 201 202 203
```

suivre les logs:
```shell
tail -f /var/log/fail2ban.log
```

unban:
```shell
fail2ban-client status sshd
kyodev's avatar
kyodev committed
204 205 206 207 208 209 210 211 212 213
	Status for the jail: sshd
	|- Filter
	|  |- Currently failed:	0
	|  |- Total failed:	0
	|  `- File list:	/var/log/auth.log
	`- Actions
	   |- Currently banned:	1
	   |- Total banned:	1
	   `- Banned IP list:	<xyz>

kyodev's avatar
kyodev committed
214 215 216 217 218
fail2ban-client unban <IP>
```
mais ne résiste pas à un restart du service fail2ban


kyodev's avatar
kyodev committed
219 220 221
## liens divers

* <https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml>
kyodev's avatar
kyodev committed
222 223 224
* <https://github.com/fail2ban/fail2ban/wiki>
* <https://wiki.debian-fr.xyz/Fail2ban>
* <https://doc.ubuntu-fr.org/fail2ban>
kyodev's avatar
kyodev committed
225
* <https://wiki.archlinux.org/index.php/SSH_keys>
kyodev's avatar
kyodev committed
226 227
* <https://github.com/arthepsy/ssh-audit>
* <https://github.com/jtesta/ssh-audit>