Przykładowy log z instalacji: Log
Instalujemy minimalną wersję Debiana - czyli: podstawowe narzędzia oraz SSH.
Usuwamy użytkownika, którego założyliśmy podczas instalacji:
userdel -r -f devel
aptitude install bzip2 unzip p7zip-full mc subversion subversion-tools iptables-persistent telnet tcpdump unzip openvpn zip hdparm smartmontools git rsync
echo "deb http://download.proxmox.com/debian wheezy pve" >> /etc/apt/sources.list wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add -
aptitude update && aptitude full-upgrade
aptitude install pve-firmware pve-kernel-2.6.32-26-pve
Usuwamy stary kernel i aktualizujemy konfigurację Gruba:
apt-get remove linux-image-amd64 linux-image-3.2.0-4-amd64 linux-base
Po tej zmianie należy uruchomić ponownie serwer i sprawdzić czy jest uruchomiony na kernelu Proxmoxa:
root@proxmox:~# uname -r 2.6.32-26-pve
aptitude install pve-headers-2.6.32-26-pve proxmox-ve-2.6.32 ntp lvm2 postfix ksm-control-daemon vzprocps open-iscsi bootlogd
Włączamy forwarding pakietów:
echo "ip_nat_ftp" >> /etc/modules echo "ip_conntrack_ftp" >> /etc/modules cat /etc/sysctl.conf | sed "s/\#net.ipv4.ip_forward\=1/net.ipv4.ip_forward\=1/g" > /etc/sysctl.conf.bak mv /etc/sysctl.conf.bak /etc/sysctl.conf sysctl -p
Konfigurujemy dodatkowe adresy IP - plik: /etc/network/interfaces.
Włączamy monitoring dysków:
cat /etc/default/smartmontools | sed "s/\#enable_smart\=\"\/dev\/hda\ \/dev\/hdb\"/enable_smart\=\"\/dev\/sda\ \/dev\/sdb\"/g" > /etc/default/smartmontools.bak cat /etc/default/smartmontools.bak | sed "s/\#start_smartd=yes/start_smartd\=yes/g" > /etc/default/smartmontools cat /etc/default/smartmontools | sed "s/\#smartd_opts\=\"--interval\=1800\"/smartd_opts\=\"--interval\=1800\"/g" > /etc/default/smartmontools.bak mv /etc/default/smartmontools.bak /etc/default/smartmontools cat /etc/smartd.conf | sed "s/DEVICESCAN\ -d\ removable\ -n\ standby\ -m\ root\ -M\ exec\ \/usr\/share\/smartmontools\/smartd-runner/DEVICESCAN\ -d\ removable\ -n\ standby\ -m\ admin@domain.ltd\ -M\ exec\ \/usr\/share\/smartmontools\/smartd-runner/g" > /etc/smartd.conf.bak mv /etc/smartd.conf.bak /etc/smartd.conf
Włączamy monitoring macierzy RAID:
cat /etc/mdadm/mdadm.conf | sed "s/MAILADDR\ root/MAILADDR\ admin@domain.ltd/g" > /etc/mdadm/mdadm.conf.bak mv /etc/mdadm/mdadm.conf.bak /etc/mdadm/mdadm.conf
Uruchamiamy ponownie serwer i sprawdzamy czy SMART i MDADM wstały, czy forwarding jest włączony i sieć poprawnie skonfigurowana.
/etc/init.d/smartmontools status /etc/init.d/mdadm status cat /proc/sys/net/ipv4/ip_forward ip add
Zmieniamy domyślny port SSH:
nano /etc/ssh/sshd_config /etc/init.d/ssh restart
Zmieniamy hasło na root'a jeśli mamy proste na bardziej skomplikowane:
passwd
Dopisujemy swoje klucze do pliku /root/.ssh/authorized_keys.
Tu w zależności od sieci. Przykładowy plik:
#!/bin/bash ### VARS ethNet="eth0" ethLan="vmbr0" ethVpn="tap0" netLan="10.1.2.0/24" netVpn="10.1.3.0/24" IPHE1="10.2.2.168" IPHE2="10.2.2.106" IPALLOW="192.1.1.0/24" serverVirt="10.1.2.101" if [ "$1" = "start" ]; then echo "Starting router firewall..." ### POLICY POLICY="DROP" iptables -P OUTPUT ACCEPT iptables -P INPUT $POLICY iptables -P FORWARD $POLICY ### DROP # Block spoof address localhost other interfaces with the exception lo iptables -A INPUT -t filter ! -i lo -s 127.0.0.0/8 -j DROP # Block spoof address private networks in wan interface iptables -A INPUT -i $ethNet -s 10.0.0.0/8 -j DROP iptables -A INPUT -i $ethNet -s 172.16.0.0/12 -j DROP iptables -A INPUT -i $ethNet -s 192.168.0.0/16 -j DROP # Flood protection iptables -A INPUT -m limit --limit 1/hour -j LOG iptables -A INPUT -i $ethNet -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # ping of death #Block invalid packet iptables -A INPUT -i $ethNet -p tcp -m state --state INVALID -j DROP ### ACCEPT # Accept all packets in localhost iptables -A INPUT -t filter -i lo -j ACCEPT iptables -A OUTPUT -t filter -o lo -j ACCEPT iptables -A FORWARD -t filter -o lo -j ACCEPT # Accept established and related connection iptables -A INPUT -i $ethNet -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i $ethLan -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i $ethVpn -m state --state ESTABLISHED,RELATED -j ACCEPT # Accept ping iptables -A INPUT -p icmp -j ACCEPT iptables -A FORWARD -p icmp -j ACCEPT # Accept output connection iptables -A OUTPUT -o $ethNet -j ACCEPT iptables -A OUTPUT -o $ethLan -j ACCEPT iptables -A INPUT -i $ethLan -j ACCEPT # VPN iptables -A OUTPUT -o $ethVpn -j ACCEPT iptables -A INPUT -i $ethVpn -j ACCEPT # IP ALLOW for ipa in $IPALLOW do iptables -A INPUT -s $ipa -j ACCEPT done ## Services # SSH iptables -A INPUT -p tcp --dport 12345 -j ACCEPT # HTTP iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTPS iptables -A INPUT -p tcp --dport 443 -j ACCEPT # VPN #iptables -A INPUT -p udp --dport 1144 -j ACCEPT #iptables -A INPUT -p tcp --dport 1144 -j ACCEPT ## FORWARD # Forward new connection to Lan network iptables -A FORWARD -d $netLan -p tcp -m state --state NEW -j ACCEPT # Forward established and related connection iptables -A FORWARD -t filter -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -t filter -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -t filter -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT # Forward from Lan network iptables -A FORWARD -s $netLan -j ACCEPT iptables -A FORWARD -s $netVpn -j ACCEPT iptables -A FORWARD -s 192.1.1.0/24 -j ACCEPT ### DNAT (services in Lan) # server virt iptables -t nat -A PREROUTING --dst $IPHE2 -p tcp --dport 443 -j DNAT --to-destination $serverVirt:8443 ### SNAT (maskarada) # Set address for server Srutex iptables -t nat -A POSTROUTING -o $ethNet -s $serverVirt -j SNAT --to $IPHE2 # Set address for Lan iptables -t nat -A POSTROUTING -o $ethNet -s $netLan -j SNAT --to $IPHE1 # Other in LAN iptables-save > /etc/iptables/rules.v4 fi if [ "$1" = "stop" ]; then echo "Stopping router firewall..." iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD iptables -t nat -F iptables -t nat -F POSTROUTING iptables -t nat -F PREROUTING iptables -t mangle -F iptables -t mangle -F POSTROUTING iptables -t mangle -F PREROUTING # Flush firewall rules (-F before -X) iptables -t filter -F iptables -t nat -F iptables -t mangle -F # Delete firewall chains iptables -t filter -X iptables -t nat -X iptables -t mangle -X # Set counter to zero iptables -t filter -Z iptables -t nat -Z iptables -t mangle -Z # Default policy iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT fi if [ "$1" = "restart" ]; then $0 stop $0 start fi if [ "$1" = "" ]; then echo "Usage: $0 [start|stop|restart]" fi
zapisujemy do /root/firewall.sh i nadajemy odpowiednie uprawnienia:
chmod 700 /root/firewall.sh
Wykonujemy:
/root/firewall.sh restart
Wykonujemy restart serwera i sprawdzamy czy firewall jest ustawiony:
iptables -n -L
Należy stworzyć podsieć na potrzeby komunikacji z serwerami wirtualnymi, ja wykorzystuję podsieć z puli prywatnych - tą, która podałem w firewallu. Klikamy wg poniższego zrzutu ekranu:
Po kliknięciu OK należy wykonać restart serwera, ale uwaga! W moim przypadku Proxmox usunął z konfiguracji sieci wpis:
allow-hotplug eth0
Należy edytować plik /etc/network/interfaces.new i dopisać w/w wpis bezpośrednio przed:
iface eth0 inet static
Po upewnieniu się, że konfiguracja jest poprawna należy wykonać restart serwera.
Jeśli irytuje nas komunikat o nie wykupionej subskrypcji to możemy go wyłączyć modyfikując kod:
cp /usr/share/pve-manager/ext4/pvemanagerlib.js /usr/share/pve-manager/ext4/pvemanagerlib.js.bak export test0="data.status !== 'Active'" cat /usr/share/pve-manager/ext4/pvemanagerlib.js | sed "s/${test0}/false/g" > /usr/share/pve-manager/ext4/pvemanagerlib.js.new mv /usr/share/pve-manager/ext4/pvemanagerlib.js.new /usr/share/pve-manager/ext4/pvemanagerlib.js
Klikamy:
Po stworzeniu wirtualnej maszyny klikamy na nią oraz wybieramy Console - maszyna nie jest jeszcze włączona. Po otworzeniu się nowego okienka w przeglądarce uruchomi się konsola, która wymaga Javy! Aplet Javy połączy się za pomocą przeglądarki (z naszego komputera) do maszyny fizycznej - i tu mała uwaga będzie się łączył na porty 5900-n - gdzie n to ilość otartych konsol na serwerze - te porty należy odblokować dla naszych IP, z których będziemy się łączyć. Po uruchomieniu się konsoli oraz apletu Javy należy kliknąć na Start.
Forwardować ruch możemy na dwa sposoby, za pomocą firewall'a - sekcja DNAT lub za pomocą Nginx'a w trybie revProxy - w przypadku ruchu HTTP.
Regułka dla firewalla:
iptables -t nat -A PREROUTING --dst $IPZEW -p tcp --dport $PORT_NA_IP_ZEW -j DNAT --to-destination $IPWEW_WIRTUALKI:$PORT_WIRTUALKI
Nginx - przykładowy Vhost:
server { listen 443; server_name vhostname.domain.ltd; ssl on; ssl_certificate cert.crt; ssl_certificate_key cert.key; ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP; ssl_prefer_server_ciphers on; location / { proxy_pass http://10.1.2.101:80; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
W przypadku Nginx'a należy najpierw zainstalować oraz odblokować porty, na których będzie nasłuchiwał:
aptitude install nginx
Przy przenoszeniu należy wyłączyć maszynę wirtualną, zarchiwizować plik RAW, który znajduje się w /var/lib/vz/images/101/vm-101-disk-1.raw ← gdzie 101 to ID maszyny z panelu Proxmoxa, archiwizacja:
tar czf /var/lib/vz/images/101/vm-101-disk-1.raw.tgz /var/lib/vz/images/101/vm-101-disk-1.raw
Po spakowaniu należy skopiować plik tgz na nowy serwer. Na nowym serwerze należy stworzyć wirtualną maszynę z uwzględnieniem ustawień maszyny na starym Proxmoksie, czyli:
Należy wypakować plik tgz i podmienić go z nowo stworzonym plikiem nowej wirtualki.