Comment «fermer» les ports ouverts?

22

Il y a quelques jours, j'ai commencé à me soucier beaucoup de la sécurité de mes données, je nmapme retrouve avec:nmap 127.0.0.1

Surprise, surprise, j'ai beaucoup de services actifs à écouter localhost:

$ nmap 127.0.0.1
Starting Nmap 5.21 ( http://nmap.org ) at 2013-05-05 00:19 WEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00025s latency).
Not shown: 993 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
53/tcp  open  domain
111/tcp open  rpcbind
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

Le seul que je pourrais utiliser est ssh(bien qu'il ne soit probablement pas bien configuré, je vais garder cette question à une autre question).

Pour autant que je sache, le ippprotocole est utilisé par CUPS pour partager mes imprimantes, je n'ai pas besoin de les partager, il suffit d'accéder aux imprimantes à partir d'un serveur.

Ceci est la sortie de netstat -lntupl'utilisateur root, en supprimant les adresses localhost:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      497/sshd        
tcp        0      0 0.0.0.0:17500           0.0.0.0:*               LISTEN      2217/dropbox    
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:50022           0.0.0.0:*               LISTEN      1021/rpc.statd  
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      906/rpcbind     
tcp6       0      0 :::22                   :::*                    LISTEN      497/sshd        
tcp6       0      0 :::42712                :::*                    LISTEN      1021/rpc.statd  
tcp6       0      0 :::445                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::139                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::111                  :::*                    LISTEN      906/rpcbind     
udp        0      0 0.0.0.0:51566           0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:68              0.0.0.0:*                           7362/dhclient   
udp        0      0 0.0.0.0:111             0.0.0.0:*                           906/rpcbind     
udp        0      0 192.168.1.255:137       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:137        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:137             0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.255:138       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:138        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:138             0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:655             0.0.0.0:*                           906/rpcbind     
udp        0      0 0.0.0.0:17500           0.0.0.0:*                           2217/dropbox    
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:34805           0.0.0.0:*                           1021/rpc.statd  
udp6       0      0 :::40192                :::*                                1021/rpc.statd  
udp6       0      0 :::111                  :::*                                906/rpcbind     
udp6       0      0 :::655                  :::*                                906/rpcbind     
udp6       0      0 :::5353                 :::*                                615/avahi-daemon: r
udp6       0      0 :::42629                :::*                                615/avahi-daemon: r

Comment configurer ces services pour qu'ils n'écoutent le monde extérieur que lorsque je les utilise?

RSFalcon7
la source
Comment voulez-vous lui dire que vous les utilisez?
Reactormonk
démarrage des services moi-même (avec des privilèges utilisateur et un shell parent)
RSFalcon7
2
Correct, également si vous utilisez CUPS uniquement à partir du système local, vous pouvez l'écouter uniquement sur le port 631 sur l'hôte local (127.0.0.1). Je relancerais le nmap en utilisant l'IP réelle de la machine et pas seulement 127.0.0.1.
slm
1
une meilleure commande à exécuter serait netstat -lntup-l = écouter -n = numéro -t = tcp -u = udp -p = pid. Montre quels processus vous exécutez et quels ports ils exposent. Tout ce qui est ouvert à 127.0.0.1 est inaccessible à Internet.
frogstarr78
1
Si vous n'avez pas besoin de Samba, désinstallez-le simplement. Si vous ne avez besoin, vous pouvez limiter à l'interface locale (par exemple eth0?) En ajoutant dans smb.confles deux directives bind interfaces only = yeset interfaces = eth0.
LSerni

Réponses:

26

Déterminez votre exposition

En prenant votre sortie de la netstatcommande, ce qui ressemble à beaucoup de services est en fait une très courte liste:

$ netstat -lntup | awk '{print $6 $7}'|sed 's/LISTEN//'| cut -d"/" -f2|sort|uniq|grep -v Foreign
avahi-daemon:r
dhclient
dropbox
nmbd
rpcbind
rpc.statd
smbd
sshd

Obtenir une configuration du terrain

En regardant cette liste, il y a plusieurs services que je laisserais seuls.

  • dhclient
    • Le démon du serveur DHCP chargé d'obtenir votre adresse IP, doit avoir celui-ci.
  • dropbox
    • évidemment Dropbox, doivent avoir

Commencez à le réduire - désactivez Samba

Vous pouvez probablement désactiver immédiatement Samba, il représente 2 des services ci-dessus, nmbdet smbd. Il est douteux que vous en ayez vraiment besoin sur un ordinateur portable, que ce soit sur un hôte local ou votre IP face à votre réseau.

Pour vérifier qu'ils fonctionnent, vous pouvez utiliser la commande suivante status:

$ status nmbd
nmbd start/running, process 19457
$ status smbd
smbd start/running, process 19423

La désactivation des services peut être source de confusion avec tous les flux en cours avec upstart, /etc/rc.d, business, il peut donc être difficile de déterminer quel service est sous quelle technologie. Pour Samba, vous pouvez utiliser la servicecommande:

$ sudo service nmbd stop
nmbd stop/waiting
$ sudo service smbd stop
smbd stop/waiting

Maintenant c'est parti:

$ status nmbd 
nmbd stop/waiting
$ status smbd 
smbd stop/waiting

Les garder à l'écart ... en permanence

Pour les garder hors tension, j'ai utilisé cet outil sysv-rc-conf, pour gérer les services à partir d'une console, cela fonctionne mieux que la plupart. Il vous permet de vérifier quels services vous souhaitez exécuter et dans quel niveau d'exécution ils doivent être démarrés / arrêtés:

$ sudo apt-get install sysv-rc-conf

   SS de sysv-rc-conf

Désactiver le reste de ce qui N'EST PAS nécessaire

Alors maintenant, Samba est parti, il nous reste ce qui suit:

  • avahi-daemon
    • partie de zeroconf (plug-n-play), désactivez-le
  • rpcbind
    • nécessaire pour NFS - désactivez-le
  • rpc.statd
    • nécessaire pour NFS - désactivez-le

Pour les 3 restants, vous pouvez faire la même chose que nous avons fait pour Samba pour les désactiver également.

CUPS?

Pour désactiver CUPS, dont vous n'avez pas vraiment besoin en passant, vous pouvez suivre la même danse consistant à désactiver le service, puis à le désactiver. Pour pouvoir imprimer, vous devrez configurer chaque imprimante individuellement sur votre système. Vous pouvez le faire via l' system-config-printerinterface graphique.

Rendre ces services à la demande?

C'est vraiment le cœur de votre question, mais il n'y a pas vraiment de solution miracle pour rendre ces services «intelligents» afin qu'ils fonctionnent lorsqu'ils sont utilisés, plutôt que tout le temps.

# 1 - Systemd vs Upstart

C'est en partie la répartition actuelle entre systemd et upstart . Il y a un bon aperçu des 2 technologies concurrentes ici .

Les deux technologies essaient de faire des choses légèrement différentes, l'OMI, étant donné leurs ensembles de fonctionnalités, systemd semble davantage orienté vers les serveurs tandis que l'upstart semble davantage orienté vers le bureau. Au fil du temps, cela fonctionnera, l'OMI et les deux services seront stables et riches en fonctionnalités.

Finalement, les deux services offriront un démarrage et un arrêt à la demande pour tous les services qu'ils gèrent. Des fonctionnalités telles que celles StopWhenUnneeded=yesqui existent déjà systemdpar exemple, ce n'est donc qu'une question de temps jusqu'à ce que ces capacités se développent.

# 2 - Support technique

Certains services ne supportent pas du tout d'être arrêtés / démarrés très bien. Des services comme ceux-ci ne sshdsemblent pas avoir de sens de fonctionner à la demande, surtout s'ils sont largement utilisés. De plus, certains services comme Apache fournissent en eux-mêmes des mécanismes pour faire tourner plus ou moins leurs propres auditeurs qui se gèrent eux-mêmes. Il est donc difficile de savoir comment les services à la demande fournis systemdou upstartvont s'intégrer à ces types de services.

Est-ce vraiment nécessaire?

Vous entendrez des deux côtés que c'est exagéré ou que vous devriez adopter une approche minimaliste en n'installant que ce dont vous avez absolument besoin, mais c'est vraiment un choix personnel. Comprendre que ces services sont là et ce qu'ils font est vraiment ce qui est important. À la fin de la journée, un ordinateur est un outil, et en utilisant un système Unix, vous dites déjà que vous êtes prêt à jeter un œil derrière le rideau et à comprendre ce qui fait tourner votre ordinateur.

Je dirais que ce type de questionnement est exactement l'état d'esprit que l'on devrait s'efforcer de traiter avec les ordinateurs et Unix en général.

Les références

slm
la source
2
@ RSFalcon7 - vous êtes les bienvenus! Merci pour la question!
slm
12

127.0.0.1 n'est pas le "monde extérieur", il regarde à l'intérieur de la maison.

Vérifiez la configuration de votre pare-feu (iptables dans Linux aujourd'hui), la plupart d'entre eux ne devraient pas être accessibles depuis l'extérieur.

N'exécutez pas les services dont vous n'avez pas besoin. Désinstallez tous les logiciels non requis.

Changez les mots de passe pour être plus forts. Vérifiez votre utilisation du système, ne cherchez pas au hasard un site Web intéressant. Vérifiez la configuration anti-phishing, anti-scripts, etc. du navigateur. Révisez votre utilisation de SSH et de su / sudo.

Mais surtout, une paranoïa excessive est contre-productive. Ne vous laissez pas piéger par l' éclat de la technologie .

vonbrand
la source
3
Je suis d'accord avec "Ne pas exécuter les services dont vous n'avez pas besoin". Mais "Désinstaller tous les logiciels non requis", sérieusement? En quoi cela peut-il aider?
Hauke ​​Laging
6
@HaukeLaging, comme le dit le proverbe, "les souris nichent dans des tas de vêtements inutilisés". Tout logiciel peut présenter une vulnérabilité qui pourrait être exploitée. Si le programme n'existe pas, ce risque n'existe pas. S'il n'est pas utilisé, le coût est négligeable. En outre, un système plus simple est plus facile à superviser et à garder en ordre.
vonbrand
Merci de rappeler que 127.0.0.1 n'est pas le monde extérieur . Je souscris totalement pour ne pas exécuter les services dont je n'ai pas besoin , mais la désinstallation est un peu exagérée, s'ils sont là, ils ont été utiles à un moment donné
RSFalcon7
2
@ RSFalcon7, s'ils étaient utiles (ou sont utiles à quelqu'un d'autre, ils sont dans la distribution après tout) est sans conséquence. Si vous ne l'utilisez pas, jetez-le. Moins d'utilisation du disque, moins de mise à jour, moins de risque global. Si vous en avez besoin ultérieurement, réinstallez.
vonbrand
3

Bien que vous puissiez «fermer» des services individuels, il est peut-être plus simple de configurer un pare-feu. Presque toutes les distributions courantes (Ubuntu, Debian, Centos, etc.) prennent en charge les iptables intégrés.

Un jeu de règles simple pour commencer: (vous pouvez simplement les saisir à l'invite de commande; pour les rendre permanents, ajoutez-les à vos scripts de démarrage ou dites-nous quelle distribution vous utilisez. Sur Centos par exemple: system-config -firewall est une bonne interface utilisateur pour configurer les règles iptables)

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

Fondamentalement - autorisez ssh entrant; laissez tomber tout le reste.

Votre chaîne INPUT ressemble maintenant à ceci:

  • Si un paquet arrive sur mon ordinateur pour 'ssh' - permettez-le
  • Si un paquet ne correspond à aucune des règles précédentes, jetez-le simplement.

Puis à une date ultérieure, dites que vous souhaitez autoriser 'samba' (partage de fichiers Windows): vous pouvez exécuter

iptables -I INPUT-p tcp --dport 465 -j ACCEPT

Le -Ipréfixe et règle la liste; -Aajoute une règle. Votre chaîne ressemble maintenant à ceci:

  • Si un paquet arrive sur mon ordinateur pour 'samba' - permettez-le
  • Si un paquet arrive sur mon ordinateur pour 'ssh' - permettez-le
  • Si un paquet ne correspond à aucune des règles précédentes, jetez-le simplement.

La INPUTchaîne fait référence aux paquets destinés à votre système. D'autres chaînes sont OUTPUTdestinées aux paquets de votre ordinateur, à Internet et FORWARDaux paquets acheminés via votre ordinateur (c'est-à-dire les paquets qui «transitent» votre ordinateur, comme la zone de transit d'un aéroport - des trucs qui ne sont pas INPUTparce qu'ils n'entrent pas dans votre ordinateur). ).

Comme note de départ: nmap'ing 127.0.0.1 n'est pas très utile; de nombreux services ne sont accessibles qu'à partir de 127.0.0.1 et aucune autre adresse. Si vous n'avez pas d'autre machine, vous pouvez exécuter nmap depuis - essayez d'utiliser Shields UP de Gibson Research! ( https://www.grc.com/shieldsup ) - qui est un nmap-lite en ligne gratuit. Ou ajoutez un commentaire avec votre adresse IP / e-mail et je vous mapperai :)

Grynn
la source