Preparatius
Configuració del SO
Xarxa
Accés SSH
Configuració addicional
Reenviament de ports
Contenidors separats
Els contenidors LXC (contenidors Linux) són una característica del sistema operatiu a Linux que es pot utilitzar per executar diversos sistemes Linux aïllats en un sol host.
Aquestes instruccions us guiaran a través dels passos bàsics de la configuració del servidor per a l'allotjament de contenidors Linux aïllats. Configurarem les següents característiques:
- Contenidors LXC amb Ubuntu 14.
- Configuració de xarxa de Linux i reenviament de ports per a contenidors.
- Reenviament SSH per a l'administració de contenidors tan senzill com
ssh [email protected]
issh [email protected]
- Configuració del servidor intermediari Nginx per accedir a llocs web dins de contenidors (per nom d'amfitrió).
- Millores addicionals de seguretat per a una correcta gestió del servidor.
Aquesta guia suposa que:
- Tens un compte a Vultr.com .
- Saps com configurar una màquina virtual amb una ISO personalitzada.
- Saps utilitzar les claus SSH i ja has generat claus públiques i privades.
Al final del tutorial obtindrem dos contenidors virtuals que tindran accés a Internet, però que no poden fer ping entre ells. També configurarem el reenviament de ports des example.com
dels contenidors. Desplegarem un panell de configuració i gestió segur amb l'ajuda d'eines del paquet Proxmox.
Preparatius
Utilitzarem Proxmox només per a la gestió de contenidors LXC. En general, també admet KVM, però la virtualització imbricada està prohibida a Vultr. Abans de començar, s'ha de descarregar una ISO de Proxmox des del lloc web oficial. Farem servir el Proxmox VE 5.0 ISO Installer
. Instal·leu el sistema operatiu des de la imatge amb la configuració predeterminada i reinicieu la màquina virtual. A més, podeu instal·lar manualment proxmox des de fonts, però això no és necessari en la majoria dels casos (seguiu les instruccions aquí ).
Configuració del SO
Connecteu-vos al vostre amfitrió mitjançant SSH, actualitzeu la llista de plantilles de proxmox i descarregueu una plantilla adequada per als contenidors.
apt-get update
pveam update
pveam available
pveam download local ubuntu-14.04-standard_14.04-1_amd64.tar.gz
Ara, hem de crear un contenidor de Linux amb una interfície de xarxa connectada a un pont de Linux. Obriu /etc/network/interfaces
i afegiu les línies següents:
auto vmbr1
iface vmbr1 inet static
address 10.100.0.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
Després de reiniciar el sistema, podeu crear un contenidor nou a partir de la Ubuntu 14.04
plantilla.
pct create 200 /var/lib/vz/template/cache/ubuntu-14.04-standard_14.04-1_amd64.tar.gz -storage local-lvm -net0 name=eth0,bridge=vmbr1,ip=10.100.0.200/24,gw=10.100.0.1
Podeu verificar el vostre contenidor amb pct list
, iniciar el contenidor #200 amb pct start 200
i introduir el seu shell amb pct enter 200
. També podeu verificar la configuració de la xarxa i les adreces amb ip addr
.
Xarxa
Per proporcionar connexió a Internet dins del contenidor, hem d'habilitar NAT
. El següent permetrà reenviar el trànsit des del contenidor a Internet amb l'ajuda de la tecnologia NAT. El vmbr0
pont està connectat a la interfície externa i el vmbr1
pont està connectat als contenidors.
sysctl -w net.ipv4.ip_forward=1
iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
iptables --append FORWARD --in-interface vmbr1 -j ACCEPT
Introduïu el contenidor amb pct enter 200
i configureu el servidor web dins.
apt-get update
apt-get install nginx
service nginx start
exit
Ara, hem de configurar Nginx al vostre servidor per enviar llocs web a contenidors.
apt-get update
apt-get install nginx
Creeu un fitxer de configuració nou /etc/nginx/sites-available/box200
amb el contingut següent:
server {
listen 80;
server_name server200.example.com;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://10.100.0.200/;
}
}
Nginx enviarà ara cada sol·licitud HTTP server200.example.com
del vostre servidor al contenidor amb IP 10.100.0.200. Activa aquesta configuració.
ln -s /etc/nginx/sites-available/box200 /etc/nginx/sites-enabled/
service nginx restart
Accés SSH
Si voleu proporcionar un accés fàcil als sandbox, heu de reenviar sessions SSH als contenidors. Per fer-ho, creeu un nou usuari al vostre servidor arrel. No oblideu introduir una contrasenya, no calen altres paràmetres.
adduser box200
su - box200
ssh-keygen
cat .ssh/id_rsa.pub
exit
Copieu aquesta clau SSH i introduïu el contenidor per afegir la clau.
pct enter 200
mkdir .ssh
nano .ssh/authorized_keys
exit
Al vostre servidor, afegiu la línia següent al .ssh/authorized_keys
fitxer.
command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>
No oblidis canviar <YOUR SSH KEY>
a la clau pública de casa teva. Alternativament, podeu executar el següent des de la línia d'ordres.
echo 'command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>' >> .ssh/authorized_keys
A continuació, podeu connectar-vos al vostre sandbox amb ssh.
`ssh box200@<your_server_IP>`
Configuració addicional
És hora d'implementar diverses millores de seguretat. Primer, volem canviar el port SSH predeterminat. Aleshores volem protegir la nostra pàgina de gestió de Proxmox amb l'autenticació HTTP bàsica.
nano /etc/ssh/sshd_config
Descomenta i canvia la línia
#Port 22
a
Port 24000
Reinicieu ssh.
service ssh restart
Torneu a connectar a ssh amb el nou port.
ssh root@<your_IP> -p 24000
Establiu una contrasenya de Proxmox.
Crea un fitxer /etc/default/pveproxy
.
ALLOW_FROM="127.0.0.1"
DENY_FROM="all"
POLICY="allow"
Reinicieu pveproxy
perquè els canvis tinguin efecte.
/etc/init.d/pveproxy restart
Configura nginx (si no ho has fet abans).
apt-get install nginx
service nginx restart
Creeu una configuració predeterminada a /etc/nginx/site-available/default
.
server {
listen 80;
server_name example.com;
rewrite ^ https://$hostname.example.com$request_uri? permanent;
}
server {
listen 443 ssl;
server_name example.com;
#auth_basic "Restricted";
#auth_basic_user_file htpasswd;
#location / { proxy_pass https://127.0.0.1:8006; }
}
Obteniu un certificat SSL vàlid i actualitzeu la configuració de nginx. Per exemple, es pot fer amb l'ajuda de certbox i letsencrypt. Per a més informació, feu clic aquí .
wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
./certbot-auto --nginx
Ara, la vostra configuració de nginx hauria de tenir aquest aspecte (o podeu canviar-la manualment després). No oblideu deixar de comentar les línies ssl, auth i ubicació.
server {
listen 80;
server_name example.com;
rewrite ^ https://$hostname.example.com$request_uri? permanent;
}
server {
listen 443 ssl;
server_name example.com;
ssl on;
auth_basic "Restricted";
auth_basic_user_file htpasswd;
location / { proxy_pass https://127.0.0.1:8006; }
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
}
Creeu un /etc/htpasswd
fitxer amb el generador Htpasswd .
nano /etc/nginx/htpasswd
Reinicieu Nginx
service nginx restart
Ara podeu veure la consola de gestió activada https://example.com
després de l'autenticació bàsica.
Reenviament de ports
Els contenidors ja estan disponibles per sol·licituds HTTP i SSH. Ara, podem configurar el reenviament de ports des del servidor extern als contenidors. Per exemple, per al mapatge example.com:8080
de 10.100.0.200:3000
entrada de la següent.
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8080 -j DNAT --to 10.100.0.200:3000
Podeu consultar les regles actuals.
`iptables -t nat -v -L PREROUTING -n --line-number`
També podeu suprimir una regla per número amb el següent.
`iptables -t nat -D PREROUTING <#>`.
Contenidors separats
Ara podem accedir a un contenidor des d'un altre.
pct create 250 /var/lib/vz/template/cache/ubuntu-14.04-standard_14.04-1_amd64.tar.gz -storage local-lvm -net0 name=eth0,bridge=vmbr1,ip=10.100.0.250/24,gw=10.100.0.1
pct start 250
pct enter 250
ping 10.100.0.200
Si voleu restringir l'accés del contenidor 250 al 200, heu de connectar cada contenidor a un pont personal i desactivar el reenviament entre ponts.
Elimina els contenidors existents.
pct stop 200
pct stop 250
pct destroy 200
pct destroy 250
Canvia el contingut de /etc/network/interfaces
.
auto vmbr1
iface vmbr1 inet static
address 10.100.1.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
auto vmbr2
iface vmbr2 inet static
address 10.100.2.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
reboot
el sistema
Activa el reenviament
`sysctl -w net.ipv4.ip_forward=1`
Per fer que aquests canvis siguin permanents, podeu editar el /etc/sysctl.conf
fitxer i trobar el text següent.
#net.ipv4.ip_forward=1
Descomenta-ho.
net.ipv4.ip_forward=1
També podeu executar sysctl -p
per fer que els canvis tinguin efecte immediatament.
Crea contenidors.
pct create 200 /var/lib/vz/template/cache/ubuntu-14.04-standard_14.04-1_amd64.tar.gz -storage local-lvm -net0 name=eth0,bridge=vmbr1,ip=10.100.1.200/24,gw=10.100.1.1
pct create 250 /var/lib/vz/template/cache/ubuntu-14.04-standard_14.04-1_amd64.tar.gz -storage local-lvm -net0 name=eth0,bridge=vmbr2,ip=10.100.2.250/24,gw=10.100.2.1
Comenceu els contenidors amb pct start 200
i pct start 250
.
Esborreu les iptables
regles.
iptables -F
Habilita NAT.
iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
vmbr0
és el pont que inclou la interfície externa.
Permet el reenviament des de la interfície externa.
iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
Permet el reenviament des dels contenidors a Internet.
iptables -A FORWARD -i vmbr1 -o vmbr0 -s 10.100.1.0/24 -j ACCEPT
iptables -A FORWARD -i vmbr2 -o vmbr0 -s 10.100.2.0/24 -j ACCEPT
Elimina l'altre reenviament.
iptables -A FORWARD -i vmbr1 -j DROP
iptables -A FORWARD -i vmbr2 -j DROP
Ara, comproveu que 10.100.1.200
pot fer ping 8.8.8.8
però no pot fer ping 10.100.2.250
i que 10.100.2.250
pot fer ping 8.8.8.8
però no pot fer ping 10.100.1.200
.
L'ordre de les ordres relacionades amb iptables és important. La millor manera d'utilitzar les teves regles és utilitzar iptables-persistent
. Aquest paquet us ajuda a desar les regles d'iptables als fitxers /etc/iptables/rules.v4
i les /etc/iptables/rules.v6
pot carregar automàticament després de reiniciar el sistema. Només cal instal·lar-lo amb el següent.
apt-get install iptables-persistent
Seleccioneu YES
quan se us demani.