Page 1 of 1

БОЛЬШАЯ ПРОБЛЕМА с фаерволом в панели и iptables

Posted: Thu Nov 10, 2016 5:02 am
by prototip76
Здравствуйте. Веста установлена на ubuntu 14.04, версия 0.9.8.16 (amd64).

Обнаружился очень неприятный и опасный баг: при настройке фаервола в панели, в частности - прописывании к порту ip-адреса, обнаружилось следующее - при вводе ip в формате CIDR - X.X.X.X/24 (/16, /32 и т.д.) панель выдаёт ошибку - Error: invalid ip format :: X.X.X.X/24, принимается только запись вида X.X.X.X/0.

В результате: приходится прописывать вручную правила iptables непосредственно в консоли. Ну это ничего, полбеды, вполне справляюсь и ручками. НО!!!

Обнаружилось, что VestaCP создаёт дополнительную таблицу vesta, видимо для записи собственных цепочек правил фильтрации, ОДНАКО - пишет В ГЛАВНУЮ ТАБЛИЦУ INPUT, а собственная таблица пуста.

Вопрос: это реальный баг, или так специально сделано? Тогда какой смысл создавать дополнительную пустую таблицу, в которой потом ничего не пишется? Зачем изменять ГЛАВНУЮ ТАБЛИЦУ INPUT, вместо того, что бы сделать из неё переход в собственную, и туда уже записывать правила фаервола из хостинг-панели?

Ну и третье, самое неприятное: обнаружилось, что Vesta самостоятельно переписывает правила в iptables, без участия администратора, согласно правилам в хостинг-панели.

А именно: при невозможности указать в панели в правиле ip-адрес формата CIDR, приходится это делать вручную в консоли, непосредственно в iptables. При прописывании правил iptables в консоли, и их последующем сохранении, изменения никак не отражаются в панели весты, т.е. правила фаервола в панели остаются прежними, хотя правила в iptables были изменены. И вот, обнаружилось, что через некоторое время, правила в iptables ИЗМЕНЯЮТСЯ НА ТАКИЕ ЖЕ, как и в фаерволе в панели, т.е. vesta спустя некоторое время переписывает таблицу INPUT в iptables, согласно своим правилам во-вкладке фаервола.

Результат: прописал для весты и SSH доступ только со-своего диапазона IP, что-бы другие не ломились, и через некоторое время с удивлением обнаруживаю в логах аутентификации, в что в эти порты (8083 и ssh) ломятся все, кому не лень! И брутофорсят, брутофорсят. Смотрю в таблицу INPUT в iptables и офигиваю - ip доступа к портам вновь переписаны в 0.0.0.0/0, как в фаерволе в панели. Сразу напрашивается вопрос: КАКОГО ХРЕНА???

Ну а теперь главный вопрос: это я дурак, и делаю что-то не правильно, либо в Весте реальный баг, с невозможностью прописывания нужного формата CIDR, и перезаписью правил в главной таблице iptables?

Прошу обратить особое внимание на эту проблему, ибо это офигенная дыра в безопасности.

ПыСы: Да, совсем забыл добавить - панель НЕ ТОЛЬКО переписывает свои правила в iptables, которые присутствуют в панели фаервола, НО ЕЩЁ И УДАЛЯЕТ ТЕ ПРАВИЛА, которые отсутствуют в панели но имеются в таблице INPUT, т.е. полностью переписывает главную таблицу на свой лад.

Re: БОЛЬШАЯ ПРОБЛЕМА с фаерволом в панели и iptables

Posted: Thu Nov 10, 2016 12:11 pm
by Stesh
С CIDR баг, с цепочками баг, с перезаписыванием правил iptables - фитча: веста генерирует весь конфиг iptables заново, читая свой файлы конфигурации в /usr/local/vesta/data/firewall.
Мораль: пишем в правила в конфигурацию и ребилдим v-update-firewall

Что будет в 17-й версии - еще не известно.

Re: БОЛЬШАЯ ПРОБЛЕМА с фаерволом в панели и iptables

Posted: Mon Nov 14, 2016 12:31 pm
by gloobus
Что бы избавиться от этой проблемы, поправьте файл <VESTA_DIR>/func/main.sh
Найдите там функцию

Code: Select all

# IP format validator
is_ip_format_valid() {
    object_name=${2-ip}
    ip_regex='([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'
    ip_clean=$(echo "${1%/[0-9][0-9]}")
    ip_clean=$(echo "${1%/[0-9]}")
    if ! [[ "$ip_clean" =~ ^$ip_regex\.$ip_regex\.$ip_regex\.$ip_regex$ ]]; then
        echo $1
        check_result $E_INVALID "invalid $object_name format :: $1"
    fi
    if [ $1 != "$ip_clean" ]; then
        ip_cidr="$ip_clean/"
        ip_cidr=$(echo "${1#$ip_cidr}")
        if [[ "$ip_cidr" -gt 32 ]]; then
            check_result $E_INVALID "invalid $object_name format :: $1"
        fi
    fi
}
и в условии проверки "чистого айпи" убрать в конце $ знак:

Code: Select all

if ! [[ "$ip_clean" =~ ^$ip_regex\.$ip_regex\.$ip_regex\.$ip_regex ]]; then
Я вот не очень по башу, и не мог понять зачем он тут и для чего, но тоже долго промучился с тем, что не мог в файрволе через ограничить доступ к порту только для локальной сети 192.168.1.0/24 - выдовала такую же ошибку Error: invalid ip format

Re: БОЛЬШАЯ ПРОБЛЕМА с фаерволом в панели и iptables

Posted: Wed Nov 16, 2016 12:21 pm
by prototip76
gloobus wrote:Что бы избавиться от этой проблемы, поправьте файл <VESTA_DIR>/func/main.sh
Найдите там функцию
Вы имеете в виду - невозможность прописывания подсетей в формате CIDR? Т.е. конкретный баг панели заключается именно в этой синтаксической ошибке?

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

И уже в чистой таблице INPUT прописал все правила заново.

Однако, вызывает большое удивление, что разработчики никак не реагируют на такую дыру в безопасности.