Linux-vserver-debian
Материал из Ksimute
Случилось тут мне одну задачку решать.
Дали сервер с голым Debian lenny. Задача - поднять 2 vps на linux vserver засетапить туда debian в одном поднять nginx во втором apach с nagios
запроксировать апаче через nginx. Зафаерволить все и построить мониторинг всей системы.
и чтобы при обращении к внешнему ip нагиос открывался :)
(это сделал через NAT но NAT неправильное решение. Меня не прет ниразу. Память кушает и память жестоко. Лучше сделать чтобы nginx слушал).
Вообщем смотртите step by step installation.
Может кому-нибудь пригодится :) :)
testme:~# aptitude install linux-image-vserver-686 util-vserver
Проверяем grub /boot/grub/menu.lst Проверяем наличие имиджа ядра расположенного в /boot
#reboot
Ядро правильное
testme:~# uname -a Linux testme 2.6.26-2-vserver-686 #1 SMP Wed Nov 4 22:32:30 UTC 2009 i686 GNU/Linux
Строим сервер
testme:~# vserver vs1 build -m debootstrap --context 11 --hostname vs1.testme.mydomain.com --interface eth0:192.168.1.1/24 -- -d lenny -m http://ftp.de.debian.org/debian
и Второй
testme:~# vserver vs2 build -m debootstrap --context 22 --hostname vs2.testme.mydomain.com --interface eth0:192.168.2.2/24 -- -d lenny -m http://ftp.de.debian.org/debian
Стартуем сервера
#vserver vs1 start #vserver vs2 start testme:~# vserver-stat CTX PROC VSZ RSS userTIME sysTIME UPTIME NAME 11 2 18.3M 1.1M 0m01s67 0m00s26 6m44s38 vs1 22 2 18.3M 1.1M 0m00s20 0m00s12 2m33s85 vs2
Прописываем старт vserver ов при загрузке
testme:~# echo default > /etc/vservers/vs1/apps/init/mark testme:~# echo default > /etc/vservers/vs1/apps/init/mark
входим, проверяем ставим nagios nginx apache
testme:~# aptitude install vserver-debiantools
Читаем про vapt-get http://flakey.info/linux/vservers-on-debian-linux.html
пустим vserver`а в интернет через nat (пакеты поставить)
testme:~# iptables -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to-source X.X.X.X testme:~# iptables -t nat -A POSTROUTING -s 192.168.2.2 -j SNAT --to-source X.X.X.X
testme:~# vapt-get vs1 -- install nginx testme:~# vapt-get vs2 -- install apache2
vs2:/# /etc/init.d/apache2 start
Проверяем testme:~# telnet 192.168.2.2 80
GET /index.html It works!
Конфигурируем nginx
#touch /etc/nagios/vs2.conf server { listen 192.168.1.1:80; server_name testme.mydomain.com www.testme.mydomain.com; location / { proxy_pass http://192.168.2.2:80/; proxy_redirect 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; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 190; proxy_send_timeout 190; proxy_read_timeout 190; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } # location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|avi|mpg|mpeg)$ { # root /var/www/static; # } }
проверяем создаем в www root vs2 файлик
#touch hello.txt #echo hello world! > hello.txt
testme:~# telnet 192.168.1.1 80 Trying 192.168.1.1... Connected to 192.168.1.1. Escape character is '^]'. GET /hello.txt hello world Connection closed by foreign host. testme:~#
Конфигурируем фаервол на vs1 и vs2 открываем только tcp трафик на 80 порт. И icmp траффик
Первые 2 правила нужны - открытые непривилегированные порты.
testme:~# iptables -I INPUT -s 0/0 -d 0/0 -p tcp --dport 1024:65535 -j ACCEPT testme:~# iptables -I INPUT -s 0/0 -d 0/0 -p udp --dport 1024:65535 -j ACCEPT
testme:~# iptables -I INPUT -s 0/0 -d 192.168.1.1/32 -p tcp --dport 80 -j ACCEPT testme:~# iptables -I INPUT -s 0/0 -d 192.168.2.2/32 -p tcp --dport 80 -j ACCEPT testme:~# iptables -I INPUT -s 0/0 -d 192.168.2.2/32 -p icmp -j ACCEPT testme:~# iptables -I INPUT -s 0/0 -d 192.168.1.1/32 -p icmp -j ACCEPT testme:~# iptables -A INPUT -s 0/0 -d 192.168.1.1/32 -j DROP testme:~# iptables -A INPUT -s 0/0 -d 192.168.2.2/32 -j DROP
Прикрываем 82.103.134.17 открываем только 22 порт для ssh
testme:~# iptables -I INPUT -s 0/0 -d X.X.X.X -p tcp --dport 22 -j ACCEPT testme:~# iptables -I INPUT -s 0/0 -d X.X.X.X -p icmp -j ACCEPT testme:~# iptables -A INPUT -s 0/0 -d X.X.X.X/32 -j DROP
Ставим nagios
testme:~# vapt-get vs2 -- install nagios3
Прописываем testme.mydomain.com в /etc/hosts (чтобы по доменному имени проверять сервисы) т.к. DNS резолвит testme.mydomain.com как X.X.X.X
Создаем файл с акаунтами/паролями для nagios
vs2:/etc/nagios3# htpasswd -c htpasswd.users nagiosadmin
создаем /etc/nagios3/conf/hosts.cfg
vs2:/etc/nagios3/conf.d# cat hosts.cfg
define host { host_name testme.mydomain.com alias testme.mydomain.com address testme.mydomain.com use generic-host } define host { host_name vs1 alias vs1 address 192.168.1.1 use generic-host } define host { host_name vs2 alias vs2 address 192.168.2.2 use generic-host } define host { host_name base alias base address X.X.X.X use generic-host }
Добавляем в необходимые группы
vs2:/etc/nagios3/conf.d# cat hostgroups_nagios2.cfg # Some generic hostgroup definitions # A simple wildcard hostgroup define hostgroup { hostgroup_name all alias All Servers members * } # A list of your Debian GNU/Linux servers define hostgroup { hostgroup_name debian-servers alias Debian GNU/Linux Servers members localhost } # A list of your web servers define hostgroup { hostgroup_name http-servers alias HTTP servers members localhost,testme.mydomain.com,vs1 } # A list of your ssh-accessible servers define hostgroup { hostgroup_name ssh-servers alias SSH servers members localhost,base } # nagios doesn't like monitoring hosts without services, so this is # a group for devices that have no other "services" monitorable # (like routers w/out snmp for example) define hostgroup { hostgroup_name ping-servers alias Pingable servers members gateway,testme.mydomain.com,vs1,vs2,base }
Релоадим /etc/init.d/nagios3 reload
Ждем пока PENDING пройдет,Проверяем
vs2:/etc/nagios3# links http://192.168.2.2/nagios3/
Получаем мониторинг ssh на базовом хосте, ping базового и vs серверов мониторинг http на обоих vs серверах на vs2 мониторим как testme.mydomain.com (по имени)
Для доступа из интернет делаем NAT на PREROUTING
testme:~# iptables -t nat -A PREROUTING -s 0/0 -d X.X.X.X/32 -p tcp --dport 80 -j DNAT --to 192.168.1.1:80
Вроде все.
Eсли понадобится в vserver примонтировать диск
#vnamespace --enter dw1-1 -- mount /dev/sdb1 /var/lib/vservers/dw1-1/mnt/sdb1 # df /mnt/sdb1 Filesystem 1K-blocks Used Available Use% Mounted on - 240292420 191768 227894468 1% /mnt/sdb1
Ссылки по теме