VestaCP Firewalld за CloudFlare Не блокирует запросы — почему?
Добрый день!
1. Внутри сервера настройка стоит nginx(front)+apache2(back) для доменов.
2. Сайты стоят за Cloudflare.
3. Переключение настроек для домена с nginx или без nginx - ничего не меняет, правила по-прежнему не работают на блокировку.
Если же делаю SUSPEND на правило 0.0.0.0/0 ACCEPT 80,443 (WEB) , то все "ок" - сервер не принимает никаких коннектов :)
Нужно чтобы принимал все, ЗА ИСКЛЮЧЕНИЕМ тех что введены в правилах где стоит DROP.
Пробовал также менять местами правила. Сначала указать ACCEPT правило, а потом все на DROP, и наоборот (так по стандарту в веб-интерфейсе правила добавляются вверх, а в конфиге они идут вниз), но тоже ничего не изменилось.
Если проверяю Netstat, то коннекты вижу только с IP Адресов Cloudflare, хотя в стандартном nginx конфиге вроде как прописано отображение корректного IP.
В самих логах Apache для доменов уже настоящие IP отображаются, то есть Nginx принимает запрос от клауда, и передает в Apache корректный IP. Здесь особенно странно становится что в логах Апача если убрать nginx на фронте при этом отображается корректный IP.
Проблема в том что через веб-интерфейс ввожу правила для блокировки по IP и они не работают. Работают при этом все остальные для других портов mysql / vnc и остальное.
#Cloudflare CIDR IP BAN
geo $http_x_forwarded_for $allowed {
default allow;
82.118.227.0/24 deny;
#any ip or CIDR
}
#/Cloudflare CIDR IP BAN
В конфиг под конкретный домен в директиву server > location / добавляем :
#Блокировка по IP#
if ( $allowed = "deny" ) {
return 403;
}
Но данная схема не очень удобна тем что надо под каждый домен добавлять, в моем случае такие изыски не удобны и не нужны. Есть ли схема при которой достаточно было бы изменить только основной nginx.conf в директиве http , не залезая в server ?
Дело в том что в заголовках http cloudflare вам передает реальный адрес - просто для статистики, и nginx или апач его уже пишут в лог, но фактически все запросы идут от cloudflare и фаерволл видит именно их.
Ваши варианты:
1 - блочить ипы прямо на клаудфларе
2 - если у вас нет https - парсить через iptables -m string --string '1.1.1.1' пакеты с нужными ип и тогда их дропать
Спасибо!
1. А что значит "для статистики" ? Тогда могли бы их писать в лог, но заблокированным IPшникам отдавать 403, а по логу вижу что никаких проблем нету - везде 200! Да и сам беру прокси, блокирую, проверяю на своих сайтах - все отлично работает!
2. Блочить ипы в клауде нет возможности у меня. Ипов много, сайтов и аккаунтов в клауде - тоже. + там лимиты жесткие (в клауде).
3. Есть Https везде. Есть попроще вариант и стандартным каким-то функционалом?
Владимир, спасибо за труд!
Но, есть вопросы.
1. Тогда что не так с Firewall? Вообще нет смысла с ним ничего делать и пытатьс получить результат?
2. У меня больше 100 доменов. Заменить для каждого в принципе можно, не главное. Но каждый раз когда кого-то баню опять разносить на все?
3. Куда в код вносить , после чего?
wtfowned, Банить можно в nginx используя map. Соответственно map хранить в отдельном файле, инклюдить в основной конфиг, и синхронизировать по необходимости, есть 100500 способов, главное nginx перезагружать конфиг не забывать после синхронизации.
Также, у nginx есть https://nginx.org/ru/docs/http/ngx_http_realip_mod...
А у cloudflare есть заголовок с реальным ip клиента без цепочки, и в map можно применять ip и сети, а не регулярные выражения, что куда выгоднее по производительности.
Фаервол видит пакеты приходящие от cloufdlare а не клиента, и с ip cloudflare. Простыми и разумными методами с его помощью вашу проблему не решить.