Proxmox firewall не работает
Proxmox Virtual Environment (Proxmox VE) - система виртуализации с открытым исходным кодом на базе Debian, использующая в качестве гипервизора KVM для виртуальных машин и LXC для контейнеров. Это позволяет запускать в виртуальной среде Linux-системы без потери производительности и остальные, поддерживаемые KVM ОС с минимальными потерями. Кроме того, Proxmox VE позволяет создавать высокодоступные конфигурации с несколькими серверами и распределенными системами хранения.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Для установки используется собственный инсталлятор и весь процесс предельно прост, от вас потребуется указать конфигурацию дисковой подсистемы:
А также пароль суперпользователя, настройки сети, страну и часовой пояс. Потом останется только откинуться в кресле и немного подождать, пока система установится на ваш компьютер. По завершении процесса установки вас встретит приглашение входа в систему, над которым будет указан адрес, который следует набрать в браузере для доступа к консоли управления.
Но не будем спешить. Прежде всего отключим корпоративный репозиторий, на который у нас все равно нет подписки, и подключим вместо него некоммерческий репозиторий Proxmox. Для отключения просто удалим файл репозитория из источников apt:
Затем создадим свой список:
В который внесем следующие строки:
Теперь можно переходить к консоли управления, откроем браузер и наберем предложенный адрес, консоль управления продуктами Proxmox работает на порту 8006, что следует помнить.
Структура Proxmox VE иерархична, высший уровень составляет Датацентр, здесь есть настройки, применяемые сразу ко всем узлам, например, управление пользователями или хранилищами, настройки резервного копирования и т.д.
Следующий уровень - настройки узла, здесь доступна подробная статистика и большое количество настроек, которые относятся именно к этому серверу. Мы не будем останавливаться на них подробно, для администратора с достаточным уровнем подготовки разобраться с ними не составит труда.
Но есть и "сложности перевода", так в разделе Обновления, нас ждут две одинаковые кнопки Обновить.
В английской версии это были Update и Upgrade, а вот здесь перевели как перевели. Первая из них запускает обновление списка пакетов, а вторая запускает само обновление, открывая в отдельном окне консоль сервера.
Если вам нужно просто попасть в консоль сервера, можно нажать кнопку Оболочка и перед вами в отдельном окне браузера откроется noVNC-сессия, при этом не требуется ни Flash, ни Java, что позволяет подключаться как к серверу, так и к виртуальным машинам с любого устройства, был бы браузер.
Перед тем, как создавать виртуальные машины и контейнеры, обратимся к Хранилищам, по умолчанию создается два хранилища: local и local-lvm.
Первое предназначено для хранения ISO-образов и шаблонов контейнеров, а во втором хранятся сами виртуальные машины. Поэтому перед тем, как создать виртуальную машину или контейнер, нам нужно загрузить в хранилище нужный образ диска или шаблон. С образами все просто, нажимаем кнопку Загрузить и указываем нужный нам ISO-образ.
Для получения шаблонов следует нажать кнопку Шаблоны и мы попадем в официальное хранилище шаблонов, здесь мы может сразу загрузить шаблон другого продукта Proxmox - Mail Gateway или шаблоны стандартных Linux-систем.
Чтобы загрузить выбранный шаблон достаточно нажать кнопку Загрузка внизу окна.
Для создания виртуальной машины нажмем Создать VM. На первом экране укажем имя виртуальной машины:
Затем укажем тип и версию гостевой ОС и подключим нужный образ из хранилища.
После чего, последовательно перемещаясь по пунктам следует настроить все остальные параметры виртуалки, особых сложностей это составить не должно. Но создав виртуальную машину не спешите ее запускать. Прежде всего перейдем в раздел Оборудование. Здесь можно не только настроить уже подключенное оборудование, но и добавить новое. В отличие от Hyper-V, Proxmoх позволяет пробрасывать внутрь виртуальных машин USB-устройства, что может быть полезным, если вам нужно работать с ключами защиты или USB-токенами.
Также не забудьте заглянуть в Параметры, где стоит включить Запуск при загрузке и Агент QEMU. И если с первым пунктом все понятно, то Агент позволяет управлять системой со стороны гипервизора, без него вы, например, не сможете сделать резервную копию без остановки работы машины.
Итак, все настройки закончены, включаем виртуальную машину и переключаемся в консоль. Да, прямо в браузере вы увидите экран вашей виртуалки, при этом ничего не тормозит, работать с системой достаточно комфортно.
Пока идет установка системы создадим еще новый контейнер, для этого следует нажать кнопку Создать CT в правом верхнем углу консоли управления. В качестве контейнеров могут быть только Linux-системы, на первом экране укажите имя контейнера и задайте пароль root или загрузите публичный SSH-ключ.
Затем укажите шаблон и следующими шагами сконфигурируйте виртуальное железо.
Доступных настроек у контейнеров гораздо меньше, зато они гораздо более экономно расходуют ресурсы.
Обратите внимание, что запущенный контейнер с Debian 10 потребляет всего лишь 55,46 МБ оперативной памяти.
Для других дистрибутивов следует установить пакет qemu-guest-agent штатным пакетным менеджером.
С Windows все несколько сложнее, прежде всего скачаем и поместим в хранилище Proxmox ISO-образ с virtIO драйверами. Получить его можно со страницы Fedora Project. Затем подключим скачанный образ к виртуальной машине.
При включенном QEMU-агенте мы увидим три неустановленных устройства.
Начнем с последнего, для Драйвера прерываний кнопок HID перейдем в выбор из списка уже установленных драйверов и укажем драйвер Универсальной шины.
Для двух оставшихся выполним поиск драйверов на смонтированном диске и устанавливаем драйвер VirtIO Serial Driver, который отвечает за работу QEMU-агента:
Также вы можете теперь включить для виртуальной машины динамическую память, для этого установите флаг Раздувание памяти и укажите минимальный размер оперативки, с которой начнет работу виртуалка:
Но придерживайтесь при этом разумных пределов, так вы можете столкнуться с невозможностью запустить современные версии Windows если укажете минимальный размер памяти менее 1 ГБ.
Еще одна важная функция, которая доступна в Proxmox VE - это резервное копирование. Существует хорошая практика - хранить резервные копии за пределами хоста. Поэтому подключим к Proxmox сетевое хранилище, для этого перейдем в Датацентр - Хранилище. Выбор здесь достаточно богатый: iSCSI, NFS, CIFS и прочее.
В нашем случае мы подключим CIFS (SMB) хранилище.
Укажите имя хранилища, в нашем случае backup, его IP-адрес или FQDN-имя, доступные ресурсы будут просканированы автоматически и вам останется только выбрать их из списка, в поле Содержимое укажите Резервная копия , а также не забудьте указать максимальное количество резервных копий в хранилище.
Затем перейдем в раздел Резервная копия и создадим новый сценарий резервного копирования:
Особых сложностей там нет, выбираете нужные виртуальные машины или контейнеры и задаете расписание копирования. После чего вам только останется проверить, что резервные копии действительно создаются.
Как видим, Proxmox представляет собой вполне серьезный и самодостаточный продукт, способный стать основой вашей системы виртуализации, предоставляя возможности на уровне дорогих коммерческих гипервизоров.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an alternative browser.
Mukesh
New Member
Hi Guys, I am using Proxmox 5.4. For one of my VM I have configured firewall rule to block all IP except IPs configured in IPSet. From few days my firewall stopped working. I haven't done any changes but I am not sure if any other team member by mistake did some changes. Could anyone point me what and where to check? Thanks in advance..
Mukesh
New Member
Moayad
Proxmox Staff Member
Glad you found the issue!
Please mark the thread as [SOLVED]
Best regards,
Moayad
Do you already have a Commercial Support Subscription? - If not, Buy now and read the documentation
Abergr
Member
I would like to report that I too had this issue. Also resolved it by restarting the firewall. Easy fix, but quite a serious issue when you believe you Cluster/Nodes/VMs/containers are protected with firewall, and you by incident reports noticed that this is not the case. Thank you Mukesh for linking and reporting, was looking everywhere for a solution..
Renowned Member
elamigosam
New Member
I am having the same issue, new proxmox 7.0
On the VM/firewall, i make a change to a policy and it get implemented,
but then the next change I make does not get implemented.
I restart the service with
and the issue persists.
I have to disable and enable the firewall option under VM/Hardware/Network Device/firewall
after that the most recent changes get enabled, and sometimes that doesnt even work, it take about a min or two for changes to take effect.
jeanlau
Active Member
Hello
I also try for the first time the firewall fonction in Proxmox, until now I was making iptables scripts.
Well it seems to work as expected for the node and even for LXC Container but no luck for Qemu VM. I tried to restart the services, the tested guests and even the full host but no success.
It's not a huge deal as I have my iptables script that works very well but there's a nice graphical interface and I think it's too bad to not enjoying it !
I'm on the last version PVE 7.1-8
Возможности межсетевого экрана в Proxmox VE обеспечивают исключительное средство усиления безопасности в пределах виртуальной среды. Межсетевой экран строится на основе твердо установившейся технологии сетевой фильтрации ( netfilter ) на основе Linux. Сетевая фильтрация основывается на инфраструктуре фильтрации пакетов, в которой сетевые пакеты данных допускаются или отвергаются на основании множества установленных правил. Все правила определяются в табличных структурах в iptables .
Свойством межсетевого экрана в Proxmox также является отслеживание состояния в брандмауэре. Межсетевой экран с отслеживанием состояния не только фильтрует пакеты, но также постоянно поддерживает отслеживание состояние активных соединений, таких как протоколы TCP или UDP. Он также известен возможностью динамической фильтрации пакетов, которая проверяет соответствие правилам брандмауэра в характере активных соединений, обеспечивая лучшую защиту, чем простая фильтрация пакетов.
Межсетевой экран Proxmox работает распределенным образом, причем основные настройки расположены в файловой системе кластера Proxmox, в то время как правила в iptables хранятся индивидуально в узлах Proxmox. Это обеспечивает изоляцию между виртуальными машинами, тем самым предоставляя большую пропускную способность чем в случае с централизованными параметрами межсетевого экрана.
Межсетевой экран Proxmox может быть настроен как посредством графического интерфейса Proxmox, так и через интерфейс командной строки. Графический интерфейс Proxmox предоставляет очень простую, дружественную пользователю среду для управления настройками брандмауэра.
Отметим, что хотя межсетевой экран Proxmox и обеспечивает исключительную защиту, вы должны иметь физический межсетевой экран для всей сети. Такой брандмауэр также называется межсетевым экраном контура ( edge firewall ), поскольку он располагается в основной входной точке интернета. Интернет- соединение не должно напрямую соединяться с узлами Proxmox. Виртуальный межсетевой экран не должен применяться в качестве замены физического межсетевого экрана.
В Proxmox мы можем установить межсетевой экран для всего уровня кластера, для уровней определенных узлов, а также для каждой виртуальной машины. Меню межсетевого экрана доступно для центра данных, узла, а также для зависимых от виртуальных машин закладок меню. Зарегистрируйтесь в графическом интерфейсе Proxmox, затем выберите в левой колонке навигации элемент, например, Datacenter , узел Proxmox или виртуальную машину, для отображения меню с закладками. Следующий экранный снимок показывает меню Firewall для Datacenter :
Для настройки межсетевого экрана в интерфейсе командной строки существуют некоторые файлы настроек подлежащие редактированию. Вот местоположения для файлов настроек межсетевого экрана для установок брандмауэра центра данных, узла и виртуальных машин:
За последние несколько лет я очень тесно работаю с кластерами Proxmox: многим клиентам требуется своя собственная инфраструктура, где они могут развивать свой проект. Именно поэтому я могу рассказать про самые распространенные ошибки и проблемы, с которыми также можете столкнуться и вы. Помимо этого мы конечно же настроим кластер из трех нод с нуля.
Proxmox кластер может состоять из двух и более серверов. Максимальное количество нод в кластере равняется 32 штукам. Наш собственный кластер будет состоять из трех нод на мультикасте (в статье я также опишу, как поднять кластер на уникасте — это важно, если вы базируете свою кластерную инфраструктуру на Hetzner или OVH, например). Коротко говоря, мультикаст позволяет осуществлять передачу данных одновременно на несколько нод. При мультикасте мы можем не задумываться о количестве нод в кластере (ориентируясь на ограничения выше).
Сам кластер строится на внутренней сети (важно, чтобы IP адреса были в одной подсети), у тех же Hetzner и OVH есть возможность объединять в кластер ноды в разных датацентрах с помощью технологии Virtual Switch (Hetzner) и vRack (OVH) — о Virtual Switch мы также поговорим в статье. Если ваш хостинг-провайдер не имеет похожие технологии в работе, то вы можете использовать OVS (Open Virtual Switch), которая нативно поддерживается Proxmox, или использовать VPN. Однако, я рекомендую в данном случае использовать именно юникаст с небольшим количеством нод — часто возникают ситуации, где кластер просто “разваливается” на основе такой сетевой инфраструктуры и его приходится восстанавливать. Поэтому я стараюсь использовать именно OVH и Hetzner в работе — подобных инцидентов наблюдал в меньшем количестве, но в первую очередь изучайте хостинг-провайдера, у которого будете размещаться: есть ли у него альтернативная технология, какие решения он предлагает, поддерживает ли мультикаст и так далее.
Interfaces
The network interfaces on the server need to be defined and assigned to a specific zone. The net zone will be assigned to the eth0 network interface and will designate all traffic coming from or going to the internet. The dmz zone will be the internal zone for the virtual network, which will contain the virtual servers that either use venet or veth network interfaces.
Create the /etc/shorewall/interfaces file and add the following:
Особенности сетевых настроек на Hetzner
Переходим в панель Robot и нажимаем на кнопку “Virtual Switches”. На следующей странице вы увидите панель создания и управления интерфейсов Virtual Switch: для начала его необходимо создать, а после “подключить” выделенные сервера к нему. В поиске добавляем необходимые сервера для подключения — их не не нужно перезагружать, только придется подождать до 10-15 минут, когда подключение к Virtual Switch будет активно.
После добавления серверов в Virtual Switch через веб-панель подключаемся к серверам и открываем конфигурационные файлы сетевых интерфейсов, где создаем новый сетевой интерфейс:
Давайте разберем подробнее, что это такое. По своей сути — это VLAN, который подключается к единственному физическому интерфейсу под названием enp4s0 (он у вас может отличаться), с указанием номера VLAN — это номер Virtual Switch’a, который вы создавали в веб-панели Hetzner Robot. Адрес можете указать любой, главное, чтобы он был локальный.
Отмечу, что конфигурировать enp4s0 следует как обычно, по сути он должен содержать внешний IP адрес, который был выдан вашему физическому серверу. Повторите данные шаги на других гипервизорах, после чего перезагрузите на них networking сервис, сделайте пинг до соседней ноды по IP адресу Virtual Switch. Если пинг прошел успешно, то вы успешно установили соединение между серверами по Virtual Switch.
Я также приложу конфигурационный файл sysctl.conf, он понадобится, если у вас будут проблемы с форвардингом пакетом и прочими сетевыми параметрами:
Добавление IPv4 подсети в Hetzner
Перед началом работ вам необходимо заказать подсеть в Hetzner, сделать это можно через панель Robot.
Создадим сетевой мост с адресом, который будет из этой подсети. Пример конфигурации:
Теперь переходим в настройки виртуальной машины в Proxmox и создаем новый сетевой интерфейс, который будет прикреплен к мосту vmbr2. Я использую LXC контейнер, его конфигурацию можно изменять сразу же в Proxmox. Итоговая конфигурация для Debian:
Обратите внимание: я указал 26 маску, а не 29 — это требуется для того, чтобы сеть на виртуальной машине работала.
Добавление IPv4 адреса в Hetzner
Ситуация с одиночным IP адресом отличается — обычно Hetzner дает нам дополнительный адрес из подсети сервера. Это означает, что вместо vmbr2 нам требуется использоваться vmbr0, но на данный момент его у нас нет. Суть в том, что vmbr0 должен содержать IP адрес железного сервера (то есть использовать тот адрес, который использовал физический сетевой интерфейс enp2s0). Адрес необходимо переместить на vmbr0, для этого подойдет следующая конфигурация (советую заказать KVM, чтобы в случае чего возобновить работу сети):
Перезапустите сервер, если это возможно (если нет, перезапустите сервис networking), после чего проверьте сетевые интерфейсы через ip a:
Как здесь видно, enp2s0 подключен к vmbr0 и не имеет IP адрес, так как он был переназначен на vmbr0.
Теперь в настройках виртуальной машины добавляем сетевой интерфейс, который будет подключен к vmbr0. В качестве gateway укажите адрес, прикрепленный к vmbr0.
Basic Rules
The policy defined earlier will deny any traffic coming from the internet to the firewall, which will include the SSH service and the Proxmox web-based manager. Since this is undesirable, a few rules need to be created that override this base policy.
Create the /etc/shorewall/rules file:
As you may notice, there is also an additional rule for ping. For testing purposes, it would be wise to permit a ping from and to any of your zone, including the internet.
The SSH/ACCEPT rule is in fact a macro that comes with Shorewall. You could also define the same rule as following:
Also, at the very end of the SSH rule you notice “6/min:5”. This specifies the connection rate and in this case it reduces the connection rate to 6 per minute (1 per 10 seconds) with a maximum initial burst of 5. It is added here to slow down brute force SSH attacks.
Additonal Notes
This guide is only intended to provide basic protection for your virtual servers and the Proxmox host node. No guarantees or warranties are implied, and you should always remain vigilant against potential network intrusions (in other words: do not rely on a firewall alone).
You may also wish to configure Shorewall according to your particular needs. For example, in this guide virtual servers are permitted to connect to each other within the dmz zone and could pose a risk. You may wish to shield the virtual servers from each other in case one of them has been compromised (hint: edit the policy).
The Shorewall website includes numerous examples in its documentation that may help you further.
В завершении
Надеюсь, что данная статья пригодится вам, когда вы будете настраивать Proxmox кластер в Hetzner. Если позволит время, то я расширю статью и добавлю инструкцию для OVH — там тоже не все очевидно, как кажется на первый взгляд. Материал получился достаточно объемным, если найдете ошибки, то, пожалуйста, напишите в комментарии, я их исправлю. Всем спасибо за уделенное внимание.
Автор: Илья Андреев, под редакцией Алексея Жадан и команды «Лайв Линукс»
By default Proxmox does not come with a firewall, which may leave it and your virtual servers exposed to the elements of the Internet.
An additional issue arises when a hosting provider blocks servers if unauthorized MAC addresses are detected. As Proxmox’s bridged network creates and exposes MAC addresses for its virtual network interfaces, this may cause your server to be blocked from the hosting provider’s network.
To combat both this article will describe how to create your own virtual network with firewall protection using Shorewall, a popular and effective firewall / router software package.
We will be creating three separate zones, namely:
- The Internet (“net”);
- The firewall / Proxmox Host Node (“fw”); and
- The virtual network (“dmz”)
All traffic from the Internet is filtered or blocked by the firewall, after which it is routed to its final destination on the virtual network or the Proxmox Host Node itself. A visual representation of this can be seen in the figure 1.
Some modifications are required to your host network configuration, particularly the default vmbr0 network interface. We will turn it into a blind bridge (without any bride ports) and assign it an IP address within the private IP range of 10.0.0.0/8 (A-Class).
Репликация инстансов на соседний гипервизор
В кластере Proxmox есть возможность репликации данных с одного гипервизора на другой: данный вариант позволяет осуществлять переключение инстанса с одного сервера на другой. Данные будут актуальны на момент последней синхронизации — ее время можно выставить при создании репликации (стандартно ставится 15 минут). Существует два способа миграции инстанса на другую ноду Proxmox: ручной и автоматический. Давайте рассмотрим в первую очередь ручной вариант, а в конце я предоставлю вам Python скрипт, который позволит создавать виртуальную машину на доступном гипервизоре при недоступности одного из гипервизоров.
Для создания репликации необходимо перейти в веб-панель Proxmox и создать виртуальную машину или LXC контейнер. В предыдущих пунктах мы с вами настроили vmbr1 мост с NAT, что позволит нам выходить во внешнюю сеть. Я создам LXC контейнер с MySQL, Nginx и PHP-FPM с тестовым сайтом, чтобы проверить работу репликации. Ниже будет пошаговая инструкция.
Загружаем подходящий темплейт (переходим в storage —> Content —> Templates), пример на скриншоте:
Изображение 10. Local storage с шаблонами и образами ВМ
Нажимаем кнопку “Templates” и загружаем необходимый нам шаблон LXC контейнера:
Изображение 11. Выбор и загрузка шаблона
Теперь мы можем использовать его при создании новых LXC контейнеров. Выбираем первый гипервизор и нажимаем кнопку “Create CT” в правом верхнем углу: мы увидим панель создания нового инстанса. Этапы установки достаточно просты и я приведу лишь конфигурационный файл данного LXC контейнера:
Контейнер успешно создан. К LXC контейнерам можно подключаться через команду pct enter , я также перед установкой добавил SSH ключ гипервизора, чтобы подключаться напрямую через SSH (в PCT есть небольшие проблемы с отображением терминала). Я подготовил сервер и установил туда все необходимые серверные приложения, теперь можно перейти к созданию репликации.
Кликаем на LXC контейнер и переходим во вкладку “Replication”, где создаем параметр репликации с помощью кнопки “Add”:
Изображение 12. Создание репликации в интерфейсе Proxmox
Изображение 13. Окно создания Replication job
Я создал задачу реплицировать контейнер на вторую ноду, как видно на следующем скриншоте репликация прошла успешно — обращайте внимание на поле “Status”, она оповещает о статусе репликации, также стоит обращать внимание на поле “Duration”, чтобы знать, сколько длится репликация данных.
Изображение 14. Список синхронизаций ВМ
Теперь попробуем смигрировать машину на вторую ноду с помощью кнопки “Migrate”
Начнется миграция контейнера, лог можно просмотреть в списке задач — там будет наша миграция. После этого контейнер будет перемещен на вторую ноду.
Ошибка “Host Key Verification Failed”
Иногда при настройке кластера может возникать подобная проблема — она мешает мигрировать машины и создавать репликацию, что нивелирует преимущества кластерных решений. Для исправления этой ошибки удалите файл known_hosts и подключитесь по SSH к конфликтной ноде:
Примите Hostkey и попробуйте ввести эту команду, она должна подключить вас к серверу:
Enable IP Forwarding
First, a minor modification to the Shorewall application configuration is made to enable IP forwarding. This will permit some functions that will be discussed later.
Edit /etc/shorewall/shorewall.conf and change the following value from:
Enable the maclist
First the maclist option needs to be enabled for the interface we will monitor MAC / IP relations on. Your /etc/shorewall/interfaces may currently look like this:
We will add the maclist option to vmbr0 in the dmz zone, ending up with:
IP Assignment
To further separate the internet and virtual servers as distinct areas, each virtual server will be assigned an IP address in the 10.0.0.0/8 range (10.0.0.1–10.255.255.254).
The exception is that one can no longer use 10.254.254.254 as this has been assigned to the vmbr0 network interface earlier in this guide.
Zones
The fw zone is a self-reference to the server on which Shorewall is running. Note that this will not include the Proxmox virtual servers; you have to consider this as an entirely separate server in this sense.
Incoming internet traffic
Установка Proxmox
Proxmox может быть установлен двумя способами: ISO-инсталлятор и установка через shell. Мы выбираем второй способ, поэтому установите Debian на сервер.
Перейдем непосредственно к установке Proxmox на каждый сервер. Установка предельно простая и описана в официальной документации здесь.
Добавим репозиторий Proxmox и ключ этого репозитория:
Обновляем репозитории и саму систему:
После успешного обновления установим необходимые пакеты Proxmox:
Заметка: во время установки будет настраиваться Postfix и grub — одна из них может завершиться с ошибкой. Возможно, это будет вызвано тем, что хостнейм не резолвится по имени. Отредактируйте hosts записи и выполните apt-get update
Изображение 1. Веб-интерфейс ноды Proxmox
Testing Configuration
After creating the files, your /etc/shorewall/ directory might look similar to:
Before using the configuration you will want to test it first, particularly to make sure you are not blocking SSH access. Issue the following command:
shorewall try /etc/shorewall 60
The parameter 60 refers to 60 seconds. Shorewall will use the configuration located in /etc/shorewall/ for 60 seconds and then reverts to the previous settings (or no firewall).
After issuing the command, establish a new connection to your server using SSH and check whether your Proxmox web-based manager is accessible. If you are receiving error messages from Shorewall or you are unable to access SSH during the 60-second test period, please verify the configuration and try again.
Установка Proxmox
Proxmox может быть установлен двумя способами: ISO-инсталлятор и установка через shell. Мы выбираем второй способ, поэтому установите Debian на сервер.
Перейдем непосредственно к установке Proxmox на каждый сервер. Установка предельно простая и описана в официальной документации здесь.
Добавим репозиторий Proxmox и ключ этого репозитория:
Обновляем репозитории и саму систему:
После успешного обновления установим необходимые пакеты Proxmox:
Заметка: во время установки будет настраиваться Postfix и grub — одна из них может завершиться с ошибкой. Возможно, это будет вызвано тем, что хостнейм не резолвится по имени. Отредактируйте hosts записи и выполните apt-get update
Изображение 1. Веб-интерфейс ноды Proxmox
Determine the current network configuration
Before we do this, we need to determine the current network configuration because this can be different depending on the hosting provider and other factors. Assuming that eth0 is the network interface that connects the server to the Internet, we issue the following command:
This will give an output similar to:
It gives us the current IP address, broadcast address and netmask used by eth0. One last piece of information we need is the gateway used by eth0, which is obtained with the follwing command:
You will see an output similar to:
The first column of 0.0.0.0 designates the default route (any traffic that has no specific route), and the second column the gateway. Now that we have obtained all this information, we can edit the /etc/network/interfaces file.
First we need to verify that eth0 has already been defined within this file. It will look similar to:
Where the IPs match those you have obtained by use of the ifconfig and route commands.
Or if your server uses DHCP to assign the IP address then it will look similar to:
If either is the case, you can skip the follow section and continue to change the vmbr0 network interface.
Установка Nginx и Let’s Encrypt сертификата
Мне не очень нравится ситуация с сертификатом и IP адресом, поэтому я предлагаю установить Nginx и настроить Let’s Encrypt сертификат. Установку Nginx описывать не буду, оставлю лишь важные файлы для работы Let’s encrypt сертификата:
Команда для выпуска SSL сертификата:
Не забываем после установки SSL сертификата поставить его на автообновление через cron:
Заметка: чтобы отключить информационное окно о подписке, выполните данную команду:
Сетевые настройки
Перед подключением в кластер настроим сетевые интерфейсы на гипервизоре. Стоит отметить, что настройка остальных нод ничем не отличается, кроме IP адресов и названия серверов, поэтому дублировать их настройку я не буду.
Создадим сетевой мост для внутренней сети, чтобы наши виртуальные машины (в моем варианте будет LXC контейнер для удобства) во-первых, были подключены к внутренней сети гипервизора и могли взаимодействовать друг с другом. Во-вторых, чуть позже мы добавим мост для внешней сети, чтобы виртуальные машины имели свой внешний IP адрес. Соответственно, контейнеры будут на данный момент за NAT’ом у нас.
Работать с сетевой конфигурацией Proxmox можно двумя способами: через веб-интерфейс или через конфигурационный файл /etc/network/interfaces. В первом варианте вам потребуется перезагрузка сервера (или можно просто переименовать файл interfaces.new в interfaces и сделать перезапуск networking сервиса через systemd). Если вы только начинаете настройку и еще нет виртуальных машин или LXC контейнеров, то желательно перезапускать гипервизор после изменений.
Теперь создадим сетевой мост под названием vmbr1 во вкладке network в веб-панели Proxmox.
Изображение 2. Сетевые интерфейсы ноды proxmox1
Изображение 3. Создание сетевого моста
Изображение 4. Настройка сетевой конфигурации vmbr1
Настройка предельно простая — vmbr1 нам нужен для того, чтобы инстансы получали доступ в Интернет.
Теперь перезапускаем наш гипервизор и проверяем, создался ли интерфейс:
Изображение 5. Сетевой интерфейс vmbr1 в выводе команды ip a
Заметьте: у меня уже есть интерфейс ens19 — это интерфейс с внутренней сетью, на основе ее будет создан кластер.
Повторите данные этапы на остальных двух гипервизорах, после чего приступите к следующему шагу — подготовке кластера.
Также важный этап сейчас заключается во включении форвардинга пакетов — без нее инстансы не будут получать доступ к внешней сети. Открываем файл sysctl.conf и изменяем значение параметра net.ipv4.ip_forward на 1, после чего вводим следующую команду:
В выводе вы должны увидеть директиву net.ipv4.ip_forward (если не меняли ее до этого)
Настройка Proxmox кластера
Теперь перейдем непосредственно к кластеру. Каждая нода должна резолвить себя и другие ноды по внутренней сети, для этого требуется изменить значения в hosts записях следующих образом (на каждой ноде должна быть запись о других):
Также требуется добавить публичные ключи каждой ноды к остальным — это требуется для создания кластера.
Создадим кластер через веб-панель:
Изображение 6. Создание кластера через веб-интерфейс
После создания кластера нам необходимо получить информацию о нем. Переходим в ту же вкладку кластера и нажимаем кнопку “Join Information”:
Изображение 7. Информация о созданном кластере
Данная информация пригодится нам во время присоединения второй и третьей ноды в кластер. Подключаемся к второй ноде и во вкладке Cluster нажимаем кнопку “Join Cluster”:
Изображение 8. Подключение к кластеру ноды
Разберем подробнее параметры для подключения:
- Peer Address: IP адрес первого сервера (к тому, к которому мы подключаемся)
- Password: пароль первого сервера
- Fingerprint: данное значение мы получаем из информации о кластере
Вторая нода успешно подключена! Однако, такое бывает не всегда. Если вы неправильно выполните шаги или возникнут сетевые проблемы, то присоединение в кластер будет провалено, а сам кластер будет “развален”. Лучшее решение — это отсоединить ноду от кластера, удалить на ней всю информацию о самом кластере, после чего сделать перезапуск сервера и проверить предыдущие шаги. Как же безопасно отключить ноду из кластера? Для начала удалим ее из кластера на первом сервере:
После чего нода будет отсоединена от кластера. Теперь переходим на сломанную ноду и отключаем на ней следующие сервисы:
Proxmox кластер хранит информацию о себе в sqlite базе, ее также необходимо очистить:
Данные о коросинке успешно удалены. Удалим оставшиеся файлы, для этого необходимо запустить кластерную файловую систему в standalone режиме:
Перезапускаем сервер (это необязательно, но перестрахуемся: все сервисы по итогу должны быть запущены и работать корректно. Чтобы ничего не упустить делаем перезапуск). После включения мы получим пустую ноду без какой-либо информации о предыдущем кластере и можем начать подключение вновь.
Bridged Networking
The venet network interface is certainly the simplest method to use in Proxmox. However, venet is not available in KVM (fully virtualized servers) and there may be another reason why you might want to use the veth network interfaces with regular containers (such as the use of DHCP).
For this reason the vmbr0 network interface on the host was reconfigured to use the IP address of 10.254.254.254. It will act as the gateway entry for those virtual servers using veth network interfaces.
Although additional configuration needs to be done within a virtual server, you can use the same Shorewall rules for in- and outgoing traffic as described earlier (ie., DNAT or outgoing traffic).
Restricting IP Addresses per MAC
When the veth bridged networking is used in Proxmox, the virtual server will have a fully emulated network interface with its own MAC address. The downside is that Proxmox cannot assign the IP address directly and so you will have to configure this within the virtual server.
This should not be an issue if you have full control over the virtual server. However, if the virtual server belongs to a customer or in a worst case scenario is compromised, you no longer have full control over it and it will be possible to change or assign additional IP addresses to the virtual server.
Although earlier in this article containers have already been separated from the internet, it would still be possible to use a private IP address or network interface of an already existing other container. It may therefore be possible to spoof another virtual server.
To implement additional safeguards against this, Shorewall needs a few extra rules described here.
Defining MAC / IP relation
Now we need to obtain the MAC address of the veth interface used in the virtual server and there are several methods for this. We can obtain the MAC address from within the container by issuing the command:
which produces an output similar to:
Alternatively, we can issue the following command from the host node (Proxmox server):
Or in case it is a fully virtualized server (KVM):
where is the number of the virtual server (container) for which you wish to obtain the MAC address. This will produce an output similar to:
Once we have obtained the MAC address, we create (or edit) the /etc/shorewall/maclist file as following:
In this example, the MAC address has been provided in our earlier examples and the IP address 10.0.1.101 is the only permitted IP address that can be used by this virtual server.
Apply the changes by issuing the command
At this point, if the virtual server changed the IP address (or added another IP address) other than 10.0.1.101, that traffic will be rejected as per the default behaviour of a Shorewall installation on Proxmox/Debian. If this behaviour needs to be changed, it can be set in the /etc/shorewall/shorewall.conf file with this variable:
Outgoing internet traffic
Due to this separation and the use of A-class (10.0.0.0/8) IP addresses, outgoing traffic from a virtual server to the internet needs to be translated (so that Shorewall and other Internet routers know where to send responses to).
This will be defined in the /etc/shorewall/masq file.
In its simplest form, /etc/shorewall/masq can be set to the follwing:
This means that all traffic originating from 10.0.0.0/8 and going to the internet will pass through the eth0 network interface using the IP address assigned to eth0.
If you wish to make all traffic appear from a particular IP addresses, it can be specified as the third parameter. For example:
Or perhaps there’s a specific internal IP address that must appear externally as another IP address, you can do this as folowing:
Notice the plus (‘+’) sign in front of eth0. All traffic from 10.0.0.0/8 will appear to be coming from IP 91.121.0.1, except traffic coming from 10.0.1.101 will appear as coming from 91.121.0.2.
Change the vmbr0 network interface
The vmbr0 stanza in the /etc/network/interfaces will be changed to look like:
… (original configuration) …
The significant changes here are the IP addresses used for the address, netmask and broadcast as well as changing bridge_ports to “none”. The IP address of 10.254.254.254 can be any in the 10.0.0.0/8 range and so may be changed if you wish. It will later be used as the gateway address for the virtual servers.
The changes can be applied without having to reboot the system using:
Installing Shorewall is simply a matter of executing the following command:
If you wish to use shorewall with IPv6 capabilities, a few additional steps will be required. At the moment of writing, Debian has not included the latest version of Shorewall6 into its main package source. You will therefore need to add the SID (unstable branch) to your available package sources:
Once this has been done, Shorewall with IPv6 support — aptly named shorewall6 — can be installed with:
NOTE! It is important to note that Shorewall6 makes a strict distinction between IPv4 and IPv6 and each has to be configured individually. That is, the files located in /etc/shorewall/ are for IPv4 only and /etc/shorewall6/ contains files related to IPv6 only. The IPv4 version cannot control what will happen on IPv6 and vice versa!
Most rules and policies in for Shorewall are directly transferable between /etc/shorewall/ and /etc/shorewall6/. Due to this, this article will only focus on IPv4 configuration with one exception:
You will want to edit the /etc/shorewall/shorewall.conf file, and change the following value from:
If this is not done, any configuration done in /etc/shorewall6/ would be ignored (and will also disable any existing IPv6 traffic).
Starting Shorewall
By default Shorewall is not enabled during boot time as a safety precaution for first-time configurations. To enable it, edit /etc/default/shorewall file and change:
You can start Shorewall manually with:
And after making any changes to the Shorewall configuration, issue the command:
It is best not to use /etc/init.d/shorewall restart. Doing so will temporarily disable the firewall, which permits access to normally blocked ports.
Although this period is brief, it may still be enough time for someone to establish a connection to the server — Shorewall does not block existing connections by default.
Once Shorewall has been configured, there will be three distinct zones on the Proxmox server:
- the Firewall / Proxmox host at fw
- the virtual network zone for virtual servers at dmz
- the internet at net
Установка и настройка ZFS
ZFS — это файловая система, которая может использоваться совместно с Proxmox. С помощью нее можно позволить себе репликацию данных на другой гипервизор, миграцию виртуальной машины/LXC контейнера, доступ к LXC контейнеру с хост-системы и так далее. Установка ее достаточно простая, приступим к разбору. На моих серверах доступно три SSD диска, которые мы объединим в RAID массив.
Обновляем список пакетов:
Устанавливаем требуемые зависимости:
Устанавливаем сам ZFS:
Если вы в будущем получите ошибку fusermount: fuse device not found, try ‘modprobe fuse’ first, то выполните следующую команду:
Теперь приступим непосредственно к настройке. Для начала нам требуется отформатировать SSD и настроить их через parted:
Аналогичные действия необходимо произвести и для других дисков. После того, как все диски подготовлены, приступаем к следующему шагу:
zpool create -f -o ashift=12 rpool /dev/sda4 /dev/sdb4 /dev/sdc4
Применим некоторые настройки для ZFS:
Теперь нам надо рассчитать некоторые переменные для вычисления zfs_arc_max, я это делаю следующим образом:
В данный момент пул успешно создан, также мы создали сабпул data. Проверить состояние вашего пула можно командой zpool status. Данное действие необходимо провести на всех гипервизорах, после чего приступить к следующему шагу.
Теперь добавим ZFS в Proxmox. Переходим в настройки датацентра (именно его, а не отдельной ноды) в раздел «Storage», кликаем на кнопку «Add» и выбираем опцию «ZFS», после чего мы увидим следующие параметры:
ID: Название стораджа. Я дал ему название local-zfs
ZFS Pool: Мы создали rpool/data, его и добавляем сюда.
Nodes: указываем все доступные ноды
Данная команда создает новый пул с выбранными нами дисками. На каждом гипервизоре должен появится новый storage под названием local-zfs, после чего вы сможете смигрировать свои виртуальные машины с локального storage на ZFS.
Updating the eth0 network interface
If you have reached this section, then your vmbr0 network interface was most likely directly bridged with your eth0 network interface, meaning that vmbr0 contains your public IP address, network gateway and other settings. Because we will turn vmbr0 into a blind bridge in the next section, we need to create or edit a separate eth0 stanza in the /etc/network/interfaces file first.
In the previous steps we have obtained all the information required for this purpose (using the ifconfig and route commands). This information may already be present in your vmbr0 stanza as well, in which case you can use this instead.
We edit the eth0 stanza to look as following:
Where the example IPs are replaced by the actual address, netmask, broadcast and gateway IPs found in the previous steps or obtained from the current vmbr0 stanza.
WARNING! It is important to understand that editing the eth0 stanza can lead to an inability to connect to the server if done incorrectly. If you rely on remote access such as SSH, or if you are uncertain about the information that needs to be entered in the various fields, please contact your administrator or hosting provider for assistance. As always, use care and make backups of existing files.
Linux (Debian)
Inside a Debian Linux virtual server, you will specify /etc/network/interfaces as following:
where 10.0.1.101 is the IP address to be used by this particular virtual server.
If you are using both venet and veth network interfaces at the same time, as may be the case with certain IPv6 configurations, the file /etc/network/interfaces.tail should be used instead.
Policy
A base policy needs to defined for each one of the zones. It specifies the default actions on in- and outgoing traffic, and in this article the following policies will be defined:
Traffic from the firewall to:
- the internet is permitted
- DMZs is permitted
- other processes on the firewall is permitted
Traffic from the DMZ (virtual servers) to:
- another virtual server is permitted
- the internet is permitted
- the firewall is denied and 1 information message per second (with a burst of 2) will be record when access is attempted.
Traffic from the internet to:
- the firewall is denied
- DMZs is denied, generating 8 messages per second (with a burst of 30 messages) whenever access is attempted.
Any traffic not defined in any of the zones (either by accident or purposely) will be rejected.
To do this, we will create the /etc/shorewall/policy file:
For those who have followed this guide before and are experiencing some performance issues, please remove the limit burst options after “info”, ie “1/sec:2”. The reason is that this takes priority over rules; this was a painful discovery on my end!
Non-private IP Assignment
The setup as described above has separated your virtual servers from the internet by use of a zone (dmz) and A-class IP range (10.0.0.0/8). However, it is still possible to assign a non-private IP directly to one of your virtual servers if the venet network interface is used.
Internet traffic (from the net to the dmz zone) will still be blocked per the policy established in the above setup, and you will need to add additional rules to your Shorewall configuration. The major difference is that you must use ACCEPT instead of DNAT.
For example, let’s assume the IP address 91.121.0.1 was directly assigned to a virtual server. To permit internet Web traffic (port 80) to this container, add the following rule to your /etc/shorewall/rules file:
Please note that for veth network interfaces (bridged) Proxy ARP is required.
Following are considered advanced topics to further enhance the firewall and Proxmox. They may not be required in all situations.
Microsoft Windows
For networking within Windows, proceed to your Networking control panel (or the Network and Sharing Center). Select the appropriate Local Area Connection and right-click to reveal the Properties menu option. UAC (User Account Control) may request your permission to proceed.
In the list of This connection uses the following items, select Internet Protocol (TCP/IP) (or Internet Protocol Version 4 (TCP/IPv4)). Click the Properties button.
At the General tab, change the following selections:
Use the following IP address:
Use the following DNS server addresses:
Where xxx… and yyy… are your preferred DNS servers.
Читайте также: