Rediriger le trafic entre deux ports en utilisant iptables

Mon but - Exécuter un serveur Web sur le port 3000 et le rendre disponible pour mon réseau via le port 80. La meilleure réponse que j'ai trouvée jusqu'à présent, - Ceci est une doublure agréable.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000

Mais cela n'affecte que des packages entrants et je voudrais que le client reçoive une réponse du port 80. Le problème suivant est que le serveur Web ne doit être disponible que via le port. 80. Pendant que je respecte cette configuration.

# Default Chain Policies
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

# Allow Loopback Access
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
iptables -t nat -A POSTROUTING -p tcp -o eth0 --sport 3000 -j SNAT --to 192.168.0.2:80

iptables -t filter -A INPUT -i eth0 -p tcp --dport 3000 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 3000 -j ACCEPT
Invité:

Christophe

Confirmation de:

Vous devez résoudre le statut "associé" et "établi". Pas besoin de gouverner POSTROUTING.

Serveur Web tel que apache, peut se connecter au port 80, parce qu'il fonctionne comme root. Cela lui permet de se connecter au port privilégié <1024, Mais après cela, il perd des privilèges root Et traite une demande HTTP au nom d'un utilisateur non privilégié. Donc, vous devriez être capable de faire quelque chose comme ça si vous voulez attacher au port 80.

Denis

Confirmation de:

Il semble que cela aide. Le serveur Web est maintenant disponible plus 80, pas plus 3000.

iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 80 -j MARK --set-mark 1
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
iptables -t filter -A INPUT -i eth0 -p tcp --dport 3000 -m state --state NEW,ESTABLISHED -m mark --mark 1 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 3000 -m state --state ESTABLISHED -j ACCEPT

Pour répondre aux questions, connectez-vous ou registre