GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je transférer un port avec iptables ?

Solution 1 :

Tout d'abord, vous devez vérifier si le transfert est autorisé :

cat /proc/sys/net/ipv4/conf/ppp0/forwarding 
cat /proc/sys/net/ipv4/conf/eth0/forwarding 

Si les deux renvoient 1 c'est bon. Si ce n'est pas le cas, procédez comme suit :

echo '1' | sudo tee /proc/sys/net/ipv4/conf/ppp0/forwarding
echo '1' | sudo tee /proc/sys/net/ipv4/conf/eth0/forwarding

Deuxième chose - DNAT peut être appliqué le nat tableau uniquement. Ainsi, votre règle doit être étendue en ajoutant également une spécification de table (-t nat ):

iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 8001 -j DNAT --to-destination 192.168.1.200:8080
iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Les deux règles s'appliquent uniquement au trafic TCP (si vous souhaitez également modifier UDP, vous devez fournir des règles similaires mais avec -p udp jeu d'options).

Le dernier point, mais non le moindre, est la configuration du routage. Saisissez :

ip route

et vérifiez si 192.168.1.0/24 figure parmi les entrées de routage renvoyées.

Solution 2 :

Je pense que ce que vous voulez est :

iptables -A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state 
    NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 8001 -j DNAT --to-destination
    192.168.1.200:8080

Solution 3 :

Vous oubliez l'adresse source de post-routage SNAT 'ing :

sysctl net.ipv4.ip_forward=1
yours_wan_ip=101.23.3.1
-A PREROUTING  -p tcp -m tcp -d $yours_wan_ip --dport 8001 -j DNAT --to-destination 192.168.1.200:8080

-A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state NEW,ESTABLISHED,RELATED -j ACCEPT

-A POSTROUTING -t nat -p tcp -m tcp -s 192.168.1.200 --sport 8080 -j SNAT --to-source $yours_wan_ip

Et n'oubliez pas de définir votre pare-feu Linux comme passerelle par défaut sur l'ordinateur avec l'adresse 192.168.1.200.

Solution 4 :

J'ai créé le script bash suivant pour faire cela sur mon routeur Linux. Il déduit automatiquement l'IP WAN et confirme vos sélections avant de continuer.

#!/bin/bash

# decide which action to use
action="add"
if [[ "-r" == "$1" ]]; then
  action="remove"
  shift
fi

# break out components
dest_addr_lan="$1"
dest_port_wan="$2"
dest_port_lan="$3"

# figure out our WAN ip
wan_addr=`curl -4 -s icanhazip.com`

# auto fill our dest lan port if we need to
if [ -z $dest_port_lan ]; then
  dest_port_lan="$dest_port_wan"
fi

# print info for review
echo "Destination LAN Address: $dest_addr_lan"
echo "Destination Port WAN: $dest_port_wan"
echo "Destination Port LAN: $dest_port_lan"
echo "WAN Address: $wan_addr"

# confirm with user
read -p "Does everything look correct? " -n 1 -r
echo    # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]; then
  if [[ "remove" == "$action" ]]; then
    iptables -t nat -D PREROUTING  -p tcp -m tcp -d $wan_addr --dport     $dest_port_wan -j DNAT --to-destination $dest_addr_lan:$dest_port_lan
    iptables -D FORWARD -m state -p tcp -d $dest_addr_lan --dport     $dest_port_lan --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -t nat -D POSTROUTING -p tcp -m tcp -s $dest_addr_lan --sport     $dest_port_lan -j SNAT --to-source $wan_addr
    echo "Forwarding rule removed"
  else
    iptables -t nat -A PREROUTING  -p tcp -m tcp -d $wan_addr --dport     $dest_port_wan -j DNAT --to-destination $dest_addr_lan:$dest_port_lan
    iptables -A FORWARD -m state -p tcp -d $dest_addr_lan --dport     $dest_port_lan --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -t nat -A POSTROUTING -p tcp -m tcp -s $dest_addr_lan --sport $dest_port_lan -j SNAT --to-source $wan_addr
    echo "Forwarding rule added"
  fi
else
  echo "Info not confirmed, exiting..."
fi

L'utilisation du script est simple, il suffit de le copier et de le coller dans un fichier, puis.

# chmod +x port_forward.sh
# ./port_forward.sh 192.168.1.100 3000
... confirm details ... press y
# Forwarding rule added

Pour supprimer la même règle

# ./port_forward.sh -r 192.168.1.100 3000
... confirm details ... press y
# Forwarding rule removed

J'ai pensé que cela pourrait faire gagner du temps à quelqu'un sur son routeur respectif.

Solution 5 :

J'avais pour tâche de faire croire à MACHINE_A que le service s'exécute physiquement sur MACHINE_B, mais de rediriger de manière transparente toutes les requêtes vers MACHINE_C.

L'astuce consistait à utiliser MASQUERADE.

sysctl net.ipv4.ip_forward=1

iptables -t nat -A PREROUTING -p tcp -d MACHINE_B --dport 443 -j DNAT --to-destination MACHINE_C

iptables -t nat -A POSTROUTING -s MACHINE_A -o INTERFACE_NAME -j MASQUERADE

Veuillez noter que vous voudrez peut-être modifier les commandes :

  1. Pour autoriser le transfert de paquets sur une interface spécifique uniquement. Par exemple :

    sysctl net.ipv4.conf.eth0.forwarding=1
    
  2. Pour autoriser non seulement MACHINE_A, mais également tous les autres à utiliser la redirection de port, supprimez :

    -s MACHINE_A
    

Linux
  1. Comment puis-je supprimer des règles spécifiques d'iptables ?

  2. Comment ouvrir un port sous Linux

  3. Comment puis-je utiliser SSH avec un proxy SOCKS 5 ?

  4. Comment puis-je déplacer des fichiers avec xargs sous Linux ?

  5. Comment configurer iptables pour qu'un port indésirable ne soit pas signalé comme filtré

Comment utiliser les commandes Netcat avec des exemples

SSH vers un port autre que 22 :comment le faire (avec exemples)

Comment configurer un transfert de port distant sur le port 80 vers l'hôte local à l'aide de Setcap ?

Comment sécuriser le service SSH avec Port Knocking

Comment sécuriser un pare-feu Linux avec les règles IPTables

Puis-je utiliser ufw pour configurer une redirection de port ?