Un truc classique et d'utiliser un autre port que le port 22 pour SSH.
Non pas que ça protège en soit mais ce port sera moins scanné. Bien sûr si tu prends le port 80 ou 443, ça va continuer à scanner à fond.
Autre point, si tu utilises SSH toujours à partir des mêmes PC, tu peux filtrer au niveau iptables pour n'accepter les connexions sur ton port SSH que pour les couples d'adresses MAC/IP auquels tu t'attends.

Vu que tu n'es une banque ou le FBI, ça devrait éloigner vite fait tout les scans qui y vont au hasard et les autres ne devraient pas s'intéresser à toi
En fait j'accède souvent depuis des liaisons 4G, où les opérateurs ont des adresses privées, donc très changeantes. L'association MAC/IP ne peut pas fonctionner dans ce cas. Par contre ce sont toujours les mêmes appareils qui travaillent, donc l'utilisation d'une clé RSA ou autre est possible. Ce système existe sur SSH et je me demande s'il serait possible de reporter la même chose sur iptable ? En même temps je ne voudrais pas réinventer la roue, si ça existe déjà.
thierryR wrote:Je pensais une chose impossible: SSH ne sert que pour la prise en main à distance et les sauvegardes distantes elles aussi. Ce service permanent ne sert pas beaucoup. N'y aurait-il pas un moyen de démarrer SSH à la demande suivant un appel venant de l'intérieur (PC) ou de l'extérieur (Internet). En dehors du temps le port 22 resterait fermé.
je n'avais pas suivi ce post...
une piste si tu fais un peu de php ou autre scripting web, tu peux accéder à une page avec des paramètres récupérés par le script. S'ils sont bons, une modification d'un fichier surveillé par inotify permettra la fermeture et l'ouverture du port avec systemctl enebal/disable ssdh systemctl start/stop sshd
Utilises-tu iptables ou networmanager ? le script 'Knock Knock Knock' devra être converti dans le deuxième cas
Gérard
fgland wrote: Utilises-tu iptables ou networmanager ?
Hum, iptables ou firewald ? network ou NetworkManager ?
C'est justement ce que je travaille. Sur fedora 33 on utilise volontiers firewalld https://www.it-connect.fr/centos-7-utilisation-et-configuration-de-firewalld/ ce qui doit changer de ce qui se trouve sur la page d'Adrien: https://www.linuxtricks.fr/wiki/iptables-port-knocking-pour-ouvrir-ssh. N'étant pas familier de ces commandes, je commence à planer sérieusement. En plus tu me parles d'y ajouter un script PHP... Je veux bien, je connais ce langage, mais je ne visualise pas bien ton idée.
Comment firewalld pourrait aller chercher un script PHP et agir en conséquence ?

