Trin til at sikre vores VPS

Denne tutorial viser, hvordan man forbereder og sikrer en Virtual Private Server (VPS) med Debian GNU / Linux. Inden vi begynder, antages visse ting:

  1. Du har et mellemliggende niveau af fortrolighed med GNU / Linux.
  2. Der er en VPS til personlig brug, som vi har adgang til via SSH.
  3. VPS har den dedikerede eksterne ipv4 250.250.250.155, og vores udbyder ejer 250.250.0.0/16-blokken. (1)
  4. I vores VPS har vi kun http, https og ssh-tjenester aktiveret for adgang udefra.
  5. Ekstern DNS aktiveres ikke, da det normalt sker i vores udbyders panel. (2)
  6. Det fungerer som en superbruger.

Installation

Lad os som et første trin opdatere serveren og installere nogle pakker, som vi har brug for:

# aptitude update & aptitude safe-upgrade # aptitude -RvW installer dropbear gesftpserver sslh iptables-persistent ulogd fail2ban nginx-light apache2-utils dnsutils telnet ghostscript poppler-utils zip unzip-unrar-free p7zip-fuld mindre multitail tee mc

konfiguration

Nu skal vi oprette en arbejdsbruger. At arbejde som root på en server er usikkert, så vi opretter først en speciel bruger:

adduser-operatør usermod -aG sudo-operatør

Den første kommando opretter operatørbrugeren, den anden føjer den til gruppen sudo, som gør det muligt at køre applikationer som root.

Juster tilladelser til superbrugere

For at arbejde regelmæssigt bruger vi brugeren operatør tidligere oprettet er vi nødt til at justere kommandoudførelsesindstillingerne som superbruger, som vi udfører følgende kommando for:

visudo

Denne kommando tillader grundlæggende at ændre filen / etc / sudoers; hvor vi skal indeholde disse linjer:

Standardindstillinger env_reset, timestamp_timeout = 0% sudo ALL = (ALL: ALL) ALL

I den første linje tilføjes indstillingen til standardværdierne tidsstempel_timeout som giver dig mulighed for at indstille adgangskodens udløbstid (i minutter), når sudo-kommandoen udføres. Standard er 5, men dette er undertiden usikkert af to grunde:

  1. Hvis vi utilsigtet lader vores computer være logget ind, før adgangskoden udløber, kan nogen udføre en kommando som superbruger uden nogen begrænsninger.
  2. Hvis vi gennem uvidenhed udfører et program eller script, der indeholder ondsindet kode, før adgangskoden udløber, kunne applikationen have adgang til vores system som superbruger uden vores udtrykkelige samtykke.

Så for at undgå risici har vi sat værdien til nul, det vil sige hver gang sudo-kommandoen udføres, skal adgangskoden indtastes. Hvis en negativ værdi er indstillet til -1, er effekten, at adgangskoden aldrig udløber, hvilket ville give det modsatte resultat af det, vi ønsker.

På anden linje præciseres det, at sudogruppen kan udføre enhver kommando på enhver computer, hvilket er normalt, selvom det kan justeres. (3) Der er dem, der for nemheds skyld sætter linjen på følgende måde for at undgå at skulle indtaste adgangskoden:

% sudo ALL = (ALL: ALL) NOPASSWD: ALL

Som vi forklarede før, er dette dog risikabelt og anbefales derfor ikke.

Deaktiver genstart

Af sikkerhedsmæssige årsager vil vi også deaktivere genstart ved hjælp af tastekombinationen Ctrl + Alt + Del, som vi skal tilføje denne linje til i filen / Etc / inittab:

ca: 12345: ctrlaltdel: / bin / echo "Ctrl + Alt + Del er deaktiveret."

Udskift OpenSSH med DropBear

De fleste VPS leveres med OpenSSH installeret, hvilket bestemt er meget nyttigt, men medmindre vi har brug for at udnytte alle funktionerne i OpenSSH, er der lettere alternativer til en VPS, som f.eks. dropbear, som normalt er tilstrækkelig til regelmæssig brug. En ulempe ved denne applikation er dog, at den ikke kommer med en integreret SFTP-server, og det er derfor, vi installerede pakken i starten gesftpserver.

For at konfigurere Dropbear ændrer vi filen / etc / default / dropbear så den indeholder disse to linjer:

