Je voudrais essayer le transfert de port avec iptables.
Je veux l'essayer à portée de main, donc la configuration est un peu spéciale, mais c'est comme suit.
--Il y a des smartphones et des ordinateurs portables dans le LAN (192.168.0.0/24).
Ce que je veux, c'est quand j'accède au PC notebook (192.168.0.9) depuis le navigateur de mon smartphone. Il s'agit de faire répondre le serveur sur le port 4000.
TODO
Identifiez le TODO tout en examinant le flux de paquets dans la figure ci-dessous. Référence: Tutoriel Iptables 1.2.2 Chapitre 6.1
Le paquet de requête GET du navigateur de smartphone a une adresse IP de destination de 192.168.0.9 et un port de destination de 80, et provient de "RÉSEAU" sur la figure. Le serveur est le "Processus Local" sur la figure.
Par conséquent, le paquet de demande peut atteindre le serveur en procédant comme suit.
L'état initial est le suivant.
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Utilisez la méthode de la liste blanche.
iptables -P INPUT DROP
iptables -P FORWARD DROP
L'ordre de TODO est inversé, mais rendez d'abord le serveur accessible avec le navigateur du PC notebook.
iptables -A INPUT -d 127.0.0.1 -p tcp --dport 4000 -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -p tcp --sport 4000 -j ACCEPT
C'est déroutant car c'est local, mais les paramètres et les paquets correspondent comme suit:
iptables -A INPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 4000 -j ACCEPT
Ce qui précède autorise les paquets du navigateur au serveur
iptables -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --sport 4000 -j ACCEPT
Ce qui précède autorise les paquets du serveur au navigateur
NAPT (Network Address Port Translation) la destination de la requête du smartphone (192.168.0.2).
iptables -t nat -A PREROUTING -s 192.168.0.2 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
Pour accéder depuis un autre smartphone que le smartphone sur le LAN, procédez comme suit.
iptables -t nat -A PREROUTING ! -s 192.168.0.9 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
L'IP de destination et le port de destination sont réécrits à l'aide de la cible DNAT. 。 。 。 。 。 Cela semble fonctionner ci-dessus, mais cela n'a pas fonctionné.
Il semble qu'il ne se connecte pas à localhost de l'extérieur par défaut. Peut-être que localhost devrait être isolé du monde extérieur.
Cette fois, c'est pour une vérification à portée de main, alors changez le réglage.
sysctl -w net.ipv4.conf.eth0.route_localnet=1
Vous pouvez maintenant y accéder!
Avez-vous eu la question, "N'est-il pas nécessaire de SNAT le paquet de réponse du serveur?" Je l'avais. Aucune conclusion n'est nécessaire. Pour DNAT et SNAT, si la conversion unidirectionnelle est définie, la direction opposée sera effectuée automatiquement.
Les paramètres finaux sont les suivants.
root@X1-Carbon-6th:~# iptables-save
Generated by iptables-save v1.6.1 on Sat Dec 28 14:15:30 2019
*nat
:PREROUTING ACCEPT [167:28771]
:INPUT ACCEPT [10:624]
:OUTPUT ACCEPT [314:29752]
:POSTROUTING ACCEPT [314:29752]
-A PREROUTING -s 192.168.0.2/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
COMMIT
Completed on Sat Dec 28 14:15:30 2019
Generated by iptables-save v1.6.1 on Sat Dec 28 14:15:30 2019
*filter
:INPUT DROP [3377:278628]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [3560:414379]
-A INPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 4000 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --sport 4000 -j ACCEPT
COMMIT
Completed on Sat Dec 28 14:15:30 2019
root@X1-Carbon-6th:~# sysctl -n net.ipv4.conf.enx7cc3a186ea62.route_localnet
1
Veuillez faire attention aux points suivants lors du nettoyage.
--Effacez la règle avec l'option -F pour chaque table et restaurez la politique --Retour de ce paramètre spécialement pris en charge avec sysctl
iptables -F && iptables -F -t nat
iptables -P INPUT ACCEPT && iptables -P FORWARD ACCEPT
sysctl -w net.ipv4.conf.enx7cc3a186ea62.route_localnet=0
J'ai essayé le port en avant dans mon environnement. J'ai confirmé que le diagramme de flux de paquets est très excellent et qu'il peut être réglé suffisamment si vous y réfléchissez en le regardant.
** "J'aime" Merci. **: clin d'œil:
Recommended Posts