Enfin pour répondre à ta question, je vois que firewalld et iptable sont tous les deux actifs. Pourquoi 2 systemes ? L'un serait-il une surcouche de l'autre ? A part complexifier la chose, je me demande ou ça mène tout ça!
Comme tu le vois, j'ai bien des choses à apprendre.
Nicosss wrote:
fgland wrote: Utilises-tu iptables ou networmanager ?
Hum, iptables ou firewald ? network ou NetworkManager ?
évidemment iptables firewald
quand on va trop vite, j'ai aussi corrigé en start/stop
en cas de problème redémarrer la machine mais cela veut dire que sur un poste perso, il faudrait que sshd soit disable au démarrage alors que sur un serveur distant pro(qui ne redémarre jamais il devra être enable et un redémarrage par l'interface de gestion).
T'inquiète pas Gérard, j'avais traduis. (Mais bien écrire pour la postérité, c'est important aussi)
(Plus de bouton pour modifier , remonter, ... sur le thread)
thierryR wrote:C'est justement ce que je travaille. Sur fedora 33 on utilise volontiers firewalld https://www.it-connect.fr/centos-7-utilisation-et-configuration-de-firewalld/ ce qui doit changer de ce qui se trouve sur la page d'Adrien: https://www.linuxtricks.fr/wiki/iptables-port-knocking-pour-ouvrir-ssh. N'étant pas familier de ces commandes, je commence à planer sérieusement. En plus tu me parles d'y ajouter un script PHP... Je veux bien, je connais ce langage, mais je ne visualise pas bien ton idée.
Comment firewalld pourrait aller chercher un script PHP et agir en conséquence ?
parmis les multiples façons...
accéder à une page non répertoriée donc inaccessible si on ne la connait pas, elle contient un champ de saisie
pour reprendre l'idée du toc toc
avec un traitement coté client
avec jquery, on écrit la valeur saisie dans un champ caché de la page, on le fait trois fois en concaténant les valeurs puis on affiche un bouton qui envoie au serveur la totalité
Possibilité de gérer le temps de saisie
on peut supposer un code ouverture et un code fermeture
si c'est bon on écrit l'heure (ou autre chose) dans un fichier ouverture ou fermeture
ces fichiers sont surveillés par incron qui quand il est modifié exécute la commande voulue.

fait une recherche sur incron pour avoir les commandes, il ne semble pas y avoir de page man
Enfin pour répondre à ta question, je vois que firewalld et iptable sont tous les deux actifs. Pourquoi 2 systemes ? L'un serait-il une surcouche de l'autre ? A part complexifier la chose, je me demande ou ça mène tout ça!
Comme tu le vois, j'ai bien des choses à apprendre.
Je n'ai pas de service iptable actif, comment le vois-tu ?
en gros iptables est statique, firewalld dynamique.
J'ai peur de ne pas être à la hauteur. C'est pointu.
L'idée d'apporter une clé pour ouvrir un port puis ensuite entrer en SSH est super bien. Je viens de lire un article : La quatrième phase de Schwab Va falloir renforcer très rapidement les protections. Je me sens bien désemparé la dedans.
fgland wrote: Je n'ai pas de service iptable actif, comment le vois-tu ?
en gros iptables est statique, firewalld dynamique.
Tout fonctionne chez moi:
sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
LIBVIRT_INP  all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
LIBVIRT_FWX  all  --  anywhere             anywhere            
LIBVIRT_FWI  all  --  anywhere             anywhere            
LIBVIRT_FWO  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
LIBVIRT_OUT  all  --  anywhere             anywhere            

Chain LIBVIRT_FWI (1 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain LIBVIRT_FWO (1 references)
target     prot opt source               destination         
ACCEPT     all  --  192.168.122.0/24     anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain LIBVIRT_FWX (1 references)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            

Chain LIBVIRT_INP (1 references)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain LIBVIRT_OUT (1 references)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootpc

sudo  firewall-cmd --state
running
sudo firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell kube-apiserver ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
Le lien entre les 2
III. Le service firewalld

Le service firewalld est un des nombreux services de la nouvelle architecture SystemD adossée au type dbus fournissant les éléments suivants:

une applet
une interface graphique
une interface en ligne de commande
une interface D-Bus

Ce service est lui-même un moyen de dialogue entre le module netfilter du noyau linux et ses modules complémentaires. Ainsi, en interne, on peut manipuler les différentes commandes mentionnées précédemment, c’est-à-dire :

iptables
ip6tables
ebtables
iptables n'est pas un 'service' on ne peut donc pas dire qu'il est lancé !
Le terme iptables est ambiguë car il désigne le programme associé à netfilter pour la gestion des règles de celui-ci mais est souvent employé pour désigner le firewall lui-même.
Voir par exemple :
https://doc.fedora-fr.org/wiki/Parefeu_-_firewall
https://doc.fedora-fr.org/wiki/Parefeu_-_firewall_-_netfilter_-_iptables
Avec l'utilisation de firewalld, on peut utiliser la commande iptables pour lister les rêgles mais pas pour les créér oui modifier, il faut passer par firewall-cmd.
https://doc.fedora-fr.org/wiki/Parefeu_-_firewall_-_FirewallD
mais il me semble que l'avertissement de cette page est trompeur puisque firewallD ne remplace pas iptables mais le gère. Avis au spécialiste.

Ma proposition du 'toc toc' est théorique mais cela me donne envie de la tester, et si cela marche je pourrais donner le retour...

Gérard
J'en reviens sur ce que dit Nicosss à #35 concernant l'utilisation de firewalld. Est ce que cette solution est intelligente ? https://serverfault.com/questions/852755/fail2ban-doesnt-add-ips-to-ipset-firewalld

1. Créez une nouvelle règle d'action (/etc/fail2ban/action.d/custom-firewalld.conf)
[INCLUDES]
before  =

[Definition]
actionstart =
actionstop =
actioncheck =

actionflush = sed -i '/<source address=/d' /etc/firewalld/zones/drop.xml
actionban = firewall-cmd --change-source=<ip> --zone=drop && firewall-cmd --change-source=<ip> --zone=drop --permanent
actionunban = firewall-cmd --remove-source=<ip> --zone=drop && firewall-cmd --remove-source=<ip> --zone=drop --permanent || echo 0

[Init]
Puis dans la jail local
[DEFAULT]
banaction = custom-firewalld
Je l'ai mise en place. Elle semble pas mal. Mon journal SSH ne se rempli plus.
journalctl -t sshd  -f
-- Logs begin at Mon 2021-02-15 14:01:49 CET. --
févr. 19 09:15:56 localhost.localdomain sshd[6565]: Failed password for invalid user root from 42.194.218.76 port 40964 ssh2
févr. 19 09:15:57 localhost.localdomain sshd[6565]: Received disconnect from 42.194.218.76 port 40964:11: Bye Bye [preauth]
févr. 19 09:15:57 localhost.localdomain sshd[6565]: Disconnected from invalid user root 42.194.218.76 port 40964 [preauth]
févr. 19 09:36:58 localhost.localdomain sshd[6727]: User root from 42.194.218.76 not allowed because not listed in AllowUsers
févr. 19 09:36:59 localhost.localdomain sshd[6727]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=42.194.218.76  user=root
févr. 19 09:37:01 localhost.localdomain sshd[6727]: Failed password for invalid user root from 42.194.218.76 port 35100 ssh2
févr. 19 09:37:06 localhost.localdomain sshd[6727]: Received disconnect from 42.194.218.76 port 35100:11: Bye Bye [preauth]
févr. 19 09:37:06 localhost.localdomain sshd[6727]: Disconnected from invalid user root 42.194.218.76 port 35100 [preauth]
sudo fail2ban-client status sshd
[sudo] Mot de passe de isabelle : 
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     132
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 50
   |- Total banned:     50
   `- Banned IP list:   101.32.45.140 103.215.236.2 106.75.116.95 118.24.8.185 121.4.85.107 129.226.58.12 139.59.70.21 156.236.74.201 178.128.223.85 180.168.201.126 188.165.210.176 209.141.49.169 218.75.77.92 220.132.68.51 40.84.137.248 41.63.0.133 49.234.209.4 51.68.198.113 58.246.64.11 59.36.178.98 61.132.225.82 64.20.56.222 68.183.81.191 159.75.16.106 221.213.63.210 153.126.201.44 212.145.192.205 165.227.132.96 177.103.229.58 167.114.103.140 138.204.100.70 54.38.137.36 128.199.193.246 112.94.224.60 35.240.145.169 165.22.50.164 116.24.67.107 167.71.224.129 177.221.73.75 219.150.93.157 200.206.81.154 51.79.65.236 201.149.20.161 148.101.169.71 190.221.46.78 54.169.149.154 185.232.71.197 132.232.49.143 120.48.12.238 42.194.218.76
EDIT: 10:08
Plus de modification après 1/2 heure. On dirait que le robot ralenti la fréquence d'attaque.
thierryR wrote:Ce serait super Gérard, car je me sens dépassé tout en étant super intéressé. ...
Le résultat sans prétention et qui admet toute critique est sur http://landroware.ovh/acces.php
Gérard
Merci Gérard. Je vais examiner ton affaire , mais en attendant ça a l'air de bien fonctionner.
[isabelle@localhost ~]$ firewall-cmd --get-active-zone
drop
  sources: 101.32.45.140 103.215.236.2 106.75.116.95 118.24.8.185 121.4.85.107 129.226.58.12 139.59.70.21 156.236.74.201 178.128.223.85 180.168.201.126 188.165.210.176 209.141.49.169 218.75.77.92 220.132.68.51 40.84.137.248 41.63.0.133 49.234.209.4 51.68.198.113 58.246.64.11 59.36.178.98 61.132.225.82 64.20.56.222 68.183.81.191 159.75.16.106 221.213.63.210 153.126.201.44 212.145.192.205 165.227.132.96 177.103.229.58 167.114.103.140 138.204.100.70 54.38.137.36 128.199.193.246 112.94.224.60 35.240.145.169 165.22.50.164 116.24.67.107 167.71.224.129 177.221.73.75 219.150.93.157 200.206.81.154 51.79.65.236 201.149.20.161 148.101.169.71 190.221.46.78 54.169.149.154 185.232.71.197 132.232.49.143 120.48.12.238 42.194.218.76 150.109.100.65 106.75.162.47 124.205.84.21 103.149.201.204 180.76.152.65 49.7.164.26 193.112.18.214 81.70.174.192 49.234.116.74 107.170.134.125 222.185.235.186 103.39.212.96 80.52.60.214 14.29.249.7 92.222.90.130 210.114.17.240 119.252.161.234 118.24.7.98 118.25.3.65 81.70.222.20 111.204.176.209 46.149.113.2 5.19.164.33 175.6.35.93 43.226.148.89 117.119.100.82 197.248.2.229 103.146.203.62 95.169.22.100 106.15.35.211 94.62.203.232 121.4.154.134 49.235.206.107 36.67.70.186 96.78.175.45 45.157.120.150 101.227.251.235 211.253.129.225 152.136.99.20 154.92.16.156 101.33.116.189 159.89.82.134 106.13.195.32 125.60.148.184 49.234.9.92 157.230.6.213 42.192.81.219 5.101.107.190 129.226.77.190 124.156.148.119 219.148.31.135 165.22.210.35 51.178.53.233 198.54.121.48 46.101.248.180 115.159.0.160 49.234.119.42 52.130.75.32 47.176.38.242 81.70.195.174 68.183.140.19 51.222.14.78
libvirt
  interfaces: virbr0
public
  interfaces: eno1
Il y a un truc que je ne saisi pas. Comment depuis l'extérieur (le NET) un PC peut démarrer ton script ?
Pour moi, il a accès au port 80 en http et éventuellement appeler un numéro de port. Comment peut-il faire plus ?
En cherchant je vois que c'est inotify qui fait le boulot. Mais ce truc est-il sécurisé ? Car si il exécute des commandes root depuis une adresse http, ça me semble dangereux.