Назад | Перейти на главную страницу

Отслеживание подключений не работает в Debian 7 OpenVZ VPS

У меня есть небольшой экземпляр VPS (используемый для веб-хостинга), на котором работает Debian 7, и в течение нескольких недель у меня возникают проблемы с брандмауэром и отслеживанием соединений. У меня не было проблем в течение нескольких месяцев, но без какой-либо модификации системы с моей стороны инструменты отслеживания соединений для iptables перестали работать (я подозреваю, что у моего провайдера было обновление ядра, но они не могут найти никакого решения для моей проблемы).

Теперь правила, связанные с состоянием, в моей конфигурации iptables больше не совпадают. Я больше не могу использовать состояние ESTABLISHED, RELATED или NEW. Когда я создаю эти правила, ошибок нет, но кажется, что ни один пакет им не соответствует. Вот мой файл конфигурации iptables:

*filter

#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

#  Log all ESTABLISHED,RELATED
-A INPUT -m state --state ESTABLISHED,RELATED -m limit --limit 20/min -j LOG --log-prefix "iptables: EST,REL: " --log-level 1
-A OUTPUT -m state --state ESTABLISHED,RELATED -m limit --limit 20/min -j LOG --log-prefix "iptables: EST,REL: " --log-level 1

#  Log all UDP
#-A INPUT -p udp -m limit --limit 60/min -j LOG --log-prefix "iptables: UDP IN : " --log-level 1
-A OUTPUT -p udp -m limit --limit 60/min -j LOG --log-prefix "iptables: UDP OUT: " --log-level 1

#  Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  Allow SSH connections
-A INPUT -p tcp --dport 22 -j ACCEPT

#  Allow ping
-A INPUT -p icmp -j ACCEPT

#  Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables: DENIED : " --log-level 4

#  Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

Я добавил правила ведения журнала, которые я могу раскомментировать, чтобы поймать установленные соединения, но они неэффективны, и все входящие пакеты отбрасываются последними строками моего файла конфигурации. Вот пример того, что происходит в моем файле журнала, когда я пытаюсь выполнить простой пинг, требующий разрешения DNS:

Jun 13 09:19:37 vpsname kernel: [4624558.917291] iptables: UDP OUT: IN= OUT=venet0 SRC=**.**.**.** DST=208.67.222.222 LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=57693 DF PROTO=UDP SPT=37992 DPT=53 LEN=53
Jun 13 09:19:37 vpsname kernel: [4624558.918373] iptables: DENIED : IN=venet0 OUT= MAC= SRC=208.67.222.222 DST=**.**.**.** LEN=110 TOS=0x00 PREC=0x00 TTL=56 ID=0 DF PROTO=UDP SPT=53 DPT=37992 LEN=90
Jun 13 09:19:42 vpsname kernel: [4624563.927318] iptables: UDP OUT: IN= OUT=venet0 SRC=**.**.**.** DST=208.67.220.220 LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=62698 DF PROTO=UDP SPT=49607 DPT=53 LEN=53
Jun 13 09:19:42 vpsname kernel: [4624563.928263] iptables: DENIED : IN=venet0 OUT= MAC= SRC=208.67.220.220 DST=**.**.**.** LEN=110 TOS=0x00 PREC=0x00 TTL=56 ID=0 DF PROTO=UDP SPT=53 DPT=49607 LEN=90
Jun 13 09:19:47 vpsname kernel: [4624568.936369] iptables: UDP OUT: IN= OUT=venet0 SRC=**.**.**.** DST=208.67.222.222 LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=57694 DF PROTO=UDP SPT=37992 DPT=53 LEN=53
Jun 13 09:19:47 vpsname kernel: [4624568.937441] iptables: DENIED : IN=venet0 OUT= MAC= SRC=208.67.222.222 DST=**.**.**.** LEN=110 TOS=0x00 PREC=0x00 TTL=56 ID=0 DF PROTO=UDP SPT=53 DPT=37992 LEN=90
Jun 13 09:19:52 vpsname kernel: [4624573.946415] iptables: UDP OUT: IN= OUT=venet0 SRC=**.**.**.** DST=208.67.220.220 LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=62699 DF PROTO=UDP SPT=49607 DPT=53 LEN=53
Jun 13 09:19:52 vpsname kernel: [4624573.947343] iptables: DENIED : IN=venet0 OUT= MAC= SRC=208.67.220.220 DST=**.**.**.** LEN=110 TOS=0x00 PREC=0x00 TTL=56 ID=0 DF PROTO=UDP SPT=53 DPT=49607 LEN=90

Наконец, я установил команду conntrack, и когда я ее выполняю, я вижу, что все пакеты помечены как недопустимые.

sudo conntrack -S
entries                 0
searched                0
found                   0
new                     0
invalid                 51181
ignore                  0
delete                  0
delete_list             0
insert                  0
insert_failed           0
drop                    0
early_drop              0
icmp_error              17
expect_new              0
expect_create           0
expect_delete           0

Я действительно не знаю, что делать, ни мой провайдер VPS. Кто-нибудь из вас знает, как решить эту проблему? В настоящее время мне нужно открыть порты в моем брандмауэре, если я хочу загрузить что-либо из Интернета на свой VPS. Это не безопасное решение.

Заранее спасибо за вашу помощь.

У вас есть доступ к физическому узлу OpenVZ? Если да, вы должны включить отслеживание соединений с помощью этой команды: vzctl set XXX --netfilter stateful --save

И перезапустите контейнер: vzctl restart XXXX

Где XXX - идентификатор вашего контейнера.

Если у вас нет доступа к физическому серверу, вы можете отправить эту команду своему администратору или хостинг-провайдеру, потому что без конфигурации со стороны физического узла вы не можете использовать iptables с отслеживанием состояния.

У нас была очень похожая проблема на более старом хосте Proxmox, которым мы управляли: conntrack внезапно перестал работать с новым контейнером, в то время как он работал с контейнером, который мы только что закрыли. Сам хост довольно долго не перезагружался.

В конце концов, основная проблема заключалась в том, что модуль iptables_nat должно быть разрешено для контейнера (мы включили его в /etc/vz/vz.conf) для conntrack работать. Иди разбери.