суббота, 6 февраля 2010 г.

Устанавливаем OpenVZ на Debian 5 lennty (часть №2)

Теперь можно создать виртуальные машины - все вроде просто, но есть 2 важных вопроса: доступ виртуальной машины в сеть и nameserver для вашей виртуальной машины.

Для решения первого вопроса я использую ferm - замечательная надстройка над iptables, для установки необходимо выполнить следующую команду, а так же ответить положительно на вопрос о включении блокировки всего за исключением ssh.

  1. apt-get install ferm

Собственно теперь самая ответственная и важная часть - это написание правил для ferm. Сначала нужно определиться с поставленной задачей чего мы хотим от виртуального компьютера: а мы хотим на 92.168.11.107 видеть http и ssh сервер, реальный компьютер будет содержать собственный nameserver, а все виртуальные будут его использовать для получения ip адреса по DNS имени сервера (к этому мы вернемся гораздо позднее). Вот пример такой конфигурации:

  1. def $INTRUDER = 192.168.11.107;
  2.  
  3. table filter {
  4.     chain INPUT {
  5.         policy DROP;
  6.  
  7.         # connection tracking
  8.         mod state state INVALID DROP;
  9.         mod state state (ESTABLISHED RELATED) ACCEPT;
  10.  
  11.         # allow local packages
  12.         interface lo ACCEPT;
  13.  
  14.         # allow SSH connections
  15.         proto tcp dport ssh ACCEPT;
  16.  
  17.         ### access from virtual computer to local nameserver
  18.         interface venet0 proto (tcp udp) dport 53 ACCEPT;
  19.     }
  20.     chain OUTPUT {
  21.         policy ACCEPT;
  22.  
  23.         # connection tracking
  24.         #mod state state INVALID DROP;
  25.         mod state state (ESTABLISHED RELATED) ACCEPT;
  26.     }
  27.     chain FORWARD {
  28.         policy DROP;
  29.  
  30.         # connection tracking
  31.         mod state state INVALID DROP;
  32.         mod state state (ESTABLISHED RELATED) ACCEPT;
  33.  
  34.         ### access from virtual computer to internet
  35.         interface venet0 outerface eth0 ACCEPT;
  36.  
  37.         ### access from internet to specific virtual ports
  38.         outerface venet0 daddr $INTRUDER proto tcp dport (ssh http) ACCEPT;
  39.     }
  40. }
  41.  

Перезапускаем ferm:

  1. /etc/init.d/ferm restart

Не забываем добавить строчку в /etc/sysctl.conf:

  1. net.ipv4.ip_forward=1

И запускаем команду:

  1. sysctl -p

Создаем собственно виртуальную машину (обратите внимание, что в качестве nameserver мы временно используем 192.168.11.1, в принципе подойдет любой nameserver в том числе и 8.8.8.8 от Google), запускаем и наконец заходим на нее под правами администратора:

  1. vzctl create 101 --ostemplate debian-5.0-i386-minimal
  2. vzctl set 101 --onboot yes --save
  3. vzctl set 101 --hostname intruder --save
  4. vzctl set 101 --nameserver 192.168.11.1 --save
  5. vzctl set 101 --ipadd 192.168.11.101 --save
  6. vzctl start 101
  7. vzctl enter 101
  8. su -

На этом этапе наш виртуальный компьютер должен без нареканий выполнять команду:

  1. arp yandex.ru