Comment puis-je bloquer le port 6379 pour le trafic extérieur sur Ubuntu?

8

Je veux bloquer l'accès au port 6379 sur mon serveur, mais je veux toujours me connecter en interne. L'application redis-server s'exécute sur ce port et je souhaite m'y connecter uniquement localement (127.0.0.1). Comment puis-je faire ceci?

Steve Rodrigue
la source

Réponses:

11

Pour ce faire, vous devez vous assurer que vos règles IPTables sont correctement configurées. Ubuntu laisse généralement leurs serveurs grands ouverts par défaut, c'est pourquoi je ne recommande toujours pas leur utilisation en tant que serveurs, sauf si vous savez déjà très bien comment le faire correctement.

J'imagine que ton iptables -L -nvlook ressemble à ça, oui?

# iptables -L -nv
Chain INPUT (policy ACCEPT 4M packets, 9M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 8M packets, 4M bytes)
 pkts bytes target     prot opt in     out     source               destination

C'est vide et c'est grand ouvert. Le Ubuntu IPTables HowTo va probablement vous aider un peu. ( https://help.ubuntu.com/community/IptablesHowTo )

Je recommande quelque chose comme ça, qui autorise SSH sur n'importe quelle interface et tcp 6379 n'importe quelle interface, mais celle que vous ne voulez pas:

*filter
:INPUT DROP [92:16679]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [203:36556]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 6379 -j ACCEPT
-A INPUT -i lo -p udp -m udp --dport 6379 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT

Vous devez ensuite enregistrer ce fichier dans /etc/iptables.rules.

De toute évidence, tous les autres ports que vous souhaitez spécifiquement ouvrir doivent être ajoutés.

Remarque: J'ai ajouté les 6379 lignes spécifiques pour plus de clarté. L'ACCEPTATION du bas juste avant le COMMIT permettrait en fait cela car toutes les connexions de bouclage doivent être autorisées sur un système Linux pour un fonctionnement correct.

Vous voudrez également mettre les règles dans votre fichier / etc / network / interfaces, pour vous assurer qu'elles sont ajoutées au démarrage de l'interface et pas plus tard dans le processus de démarrage. L'ajout de quelque chose comme ceci est recommandé:

auto eth0
iface eth0 inet dhcp
  pre-up iptables-restore < /etc/iptables.rules

Edit: Pour charger cette configuration initialement, vous devez exécuter la commande iptables-restore référencée ci-dessus:

iptables-restore < /etc/iptables.rules
Magellan
la source
Je suppose que cela ouvrirait le port 6379 à l'ensemble du Web, n'est-ce pas? Que dois-je faire pour que cela ne soit ouvert que pour 127.0.0.1?
Steve Rodrigue
Non, car la règle par défaut est DROP. S'il n'a pas de règle ACCEPT explicite, il est bloqué par le DROP par défaut à côté de: INPUT en haut.
Magellan
Personnellement, je pense que la règle ACCEPT par défaut est tout simplement criminelle dans un déploiement "serveur". Mais ce n'est pas surprenant puisque Ubuntu est avant tout une distribution de bureau.
Magellan
Ok, je viens de faire exactement ce que vous avez demandé, mais il semble que je puisse toujours me connecter au port 6379 de l'extérieur. Dois-je redémarrer le serveur ou quelque chose?
Steve Rodrigue
1
Oui, mais je ne me soucie pas vraiment des compteurs et cela fonctionne pour moi. N'hésitez pas à modifier la réponse pour l'adapter à un processus plus rigoureux.
Magellan
3

Eh bien, je suggérerais d'utiliser le "pare-feu simple" (ufw), qui est également recommandé par canonical. La lecture et l'écriture d'iptables est trop compliquée pour des tâches de verrouillage de port occasionnelles.

Voir ici: https://wiki.ubuntu.com/UncomplicatedFirewall

mojovski
la source
1
Les anciennes versions d'UFW n'avaient pas la possibilité d'appliquer des règles aux ports sélectionnés, c'était tout ou rien. Et les administrateurs système professionnels devraient prendre l'habitude de comprendre ce que font leurs paramètres iptables et comment fonctionnent les chaînes.
Magellan
2

Quelque chose comme

iptables -A INPUT -s 0.0.0.0  -i eth0 --protocol tcp --dport 6379 -j DROP

Devrait marcher.

Kedare
la source
Cela me donne cette erreur: iptables v1.4.4: option inconnue `--dport '
Steve Rodrigue
Pouvez-vous réessayer avec la nouvelle commande? J'ai ajouté les parties --protocol et -i (adapter à votre interface), cela devrait maintenant fonctionner.
Kedare
Le problème que j'ai avec cette suggestion est qu'elle ne sauvegarde pas à travers les redémarrages à moins que d'autres commandes requises ne soient exécutées et qu'elle suppose qu'il n'y a qu'une seule interface non bouclée.
Magellan
Je recommanderais d'utiliser l'opérateur de négation: -i! lo
Magellan
Adrian: tu veux dire que si je redémarre le serveur, cette modification ne sera plus active?
Steve Rodrigue
0

Pour les versions plus récentes de Redis vous pouvez utiliser bind 127.0.0.1dans le redis.conffaire directement , sans configuration supplémentaire iptables

voir cet article

itaintme
la source