Comment puis-je redirect les ports 80 et 443 vers 8080 et 8443 avec iptables?

Je regarde la documentation pour une webapp Tomcat 6 appelée DSpace, en particulier pour exécuter Running DSpace sur les ports standard (80 pour http: // et 443 pour https: //)

J'essaie d'utiliser "Méthode 1" qui utilise iptables pour redirect le trafic des ports 80 et 443 à 8080 et 8443 afin de se débarrasser de :8080 dans l'URL.

Voici la command que la documentation donne:

 /sbin/iptables -t nat -I PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 8080 /sbin/iptables -t nat -A OUTPUT -p tcp -d _[server_ip_address|server_ip_address]_ --dport 80 -j REDIRECT --to-port 8080 /sbin/iptables -t nat -I PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-ports 8443 

Je pense qu'il y a quelque chose qui doit être changé sur la deuxième ligne, en particulier avec la section -d _[server_ip_address|server_ip_address]_ – mais je ne suis pas sûr de quoi. J'ai lu la page man pour iptables mais je n'ai pas de chance.

J'ai essayé de changer -d _[server_ip_address|server_ip_address]_ pour:

 -d _[127.0.0.1|127.0.0.1]_ 

et aussi:

 -d _[54.224.121.116|54.224.121.116]_ 

et aussi:

 -d _[ec2-54-224-112-116.compute-1.amazonaws.com|ec2-54-224-112-116.compute-1.amazonaws.com]_ 

Les erreurs que je reçois include Bad argument 'REDIRECT' et aussi

 host/network '_127.0.0.1' not found 

Quelqu'un peut-il m'aider à repérer ce que je fais mal?

mise à jour : Je pense que la redirection fonctionnera sans la deuxième ligne, mais je ne suis toujours pas sûr de son but …

Je pense que vous êtes simplement confus par la ponctuation brisée sur cette page. Les _ et [ sont des rests d'un balisage, ils ne font pas partie de la syntaxe d' iptables . Aussi le | caractère ne peut pas être utilisé pour séparer les adresses IP, vous devez utiliser , (virgule).

 /sbin/iptables -t nat -A OUTPUT -p tcp -d 54.224.121.116,54.224.121.116 --dport 80 -j REDIRECT --to-port 8080 

fwiw Je penserais à travailler avec mod_proxy_ajp sur Apache. On dirait que vous essayez de ne pas avoir à taper / voir: 8080 et: 8443 à la fin du nom du server dans l'URL. mod_proxy_ajp est généralement plus facile pour ce que vous essayez de faire et si vous décidez de monter l'ante plus tard et de faire un peu d'équilibrage de charge, il est sortingvial de le faire si vous êtes déjà dans une configuration mod_proxy_ajp. C'est la configuration sur un de mes servers de production:

 <Proxy *> AddDefaultCharset off Order deny,allow Allow from all </Proxy> ProxyPass / ajp://fqdn.for.server:8009/ ProxyPassReverse / ajp://fqdn.for.server:8009/ 

Vous pouvez placer le ProxyPass dans une configuration VirtualHost et ensuite, c'est comme configurer un autre hôte (vous pouvez configurer SSL sur le port 443 et le text en clair sur le port 80). Pour un plus grand spiel sur l'set du marché .

Apache + mod_proxy n'est pas le seul moyen de le faire, mais c'est celui avec lequel j'ai le plus d'expérience et il semble que ce soit less de travail que ce que vous essayez de faire (redirection de port avec le pare-feu).

Pour autant que je sache, les deuxièmes règles précisent ce qu'il faut faire si vous tentez d'atteindre l'extérieur de votre server vers votre server (donc -d ) en redirigeant 80 à 8080 . Ceci est nécessaire parce que les packages générés localement ne sont pas traités par PREROUTING ( http://www.docum.org/docum.org/kptd/ und "Mises à jour")

Note: J'utilise habituellement shorewall comme pare-feu, alors ne considérez pas que ma réponse soit pare-balles ni aromatisée aux arcs-en-ciel.