[LINUX] Essayez et apprenez iptablse, port forward

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.

image.png

--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.

  1. Réécrivez l'adresse IP de destination sur 127.0.0.1 et le port de destination sur 4000 dans "nat PREROUTING" sur la figure.
  1. Laisser passer le paquet avec "filter INPUT" dans la figure

Vérification

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

Définition de la stratégie par défaut

Utilisez la méthode de la liste blanche.

 iptables -P INPUT DROP
 iptables -P FORWARD DROP

Autoriser l'accès au serveur WEB sur un ordinateur portable

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

Transférer l'accès http du smartphone au serveur sur l'ordinateur portable

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.

Vérifier les paramètres

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 

Nettoyer

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

Résumé

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

Essayez et apprenez iptablse, port forward
Redirection de port UDP
À propos de WOL Port Forward
Essayez d'acquérir des données lors de la redirection de port vers RDS avec anaconda.
Essayez et apprenez iptables, jusqu'à ce que vous puissiez naviguer sur le Web
Essayez Caffe et Pylearn2 ensemble
Essayez d'utiliser pytest-Overview and Samples-