URL: https://linuxfr.org/forums/linux-general/posts/protection-d-une-application-par-nat-interne-authentification-kerberos Title: Protection d'une application par NAT interne + Authentification Kerberos Authors: Guillaume_Sky Date: 2015年03月31日T11:37:16+02:00 License: CC By-SA Tags: apache, nat, linux, sécurité, iptables, jobscheduler et apache2 Score: 0 Bonjour tout le monde ! :) Dans le cadre d'un projet durant mes études, Je rencontre beaucoup de difficultés car je ne maîtrise pas suffisamment IPTables et Apache pour savoir d'où provient mon problème. J'ai mis en place une application, dont l'interface est généré par **Jetty**, et accessible via navigateur sur le port **44440**. Il m'a été demandé de mettre en place une authentification avec **Kerberos**, afin de permettre une authentification qui sera basée sur l'**AD** de l'entreprise. Le problème est que cette application ne possède rien pour faire ça. Je suis donc parti sur l'idée suivante: - Autoriser dans l'application la connexion uniquement depuis **localhost**. - Configurer **IPTables** pour que les connexions arrivant sur le port 80 soit ensuite perçu comme de source "localhost" et qu'elles soient redirigés vers Apache (j'ai pris le port 44441, un peu au hasard je l'avoue). - Configurer **Apache** pour qu'il fasse l'authentification Kerberos, et que si l'authentification est validée il redirige vers le port 44440 (mon application). J'ai réalisé un schéma pour mieux illustrer ce que je veux faire : ![Configuration](http://img11.hostingpics.net/pics/340895JobSchedulerSecurite.png) Mon problème, c'est que ça ne fonctionne pas et que j'arrive pas à identifier d'où proviennent les erreurs de fonctionnement. :( ### Voici donc ma configuration **IPTables**: ### ```iptables # Generated by iptables-save v1.4.7 on Tue Mar 31 10:37:56 2015 *nat -A PREROUTING -d IP_Serveur_LAN/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:44441 -A POSTROUTING -d 127.0.0.1/32 -o lo -p tcp -m tcp --dport 44441 -j SNAT --to-source 127.0.0.1 COMMIT *filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT -A INPUT -i lo -p tcp -m tcp --dport 44441 -j Cid2023X8611.0 -A INPUT -i eth0 -p tcp -m tcp --dport 59999 -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -s IP_Serveur_LAN/32 -i lo -j Cid2083X8611.0 -A INPUT -s 127.0.0.1/32 -i lo -j Cid2083X8611.0 -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -s IP_Serveur_LAN/32 -o lo -j Cid2083X8611.1 -A OUTPUT -s 127.0.0.1/32 -o lo -j Cid2083X8611.1 -A OUTPUT -j ACCEPT -A Cid2023X8611.0 -s IP_Serveur_LAN/32 -j Cid2023X8611.1 -A Cid2023X8611.0 -s 127.0.0.1/32 -j Cid2023X8611.1 -A Cid2023X8611.1 -d IP_Serveur_LAN/32 -j ACCEPT -A Cid2023X8611.1 -d 127.0.0.1/32 -j ACCEPT -A Cid2083X8611.0 -d IP_Serveur_LAN/32 -j ACCEPT -A Cid2083X8611.0 -d 127.0.0.1/32 -j ACCEPT -A Cid2083X8611.1 -d IP_Serveur_LAN/32 -j ACCEPT -A Cid2083X8611.1 -d 127.0.0.1/32 -j ACCEPT COMMIT ``` _Etant donné que je n'avais pas l'impression d'y arriver avec IPTables, j'ai voulu utiliser fwbuilder, ça m'a donc généré Cid2023X8611.0 et Cid2023X8611.1, qui je suppose sont eth0 et lo._ ![fwbuilder](http://img11.hostingpics.net/pics/612473iptablesJS.png) ### Pour la configuration Apache2 (juste les parties concernant ma demande d'aide): ### ```Apache2 Listen 44441 ServerName IP_Serveur_LAN:44441 AuthName "JOBSCHD Access" AuthType Kerberos Krb5Keytab /etc/krb5.ktab KrbAuthRealms EXEMPLE.PRIV KrbMethodNegotiate On KrbMethodK5Passwd On require valid-user # ProxyPass /:44441/ http://localhost:44440/jobscheduler/operations_gui/ ProxyPassReverse /:44441/ http://IP_Serveur_LAN:44440/jobscheduler/operations_gui ``` ### Voici ma configuration Kerberos, mais je pense qu'elle fonctionne car quand je fais kinit sur mon serveur, elle fonctionne bien: ```Kerberos [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = EXEMPLE.PRIV dns_lookup_realm = false dns_lookup_kdc = false [realms] EXEMPLE.PRIV = { kdc = nomServeurAD.exemple.priv:88 admin_server = nomServeurAD.exemple.priv:749 default_domain = exemple.priv } [domain_realm] .exemple.priv = EXEMPLE.PRIV exemple.priv = EXEMPLE.PRIV [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false } ``` Voilà donc tous les éléments que j'utilise ci dessus. Pourriez-vous m'aidez ou m'orienter sur ce qui ne va pas svp ? Je ne suis encore qu'un jeune en alternance, donc je n'ai pas de très grosses compétences, mais je comprends plutôt vite et bien. Je pensais arriver à résoudre mon problème seul, mais je commence à me prendre la pression car ça me bloque mon projet et l'année continue d'avancer, je me tourne donc vers ce forum pour vous demander de l'aide. Merci pour votre lecture, et un gros merci pour ce qui prendront le temps de me répondre. Je vous souhaite une très bonne journée à tous ! Guillaume.

AltStyle によって変換されたページ (->オリジナル) /