Προς το περιεχόμενο

Διένεξη vhost σε πλατφόρμα hosting


Μετάβαση στην απάντηση Απαντήθηκε από CyberCr33p,

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)
4 hours ago, geomagas said:

Πως θα του παρέχω dns αν οι nameservers του δείχνουν στον registrar; Διότι, εκεί θα πρέπει να προσθέσει το authentication record, αλλιώς δεν έχει νόημα. Χάνω κάτι;

Υπάρχουν δύο σενάρια:

1) Ο πελάτης χρησιμοποιεί εξωτερικούς nameservers. Σε αυτή την περίπτωση, τον ενημερώνεις ότι πρέπει να προσθέσει το TXT record μόνος του.

2) Ο πελάτης χρησιμοποιεί τους δικούς σου nameservers. Σε αυτή την περίπτωση, κατά την προσθήκη του domain στην υπηρεσία σου, το σύστημά σου θα προσθέτει αυτόματα το TXT record.

Και στις δύο περιπτώσεις, μέσω ενός cron job, θα ελέγχεις κάθε δύο ώρες για την ύπαρξη του TXT record. Μόλις επιβεβαιωθεί, η υπηρεσία θα ενεργοποιείται πλήρως.

Επιπλέον, για το πρώτο σενάριο, μπορείς να προσφέρεις μια εναλλακτική λύση για όσους φιλοξενούν τα emails τους σε τρίτες υπηρεσίες. Αντί για το TXT record, κατά την προσθήκη του domain (π.χ. example.com) στο σύστημά σου, μπορεί να εμφανίζεται ένα drop-down με επιλογές email όπως [email protected], [email protected], [email protected], [email protected]. Ο πελάτης θα επιλέγει ένα από αυτά και το σύστημά σου του στέλνει ένα μήνυμα με έναν σύνδεσμο επαλήθευσης. Όταν πατήσει τον σύνδεσμο, η ενεργοποίηση της υπηρεσίας ολοκληρώνεται.

Επιπροσθέτως, αν παρέχεις και φιλοξενία email, θα πρέπει να έχεις ένα cron job που ελέγχει κάθε μερικές ώρες αν το MX record συνεχίζει να "δείχνει" στη δική σου IP. Αν ναι, το domain χαρακτηρίζεται ως "local". Αν δείχνει σε άλλη IP, χαρακτηρίζεται ως "remote". Αυτό είναι απαραίτητο γιατί, αν ο πελάτης αλλάξει web host ή αν λήξει το domain και το πάρει κάποιος άλλος, τότε αν κάποιος άλλος που έχει mailbox στον ίδιο server στείλει μήνυμα προς το [email protected] (που πλέον βρίσκεται σε άλλον server), ο mail server σου θα προσπαθήσει να το παραδώσει τοπικά αντί να το στείλει στον σωστό server. Για παράδειγμα σε Plesk υπάρχει η δυνατότητα να επιλέξεις χειροκίνητα εάν ένα domain είναι "local" ή "remote", αλλά κατά τη γνώμη μου αυτό για λόγους ασφαλείας θα έπρεπε να γίνεται αυτόματα. Αφήνω και ένα shell script που έχω φτιάξει για να αυτοματοποιεί αυτό τον έλεγχο και με κάποιες ψιλοαλλαγές θα δουλεύει και σε Linux:
 

#!/usr/local/bin/bash

getIP()
{
    i=$(($1 - 1))
    IFS=$'\n'
    array=($(/sbin/ifconfig | grep inet | grep broadcast | awk '{split($0,a," "); print a[2]}'))
    echo ${array[$i]}
}

ip1=$(getIP 1)
ip2=$(getIP 2)

HOSTNAME=$(hostname -s)
EMAIL="root"

declare -A change_candidates

