Exposer un service local sur Internet depuis Ubuntu : Guide complet du port forwarding

28 May 2025

Public cible : Intermédiaire
  • Prérequis assumés : connaissance de base d’Ubuntu, du terminal, concepts réseau de base

  • Concepts techniques : NAT, port forwarding, pare-feu, reverse proxy

  • Commandes système : utilisation du terminal, configuration réseau

  • Sections avancées : monitoring, sécurité, alternatives cloud

Problématique :

Vous développez une application web sur votre machine Ubuntu et souhaitez la rendre accessible depuis l’extérieur de votre réseau domestique ? Vous êtes au bon endroit ! Dans cet article, nous allons voir comment exposer un service local (par exemple sur le port 8080) vers Internet en configurant le port forwarding sur votre box internet.

1. Le problème : NAT et adresses privées

Par défaut, votre box internet utilise le NAT (Network Address Translation) pour partager une seule adresse IP publique entre tous les appareils de votre réseau domestique. Vos machines locales utilisent des adresses IP privées (192.168.x.x, 10.x.x.x, etc.) qui ne sont pas routables sur Internet.

Lorsque vous lancez un service sur votre machine Ubuntu (par exemple un serveur web sur le port 8080), celui-ci n’est accessible que depuis votre réseau local. Pour le rendre accessible depuis Internet, nous devons configurer une redirection de port.

2. Étape 1 : Identifier votre adresse IP publique

Avant tout, récupérons l’adresse IP publique de votre connexion Internet :

# Plusieurs méthodes au choix
curl ifconfig.me
curl ipecho.net/plain
wget -qO- http://ipecho.net/plain

# Ou encore
curl -s checkip.amazonaws.com

Cette adresse IP est celle que les internautes utiliseront pour accéder à votre service.

3. Étape 2 : Connaître l’adresse IP locale de votre machine Ubuntu

Votre machine Ubuntu a une adresse IP privée sur votre réseau local. Pour la connaître :

# Afficher toutes les interfaces réseau
ip addr show

# Ou plus spécifiquement pour l'interface principale
ip route get 1.1.1.1 | awk '{print $7; exit}'

# Alternative avec hostname
hostname -I | awk '{print $1}'

Notez cette adresse (par exemple 192.168.1.100), nous en aurons besoin pour la configuration.

4. Étape 3 : Configurer le port forwarding sur votre box

La configuration varie selon le modèle de votre box, mais le principe reste le même :

4.1. Accès à l’interface d’administration

Ouvrez votre navigateur et rendez-vous sur l’interface web de votre box :

  • Freebox : 192.168.1.1 ou mafreebox.freebox.fr

  • Livebox Orange : 192.168.1.1

  • SFR Box : 192.168.1.1

  • Bbox Bouygues : 192.168.1.254

4.2. Configuration de la redirection

Cherchez la section dédiée au port forwarding (les noms varient) :

  • "Redirection de ports"

  • "NAT/PAT"

  • "Port Forwarding"

  • "Serveurs de jeux"

Créez une nouvelle règle avec ces paramètres :

Champ Valeur

Nom/Description

"Service Web Ubuntu" (ou autre nom explicite)

Port externe (ou port public)

8080

Adresse IP interne

L’IP de votre machine Ubuntu (ex: 192.168.1.100)

Port interne (ou port privé)

8080

Protocole

TCP

État

Activé

5. Étape 4 : Configuration du service sur Ubuntu

Assurez-vous que votre service écoute sur toutes les interfaces, pas seulement sur localhost :

# ✅ Correct : écoute sur toutes les interfaces
python3 -m http.server 8080 --bind 0.0.0.0

# ❌ Incorrect : écoute seulement en local
python3 -m http.server 8080 --bind 127.0.0.1

Pour vérifier que votre service écoute correctement :

# Vérifier les ports en écoute
sudo netstat -tlnp | grep :8080
# ou avec ss (plus moderne)
sudo ss -tlnp | grep :8080

