Ανάπτυξη ιστοτόπου σε περιβάλλον Debian/Ιστότοπος σε απομακρυσμένο προσωπικό εικονικό εξυπηρετητή
Εισαγωγικά
[επεξεργασία]Εφόσον αυτό το βικιεγχειρίδιο καταπιάνεται με debian θα ασχολειθούμε και με debian εικονικούς ιδιωτικούς εξυπηρετητές (ΕΙΕ).
Είναι ενδιαφέρον να προσπαθείς να στήσεις έναν εξυπηρετητή του
παγκόσμιου ιστού χρησιμοποιώντας μόνο ssh.
Η πρώτη σου σύνδεση
[επεξεργασία]Όταν κάνεις την πρωτη σου σύνδεση :
$ ssh root@[ip διεύθυνση σου]
και συνδεθείς από τις πρώτες εντολές σου'ρχεται να εκτελέσεις είναι
# uname -a # whoami # df -h # cd / # ls # more /etc/debian_version 4.0 # hostname [το όνομα του εικονικού υπολογιστή σας] # adduser [youradminname] (καθώς δεν μπαίνουμε ποτέ σαν υπερχρήστες στο σύστημα , προσθέτουμε έναν χρήστη διαχειριστή) # visudo (δώστε αυτήν την εντολή και κατόπιν στο αρχείο που θα εμφανιστεί προσθέστε [youradminname] ALL=(ALL) ALL
Ρύθμιση secure shell (ssh)
[επεξεργασία]Γενικά
[επεξεργασία]Προκυμένου να ρυθμίσουμε και να χρησιμοποιήσουμε ικανοποιητικά το ασφαλές κέλυφος ssh πρέπει να έχουμε μερικές βασικές γνώσεις κρυπτογραφία και συγκεκριμένα Κρυπτογράφηση Δημόσιου Κλειδιού. Το γενικό πλαίσιο είναι ότι έχουμε έναν απομακρυσμένο υπολογιστή εξυπηρετητή στον οποίο τρέχει και ένας εξυπηρετητής sshd (secure shell deamon), και στον τοπικό μας υπολογιστή θα χρησιμοποιήσουμε έναν πελάτη ssh για να συνδεθούμε με ασφάλεια στον απομακρυσμένο εξυπηρετητή στον οποίο έχουμε λογαριαμό. Για να είναι ασφαλής η επικοινωνία πρέπει να χρησιμοποιηθεί μια μορφή κρυπτογράφησης.
Βασική χρήση
[επεξεργασία]- ssh χρήστης@όνομαΥπολογιστή // για να συνδεθούμε σε ένα απομακρυσμένο υπολογιστή . Και εφόσον μιλάμε για ένα εργαλείο του unix είναι προφανές ότι η ελάχιστη πληροφορία που πρέπει να προσδιρίσουμε είναι αυτή ακριβώς
- όνομα ή διεύθυνση ip απομακρυσμένου υπολογιστή
- όνομα χρήστη/λογαριασμού που έχετε στο απομακρυσμένο σύστημα. Φυσικά θα σας ζητηθεί και το συνθηματικό αμμέσως μετά για να ολοκληρωθεί η σύνδεση.
Στη γενική περίπτωση ο εξυπηρετητής δεν ανήκει σε μας. Εμείς θέλουμε να κρυπτογραφούμε τα δεδομένα μας όταν τα στέλνουμε με το δικό μας μυστικό-ιδιωτικό κλειδί , και στο άλλο άκρο ο εξυπηρετητής να τα αποκρυπτογραφεί με τη χρήση του δημόσιού μας κλειδίου που θα έχουμε μεταφέρει εκεί.Άρα είναι βασικό να έχουμε ένα δικό μας ζευγάρι ιδιωτικού - δημόσιου κλειδίου.
Ρύθμιση rsync
[επεξεργασία]Λόγω του ότι είναι ποιό αργό να επεξεργαζόμαστε έναν ιστότοπο από αποκαρυσμένο τερμαμα είναι βολικό να δουλεύουμε σε ένα τοπικό αντίγραφο και εφόσον είμαστε σίγουροι για τις αλλαγές μας να συγχρονίζουμε το απομακρυσμένο αντίγραφο με αυτό που έχουμε δουλεψει τυπικά. Ένας τρόπος να το κάνουμε αυτό είναι με το rsync
Ασφαλίζωντας τον εικονικό διακομιστή σας
[επεξεργασία]Δεν ειθιστε να υπάρχουν σπίτια χωρίς κλειδιαριά και παρόμοια προκειμένου να έχετε περισσότερη ασφάλεια από τι σας παρέχει μόνο το συνθηματικό του λογαριασμού σας πρέπει να χρησιμοποιείσεται κρυπτογραφία δημόσιου κλειδίου προκειμένου και η πιστοποιήση κατά τη σύνδεση να γίνει ποιό ασφαλής αλλά και να κρυπτογραφείται η επικοινωνία κατά τη σύνδεση σας σ'αυτόν.
Αυτό που θέλουμε να κάνουμε είναι να δημιουργήσουμε ένα δημόσιο κλειδί που θα τοποθετήσουμε στον εικονικό μας υπολογιστή και ένα ιδιωτικό που θα φυλάμε στον δικό μας υπολογιστή. Με αυτή την διαρύθμιση (εφόσον είναι ασφαλές το ιδιωτικό μας κλειδί) η είσοδός μας θα είναι ποιό ασφαλή και η σύνδεδη κρυπτογραφημένη .
Ενεργοποίηση και ρύθμιση τοίχους προστασίας
[επεξεργασία]Στο linux το πρόγραμμα που μας βοηθάει να στήσουμε τοίχος προστασίας είναι το netfilter. Και για να το διαμορφώσουμε χρησιμοποιούμε το πρόγραμμα Iptables.
Αλυσίδες κανόνων
[επεξεργασία]Το παρακάτω διάγραμμα μας δείχνει τη βασική δομή λειτουργίας του φιλτραρίσματος πακέτων στο linux. Οι κύκλοι αντιπροσωπεύουν αλυσίδες . Μια αλυσίδα είναι ένα σύνολο από κανόνες.
______ Εισερχόμενα / \ Εξερχόμενα -->[Απόφαση ]--->|ΠΡΟΩΘΗΣΗ|-----> [Δρομολόγησης] \______/ ^ | | v ____ _____ / \ / \ |ΕΞΟΔΟΥ| |ΕΙΣΟΔΟΥ| \____/ \_____/ ^ | | ----> Τοπική επεξεργασία -----
Όταν ένα πακέτο φτάσει σε έναν κύκλο του διαγράμματος , τότε αυτή η αλυσίδα εξετάζεται για να αποφασιστεί η μοίρα του πακέτου. Αν η αλυσίδα πεί DROP (απόρριψη) , τότε το πακέτο σκοτώνεται, αλλά αν η αλυσίδα πεί ACCEPT (αποδοχή) , τότε συνεχίζει την πορεία του στο διάγραμμα.
Μία αλυσίσα είναι μια λίστα ελέγχου από κανόνες. Κάθε κανόνας λέει 'Αν η επικεφαλίδα του πακέτου είναι ως εξής τότε κάνε αυτό με το πακέτο'. Αν ο κανόνας δεν ικανοποιείται από το πακέτο τότε εξετάζεται ο επόμενος κανόνας στην αλυσίδα. Τέλος αν δεν υπάρχουν άλλοι κανόνες προς έλεγχο ο πυρήνας συμβουλεύεται την πολιτική της αλυσίδας για να αποφασίσει τι θα πράξει. Σε ένα συνειδητό προς την ασφάλεια σύστημα συνήθως η πολιτική είναν να απορρίπτεται το πακέτο.
Όταν ένα πακέτο φτάνει στον υπολογιστή μας ο πυρήνας του linux κοιτάει στην επικεφαλίδα του πακέτου το πεδίο προορισμός και πέρνει μια απόφαση ανάλογα με τον προορισμό. Αυτό το ονομάζουμε δρομολόγηση.
- Αν το πακέτο προορίζεται για τον υπολογιστή μας τότε κατευθύνεται στην αλυσίδα ειδόδου.Εκεί εξετάζεται με τη σειρά από τους κανόνες της αλυσίδας και τέλος από την πολιτική. Αν περάσει επιτυχώς τότε κατευθύνεται προς διεργασίες που θα το χρησιμοποιήσουν ειδάλλως απορρίπτεται.
- Ειδάλλως αν δεν έχουμε ενεργοποιήσει την πρόωθηση το πακέτο θα απορριφθεί. Όμως αν έχουμε ενεργοποιήσει την προώθηση το πακέτο θα μεταφερθεί στην αλυσίδα προώθηση και εκεί αν ικανοποιήσει τους κανόνες της θα μεταβιβαστεί προς κάποια κάρτα δικτύου του υπολογιστή για να συνεχίσει τη διαδρομή της αλλίως θα απορριφθεί (DROP)
- Τέλος ένα πρόγραμμα μπορεί να στείλει πακέτα στο διαδίκτυο. Αυτά πάνε στην αλυσίδα εξόδου και εφόσον ικανοποιήσουν τους κανόνες της (ACCEPT) συνεχίζουν προς τη διασύνδεση που προορίζονται
Η εντολή iptables
[επεξεργασία]Με την εντολή iptables μπορούμε να επεξεργαζόμαστε τις αλυσίδες κάνοντας μια σειρά από ενέργειες.
Οι τρεις προκαθορισμένες αλυσίδες INPUT, OUTPUT FORWARD δεν μπορούν να διαγραφούν Ενέργειες διαχείρισης ολόκληρης αλυσίδας.:
- Δημιουργία νέας αλυσίδας (-N).
- Διαγραφή άδειας αλυσίδας (-X).
- Αλλαγή της πολιτικής μιας προκαθορισμένης αλυσίδας. (-P).
- Εμφάνιση λίστας των κανόνων μιας αλυσίδας (-L).
- Καθάρισε τους κανόνες από μια αλυσίδα(-F).
- Μηδένισε το πακέτο και τους μετρητές μπάϊτ σε όλους τους κανόνες μιας αλυσίδας. (-Z).
Υπάρχουν πολλοί τρόποι να χειριστείς κανόνες μέσα σε μια αλυδίδα:
- Προσθήκη νέου κανόνα σε μια αλυσίδα (-A).
- Εισαγωγή νέου κανόνα σε κάποια θέση στην αλυσίδα (-I).
- Αντικατέστησε έναν κανόνα σε κάποια θέση σε μια αλυσίδα (-R).
- Διέγραψε έναν κανόνα σε κάποια θέση σε μια αλυσίδα , ή τον πρώτο που ικανοποιεί ένα δωθέν κριτήριο (-D).
Αρχικά όλες οι αλυσίδες είναι κενές: # 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
Ας δούμε τώρα ένα απλό παράδειγμα πρόσθεσης(append) (-A) ενός κανόνα στην αλυσίδα INPUT, που καθορίζει ότι πακέτα από τη διεύθυνση(source) 127.0.0.1 (`-s 127.0.0.1') με πρωτόκολο (protocol) ICMP (`-p icmp') πρέπει να μεταπηδούν (jump) στην ενέργεια DROP (`-j DROP').
# iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
Κατόπιν εξετάζουμε να δούμε τις αλλαγές που επιφέραμε στην αλυδίδα INPUT:
# iptables -L INPUT Chain INPUT (policy ACCEPT) target prot opt source destination DROP icmp -- localhost anywhere
Όπως βλέπουμε προστέθηκε ένας κανόνας , που λέει ότι πακέτα που προέρχονται από τον ίδιο τον υπολογιστή του πρωτοκόλλου ICMP (τέτοια πακέτα στέλνει το πρόγραμμα ping) αυτά θα απορρίπτονται (DROP).
Τώρα αν στείλουμε ένα πακέτο θα δούμε ότι θα χαθεί!
# ping -c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. --- 127.0.0.1 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms
Το πρόγραμμα GNU Screen
[επεξεργασία]Πρόκειται για ένα πολύ χρήσιμο πρόγραμμα όταν διχειριζόμαστε από μακρύα μεσω τερματικού έναν εικονικό εξυπηρετητή.
Είναι ένας πολυπλέκτης τερματικού αφού μας επιτρέπει να τρέχουμε οποιονδήποτε αριθμό βασισμένων σε τερματικό εφαρμογών μέσα σε ένα μόνο τερματικό. Πχ κειμενοστραφή πελάτη irc , κειμενοστραφή επεξεργαστή κειμένου , εφαρμογές που κάνουν χρήση της βιβλιοθήκης curse κτλ.
Το άλλο βασικό χαρακτηριστικό αυτού του προγράμματος είναι ότι υποστηρίζει συνόδους. και την δυνατότητα να αποσυνδέσουμε το τερματικό από τα προγράμματα που τρέχουν σ'αυτό.
Χρήσιμες εντολές: C-x ισοδυναμεί με την πλκτρολόγηση Ctrl-x και μάλιστα είναι ισοδύναμη με την πληκτρολόγηση C-x C-x
- C-a c δημιουργία νεου παραθύρου
- C-a a εναλλαγή μεταξύ δύο παραθύρων κειμένου.
- C-a n και C-a p μετάβαση στο επόμενο ή στην προηγούμενο στη σειρά παράθυρο.
- C-a N μετάβαση στο παράθυρο με υπ'αριθμόν Ν
- C-a " εμφάνιση μιας λίστας με όλα τα παράθυρα.
- C-a d αποκόλληση από αυτή τη σύνοδο με C-a d
- screen -r επανασύνδεση ( -R-, σπό το "reattach").
Εντολές χρήσιμες όταν έχουμε περιοχές
- C-a Tab μετάβαση ανάμεσα στις περιοχές
- C-a S δημιουργία μιας καινούργιας περιοχής.
- C-a Q σκοτώνει όλες τις περιοχές εκτός από την τρέχουσα.
- C-a X σκοτώνει την την τρέχουσα περιοχή. (δεν γίνεται καμια ενέργεια αν υπάρχει μόνο μια περιοχή)
- C-a A Δώσε όνομα σε ενα παράθυρο.
Πολύ χρήσιμος είναι ο συνδυασμός C-a S C-a c . Δηλαδή δημιουργούμε μια νέα περιοχή αλλά για να μην είναι κενή δημιουργούμε ένα παράθυρο μέσα σε αυτή.
Διαχείριση πακέτων με το aptitude
[επεξεργασία]To aptitude ειναι ένα κειμενοστραφής πρόγραμμα διαχείρισης πακέτων.
Μεταφορά αρχείων από τον τοπικό υπολογιστή στον εικονικό διακομιστή με scp
[επεξεργασία]Ένας απλός τρόπος να μεταφέρουμε αρχεία είναι με την εντολή secury copy , scp
Αντιγραφή αρχείου προς τον εικονικό διακομιστή:
scp αρχείοπηγή όνομαχρήστη@εξυπηρετητής:directory/αρχείοπροορισμός
Copying file from host:
scp όνομαχρήστη@εξυπηρετητής:directory/αρχείοπηγή αρχείοπροορισμός
Χρήσιμες εντολές
[επεξεργασία]Εμφάνιση του μεγέθους φακέλων
$ du -csh *
Ταξινομημένη εμφάνιση των ποιό πρόσφατα αλλαγμένων αρχείων..
$ ls -ltr
Ρύθμιση DNS
[επεξεργασία]Η διαδικασία σε γενικές γραμμές είναι:
- Από μια εταιρεία καταχωρητή ονομάτων περιοχών αποκτούμε ένα όνομα περιοχής(domain name)
- Από την εταιρία που στεγάζει τον Προσωπικό μας Εικονικό μας Διακομιστή μας παραχωρήθηκε μια ip διεύθυνση
- Θέλουμε τώρα να συνδέσουμε αυτές τις δύο πληροφορίες ώστε όταν κάποια πληκτρολογεί testsite.gr να συνδέεται στον ιστότοπό μας.
- Στον υπολογιστή της εταιρίας καταχωρητή domain name θα δηλώσουμε και έναν dns server που μας έχει δώσει ο ο παροχέας του VPS(Virtual Private Server). Αυτή η ενέργεια νομίζω έχει σαν αποτέλεσμα όταν κάποιος υπολογιστής στην ελλάδα θελήσει να βρεί την ip του domain name μας θα μεταφερθεί στον dns εξυπηρετητή που μας υπέδειξε η εταιρεία που στεγάζει τον εικονικό μας διακομιστή.(αν και θέλει περισσότερο ερευνα αυτό το σημείο.)
- Με τη βοήθεια μια γραφικής συνήθως διεπαφής δημιουργούμε καταχώρησεις στον DNS του παροχέα του εικονικού διακομιστή μας η οποία αντιστοιχίζει το όνομα περιοχής μας στην IP διεύθυνση μας. Καταχωρούμε λοιπόν πληροφορία σε έναν υπολογιστή DNS που ανήκει στον παροχό μας του VPS. Όμως αν δεν είχαμε αγοράσει το domain name τέτοια πληροφορία δεν θα υπήρχε στους DNS της ελλάδας.
- Κατόπιν ενημερώνουμε τον χορηγό του domain name μας για αυτόν τον dns διακομιστή ωστε να αποκτήσει και αυτός την πληροφορία. (αυτό έγινε στο 1ο βήμα)
- Δημιουργούμε τον κατάλογο testsite στον δικό μας κατάλογο.
- Επίσης θα θέλαμε και όταν κάποιος πληκτρολογεί www.testsite.gr επίσης να κατευθύνεται στον ίδιο ιστότοπο.
- Κατόπιν πρέπει στο εικονικό μας υπολογιστή να δημιουργήσουμε στον κατάλογο /etc/apache2/sites-available έναν νεο εικονικό εξυπηρετητή και να τον ενεργοποιήσουμε με την εντολή
'a2ensite [όνομα αρχείου ρύθμισης εικονικού εξυπηρετητή] (και ανάλογα το αφαιρούμε με a2dissite.
Ρύθμιση email
[επεξεργασία]Το βασικό που θά'πρεπε να καταλάβουμε σχετικά με το email είναι ότι όταν πχ κάποιος μας στέλνει email δεν θεωρούμε απαραίτητο ούτε έχουμε δικό μας υπολογιστή συνεχώς ανοιχτό για να παραλάβει το μήνυμα αν και κάποιος υπολογιστής πρέπει να αναλάβει αυτό τον ρόλο και να δέχεται τα μηνύματά μου ώστε να μπορούμε εμείς να τα βλέπουμε όποτε θελήσουμε Οπότε για να μπορούμε να έχουμε email πρέπει να έχουμε
- το domain name αυτού του υπολογιστή που θα παραλάβει το μηνυμά μας.
- έναν λογαριασμό σ'αυτόν τον υπολογιστή :
- ένα όνομα χρήστη
- ένα συνθηματικό
- αποθηκευτικό χώρο ή γραμματοθυρίδα (mailbox)
πχ όταν δημιουργείτε έναν λογαριασμό στο yahoo αυτό που αποκτάται είναι
- την πληροφορία του ονόματος περιοχής του εξυπηρετητή ηλ.αλληλογραφίας pop.mail.yahoo.com' (και την θύρα)
- τα στοιχεία του λογαριασμού σας (όνομα χρήστη και συνθηματικό)
- γραμματοθυρίδα
- και φυσικά την ηλεκτρονική σας διεύθυνση (email) που είναι η συνένωση του ονόματος @ όνομα περιοχής του υπολογιστή (όχι απαραίτητα το ίδιο με αυτό του εξυπηρετητή αλλά ενα ψευδώνυμο που θα δείχνει στην ίδια ip
Αλλά για να στείλουμε ένα email δεν είναι απαραίτητο να έχουμε εμείς λογαριασμό.