check_mx() {
    local domain=$1

    local ns1=$(dig ${domain} ns +short | sed 's/\.[^.]*$//' | head -n 1)
    local ns1ip=$(dig ${ns1} a +short | head -n 1)

    if [ -z "${ns1}" ] || [ -z "${ns1ip}" ]; then
        echo "skip"
        return
    fi

    local mxrecordip=($(dig @${ns1} +short ${domain} mx | sort -n | awk '{print $2}' | dig +short -f -))
    local inarrayip1=$(echo ${mxrecordip[@]} | grep -o "${ip1}" | wc -w)
    local inarrayip2=$(echo ${mxrecordip[@]} | grep -o "${ip2}" | wc -w)

    if [ $inarrayip1 -ne 0 ] || [ $inarrayip2 -ne 0 ]; then
        echo "local"
    else
        echo "remote"
    fi
}

for domain in $(cat /root/cretapanel/data/*.domainlist); do
        status=$(check_mx ${domain})
        if [ "${status}" == "skip" ]; then
            continue
        fi

        if [ "${status}" == "local" ] && [ $(grep -c "^${domain} OK" /usr/local/etc/postfix/domains) -eq 0 ]; then
            change_candidates[$domain]="local"
        elif [ "${status}" == "remote" ] && [ $(grep -c "^${domain} OK" /usr/local/etc/postfix/domains) -eq 1 ]; then
            change_candidates[$domain]="remote"
        fi
done

for domain in "${!change_candidates[@]}"; do
    status=$(check_mx ${domain})

    if [ "${status}" == "${change_candidates[$domain]}" ]; then
        if [ "${status}" == "local" ]; then
            echo "${domain}: Local MX"
            echo "${domain} OK" >> /usr/local/etc/postfix/domains
            postmap /usr/local/etc/postfix/domains
            printf "[${HOSTNAME}] Local MX: ${domain}" | mail -s "[${HOSTNAME}] Local MX: ${domain}" "$EMAIL"
        elif [ "${status}" == "remote" ]; then
            echo "${domain}: Remote MX"
            sed -i "" -e "/^${domain} OK/d" /usr/local/etc/postfix/domains
            postmap /usr/local/etc/postfix/domains
            printf "[${HOSTNAME}] Remote MX: ${domain}" | mail -s "[${HOSTNAME}] Remote MX: ${domain}" "$EMAIL"
        fi
    fi
done

Και κάτι τελευταίο. Θα πρέπει να έχεις και μια λίστα με κοινά domains, που να μην επιτρέπεται να προστεθούν εξ αρχής στο σύστημά σου, για παράδειγμα:

outlook.com
ebox.gr
gawab.com
address.com
aim.com
altavista.net
aol.com
cretaforce.gr
cs.com
cyta.gr
earthlink.net
email.com
excite.com
fastmail.fm
forthnet.gr
freemail.gr
gmail.com
gmx.com
google.com
google.gr
hol.gr
hotmail.com
hotmail.gr
inbox.com
juno.com
mail.com
mail.gr
mailbox.gr
mycosmos.gr
netone.gr
netscape.com
netscape.net
ote.gr
otenet.gr
tellas.gr
vip.gr
vivodi.gr
vodafone.gr
wind.gr
windowslive.com
yahoo.com
yahoo.gr
paypal.com

 

Επεξ/σία από CyberCr33p
  • Thanks 1
Δημοσ.
3 ώρες πριν, CyberCr33p είπε

1) Ο πελάτης χρησιμοποιεί εξωτερικούς nameservers. Σε αυτή την περίπτωση, τον ενημερώνεις ότι πρέπει να προσθέσει το TXT record μόνος του.

Ναι, αυτό είναι το σενάριο που συζητάμε σε όλο σχεδόν το thread, και νομίζω ότι τελικά είναι το μόνο που μπορεί να δουλέψει σε κάθε περίπτωση, παρόλη τη μανούβρα που χρειάζεται να κάνει ο χρήστης...

3 ώρες πριν, CyberCr33p είπε

2) Ο πελάτης χρησιμοποιεί τους δικούς σου nameservers. Σε αυτή την περίπτωση, κατά την προσθήκη του domain στην υπηρεσία σου, το σύστημά σου θα προσθέτει αυτόματα το TXT record.

Δεν θα δουλέψει αυτό. Αφού οι nameservers είναι δικό μου resource (υπό τον έλεγχό μου) είναι σαν να αυτο-πιστοποιώ την κατοχή του domain από τον χρήστη (που δεν έχω το authority να το κάνω) και μετά να βάζω τον δικό μου cron να ελέγχει αν το δικό μου σύστημα κατάφερε να προσθέσει το txt στους δικούς μου nameservers για λογαριασμό του δικού μου χρήστη... Δεν βγάζει και πολύ νόημα, έτσι δεν είναι;

Το challenge θα πρέπει να είναι: "Πήγαινε και βάλε ένα token που θα σου δώσω εγώ, σε ένα μέρος εκτός του δικού μου συστήματος, και αν μπορέσω να το διαβάσω, μου έχεις αποδείξει ότι το domain είναι υπό τον έλεγχό σου". Το οποίο υλοποιείται μόνο με το πρώτο σου σενάριο.

Κάτι ανάλογο νομίζω προσπαθεί να κάνει και η εναλλακτική που προτείνεις:

3 ώρες πριν, CyberCr33p είπε

Επιπλέον, για το πρώτο σενάριο, μπορείς να προσφέρεις μια εναλλακτική λύση για όσους φιλοξενούν τα emails τους σε τρίτες υπηρεσίες. Αντί για το TXT record, κατά την προσθήκη του domain (π.χ. example.com) στο σύστημά σου, μπορεί να εμφανίζεται ένα drop-down με επιλογές email όπως [email protected], [email protected], [email protected], [email protected]. Ο πελάτης θα επιλέγει ένα από αυτά και το σύστημά σου του στέλνει ένα μήνυμα με έναν σύνδεσμο επαλήθευσης. Όταν πατήσει τον σύνδεσμο, η ενεργοποίηση της υπηρεσίας ολοκληρώνεται.

Εξ αρχής, είναι λύση υποδεέστερη του (1), διότι αφορά μόνο ένα υποσύνολο των χρηστών (βλ το highlight μου). Αλλά κυρίως διότι, και πάλι, δεν αποδεικνύει την κατοχή του domain, αλλά την πρόσβαση σε ένα mailbox. Για να σε προλάβω, καταλαβαίνω γιατί dropdown με τα συγκεκριμένα emails, και όχι text field που θα μπορεί να βάλει πχ [email protected]. Αλλά και πάλι, αν έχω πρόσβαση στο [email protected], αυτό δεν αποδεικνύει ότι μου ανήκει το domain, μόνο το mailbox.

3 ώρες πριν, CyberCr33p είπε

Επιπροσθέτως, αν παρέχεις και φιλοξενία email [...]

Τα υπόλοιπα λέω να τα πάρω εργασία για το σπίτι... 😆

Spoiler
3 ώρες πριν, CyberCr33p είπε

Θα πρέπει να έχεις και μια λίστα με κοινά domains, που να μην επιτρέπεται να προστεθούν εξ αρχής στο σύστημά σου

Μου αρέσει που συμπεριέλαβες την cretaforce αλλά όχι πχ την Coca Cola... 😅

Επίσης, αν η google δηλαδή θέλει να μετακομίσει σε μένα, τι να κάνω, να τα διώξω τα παιδιά; Δεν πάει όμορφα... Νομίζω;;; 😝

 

  • Λύση
Δημοσ. (επεξεργασμένο)
22 minutes ago, geomagas said:

Δεν θα δουλέψει αυτό. Αφού οι nameservers είναι δικό μου resource (υπό τον έλεγχό μου) είναι σαν να αυτο-πιστοποιώ την κατοχή του domain από τον χρήστη (που δεν έχω το authority να το κάνω) και μετά να βάζω τον δικό μου cron να ελέγχει αν το δικό μου σύστημα κατάφερε να προσθέσει το txt στους δικούς μου nameservers για λογαριασμό του δικού μου χρήστη... Δεν βγάζει και πολύ νόημα, έτσι δεν είναι;

Πες ότι έχω καταχωρήσει το example.com και μου ζητάς για nameservers να περάσω τους δικούς σου, δηλαδή τους ns1.geomagas.gr και ns2.geomagas.gr

Σε αυτή τη περίπτωση μόνο και μόνο ότι βάζω τους δικούς σου δεν σημαίνει ότι θέλω να χρησιμοποιήσω την υπηρεσία σου;

Εάν δεν έχω πρόσβαση στο διαχειριστικό του καταχωρητή για να βάλω στο domain τους δικούς σου nameservers τότε μετά από 48 ώρες μπορείς να αφαιρείς το domain από το σύστημα, έτσι και αλλιώς δεν θα έχει "ενεργοποιηθεί" πλήρως το hosting (μόνο τα DNS resolution θα έχεις ενεργό σε αυτό το σημείο) οπότε δεν πρόκειται να έχει ανεβάσει δεδομένα που θα διαγράφονταν.

Περίπου το ίδιο γίνεται και με το CloudFlare που σου λέει βάλε τους τάδε nameservers και μετά μπορείς να χρησιμοποιήσεις την υπηρεσία του. H μόνη του διαφορά είναι ότι εάν κάποιος χρήστης του CloudFlare έχει περάσει nameservers παλαιότερα και πάει νέος χρήστης να περάσει το ίδιο domain του εμφανίζει να περάσει διαφορετικούς nameservers, οπότε λογικά από εκεί καταλαβαίνουν ότι ο νέος χρήστης εφόσον πέρασε τους νέους nameservers που του ζήτησαν είναι και αυτός που έχει την πρόσβαση στο domain "τελευταίος".

Επεξ/σία από CyberCr33p
  • Thanks 1
Δημοσ.
3 λεπτά πριν, CyberCr33p είπε

Σε αυτή τη περίπτωση μόνο και μόνο ότι βάζω τους δικούς σου δεν σημαίνει ότι θέλω να χρησιμοποιήσω την υπηρεσία σου;

Ναι αλλά εσύ τους έβαλες (ο Α) ή ο πραγματικός ιδιοκτήτης (ο Β); Εκεί είναι ο κόμπος...

4 λεπτά πριν, CyberCr33p είπε

Το ίδιο ακριβώς γίνεται και με το CloudFlare που σου λέει βάλε τους τάδε nameservers και μετά μπορείς να χρησιμοποιήσεις την υπηρεσία του.

Καλή ιδέα. Θέλω να το δοκιμάσω κάποια στιγμή, να δω πως λύνουν αυτοί ανάλογες διενέξεις... Thanks!

Δημοσ.
1 ώρα πριν, CyberCr33p είπε

του εμφανίζει να περάσει διαφορετικούς nameservers, οπότε λογικά από εκεί καταλαβαίνουν ότι ο νέος χρήστης εφόσον πέρασε τους νέους nameservers που του ζήτησαν είναι και αυτός που έχει την πρόσβαση στο domain "τελευταίος".

Πολύ, ΠΟΛΥ καλό κόλπο!!!

Βέβαια, αυτό προϋποθέτει να έχεις καμιά 20αριά nameservers στον έλεγχό σου, ή έστω λίγους με πολλά aliases... αλλά για να είμαι ειλικρινής, τεχνικά είναι το καλύτερο που έχω ακούσει ως τώρα!

Το καλύτερο με αυτή τη λύση είναι ότι δεν χρειάζεται ο χρήστης να κάνει όλη τη μεταφορά των ns στον registrant και πάλι πίσω, απλά να προσθέσει έναν δικό σου ns που του έχεις υποδείξει.

Τέλειο!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...