Αυτόματος τρόπος: ένα script από τον λογαριασμό προετοιμάζει ολόκληρο τον διακομιστή (στοίβα web Apache + PHP, βάση δεδομένων, εργαλεία ασφαλείας, cron). Στη συνέχεια — ανάπτυξη του dashboard, έκδοση SSL και εισαγωγή της άδειας. Λειτουργεί σε Ubuntu/Debian: σε νέο VPS ρυθμίζει τα πάντα από την αρχή, σε ήδη ρυθμισμένο διακομιστή — μόνο προσθετικά (προφίλ «Ρυθμισμένος διακομιστής», βήμα 01). Όλες οι εντολές παρακάτω είναι με τη σειρά, απλώς κυλήστε από πάνω προς τα κάτω. Σε νέο VPS ταιριάζει κάθε βήμα με τη σειρά· αν ο διακομιστής είναι ήδη ρυθμισμένος ή έχει πάνελ φιλοξενίας, μέρος της δουλειάς το script το αφήνει σκόπιμα σε εσάς — τι ακριβώς, το γράφει στο τέλος της εκτέλεσής του (ανάλυση της εξόδου — στο βήμα 01).
monitor.example.com — ο τομέας σας· 203.0.113.10 — η πραγματική IP του διακομιστή· /var/www/monitor — η ρίζα του dashboard (όπου βρίσκονται τα public/, assets/, config.php)· τον κωδικό της ΒΔ ορίστε τον δικό σας.
jail.local), root-crontab, κανόνες UFW, ρυθμίσεις Apache. Αν ο διακομιστής είναι ήδη ρυθμισμένος (λειτουργικό dashboard, ιστότοποι, email, δικά σας jail) — επιλέξτε το προφίλ «Ρυθμισμένος διακομιστής»: κάνει μόνο προσθετικές αλλαγές και δεν αγγίζει το firewall, το Fail2ban, το email, το SSH και το sysctl σας. Όταν εντοπίσει hosting panel, το script μεταβαίνει μόνο του σε αυτή τη λειτουργία. Πριν την πρώτη εκτέλεση μπορείτε να ενεργοποιήσετε το dry run (επιλογή στον λογαριασμό) — δείχνει τι θα γίνει, χωρίς να αλλάζει τίποτα. Σε λειτουργικό διακομιστή, για κάθε ενδεχόμενο, δημιουργήστε ένα snapshot.
my.arciveo.com → ενότητα «Ρύθμιση διακομιστή» (διαθέσιμη μετά την απόκτηση του Arcivéo Security Monitor). Είναι συνδεδεμένη με τον λογαριασμό σας και περιέχει προσωπικό token.
Το script προετοιμάζει ολόκληρο τον διακομιστή: web-stack (Apache + PHP), βάση δεδομένων, εργαλεία για SSL, πλήρες σύνολο μέσων προστασίας και cron-εργασίες (Lynis, SMART, debsums, Logwatch, ημερήσια αναφορά, ενημέρωση ipsum).
1) Επιλέξτε το επίπεδο προστασίας (στον λογαριασμό, πριν αντιγράψετε την εντολή):
2) Εκτελέστε στον διακομιστή ως root την εντολή από τον λογαριασμό — έχει την εξής μορφή:
3) Διαβάστε την έξοδο στο τέλος — εκεί αναφέρεται τι μένει σε εσάς. Το script ολοκληρώνει την εργασία του με ένα μπλοκ ελέγχων και μια λίστα «Στη συνέχεια — εγκατάσταση του πίνακα». Μέρος των βημάτων σκόπιμα δεν το εκτελεί: τι ακριβώς, εξαρτάται από το προφίλ που επιλέξατε και από όσα βρήκε στον διακομιστή. Συγκρίνετε με τη λίστα παρακάτω — χρειάζεται να εκτελέσετε μόνο τα σημεία των οποίων οι γραμμές εμφανίστηκαν στη δική σας έξοδο.
Control panel detected (…) — ο ιστότοπος δημιουργείται με τα μέσα του ίδιου του πάνελ φιλοξενίας, vhost το script δεν φτιάχνει. Βήμα 03, κλάδος «Διακομιστής με πάνελ φιλοξενίας».No vhost created (no domain given) — προφίλ «Ρυθμισμένος διακομιστής» χωρίς τομέα: ένα vhost χωρίς όνομα θα γινόταν ο προεπιλεγμένος ιστότοπος και θα άρπαζε τους δικούς σας ιστότοπους, γι' αυτό δεν δημιουργήθηκε. Βήμα 03, κλάδος «Δημιουργία vhost χειροκίνητα».sudo rules NOT written — το script δεν μπόρεσε να προσδιορίσει με ποιον λογαριασμό λειτουργεί το πάνελ. Αυτό είναι συνηθισμένη κατάσταση: τα αρχεία του πάνελ ανεβαίνουν μετά την αυτόματη ρύθμιση, οπότε δεν υπήρχε ακόμη από τι να προσδιοριστεί. Χωρίς αυτούς τους κανόνες οι μονάδες δεν θα βλέπουν τα δεδομένα του συστήματος. Βήμα 04, μπλοκ «sudo για τον web διακομιστή».! Nginx does not read .htaccess — μπροστά από τον Apache βρίσκεται Nginx και η αυτόματη καταχώριση της απαγόρευσης στη ρύθμισή του δεν πέτυχε. Κάντε το οπωσδήποτε: αλλιώς τα data/, keys/, database/ και config.php δίνονται προς τα έξω παρακάμπτοντας το .htaccess. Βήμα 03, μπλοκ «Αν μπροστά από τον Apache βρίσκεται Nginx».UFW installed but inactive — το τείχος προστασίας είναι εγκατεστημένο αλλά απενεργοποιημένο: σε ρυθμισμένο διακομιστή το script δεν το ενεργοποιεί μόνο του, για να μη σας κόψει την πρόσβαση. Ενεργοποιήστε το εσείς, επιτρέποντας οπωσδήποτε τη δική σας θύρα SSH:
Fail2ban installed but not running — εκκινήστε το: sudo systemctl enable --now fail2ban.Database server present … but not running — εκκινήστε το ΣΔΒΔ πριν από το βήμα 04: sudo systemctl enable --now mariadb (ή mysql — ανάλογα με το τι είναι εγκατεστημένο).Certbot skipped — issue SSL in … — το πιστοποιητικό εκδίδεται με τον διακόπτη Let's Encrypt στο πάνελ φιλοξενίας· το βήμα 06 δεν σας χρειάζεται.All checks passed. Τα σημεία με ! απαιτούν προσοχή· οι λεπτομέρειες γράφονται στο log, τη διαδρομή του οποίου το script τυπώνει στο τέλος (Log: …).
Για να ανοίγει ο πίνακας σε διεύθυνση όπως monitor.example.com και να λάβετε δωρεάν SSL, το domain πρέπει να δείχνει στον διακομιστή. Στον πίνακα διαχείρισης DNS (στον καταχωρητή ή στον πάροχο φιλοξενίας) δημιουργήστε μια εγγραφή A:
Μετά από λίγα λεπτά (μερικές φορές έως και μία ώρα) ελέγξτε ότι το domain δείχνει στον διακομιστή:
/var/www/monitor και ρύθμισε τον ιστότοπο Apache (DocumentRoot στη ρίζα του πίνακα, PHP-FPM, AllowOverride για .htaccess). Στην έξοδο του script αυτό είναι η γραμμή vhost … → DocumentRoot …. Δεν χρειάζεται να δημιουργήσετε ξεχωριστά κατάλογο και vhost — απλώς ανεβάστε τα αρχεία και ορίστε τα δικαιώματα.
Κλάδος «Διακομιστής με πάνελ φιλοξενίας» (στην έξοδο: Control panel detected (…)). Τους ιστότοπους σε τέτοιον διακομιστή τους διαχειρίζεται το πάνελ, και δικό του vhost το script δεν δημιουργεί σκόπιμα — θα σβηνόταν με την πρώτη κιόλας ανακατασκευή των ρυθμίσεων από το πάνελ. Η σειρά είναι η εξής:
public_html αυτού του τομέα: δίπλα στα index.php, api/, assets/ πρέπει να βρίσκονται και τα υπηρεσιακά config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/. Δεν χρειάζεται να μεταφέρετε τίποτα πάνω από τη ρίζα του web: οι υπηρεσιακοί φάκελοι κλείνουν με το αρχείο .htaccess της διανομής, ενώ κάτω από Nginx — με την απαγόρευση που έγραψε το script στη ρύθμιση του τομέα.config.php (βήμα 05). Τις διαδρομές στις εντολές αντικαταστήστε τις με /home/λογαριασμός/web/τομέας/public_html, και τον ιδιοκτήτη — με τον χρήστη αυτού του τομέα αντί για www-data.Κλάδος «Δημιουργία vhost χειροκίνητα» (στην έξοδο: No vhost created (no domain given)). Αυτό συμβαίνει μόνο στο προφίλ «Ρυθμισμένος διακομιστής», όταν δεν δόθηκε τομέας. Το απλούστερο είναι απλώς να ξανατρέξετε την εντολή από τον λογαριασμό, δηλώνοντας τον τομέα:
Η επανεκτέλεση είναι ασφαλής: ό,τι έχει ήδη γίνει δεν διπλασιάζεται. Αν όμως το vhost πρέπει να δημιουργηθεί με το χέρι — να η ίδια ρύθμιση που γράφει ο εγκαταστάτης:
ServerName εδώ είναι υποχρεωτικό. Ένα vhost χωρίς όνομα γίνεται ο προεπιλεγμένος ιστότοπος του Apache και αρχίζει να απαντά για ξένους τομείς στον ίδιο διακομιστή. Για τον ίδιο λόγο μην απενεργοποιείτε το 000-default.conf σε ρυθμισμένο διακομιστή: αυτός ο ιστότοπος μπορεί να έχει μετατραπεί σε κάποιον λειτουργικό — σε νέο VPS ο εγκαταστάτης τον αφαιρεί μόνος του, εδώ δεν χρειάζεται να το κάνετε.
! Nginx does not read .htaccess). Ο Nginx δίνει τα στατικά αρχεία απευθείας από τον δίσκο και το .htaccess δεν το διαβάζει — οι υπηρεσιακοί φάκελοι θα μείνουν ανοιχτοί προς τα έξω, παρότι ο Apache τους κλείνει σωστά. Το script έχει ετοιμάσει εκ των προτέρων ένα αρχείο με τις απαγορεύσεις· πρέπει να το συνδέσετε στο μπλοκ server{} του ιστότοπού σας και να επαναφορτώσετε τον Nginx:
my.arciveo.com → «Λήψεις». Αποσυμπιέστε το αρχείο πριν το ανεβάσετε στον διακομιστή.
Ανεβάστε το περιεχόμενο της διανομής στο /var/www/monitor (ώστε μέσα να βρίσκονται τα public/, assets/, config.php κ.λπ.) — μέσω SFTP/SCP (FileZilla / WinSCP) ή με την εντολή scp από τον τοπικό υπολογιστή:
ServerName), τον περνάτε στην εντολή αυτόματης ρύθμισης ήδη στο βήμα 01: … | sudo bash -s -- monitor.example.com (ή δηλώνετε τον τομέα στο πεδίο «Τομέας πίνακα» στον λογαριασμό). Αν δεν περάσατε τομέα — ο πίνακας απαντά σε οποιονδήποτε host και μέσω IP, ενώ το ServerName θα το καταχωρήσει το certbot κατά την έκδοση SSL (βήμα 06)· δεν χρειάζεται καμία επανεγκατάσταση.
root ή μέσω SFTP, τα αρχεία ανήκουν στον root και ο διακομιστής web (www-data) δεν θα μπορεί να τα διαβάσει — ο πίνακας θα ανοίξει κενός ή με σφάλμα 403 (στο log: .htaccess unreadable / directory not executable). Η παρακάτω εντολή το διορθώνει:
Ανοίξτε για τον εαυτό σας το ανέβασμα αρχείων μέσω SFTP. Μετά την παραπάνω εντολή όλα τα αρχεία ανήκουν στον www-data, ενώ το FileZilla / WinSCP συνδέονται με τον δικό σας χρήστη — το ανέβασμα τότε αποτυγχάνει με SSH_FX_PERMISSION_DENIED (Permission denied). Επιλέξτε μία από τις δύο παραλλαγές.
Παραλλαγή A — μια ACL μόνο για τον χρήστη σας (συνιστάται). Δικαίωμα εγγραφής παίρνετε μόνο εσείς· ο διακομιστής web εξακολουθεί να μην μπορεί να αντικαταστήσει τον κώδικα του πίνακα:
Παραλλαγή B — μέσω της ομάδας www-data. Πιο απλή, αλλά δικαίωμα εγγραφής στα αρχεία του πίνακα αποκτά και ο διακομιστής web: με μια ευπάθεια στην PHP ο κώδικας θα μπορούσε να αντικατασταθεί. Η σειρά των εντολών έχει σημασία — το config.php και οι φάκελοι εργασίας κλείνουν τελευταίοι:
id deploy — στη λίστα ομάδων πρέπει να εμφανιστεί το www-data· ls -ld /var/www/monitor — δικαιώματα drwxrwsr-x, το γράμμα s στη θέση του x σημαίνει ότι το setgid είναι ενεργό.
Δημιουργήστε τη βάση και τον χρήστη, μετά εισαγάγετε το σχήμα. Το μπλοκ με τη ΒΔ επικολλάται στο τερματικό ολόκληρο (το sudo mysql συνδέεται ως root μέσω unix-socket — δεν χρειάζεται κωδικός root). Τα monitor_db και monitor_user είναι ενδεικτικά ονόματα, μπορείτε να ορίσετε τα δικά σας· θυμηθείτε το όνομα της βάσης, τον χρήστη και τον κωδικό — θα τα καταχωρίσετε στο config.php στο επόμενο βήμα:
admin στην πρώτη είσοδο από τον browser (από το database/db.sql), αν η ΒΔ είναι κενή.
Αν οι πίνακες δεν δημιουργήθηκαν (ο πίνακας εμφανίζει σφάλμα σύνδεσης στη ΒΔ ή κενή οθόνη αντί για τη φόρμα εισόδου) — εισαγάγετε το σχήμα χειροκίνητα. Η εντολή εκτελείται στη ρίζα του πίνακα, οι τιμές λαμβάνονται από το παραπάνω μπλοκ:
$DBNAME / $DBUSER / $DBPASS έχουν πλέον «ξεχαστεί» (νέα συνεδρία τερματικού) — βάλτε τις τιμές στην εντολή με το χέρι ή ορίστε τις ξανά με τις ίδιες τρεις γραμμές από το παραπάνω μπλοκ.
sudo rules NOT written — δεν υπήρχε από τι να προσδιοριστεί ο λογαριασμός του πάνελ (τα αρχεία δεν είχαν ακόμη ανέβει) και οι κανόνες δεν δημιουργήθηκαν. Χωρίς αυτούς, ενότητες όπως το τείχος προστασίας, το Fail2ban και το CrowdSec θα μείνουν κενές. Τώρα που τα αρχεία βρίσκονται στη θέση τους, εκτελέστε ξανά την εντολή από τον λογαριασμό, δηλώνοντας ρητά τον λογαριασμό:
www-data αντικαταστήστε το με τον χρήστη με τον οποίο εκτελείται η PHP του ιστότοπού σας (σε πάνελ φιλοξενίας είναι συνήθως ο ιδιοκτήτης του τομέα). Μπορείτε να τον δείτε ως εξής:
/etc/sudoers.d/monitor υπάρχει και περιέχει γραμμές με τον χρήστη σας.
Το config.php στη ρίζα του πίνακα (/var/www/monitor/config.php) είναι το μοναδικό αρχείο που πρέπει να επεξεργαστείτε χειροκίνητα. Όλες οι ρυθμίσεις του πίνακα ορίζονται εκεί ως σταθερές define(). Ανοίξτε το σε έναν επεξεργαστή:
Βάλτε τις δικές σας τιμές στα επισημασμένα σημεία· τα υπόλοιπα αφήστε τα ως έχουν:
Τι να αλλάξετε:
DB_NAME, DB_USER, DB_PASS — ακριβώς το ίδιο όνομα βάσης, χρήστη και κωδικό που ορίσατε κατά τη δημιουργία της βάσης στο βήμα 04 (αν αφήσατε τα παραδείγματα — monitor_db / monitor_user). Τα DB_HOST και DB_CHARSET μην τα πειράξετε.APP_URL — η πλήρης διεύθυνση του πίνακα με https://, χωρίς κάθετο στο τέλος και χωρίς www. Πρέπει να συμπίπτει με τον τομέα στον οποίο ενεργοποιείτε την άδεια (βήμα 07), αλλιώς το κλειδί θα απορριφθεί.TIMEZONE — η ζώνη ώρας σας (λίστα — timedatectl list-timezones). Επηρεάζει μόνο πώς ο πίνακας εμφανίζει τις ημερομηνίες· στην ώρα εκτέλεσης των εργασιών cron δεν επηρεάζει (εκεί ισχύει η ζώνη του συστήματος).SESSION_LIFETIME — μετά από πόσα δευτερόλεπτα αδράνειας ο πίνακας θα ζητήσει νέα σύνδεση (προεπιλογή 8 ώρες). Π.χ. 3600 = 1 ώρα, 86400 = μία ημέρα.display_errors, log_errors, error_log) — αφήστε το στην προεπιλογή.Αποθηκεύστε το αρχείο (Ctrl+O, Enter, μετά Ctrl+X) και επανεκκινήστε το PHP-FPM — αλλιώς λόγω του OPcache οι αλλαγές δεν θα εφαρμοστούν:
640 (ορίστηκαν στο βήμα 03) και ρητή απαγόρευση στο κεντρικό .htaccess. Μην το ανεβάζετε σε δημόσια αποθετήρια και μην το στέλνετε στην υποστήριξη με τον πραγματικό κωδικό.
http:// δεν θα μπορέσετε να συνδεθείτε.
Certbot skipped — issue SSL in …). Το πιστοποιητικό εκδίδεται με τον διακόπτη Let's Encrypt στον web-τομέα μέσα στο ίδιο το πάνελ — έτσι και την ανανέωσή του την αναλαμβάνει το πάνελ.
Το certbot και το πρόσθετο για τον Apache έχουν ήδη εγκατασταθεί από την αυτόματη ρύθμιση. Το DNS του τομέα πρέπει ήδη να δείχνει στον διακομιστή (βήμα 02). Έκδοση με μία εντολή:
Αν ο πίνακας πρέπει να ανοίγει και με www. — αναφέρετε και τα δύο ονόματα σε μία εντολή, αλλιώς στη δεύτερη διεύθυνση ο browser θα εμφανίσει προειδοποίηση για το πιστοποιητικό:
Y.<VirtualHost *:443>, θα ρυθμίσει την ανακατεύθυνση http→https και την αυτόματη ανανέωση. Στο τέλος — Successfully enabled HTTPS.
dig +short monitor.example.com επιστρέφει την IP του διακομιστή και ότι είναι ανοιχτές οι θύρες 80/443 (sudo ufw allow 80,443/tcp).
Μετά την έκδοση: το https://monitor.example.com ανοίγει με λουκέτο, και το http:// ανακατευθύνει στο https://.
Ανοίξτε https://monitor.example.com, συνδεθείτε με admin / useradmin και ακολουθήστε τη λίστα ελέγχου:
ARCIVEO-… από τον λογαριασμό ενεργοποιήστε τον στον δικό σας domain και εισαγάγετε το κλειδί στις «Ρυθμίσεις» → «Άδεια». Περισσότερα.public/start_db.php, αν έχει απομείνει: επιτρέπει την αναδημιουργία της βάσης χωρίς αυθεντικοποίηση. Όσο το αρχείο βρίσκεται στη ρίζα του πίνακα ή στο public/, ο πίνακας προειδοποιεί γι' αυτό με κόκκινο μπάνερ.sudo /usr/local/bin/clamav-scan.sh) επιβαρύνει έντονα τον δίσκο και τον επεξεργαστή και μπορεί να διαρκέσει μία ώρα και περισσότερο — σε λειτουργικό διακομιστή είναι προτιμότερο να περιμένετε τη νυχτερινή εκτέλεση στις 01:30. Οι ενότητες «Δίσκοι (SMART)», «Απόδοση» και «Ενημερώσεις ασφαλείας» γεμίζουν μόνες τους: κάθε 30 λεπτά, 5 λεπτά και μία φορά την ώρα αντίστοιχα.