У меня есть небольшой экземпляр 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
работать. Иди разбери.