Přípravky
Nastavení OS
Síť
Přístup SSH
Další nastavení
Přesměrování portů
Oddělené nádoby
Kontejnery LXC (kontejnery Linux) jsou funkcí operačního systému v Linuxu, kterou lze použít ke spuštění více izolovaných systémů Linux na jednom hostiteli.
Tyto pokyny vás provedou základními kroky konfigurace serveru pro izolovaný hosting linuxových kontejnerů. Nakonfigurujeme následující funkce:
- Kontejnery LXC s Ubuntu 14.
- Nastavení sítě Linux a přesměrování portů pro kontejnery.
- SSH forwarding pro správu kontejnerů stejně jednoduchý jako
ssh [email protected]
assh [email protected]
- Konfigurace proxy Nginx pro přístup k webovým stránkám uvnitř kontejnerů (podle názvu hostitele).
- Další vylepšení zabezpečení pro správnou správu serveru.
Tato příručka předpokládá, že:
- Máte účet na Vultr.com .
- Víte, jak nakonfigurovat virtuální počítač s vlastním ISO.
- Víte, jak používat SSH klíče a máte již vygenerované veřejné a soukromé klíče.
Na konci tutoriálu získáme dva virtuální kontejnery, které budou mít přístup k internetu, ale nemohou si navzájem pingnout. Nakonfigurujeme také přesměrování portů z example.com
do kontejnerů. Nasadíme bezpečný konfigurační a řídící panel pomocí nástrojů z Proxmox packetu.
Přípravky
Proxmox budeme používat pouze pro správu kontejnerů LXC. Obecně také podporuje KVM, ale vnořená virtualizace je na Vultr zakázána. Před zahájením je třeba stáhnout Proxmox ISO z oficiálních stránek. Budeme používat Proxmox VE 5.0 ISO Installer
. Nainstalujte OS z bitové kopie s výchozím nastavením a restartujte virtuální počítač. Proxmox můžete také nainstalovat ručně ze zdrojů, ale to ve většině případů není nutné (postupujte podle pokynů zde ).
Nastavení OS
Připojte se k hostiteli pomocí SSH, aktualizujte seznam šablon proxmox a stáhněte si vhodnou šablonu pro kontejnery.
apt-get update
pveam update
pveam available
pveam download local ubuntu-14.04-standard_14.04-1_amd64.tar.gz
Nyní musíme vytvořit linuxový kontejner se síťovým rozhraním připojeným k linuxovému mostu. Otevřete /etc/network/interfaces
a připojte následující řádky:
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
Po restartu systému můžete ze Ubuntu 14.04
šablony vytvořit nový kontejner .
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
Svůj kontejner můžete ověřit pomocí pct list
, spustit kontejner #200 pomocí pct start 200
a zadat jeho shell pomocí pct enter 200
. Síťová nastavení a adresy můžete také ověřit pomocí ip addr
.
Síť
Aby bylo možné ve vašem kontejneru poskytovat internetové připojení, musíme povolit NAT
. Následující umožní přesměrovat provoz z kontejneru na internet pomocí technologie NAT. vmbr0
Můstek je připojen k externí rozhraní a vmbr1
můstek je spojen s kontejnery.
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
Zadejte kontejner s pct enter 200
a nakonfigurujte webový server uvnitř.
apt-get update
apt-get install nginx
service nginx start
exit
Nyní musíme nakonfigurovat Nginx na vašem serveru pro proxy weby do kontejnerů.
apt-get update
apt-get install nginx
Vytvořte nový konfigurační soubor /etc/nginx/sites-available/box200
s následujícím obsahem:
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 nyní bude proxy každý požadavek HTTP pro server200.example.com
z vašeho serveru do kontejneru s IP 10.100.0.200. Aktivujte tuto konfiguraci.
ln -s /etc/nginx/sites-available/box200 /etc/nginx/sites-enabled/
service nginx restart
Přístup SSH
Pokud chcete poskytnout snadný přístup k sandboxům, musíte relace SSH přeposílat do kontejnerů. Chcete-li tak učinit, vytvořte nového uživatele na kořenovém serveru. Nezapomeňte zadat heslo, další parametry nejsou nutné.
adduser box200
su - box200
ssh-keygen
cat .ssh/id_rsa.pub
exit
Zkopírujte tento klíč SSH a zadejte kontejner pro připojení klíče.
pct enter 200
mkdir .ssh
nano .ssh/authorized_keys
exit
Na serveru přidejte do .ssh/authorized_keys
souboru následující řádek .
command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>
Nezapomeňte změnit <YOUR SSH KEY>
svůj domácí veřejný klíč. Případně můžete z příkazového řádku spustit následující.
echo 'command="ssh [email protected]",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <YOUR SSH KEY>' >> .ssh/authorized_keys
Poté se můžete připojit ke svému sandboxu pomocí ssh.
`ssh box200@<your_server_IP>`
Další nastavení
Nastal čas implementovat několik vylepšení zabezpečení. Nejprve chceme změnit výchozí port SSH. Potom chceme chránit naši stránku pro správu Proxmox pomocí základní HTTP autentizace.
nano /etc/ssh/sshd_config
Odkomentujte a změňte řádek
#Port 22
na
Port 24000
Restartujte ssh.
service ssh restart
Znovu se připojte k ssh s novým portem.
ssh root@<your_IP> -p 24000
Nastavte heslo Proxmox.
Vytvořit soubor /etc/default/pveproxy
.
ALLOW_FROM="127.0.0.1"
DENY_FROM="all"
POLICY="allow"
Restartujte, pveproxy
aby se změny projevily.
/etc/init.d/pveproxy restart
Nakonfigurujte nginx (pokud jste to ještě neudělali).
apt-get install nginx
service nginx restart
Vytvořte výchozí konfiguraci v /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; }
}
Získejte platný certifikát SSL a aktualizujte svou konfiguraci nginx. Lze to například provést pomocí certbox a letsencrypt. Pro více informací klikněte zde .
wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
./certbot-auto --nginx
Nyní by vaše konfigurace nginx měla vypadat takto (nebo ji můžete později změnit ručně). Nezapomeňte odkomentovat řádky ssl, auth a location.
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
}
Vytvořte /etc/htpasswd
soubor pomocí generátoru Htpasswd .
nano /etc/nginx/htpasswd
Restartujte Nginx
service nginx restart
Nyní můžete https://example.com
po základním ověření zobrazit konzolu pro správu .
Přesměrování portů
Kontejnery jsou nyní dostupné prostřednictvím požadavků HTTP a SSH. Nyní můžeme nakonfigurovat předávání portů z externího serveru do kontejnerů. Například, pro mapování example.com:8080
na 10.100.0.200:3000
vstup následujícího.
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8080 -j DNAT --to 10.100.0.200:3000
Můžete si prohlédnout aktuální pravidla.
`iptables -t nat -v -L PREROUTING -n --line-number`
Pravidlo můžete také odstranit podle čísla pomocí následujícího.
`iptables -t nat -D PREROUTING <#>`.
Oddělené nádoby
Nyní můžeme přistupovat k jednomu kontejneru z druhého.
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
Pokud chcete omezit přístup z kontejneru 250 na 200, musíte každý kontejner připojit k osobnímu mostu a zakázat předávání mezi mosty.
Smazat stávající kontejnery.
pct stop 200
pct stop 250
pct destroy 200
pct destroy 250
Změňte obsah /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
systém
Povolit přeposílání
`sysctl -w net.ipv4.ip_forward=1`
Aby byly tyto změny trvalé, můžete /etc/sysctl.conf
soubor upravit a najít následující text.
#net.ipv4.ip_forward=1
Odkomentujte to.
net.ipv4.ip_forward=1
Můžete také spustit sysctl -p
, aby se změny projevily okamžitě.
Vytvořte kontejnery.
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
Spusťte kontejnery pomocí pct start 200
a pct start 250
.
Propláchněte iptables
pravidla.
iptables -F
Povolit NAT.
iptables --table nat --append POSTROUTING --out-interface vmbr0 -j MASQUERADE
vmbr0
je most, který obsahuje externí rozhraní.
Povolit přeposílání z externího rozhraní.
iptables --append FORWARD --in-interface vmbr0 -j ACCEPT
Povolit přeposílání z kontejnerů na 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
Pusťte další přesměrování.
iptables -A FORWARD -i vmbr1 -j DROP
iptables -A FORWARD -i vmbr2 -j DROP
Nyní zkontrolujte, že 10.100.1.200
může ping, 8.8.8.8
ale nemůže ping 10.100.2.250
a že 10.100.2.250
může ping, 8.8.8.8
ale nemůže ping 10.100.1.200
.
Důležité je pořadí příkazů souvisejících s iptables. Nejlepší způsob, jak provozovat svá pravidla, je použít iptables-persistent
. Tento balíček vám pomůže uložit pravidla iptables do souborů /etc/iptables/rules.v4
a /etc/iptables/rules.v6
může je automaticky načíst po restartu systému. Stačí jej nainstalovat pomocí následujícího.
apt-get install iptables-persistent
YES
Po zobrazení výzvy vyberte .