GNU/Linux >> Tutoriels Linux >  >> Linux

iptables redirige les connexions locales vers le système/port distant

Je ne suis pas tout à fait sûr d'avoir compris, mais je pense que vous êtes juste dans la mauvaise chaîne. :-) J'étais confus aussi quand j'ai utilisé iptables pour la première fois. Mais la façon de transmettre la locale port ${LOCAL UNPRIV PORT} est la déclaration ci-dessous :

$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT} 
     -j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}

C'est un mélange entre un problème sémantique et le fonctionnement de netfilter :Autrefois, le transfert d'un port local impliquait une connexion à la machine qui transmet, plus une seconde connexion à la destination. Iptables le fait en une seule étape. Ainsi, au lieu de deux connexions, vous transférez le trafic vers ce port directement vers la destination. Netfilter s'occupe de toutes les vérifications d'intégrité et de la comptabilité :seuls les paquets appartenant à une connexion valide sont NATtés et peuvent donc être transférés.

L'activation de DNAT n'autorise aucun transfert de paquets. Vous devez également ajouter une règle :

$IPT -N INET-PRIV
$IPT -A FORWARD -i eth0 -o eth1 -j INET-PRIV
$IPT -A FORWARD -j DROP

$IPT -A INET-PRIV -p tcp -d ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j ACCEPT

$IPT -A INET-PRIV -j DROP

Et vous devez bien sûr activer le transfert.

echo "1" > /proc/sys/net/ipv4/ip_forward

Tables Pro iptables :plus sécurisé, plus flexible, moins de mémoire et de CPU utilisés par connexion

Tableaux de contre-indications :transférer une connexion d'une machine interne vers une machine interne (la renvoyer dans eth0) n'a pas de sens avec iptables (bien sûr, vous pouvez toujours vous connecter directement), transférer le trafic généré localement ne fonctionne pas (un port le démon de transfert peut aider - mais n'a généralement pas de sens)

C'est peut-être le problème  :vous essayez d'utiliser NAT sur un non-routeur, vous devez donc utiliser un démon de transfert ou ignorer complètement ce transfert de port supplémentaire et faire :

ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-box

Sur special-vpn-box, vous ne pouvez autoriser que les connexions entrantes du routeur et les connexions sortantes vers ${ANOTHER SYSTEM} :${REMOTE PORT} à l'aide d'iptables. De cette façon, les utilisateurs de la boîte VPN spéciale ne peuvent accéder qu'à ${ANOTHER SYSTEM} :${REMOTE PORT} et ne pourront rien faire d'autre s'ils ne sont pas dignes de confiance.


Voici ce que je fais spécifiquement pour le transfert localhost :

iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 3306 -j DNAT --to-destination ip.ip.ip.ip
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE

sysctl -w net.ipv4.conf.all.route_localnet=1

Assurez-vous de remplacer ip.ip.ip.ip pour votre vraie IP publique et aussi le --dport 3306 pour le port que vous souhaitez rediriger.

Enfin, exécutez la commande sysctl et mettez également à jour votre /etc/sysctl.conf

Vous pouvez mettre à jour sysctl.ctl pour autoriser le routage de localhost avec la commande suivante :

echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf

Maintenant, tout cela semble simple et bon, mais il a fallu des recherches et de la chasse. Soyez averti et comprenez que le transfert localhost/127.0.0.1 nécessite cette méthode et que les autres exemples typiques ne fonctionnent pas. Quelques exemples de solutions qui ne fonctionnent pas avec localhost :

iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to ip.ip.ip.ip:3306
iptables -t nat -A POSTROUTING -d ip.ip.ip.ip -j MASQUERADE

http://realtechtalk.com/iptables_how_to_forward_localhost_port_to_remote_public_IP-1788-articles


# Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING  -p tcp \
--dport ${LOCAL UNPRIV PORT} -j DNAT --to-destination ${ANOTHER SYSTEM}:${REMOTE PORT}

iptables -t nat -A POSTROUTING -p tcp \
--dst ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j SNAT --to-source ${LOCAL SYSTEM}

Linux
  1. Redirection IP/Port avec csf

  2. Obtenir MongoDB sur Linux pour écouter les connexions distantes

  3. Comment ouvrir un port sous Linux

  4. Refuser toutes les connexions entrantes avec iptables ?

  5. Rediriger la console vers un port série

SSHFS :montage d'un système de fichiers distant via SSH

Comment vérifier qu'un port est ouvert sur un système Linux distant

Lsyncd - Synchroniser les répertoires locaux avec Linux distant

Comment rediriger la sortie de system() vers un fichier ?

Tester si un port sur un système distant est accessible (sans telnet)

Redirection de port sous Linux sans iptables ?