LINUX.ORG.RU

proxmox и правила iptables

 , , ,


0

1

Привет всем!

Не сильно дружу с iptables, а тем более, с конкретной задачей.. защитить хостовую машину с ОС Proxmox, на которой будут крутится контейнеры openvz и возможно виртуалки qemu-kvm.

Составил банальный набор правил: http://pastebin.com/atf1yriZ

И хотелось бы узнать у знающих юзеров, что стоило бы убрать-поменять.. возможно что-то может плохо повлиять на работу виртуалок?

$IPT -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT ## SSH

ACCEPT прерывает просмотр правил в цепочке. До нижестоящего правила

$IPT -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP

дело не дойдёт. Плюс, AFAIK, для >=net-firewall/iptables-1.4.16 все -m state --state нужно менять на -m conntrack --ctstate. Т.е.

$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

нужно будет заменить на

$IPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

и далее, по аналогии.

NightSpamer ()
Ответ на: комментарий от NightSpamer

и еще не могу понять.. в настройках сети вот такое:

auto lo iface lo inet loopback

auto vmbr0 iface vmbr0 inet static address 91.210.250.2 netmask 255.255.255.240 gateway 91.210.250.1 bridge_ports eth0 bridge_stp off bridge_fd 0

следовательно, в ifconfig видно eth0 и vmbr0 интерфейс. Но, я не пойму, через какой интерфейс нужно пропускать iptables?

devil0704 ()
Ответ на: комментарий от devil0704

По ssh: ACCEPT должен стоять после условного DROP-а. Т.е. если пакет не сбросило по лимиту, то нужно принять соединение. Если ACCEPT не указать явно - пакет будет сброшен политикой по-умолчанию. Это к дальней дороге :)

Но, я не пойму, через какой интерфейс нужно пропускать iptables?

С этим я сам ещё не до конца... Судя по всему, через оба и в FORWARD-е. Если виртуалка лезет в интернеты, то -A FORWARD -i vmbr0 -o eth0, если на соседнюю виртуалку, то -A FORWARD -i vmbr0 -o vmbr0...

NightSpamer ()
Ответ на: комментарий от NightSpamer

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

devil0704 ()
Ответ на: комментарий от devil0704

или лыжи не едут...

Посмотрел ещё раз на правила, попробовал распарсить...

IPT="/sbin/iptables"
INT="vmbr0"
...
# Вводим ограничения для новых подключений по SSH
$IPT -A INPUT -i $INT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -i $INT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
1) tcp-пакет на 22й порт, который приходит на хост-машину с интерфейса vmbr0 (не транзитный) и имеет стостояние NEW или ESTABLISHED - принять, завершить просмотр правил для этого пакета в этой цепочке.
Т.е. разрешаем из виртуалки ssh-иться на хост неограниченно часто? Пакеты, которые должны проходить из интернетов сквозь хост в виртуалку, в INPUT не попадают. Или я неправильно понял, кого от чего защищаем.
2) Если tcp-пакет на порт 22 имеет состояние NEW... то он уже принят строчкой выше.
Бредово. Скури мануал по ссылкам. Ладно, далее...
# Вводим ограничения для новых подключений по WWW
$IPT -A INPUT -i $INT -p tcp -m tcp --dport 8006 -j ACCEPT
$IPT -A INPUT -i $INT -p tcp --dport 8006 -m connlimit --connlimit-above 20 -j DROP
$IPT -A INPUT -i $INT -p tcp --dport 8006 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i $INT -p tcp --dport 8006 -m conntrack --ctstate NEW -m limit --limit 5/sec --limit-burst 5 -j ACCEPT
1) Принять любой пакет пришедший на vmbr0 если он tcp:8006.
Всё. Пакет приняли, из цепочки вышли. Дальнейшие ограничения не рассматриваются. Без этого правила всё выглядело-бы логичнее:
2) Если соединений на tcp:8006 больше 20 (я бы добавил «и пакет NEW»), пакет выкинуть.
3) (раз сюда попали, то соединений <=20) если пакет от установленного соединения - принять.
4) Принимаем новые соединения не чаще чем...

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

Да как так? Сначала пропускаем, потом «ай, вернсь, куда пошел?»

//Тема-то больше в Admin подходит...

NightSpamer ()
Ответ на: или лыжи не едут... от NightSpamer

ой, стоп.. до меня только дошло:

$IPT -A INPUT -i $INT -p tcp -m tcp --dport 8006 -j ACCEPT

и

$IPT -A INPUT -i $INT -p tcp --dport 8006 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
по сути правила выполняющие одно действие?

тогда должно быть так:

$IPT -A INPUT -i $INT -p tcp --dport 8006 -m connlimit --connlimit-above 30 -j DROP
$IPT -A INPUT -i $INT -p tcp --dport 8006 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i $INT -p tcp --dport 8006 -m conntrack --ctstate NEW -m limit --limit 5/sec --limit-burst 5 -j ACCEPT

p.s. можно ли как-то связаться с вами напрямую (gtalk/jabber, skype, icq)? и если возможно, проконсультируйте пожалуйста по этому поводу :) т.к. серверами я обычно занимаюсь в другой сфере, где парится с iptables, сетью и т.д. - не приходится.)

devil0704 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.