NO_START = 0 DROPBEAR_EXTRA_ARGS = "- w -p 127.0.0.1:22 -I 1200 -m"

Den første linje aktiverer simpelthen tjenesten, og den anden gør flere ting:

  1. Undgå rodadgang.
  2. Sætter tjenesten, der lytter til port 22 i den lokale grænseflade (vi forklarer hvorfor senere).
  3. Indstiller ventetiden (20 minutter).

SSLH

Port 22 (SSH) er velkendt og er generelt en af ​​de første, som hackere prøver at bryde, så vi bruger i stedet port 443 (SSL). Det sker, at denne port bruges til sikker browsing via HTTPS.

Af denne grund bruger vi sslh-pakken, som ikke er mere end en multiplexer, der analyserer de pakker, der ankommer til port 443, og dirigerer dem internt til en eller anden tjeneste afhængigt af, om typen af ​​trafik er SSH eller SSL.

SSLH kan ikke lytte på en grænseflade, hvor en anden tjeneste allerede lytter, hvorfor vi tidligere fik Dropbear til at lytte på den lokale grænseflade.

Hvad vi skal gøre nu er at indikere at sslh grænsefladen og den port, gennem hvilken den skal lytte, og hvor pakkerne skal omdirigeres afhængigt af tjenestetypen, og til dette vil vi ændre konfigurationsfilen / etc / default / sslh:

DAEMON = / usr / sbin / sslh DAEMON_OPTS = "- bruger sslh - listen 250.250.250.155:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile / var / run / sslh / sslh .pid "KØR = ja

Endelig genstarter vi tjenesterne:

service ssh stop && service dropbear start && service sslh genstart

Efter den forrige kommando vil vores sikre session sandsynligvis blive afbrudt, i hvilket tilfælde det er nok at logge ind igen, men denne gang med arbejdsbrugeren og ved hjælp af port 443. Hvis sessionen ikke afbrydes, anbefales det at lukke den og starte igen. med de relevante værdier.

Hvis alt fungerer korrekt, kan vi fortsætte med at arbejde som root, og hvis vi ønsker det, skal du afinstallere OpenSSH:

sudo su - aptitude -r purge openssh-server

firewalls

Den næste ting, vi skal gøre, er at adskille logfilerne fra firewallen til den separate fil /var/log/firewall.log for at lette yderligere analyse, hvorfor vi installerede ulogd-pakken ved opstart. Til dette redigerer vi filen /etc/logd.conf for at justere det relevante afsnit:

[LOGEMU] fil = "/ var / log / firewall.log" sync = 1

Dernæst ændrer vi rekordrotationsfilen / etc / logrotate / ulogd for at holde en daglig rotation (med dato) og gemme komprimerede salvoer i biblioteket / var / log / ulog /:

/var/log/ulog/*.log /var/log/firewall.log {daglig dateext manglerok komprimeringsforsinkelsekomprimer shareskripter opretter 640 root adm postrotate /etc/init.d/ulogd reload mv /var/log/firewall.log-* .gz / var / log / ulog / slutskript}

Så vi opretter netfilterreglerne ved at udføre følgende:

IPT = $ (hvilke iptables) IPEXT = 250.250.250.155 IPEXTBLK = 250.250.0.0 / 16 IPBCAST = 255.255.255.255 $ IPT -F $ IPT -X $ IPT -Z $ IPT -A INPUT -i lo -j ACCEPT $ IPT - P INPUT DROP $ IPT -P FORWARD DROP $ IPT -P OUTPUT ACCEPT $ IPT -A INPUT -m state --state INVALID -j ULOG --ulog-prefix IN_INVALID $ IPT -A INPUT -p igmp -j ULOG --ulog -prefix IN_IGMP $ IPT -A INPUT -m pkttype --pkt-type transmission -j ULOG --ulog-prefix IN_BCAST $ IPT -A INPUT -m pkttype --pkt-type multicast -j ULOG --ulog-prefix IN_MCAST $ IPT -A FORWARD -j ULOG --ulog-prefix FORWARD $ IPT -N ICMP_IN $ IPT -A INPUT!  -i lo -p icmp -j ICMP_IN $ IPT -A ICMP_IN -p icmp -f -j ULOG --ulog-prefix IN_ICMP_FRAGMENTED $ IPT -A ICMP_IN -p icmp -m icmp -m længde!  --længde 28: 1322 -j ULOG --ulog-præfiks IN_ICMP_INVALIDSIZE $ IPT -A ICMP_IN -p icmp -m icmp -m hashlimit --hashlimit-over 4 / sek --hashlimit-mode srcip --hashlimit-srcmask 24 - -hashlimit-navn icmpflood -j ULOG --ulog-præfiks IN_ICMP_FLOOD $ IPT -A ICMP_IN -p icmp -m icmp -m hashlimit --hashlimit-op til 64kb / min --hashlimit-mode srcip --hashlimit-srcmask 24 - hashlimit-navn icmpattack -j ULOG --ulog-præfiks IN_ICMP_FLOOD $ IPT -A ICMP_IN -p icmp -m icmp -m u32!  --u32 "0x4 & 0x3fff = 0x0" -j ULOG --ulog-præfiks IN_ICMP_ATTACK $ IPT -A ICMP_IN -p icmp -m icmp!  --icmp-type ekko-anmodning -m tilstand --tilstand NY -j ULOG --ulog-præfiks IN_ICMP_INVALID $ IPT -A ICMP_IN -p icmp -m icmp --icmp-type ekko-anmodning -j ULOG --ulog- præfiks IN_ICMP $ IPT -A ICMP_IN -p icmp -m icmp --icmp-type ekko-anmodning -m grænse --grænse 1 / sek --grænse-burst 4 -j ACCEPTE $ IPT -A ICMP_IN -p icmp -m icmp --icmp-type ekko-svar -m grænse - grænse 2 / sek - begræns-burst 4 -j ACCEPT $ IPT -A ICMP_IN -p icmp -m icmp --icmp-type destination-uopnåelig -m grænse - grænse 2 / sek - limit-burst 4 -j ACCEPT $ IPT -A ICMP_IN -p icmp -m icmp --icmp-type tidsoverskredet -m grænse - limit 2 / sec - limit-burst 4 -j ACCEPT $ IPT -A ICMP_IN -p icmp -m icmp --icmp-type parameter-problem -m grænse --grænse 2 / sek --grænse-burst 4 -j ACCEPT $ IPT -A ICMP_IN -j RETUR $ IPT -N UDP_IN $ IPT-EN INDGANG!  -i lo -p udp -j UDP_IN $ IPT -A UDP_IN!  -jeg!  -p udp -f -j ULOG --ulog-prefix IN_UDP_FRAGMENTED $ IPT -A UDP_IN -p udp -m udp --sport 53 -m længde!  --længde 28: 576 -j ULOG --ulog-præfiks IN_UDP_DNS_INVALIDSIZE $ IPT -A UDP_IN -p udp -m udp --dport 53 -m -stat --state NEW -j ULOG --ulog-prefix IN_UDP_DNSREQUEST $ IPT - En UDP_IN -p udp -m udp --dport 53 -m -state --state NY -j REJECT - afvis-med icmp-port-uopnåelig $ IPT -A UDP_IN -p udp -m udp!  --sport 53!  -s $ IPEXTBLK!  -d $ IPBCAST -m tilstand --tilstand NY -j ULOG --ulog-præfiks IN_UDP $ IPT -A UDP_IN -p udp -m udp -m tilstand --stat ESTABLERET, RELATERET -j ACCEPT $ IPT -A UDP_IN -j TILBAGE $ IPT -N TCP_IN $ IPT-EN INDGANG!  -i lo -p tcp -j TCP_IN $ IPT -A TCP_IN!  -jeg!  -p tcp -f -j ULOG --ulog-præfiks IN_TCP_FRAGMENTED $ IPT -A TCP_IN -p tcp -m tcp --sport 53 -m tilstand --stat ESTABLERET, RELATERET -m længde!  --længde 513: 1500 -j ULOG --ulog-præfiks IN_TCP_DNS_INVALIDSIZE $ IPT -A TCP_IN -p tcp -m tcp --dport 53 -m tilstand --tilstand NY -j ULOG --ulog-præfiks IN_TCP_DNS $ IPT -A TCP_IN -p tcp -m tcp --dport 53 -m tilstand --stat NY -j REJECT - afvis-med icmp-port-ikke-tilgængelig $ IPT -A TCP_IN -p tcp -m tcp -m multiport!  --dports 80,443 -m tilstand --tilstand NEW -j ULOG --ulog-præfiks IN_TCP $ IPT -A TCP_IN -p tcp -m tcp -m multiport --dports 80,443 -m tilstand --stat NY -m hashlimit - hashlimit-op til 4 / sek --hashlimit-burst 16 --hashlimit-mode srcip --hashlimit-navn navreq -j ACCEPTER $ IPT -A TCP_IN -p tcp -m tcp -m multiport --dports 80,443 -m tilstand - state ESTABLISHED -m connlimit!  --connlimit-over 16 -j ACCEPT $ IPT -A TCP_IN -p tcp -m tcp -m multiport! 

Med den tidligere konfiguration skal vores VPS med rimelighed være sikret, men hvis vi ønsker det, kan vi sikre det lidt mere, som vi kan bruge nogle mere avancerede regler til.

Ikke alle VPS tillader installation af ekstra moduler til netfilter, men en meget nyttig er psd, som giver dig mulighed for at undgå port scanninger. Desværre er dette modul ikke integreret i netfilter som standard, så det er nødvendigt at installere visse pakker og derefter opbygge modulet:

aptitude -RvW installer iptables-dev xtables-addons-source module-assistant module-assistant --verbose --text-mode auto-install xtables-addons-source

Når ovenstående er gjort, kan vi tilføje en regel som denne:

iptables -A INPUT -m psd --psd-vægt-tærskel 15 --psd-forsinkelse-tærskel 2000 --psd-lo-port-vægt 3 --psd-hi-porte-vægt 1 -j ULOG --ulog- præfiks IN_PORTSCAN

Den tidligere regel betyder grundlæggende, at vi opretter en tæller, der forøges med 3, hver gang der gøres et forsøg på at få adgang til en port lavere end 1024 og med 1 hver gang et forsøg på at få adgang til en port højere end 1023, og når denne tæller når 15 i i en periode på mindre end 20 sekunder registreres pakkerne inden ulog som et forsøg på havnescanning. Pakkerne kunne stadig kasseres med det samme, men i dette tilfælde agter vi at bruge dem fail2ban, som vi konfigurerer senere.

Når reglerne er oprettet, skal vi tage visse forholdsregler for at gøre dem vedvarende, ellers mister vi dem, når serveren genstartes. Der er flere måder at opnå dette på; I denne vejledning bruger vi den iptables-vedvarende pakke, som vi installerede i starten, som gemmer reglerne i /etc/iptables/rules.v4 y /etc/iptables/rules.v6 til ipv6.

iptables-save> /etc/iptables/rules.v4

Faktisk, selvom brugen af ​​ipv6 på Cuba endnu ikke er udbredt, kunne vi godt skabe nogle grundlæggende regler:

IPT = $ (hvilke ip6tabeller) $ IPT -P INPUT DROP $ IPT -P FORWARD DROP $ IPT -P OUTPUT ACCEPT $ IPT -A INPUT -i lo -j ACCEPT $ IPT -A INPUT! -i lo -m tilstand --tilstand ESTABLERET, RELATERET -j ACCEPTER ikke indstillet IPT

Disse regler kan også gøres vedholdende:

ip6tables-save> /etc/iptables/rules.v6

Endelig for større sikkerhed, renser vi registreringsdatabasen for firewallen og genstarter tjenesterne:

echo -n> /var/log/firewall.log service logrotate genstartstjeneste ulogd genstartstjeneste iptables-vedvarende genstart

Nginx

Vi bruger Nginx som en webserver, fordi VPS'er har en reduceret mængde RAM sammenlignet med en rigtig server, så det er generelt praktisk at have noget lettere end Apache.

Før vi konfigurerer Nginx, opretter vi et certifikat (ingen adgangskode) til brug via HTTPS:

cd / etc / nginx openssl genrsa -des3 -out cert.key 4096 cp -v cert.key cert.key.original openssl req -new -key cert.key -out cert.csr openssl rsa -in cert.key.original - ud cert.key openssl x509 -req-dage 365 -in cert.csr -signkey cert.key -out cert.crt

Når dette er gjort, opretter vi en adgangskodefil til brugeren "elusuario":

htpasswd -c .htpasswd brugeren

Dernæst ændrer vi filen / Etc / nginx / sites-tilgængelig / default for at indstille standardwebstedet. Det kunne se sådan ud:

server {server_name localhost; indeks indeks.html indeks.htm standard.html standard.htm; rod / var / www; placering / {# indstil rækkefølgen for bekræftelse og siden, der skal indlæses, hvis URI ikke findes try_files $ uri $ uri / /index.html; }} server {lyt 127.0.0.1:443; servernavn localhost; indeks indeks.html indeks.htm standard.html standard.htm; rod / var / www; ssl på; ssl_certificate cert.crt; ssl_certificate_key cert.key; ssl_session_timeout 5m; # Aktivér kun HTTPS over TLS (mere sikker end SSL) ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # foretrækker højstyrkekodere [HIGH], # flyt mellemstyrkekodere [MEDIUM] til slutningen af ​​listen, # deaktiver lavstyrkekodere [LAV] (40 og 56 bit) # deaktiver kodere med eksportalgoritmer [EXP] # deaktiver nulkodere [eNULL] uden godkendelse [aNULL], SSL (version 2 og 3) og DSS (tillader kun nøgler op til 1024 bit) ssl_ciphers HIGH: + MEDIUM :! LOW :! EXP: ! aNULL :! eNULL :! SSLv3 :! SSLv2 :! DSS; # Foretrækker serverens krypteringsmetoder (som standard bruges klientens) ssl_prefer_server_ciphers on; placering / {# aktiver godkendelse auth_basic "Login"; auth_basic_user_file /etc/nginx/.htpasswd; # indstil rækkefølgen for bekræftelse og sidekoden, der skal indlæses, hvis URI try_files $ uri $ uri / = 404 ikke findes; # tillad oprettelse af et indeks til godkendte brugeres autoindex til; autoindex_exact_size off; autoindex_localtime til; }}

Vi kontrollerer, at konfigurationen er korrekt:

nginx -t

Endelig genstarter vi tjenesten:

service nginx genstart

Fail2Ban

Før du begynder at konfigurere Fail2Ban, stopper vi tjenesten for at øge sikkerheden og rydder registreringsdatabasen:

fail2ban-client stop echo -n> /var/log/fail2ban.log

Dernæst opretter vi konfigurationsfilen /etc/fail2ban/jail.local med følgende brugerdefinerede indhold:

# Brugerdefineret konfigurationsfil /etc/fail2ban/jail.local # [STANDARD] findtime = 43200; 12 timers varighed = 86400; 1 dages maxretry = 3; forbud træder i kraft efter det 4. forsøg [ssh] enabled = false [nginx-auth] enabled = true filter = nginx-auth action = iptables-multiport [name = NoAuthFailures, port = "http, https"] logpath = / var / log / nginx * / * error * .log [nginx-badbots] enabled = true filter = apache-badbots action = iptables-multiport [name = BadBots, port = "http, https"] logpath = / var / log / nginx * /*access*.log bantime = 604800; 1 uges maxretry = 0 [nginx-login] aktiveret = sand filter = nginx-login handling = iptables-multiport [navn = NoLoginFailures, port = "http, https"] logpath = / var / log / nginx * / * adgang *. log bantime = 1800; 30 minutter [nginx-noscript] aktiveret = sand handling = iptables-multiport [navn = NoScript, port = "http, https"] filter = nginx-noscript logpath = /var/log/nginx*/*access*.log maxretry = 0 [nginx-proxy] aktiveret = sand handling = iptables-multiport [navn = NoProxy, port = "http, https"] filter = nginx-proxy logpath = /var/log/nginx*/*access*.log bantime = 604800 ; 1 uges maxretry = 0 [firewall] aktiveret = sand handling = iptables-multiport [name = Firewall] filter = firewall logpath = /var/log/firewall.log maxretry = 0

Når dette er gjort, opretter vi i biblioteket /etc/fail2ban/filters.d/ følgende filer:

# /etc/fail2ban/filter.d/nginx-auth.conf # Authfilter # Blokerer IP'er, der ikke godkendes ved hjælp af grundlæggende godkendelse # [Definition] failregex = ingen bruger / adgangskode blev leveret til grundlæggende godkendelse. * klient: bruger. * blev ikke fundet i. * klient: bruger. * adgangskodefejl. * klient: ignororeregex =
# /etc/fail2ban/filter.d/nginx-login.conf # Loginfilter # Blokerer IP'er, der ikke godkendes ved hjælp af webapplikations login-side # Scanadgangslog til HTTP 200 + POST / sessioner => mislykket log ind # [Definition ] failregex = ^ -. * POST / sessioner HTTP / 1 \ .. "200 ignoreregex =
# /etc/fail2ban/filter.d/nginx-noscript.conf # Noscript filter # Bloker IP'er, der forsøger at udføre scripts som .php, .pl, .exe og andre sjove scripts. # Matches f.eks. # 192.168.1.1 - - "FÅ /something.php # [Definition] failregex = ^ -. * FÅ. * (\. Php | \ .asp | \ .exe | \ .pl | \ .cgi | \ scgi) ignoreregex =
# /etc/fail2ban/filter.d/proxy.conf # Proxy filter # Bloker IP'er, der prøver at bruge serveren som proxy. # Matches f.eks. # 192.168.1.1 - - "FÅ http://www.something.com/ # [Definition] failregex = ^ -. * FÅ http. * Ignoreregex =
# /etc/fail2ban/filter.d/firewall.conf # Firewall filter # [Definition] failregex = ^. * IN_ (INVALID | PORTSCAN | UDP | TCP |). * SRC = . * $ ignoreregex =

Endelig starter vi tjenesten og indlæser konfigurationen:

fail2ban-service -b fail2ban-client genindlæses

Verifikation

Som et sidste trin kan vi se optegnelserne med hale -f o multitail - følg alt. Faktisk tilbyder sidstnævnte applikation den fordel, at den giver dig mulighed for at se flere filer på samme tid og giver grundlæggende syntaksfremhævning.

Hvis en e-mail-konto ikke er konfigureret i VPS, anbefales det at deaktivere en advarselsmeddelelse, der vises, når multitail startes, og som vi udfører følgende kommando for:

ekko "check_mail: 0"> ~ / .multitailrc

Faktisk kunne vi godt lave et alias (4) for hurtigt at få vist logfilerne med en kort kommando, for eksempel "flog":

alias flog = 'multitail --follow-all /var/log/firewall.log /var/log/fail2ban.log'

1) Disse er fiktive værdier.
2) Det er let at aktivere andre tjenester, når du først har forstået, hvordan det fungerer.
3) For flere detaljer, kør mandsudoer.
4) Det kan eventuelt føjes til ~ / .bash_aliases-filen


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   MSX sagde han

    Der er nogle interessante ting, +1

  2.   yukiteru sagde han

    @Hugo denne linje i konfigurationen:

    ssl_protocols SSLv3 TLSv1;

    Jeg ville fjerne SSLv3 fra den, fordi protokollen ikke længere er sikker, selv i Debian Jessie er mange tjenester konfigureret til at undgå at bruge denne protokol af den grund.

    Information om emnet her:

    https://www.linode.com/docs/security/security-patches/disabling-sslv3-for-poodle
    http://disablessl3.com/

    1.    Hugo sagde han

      Ideen var egentlig ikke at tilbyde de vigtigste tjenester via HTTPS, men at forklare, hvordan man bruger port 443 til SSH uden at miste muligheden for at bruge den til HTTPS, hvis det er nødvendigt, men tak for advarslen.

      Alligevel har jeg opdateret artiklen for at ændre nginx-konfigurationen lidt og i øvrigt inkludere nogle kommentarer for at afklare tingene lidt mere med dette af krypteringsmekanismerne og for at rette nogle mindre fejl.

  3.   Daniel PZ sagde han

    Mange tak for denne gode tutorial, nu vil jeg sætte den i praksis! :D, fortsæt DesdeLinux, de overrasker mig altid, Hilsen fra Peru.

  4.   Ñandekuera sagde han

    Mange tak for delingen.

  5.   fernando sagde han

    meget god guide, og det kommer fra perler nu, hvor jeg startede i denne blog, men endnu mere nu, når jeg er ved at montere min første vps og stadig med mange problemer, men denne artikel har taget mig ud af mange tvivl, tak og hilsner