Vous devriez voir quelque chose comme 0.0.0.0:8080 et non 127.0.0.1:8080.

6. Étape 5 : Configuration du pare-feu Ubuntu

Ubuntu utilise UFW (Uncomplicated Firewall) par défaut. Vérifiez son statut et autorisez le port si nécessaire :

# Vérifier le statut du pare-feu
sudo ufw status

# Si le pare-feu est actif, autoriser le port 8080
sudo ufw allow 8080/tcp

# Ou plus spécifiquement pour un service web
sudo ufw allow 'Apache'  # si vous utilisez Apache
sudo ufw allow 'Nginx Full'  # si vous utilisez Nginx

7. Étape 6 : Test et validation

7.1. Test depuis le réseau local

D’abord, testez l’accès depuis une autre machine de votre réseau local :

# Remplacez par l'IP locale de votre machine Ubuntu
curl http://192.168.1.100:8080

7.2. Test depuis l’extérieur

Maintenant, testez depuis Internet en utilisant votre IP publique :

# Remplacez par votre IP publique
curl http://VOTRE_IP_PUBLIQUE:8080

Vous pouvez également utiliser des outils en ligne comme :

8. Bonnes pratiques et sécurité

8.1. Sécurisation de base

# Configurer fail2ban pour protéger contre les attaques par force brute
sudo apt update && sudo apt install fail2ban

# Limiter l'accès avec UFW (exemple : autoriser seulement certaines IP)
sudo ufw allow from 203.0.113.0/24 to any port 8080

8.2. Monitoring des connexions

# Surveiller les connexions en temps réel
sudo netstat -an | grep :8080

# Logs des connexions (selon votre application)
sudo tail -f /var/log/nginx/access.log  # pour Nginx
sudo journalctl -f -u your-service      # pour un service systemd

8.3. Utilisation d’un reverse proxy

Pour une meilleure sécurité et flexibilité, considérez l’utilisation d’un reverse proxy comme Nginx :

server {
    listen 80;
    server_name votre-domaine.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

9. Alternatives au port forwarding

9.1. Solutions cloud

  • ngrok : tunnel sécurisé temporaire

  • Cloudflare Tunnel : solution gratuite et sécurisée

  • serveo.net : tunnel SSH simple

# Exemple avec ngrok
ngrok http 8080

# Exemple avec serveo
ssh -R 80:localhost:8080 serveo.net

9.2. VPS et reverse proxy

Pour un usage professionnel, considérez l’utilisation d’un VPS avec un reverse proxy pointant vers votre infrastructure locale via VPN.

10. Troubleshooting

10.1. Problèmes courants

Problème Solution

Service inaccessible depuis l’extérieur

Vérifiez la configuration du port forwarding et que le service écoute sur 0.0.0.0

"Connection refused"

Le service n’est pas démarré ou écoute sur 127.0.0.1 uniquement

"Connection timeout"

Problème de pare-feu (box ou Ubuntu) ou port forwarding mal configuré

IP publique change régulièrement

Configurez un DNS dynamique (DynDNS, No-IP, etc.)

10.2. Debug réseau

# Tester la connectivité locale
telnet localhost 8080

# Tester depuis une autre machine du réseau
telnet 192.168.1.100 8080

# Vérifier les routes réseau
ip route show

# Analyser le trafic réseau
sudo tcpdump -i any port 8080

11. Conclusion

Exposer un service local sur Internet nécessite une configuration soigneuse du port forwarding, de la sécurité et du monitoring. Bien que cette approche soit parfaite pour du développement ou des projets personnels, pensez aux alternatives plus robustes (VPS, CDN, services cloud) pour un usage en production.

L’important est de toujours garder la sécurité à l’esprit : utilisez des mots de passe forts, mettez à jour régulièrement votre système, et surveillez les accès à vos services exposés.

N’hésitez pas à partager vos expériences et questions dans les commentaires !