Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Firewall Paypal sur Debian

    8 février 2017 à 11:27:12

    Bonjour,

    Voilà depuis très longtemps j'ai développé ce petit firewall pour protégé ma machine et mes serveurs de jeux des attaques trop "faciles". Le problème c'est que dès que je l'active, tout fonctionne mis à part le payement via PayPal (paypal checkout). Logiquement le port concerné est 443 (il est ouvert) mais les joueurs n'arrivent pas à obtenir leurs points (or moi j'obtiens leur argent). Voici mon par-feu:

    #!/bin/sh
    
    ### BEGIN INIT INFO
    # Provides:          firewall
    # Required-Start:    networking
    # Required-Stop:
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Par-feu Linux
    # Description:       Par-feu linux pour réduire les attaques courtantes
    ### END INIT INFO
    
    # Remet à zéro les règles du par-feu
    iptables -F
    iptables -X
    
    # Bloque tout le trafic
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP
    
    # Ne casse pas les connexions établies
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    
    # Autorise localhost
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
    
    # Verifie que le serveur est accessible
    iptables -t filter -A INPUT -p icmp -j ACCEPT
    iptables -t filter -A OUTPUT -p icmp -j ACCEPT
    
    # SSH
    iptables -A INPUT -p tcp --dport 29313 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 29313 -j ACCEPT
    
    # Mail SMTP
    #iptables -A INPUT -p tcp --dport 25 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
    
    # HTTP
    iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
    
    # PayPal
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
    
    # Relation site/server
    iptables -t filter -A INPUT -p tcp --dport 65410 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp --dport 65410 -j ACCEPT
    
    iptables -t filter -A INPUT -p tcp --dport 63421 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp --dport 63421 -j ACCEPT
    
    iptables -t filter -A INPUT -p tcp --dport 65420 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp --dport 65420 -j ACCEPT
    
    iptables -t filter -A INPUT -p tcp --dport 65146 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp --dport 65146 -j ACCEPT
    
    iptables -t filter -A INPUT -p tcp --dport 45196 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp --dport 45196 -j ACCEPT
    
    # ------------------------- CONFIGURATION DES SERVEURS -------------------------
    # ------------------------- CONFIGURATION DES SERVEURS -------------------------
    # ------------------------- CONFIGURATION DES SERVEURS -------------------------
    
    # Serveur BungeeCord essentiels
    iptables -A INPUT -p tcp --dport 24965 -j ACCEPT # Bungee
    iptables -A INPUT -p tcp --dport 24970 -j ACCEPT # Auth
    iptables -A INPUT -p tcp --dport 24978 -j ACCEPT # Lobby
    iptables -A INPUT -p tcp --dport 24981 -j ACCEPT # Faction
    iptables -A INPUT -p tcp --dport 24999 -j ACCEPT # Training
    iptables -A INPUT -p tcp --dport 25010 -j ACCEPT # Jeu
    
    # Crée une catégorie pour Bungeecord
    iptables -N bungee
    
    # Adresse IP autorisées par BungeeCord
    iptables -A bungee --src 151.80.109.131 -j ACCEPT
    iptables -A bungee --src 0.0.0.0 -j ACCEPT
    iptables -A bungee --src 127.0.0.1 -j ACCEPT
    
    # Bloque toutes les autres adresses IP
    iptables -A bungee -j DROP
    
    # Port inaccessible sans BungeeCord
    iptables -I INPUT -m tcp -p tcp --dport 24978 -j bungee
    iptables -I INPUT -m tcp -p tcp --dport 24981 -j bungee
    iptables -I INPUT -m tcp -p tcp --dport 24999 -j bungee
    iptables -I INPUT -m tcp -p tcp --dport 25010 -j bungee
    
    # Autoriser MYSQL distant
    iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT
    
    # ------------------------- CONFIGURATION DU TEAMSPEAK -------------------------
    # ------------------------- CONFIGURATION DU TEAMSPEAK -------------------------
    # ------------------------- CONFIGURATION DU TEAMSPEAK -------------------------
    
    # Serveur Teamspeak
    iptables -A INPUT -p tcp --dport 30033 -j ACCEPT
    iptables -A INPUT -p tcp --dport 10011 -j ACCEPT
    iptables -A INPUT -p udp --dport 9987 -j ACCEPT
    
    # ------------------------ CONFIGURATION DE LA LISTE NOIRE ------------------------
    # ------------------------ CONFIGURATION DE LA LISTE NOIRE ------------------------
    # ------------------------ CONFIGURATION DE LA LISTE NOIRE ------------------------
    
    # Liste noire des IP à bannir (booters)
    iptables -A INPUT -s 239.192.145.229 -j DROP
    iptables -A INPUT -s 185.13.36.49 -j DROP
    iptables -A INPUT -s 185.13.36.45 -j DROP
    iptables -A INPUT -s 185.13.36.46 -j DROP
    iptables -A INPUT -s 185.13.36.57 -j DROP
    iptables -A INPUT -s 5.39.71.18 -j DROP
    iptables -A INPUT -s 144.0.0.22 -j DROP
    
    # Liste noire des IP à bannir (VPN)
    iptables -A INPUT -s 67.221.255.0/32 -j DROP
    iptables -A INPUT -s 68.68.99.0/32 -j DROP
    iptables -A INPUT -s 79.141.167.0/32 -j DROP
    iptables -A INPUT -s 79.141.166.0/32 -j DROP
    iptables -A INPUT -s 79.141.165.0/32 -j DROP
    iptables -A INPUT -s 79.141.172.0/32 -j DROP
    iptables -A INPUT -s 79.141.162.0/32 -j DROP
    iptables -A INPUT -s 79.141.173.0/32 -j DROP
    iptables -A INPUT -s 79.141.164.0/32 -j DROP
    iptables -A INPUT -s 79.141.161.0/32 -j DROP
    iptables -A INPUT -s 79.141.170.0/32 -j DROP
    iptables -A INPUT -s 79.141.160.0/32 -j DROP
    iptables -A INPUT -s 84.19.165.0/32 -j DROP
    iptables -A INPUT -s 84.19.169.0/32 -j DROP
    iptables -A INPUT -s 95.141.28.0/32 -j DROP
    iptables -A INPUT -s 95.141.26.0/32 -j DROP
    iptables -A INPUT -s 95.141.27.0/32 -j DROP
    iptables -A INPUT -s 95.141.31.0/32 -j DROP
    iptables -A INPUT -s 93.114.44.0/32 -j DROP
    iptables -A INPUT -s 93.114.43.0/32 -j DROP
    iptables -A INPUT -s 193.109.199.0/32 -j DROP
    iptables -A INPUT -s 217.114.211.0/32 -j DROP
    iptables -A INPUT -s 203.98.92.0/32 -j DROP
    iptables -A INPUT -s 5.254.97.0/32 -j DROP
    
    # Relance Fail2Ban (protection du site, SSH, FTP, ...)
    service fail2ban restart
    
    # Liste noir des IP à bannir (utilisateurs)


    Si quelqu'un pourrait m'aider, ce serait très aimable ! Merci beaucoup !

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      12 février 2017 à 20:43:30

      Tu es sur que ça vient du parefeu ?

      Tu as regardé dans le log apache2 (ou Nginx) en faisant un

      cat /tonfichier.log | grep "PayPal"

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        12 février 2017 à 21:08:26

        Bonjour,

        Merci de ta réponse. Cette commande m'affiche ceci:

        root@ns414647:/var/log/nginx# cat /var/log/nginx/access.log | grep "PayPal"
        173.0.**.* - - [12/Feb/2017:09:52:09 +0100] "POST /boutique/paypal_ipn HTTP/1.1" 200 6094 "-" "PayPal IPN ( https://www.paypal.com/ipn )"
        

        J'imagine bien que ça vient du par-feu car après avoir fait un coup de sh /etc/scripts/reset_firewall.sh avec ce contenu:

        #!/bin/sh
        
        # Remet à zéro toutes les règles du par-feu
        iptables -F
        iptables -X
        iptables -t nat -F
        iptables -t nat -X
        iptables -t mangle -F
        iptables -t mangle -X
        iptables -P INPUT ACCEPT
        iptables -P FORWARD ACCEPT
        iptables -P OUTPUT ACCEPT

        Tout re-fonctionne parfaitement...

        Cordialement,

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          14 février 2017 à 12:26:24

          Salut,

          je ne sais pas trop ce qui pourrait bloquer, je ne suis pas un spécialiste des lignes de commande iptables

          Personnellement j'utilise le parefeu CSF avec une interface web (webmin)

          pour l'installation :

          ## INSTALLATION DE CSF/LFD
          cd /usr/src
          rm -fv csf.tgz
          wget http://download.configserver.com/csf.tgz
          tar -xzf csf.tgz
          cd csf
          sh install.sh
          
          ## INSTALLATION DE WEBMIN
          cd /usr/src
          apt-get install -y perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python libwww-perl \
          && wget http://prdownloads.sourceforge.net/webadmin/webmin_1.810_all.deb \
          && dpkg --install webmin_1.810_all.deb
          
          ## INSTALLATION DU MODULE CSF POUR WEBMIN
          
          https://IP_DE_TON_SERVEUR:10000/
          webmin => webmin configuration => webmin module
          dans "from local file" mettre : "/usr/local/csf/csfwebmin.tgz"

          je m'en sert sur mes debian 7 et 8

          On installe d'abord CSF

          Ensuite on installe webmin

          et enfin on installe le module CSF pour webmin

          Dans webmin on accède à la gestion du parefeu via les Menus "system" => "ConfigServer Security & Firewall"

          La première chose à faire est de vérifier dans le menu "Firewall allow IPs" que ton IP perso est bien présente.

          Ensuite, via le menu "Firewall configuration" il faut passer "TESTING" à off et également retirer le port 10000 (port webmin) de la liste des port TCP IN ouvert en ipv4 et ipv6 (tu peux faire de même avec le port ssh, comme ça seul toi aura accès à ssh et webmin) => par contre il faut être sûr que tu as bien une IP fixe avec ton FAI.

          Une fois que tout cela est fait tu peux te servir des menus Firewall Allow Ips et Deny Ips pour ajouter des IPs

          tu peux les ajouter de plusieurs manière :

          1.2.3.4

          45.54.124.0/24 (format CIDR

          ou en indiquant un port bien précis

          par exemple on veut ouvrir le port 22 pour l'IP 12.34.56.78

          on fera :

          tcp|in|d=22|s=12.34.56.78

          <udp ou tcp>|<in ou out>|<d ou s>=PORT|<d ou s>=<ADRESSE_IP ou CIDR>

          "d" veut dire port ou IP de destination

          "s" veut dire port ou IP de source

          pour le relancer en ligne de commande c'est "csf -r"

          Voilà si ça peut t'aider, sinon je laisse d'autre personnes qui connaissent mieux iptables te renseigner

          A+

          • Partager sur Facebook
          • Partager sur Twitter
            14 février 2017 à 15:19:47

            D'accord merci, j'avais déjà essayé ce système mais il ne me convenait pas pour certaines règles de mes clients :/

            Par conséquent, je vais tout de même essayer de continuer sur ma piste des iptables et attendre une réponse.

            Un grand merci de ta proposition !

            • Partager sur Facebook
            • Partager sur Twitter
              22 février 2017 à 14:54:07

              Pour Paypal, tu utilises le paypal.me ou une API ?
              • Partager sur Facebook
              • Partager sur Twitter
                22 février 2017 à 23:30:06

                Merci de ta réponse,

                Je ne sais pas trop, j'utilise le code suivant:

                <?php
                $req = 'cmd=_notify-validate';
                 
                foreach ($_POST as $key => $value) {
                    $value = urlencode(stripslashes($value));
                    $req .= "&$key=$value";
                }
                // Renvoyé du système PayPal pour la validation
                $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
                $header .= "Host: www.paypal.com\r\n";
                $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
                $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
                $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
                 
                $item_name = $_POST['item_name'];
                $item_number = $_POST['item_number'];
                $payment_status = $_POST['payment_status'];
                $payment_amount = $_POST['mc_gross'];
                $payment_currency = $_POST['mc_currency'];
                $txn_id = $_POST['txn_id'];
                $receiver_email = $_POST['receiver_email'];
                $payer_email = $_POST['payer_email'];
                $custom = $_POST['custom'];
                 
                // Variable définie par défaut pour éviter une erreur
                $traite = false;
                 
                // Requête pour prendre les logs
                $logs = $db->prepare('SELECT action FROM total_log WHERE pseudo = ?', [$custom]);
                 
                if ($fp){
                    fputs ($fp, $header . $req);
                    while (!feof($fp)){
                    $res = fgets ($fp, 1024);
                     
                    // Vérifies que payment_status a la valeur VERIFIED
                    if (strcmp ($res, 'VERIFIED') == 0){
                            // Vérifie que Payment_status a la valeur "Completed"
                            if ($payment_status == 'Completed') {
                                // Boucle pour afficher tous les achats
                                foreach ($logs as $log) {
                                    // Cherche si la transaction n'a pas déjà été traitée
                                    if (stripos($log->action, $txn_id) != FALSE){
                                        $traite = true;
                                    }
                                }
                 
                                // Vérifie que la transaction n'a pas déjà été traitée
                                if ($traite === false) {
                                     
                                        // Vérifier si la monnaie utilisée est la bonne
                                        if($payment_currency == 'EUR'){
                                            // Défini la class pour savoir s'il y a des reductions
                                            $reduction = New Reduction($db);
                 
                                            // Défini les points
                                            $point = str_replace('Achat de ', '', $item_name);
                                            $point = str_replace(' Points Boutique', '', $point);
                 
                                            // Vérifie s'il y a une reduction et essaye de prendre les options en fonction des points
                                            if ($reduction->paypal('true') === true) {
                                                $req = $db->prepare('SELECT argent, point FROM paypal_reduction WHERE argent = ? AND point = ?', [$payment_amount, $point], true);
                                            } else {
                                                $req = $db->prepare('SELECT argent, point FROM paypal_prix WHERE argent = ? AND point = ?', [$payment_amount, $point], true);
                                            }
                 
                                            // Si la requête a trouvé une option
                                            if (!empty($req)){
                                                    $db->insert('INSERT INTO total_log (pseudo, action, date, ip) VALUES (?,?,?,?)', $array);
                                                }
                                            } else {
                                                // Faux article
                                            }
                                        } else {
                                            // Mauvaise monnaie
                                        }
                                } else {
                                    // Mauvais ID
                                }
                            } else {
                                // Arrête le systeme
                            }
                        } else if (strcmp ($res, 'INVALID') == 0) {
                             // Arrête le systeme
                        }
                    }
                    fclose ($fp);
                }

                (certaines vérifications (donc failles) sont pas présent pour justement essayer)

                Cordialement, 

                • Partager sur Facebook
                • Partager sur Twitter
                  23 février 2017 à 9:49:10

                  Tu as des logs de ton "erreur" du paypal bloqué par le firewall ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 février 2017 à 10:40:39

                    Non, toutes les requêtes sont bien envoyées... :/ Aucune log d'erreur c'est ça le plus étrange...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 février 2017 à 10:45:02

                      INPUT / OUPUT bien configuré? :c

                      Tu peux avoir des logs des entrées et sortis stp? ^^

                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 février 2017 à 22:22:57

                        Comment je peux faire ça ? ^^
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          28 février 2017 à 16:01:29

                          Ce ne serait pas fail2ban par hasard

                          as-tu essayé de le stopper ?

                          -
                          Edité par Anonyme 28 février 2017 à 16:02:08

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Problème Firewall Paypal sur Debian

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown