Afficher la révision 40
+SSH-audit to configure sshd-config
+Les clefs publique/privées
Génération d'un couple privé/public
prompt>ssh-keygen -t rsa
prompt> ...
Genération sur stdout de la clef publique
prompt>ssh-keygen -y
Enter file in which the key is (/home/cmic/.ssh/id_rsa):
Enter passphrase:
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAou8RMHFoX6J0wH9N33rGmS?
AiyBiCEs0rAy9znwOIBxdtcTsWvVSXyF0ZW2IGzUrVZLdfAcs3BKXrn9CM?
d2Iqarl7tpc+B1Z+LdGId1WpTRNh1I1bL5Bo29OKDZr?+vknTDM7xELQbRm?
7qtAkwMRRCxty7JEaM3ostEBgLGgN9Fek?=
Genération sur stdout de la clef publique SECSH Public Key File Format
prompt>ssh-keygen -e
Enter file in which the key is (/home/cmic/.ssh/id_rsa):
- BEGIN SSH2 PUBLIC KEY -
Comment: "1024-bit RSA, converted from OpenSSH? by cmic@zombie"
AAAAB3NzaC1yc2EAAAABIwAAAIEAou8RMHFoX6J0wH9N33rGmSAiyBiCEs0rAy9znwOIBx?
dtcTsWvVSXyF0ZW2IGzUrVZLdfAcs3BKXrn9CMd2Iqarl7tpc?+B1Z+LdGId1WpTRNh1I1b?
L5Bo29OKDZr+vknTDM7xELQbRm7qtAkwMRRCxty7JEaM3ostEBgLGgN9Fek?=
- END SSH2 PUBLIC KEY -
Génération de l'empreinte (fingerprint)
prompt>ssh-keygen -l
Enter file in which the key is (/home/cmic/.ssh/id_rsa):
1024 e5:91:e7:8b:08:d1:ea:de:00:fc:31:26:d0:a0:f9:31 /home/cmic/.ssh/id_rsa.pub
Génération de bubble table digest
prompt>ssh-keygen -B
Enter file in which the key is (/home/cmic/.ssh/id_rsa):
1024 xehil-refyr-zoreg-zakoh-hepyh-pipeb-netyn-bahur-dogid-loloc-laxix /home/cmic/.ssh/id_rsa.pub
Configuration des algo et test de OpenSSH?
- https://linuxfr.org/news/openssh-configuration-des-algorithmes-de-cryptographie
+Port forwarding
What I found on a stackexchange forum (a sketch is worth a thousand words). Here is a link to the forum topic: http://unix.stackexchange.com/questions/115897/whats-ssh-port-forwarding-and-whats-the-difference-between-ssh-local-and-remot. There were two superb sketches:
Explanations:
local: -L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.
ssh -L sourcePort:forwardToHost?:onPort connectToHost? means: connect with ssh to connectToHost?, and forward
all connection attempts to the local sourcePort to port onPort on the machine called forwardToHost?,
which can be reached from the connectToHost? machine.
remote: -R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.
ssh -R sourcePort:forwardToHost?:onPort connectToHost? means: connect with ssh to connectToHost?, and forward
all connection attempts to the remote sourcePort to port onPort on the machine called forwardToHost?,
which can be reached from your local machine.
2016-11-21 09:21:33 -- Cmic
+SSH tunneling thru http proxy
- Sur macinterne compiler corkscrew : https://github.com/bryanpkc/corkscrew/
- Sur macexterne (tcp/ip # 123.123.123.123), lancer un sshd sur le port 443.
- Sur mactexterne, prévoir de maintenir la connexion ouverte (Parametres ClientAliveInterval? et ClientAliveMax? dans /etc/sshd_config)
- Sur macinterne, dans ~/.ssh/config. Adresse proxy http interne: 172.21.16.1
host macexterne
ProxyCommand? /home/cmic/bin/corkscrew 172.21.16.1 8080 123.123.123.123 443
- puis lancer la connexion :
cmic@macinterne>ssh -R 2222:localhost:22 macexterne
cmic@macexterne's password: ****
...
cmic@macexterne>
- utiliser le tunnel depuis macexterne :
cmic@macexterne>ssh localhost -p 2222
cmic@macinterne's password: ******
cmic@macinterne>
....
cmic@macinterne>exit
cmic@macexterne>
+SSH reverse tunneling
On veut accéder en SSH a un PC connecté en Wifi. depuis une client Linux IP 138.47.99.99
Destination en WiFi? (192.168.20.55) <- Source Linux (138.47.99.99)
1. On lance une session SSH depuis la destination vers la source :
prompt_destination> ssh -R 19999:localhost:22 sourceuser@138.47.99.99 # port 19999 ou autre port > 1024.
2. Depuis le poste source, on accède au PC destination a travers le tunnel SSH :
prompt_source> ssh localhost -p 19999
+Utilisation de SSH agent
- generer un jeu de clefs avec ssh-keygen et la protéger avec un mot de passe
- copier la clef publique sur la machine distante
prompt>cat ./ssh/id_rsa.pub | ssh user@machineA 'cat - >> /home/user/.ssh/authorized_keys
3.lancer l'agent (une socket va être créee a l'écoute de ssh et les variables d'environnement SSH_AUTH_SOCK et SSH_AGENT_PID vont être crées)
prompt>eval 'ssh-agent'
4.ajouter la clef privée à ssh-agent
prompt>ssh-add
5.se connecter a machineA sans taper le mot de passe de la clef privée... Eventuellement, arreter ssh-agent en faisant ssh-agent -k
+SSH thru port knocking
Not tested
$IPT -N stage1
$IPT -A stage1 -m recent --remove --name knock
$IPT -A stage1 -p tcp --dport 3456 -m recent --set --name knock2
$IPT -N stage2
$IPT -A stage2 -m recent --remove --name knock2
$IPT -A stage2 -p tcp --dport 2345 -m recent --set --name heaven
$IPT -N door
$IPT -A door -m recent --rcheck --seconds 5 --name knock2 -j stage2
$IPT -A door -m recent --rcheck --seconds 5 --name knock -j stage1
$IPT -A door -p tcp --dport 1234 -m recent --set --name knock
$IPT -A INPUT -m --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 5 --name heaven -j ACCEPT
$IPT -A INPUT -p tcp --syn -j doo
+Stop SSH brute force logins w iptables
Insert these 2 rules :
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
- The first rule sets a counter for NEW connections to port 22
- the second rule updates the "circular" counter for a maximum count of 4 attempts during 60 seconds. Otherwise, the connection is dropped.
Or use this config:
# Regle log ssh drop :
iptables -N SSH_DROP
iptables -A SSH_DROP -m limit --limit 1/s -j LOG --log-prefix '[fw drop -> Attack ssh] : '
iptables -A SSH_DROP -j DROP
# Regles anti-brute force :
iptables -A INPUT -d ${IP_EXT} -p tcp --dport ${PORT_SSH} -m recent --update --seconds 60 --hitcount 4 --name SSH -j SSH_DROP
iptables -A INPUT -d ${IP_EXT} -p tcp --dport ${PORT_SSH} -m recent --set --name SSH
iptables -A INPUT -d ${IP_EXT} -p tcp --dport ${PORT_SSH} -m state --state NEW -j ACCEPT
FIXME: dans les 3 regles ci-dessus, -A INPUT -d ${IP_EXT} ce sera pas plutot -A INPUT -s ${IP_EXT} ??
+Stop SSH brute force logins w sshgards
Installer sshguard http://www.sshguard.net/ Blocage de ssh si nb d'accès trop important par unité de temps. Possibilite de whitelister. Testé OK sur FreeBSD? 9.0.
+Stop SSH brute force (and DNS brute force) logins w phrel
Use this C script under Linux. Requires iptables, SNMP, .. http://www.digitalgenesis.com/software/phrel/
+Utilisation de sshfs (au lieu de NFS)
- installer ssfs
- le serveur nacre partage /usr/public
- sur la machine stack:
stack-cmic>sshfs nacre:/usr/public /mnt -o idmap=cmic
idmap mappe le user id du serveur vers le client.
+ssh proxy
prompt-cmic>ssh -D 8890 cmic@nico.be
Ou encore
ssh -NTCD 8890 cmic@nico.be
-N Do not execute a remote command
-T Disable pseudo-terminal allocation
-C Requests compression of all data
-D <port>
-D
Ensuite, utiliser le proxy SOCKS (SOCKS V5) de Firefox avec proxy:localhost, port: 8890.
Toujours dans Firefox, dans about:config :
network.proxy.socks_remote_dns user set boolean true
Voir aussi https://linuxize.com/post/how-to-setup-ssh-socks-tunnel-for-private-browsing/
et https://blog.gwlab.page/vpn-over-ssh-the-socks-proxy-8a8d7bdc7028
+Utilisation de ~/.ssh/config
Au lieu de la ligne de commande :
prompt-cmic>ssh -p12345 cmic@nacre.net -i ~/.ssh/clef-privee
Mettre ceci dans ~/.ssh/config :
Host nacre
User cmic
Port 12345
IdentityFile? ~/.ssh/clef-privee
HostName? nacre.net
Et ensuite, utiliser ssh :
prompt-cmic>ssh nacre
+Partage de connexions (controlpath) not tested
A placer dans ~/.ssh/config
Host nacre
Controlmaster auto
Controlpath ~/.ssh/ssh-%r@%h:%p.sock
A la premiere connexion, une socket sera cree dans ~/.ssh . Cette socket sera utilisee pour tout commande ssh (scp, sfcp, rsync, ..)
+ssh pour se connecter a travers une autre connexion ssh
- Placer ces lignes dans .ssh/config pour acceder directement a 'host2' qui est situe sur un reseau prive uniquement disponible depuis 'host1'. NB: -T disable tty allocation). Utilisation de netcat.
Host host2
ProxyCommand? ssh -T host1 'nc %h %p'
HostName? host2
- Autre utilisation : J'ai acces a hostA, mais pas a hostB ; mais hostB a ma clef publique, et hostA peut acceder a hostB. On peut alors par exemple copier vers hostB a travers hostA en faisant :
prompt-hostC> tar -c /rep/fichiers | ssh -A user@hostA "ssh -A user@hostB tar xf -"
NB: -A Enables forwarding of the authentication agent connection.
+rsync and ssh
+SSH on another ports
|