1

Тема: Invalid http requests

Є робочий додаток на django. В продакшині вже півроку. Коли лише вийшли в прод сипались помилки, типу

 Invalid HTTP_HOST header: 'some-domain'. You may need to add 'some-domain' to ALLOWED_HOSTS

В django така поведінка, коли ти не визначаєш налаштування ALLOWED_HOSTS = ['list', 'of', 'domains', 'where deployed'],  джанго далі запит не просукає, повертає 400, і на пошту адмінам лист про такі хрінь.

Ну от типу цього: https://stackoverflow.com/questions/405 … ost-header але замість

some-domain

були якісь підозрілі імена, clientapi.ipip.net, her.net (реально) і ще купу іншого, вже не пригадую. Виглядає так що хтось робить запит на сайт, і підробляє `host` http header.?

Але чому nginx пропустив запити до django аппки? В нього ж явно вказано server_name.

В мене в ALLOWED_HOSTS визначено лише домен на якому аппка розгонута.

Потім (через місяць-два) ці запити зникли.

Django слухає 0.0.0.0:8000 через guicorn в докер контейнері. nginx:

server {
    listen 80;
    server_name mydomain.name www.mydomain.name;
    charset utf-8;

    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;
    server_name mydomain.name www.mydomain.name;
    charset utf-8;

    ssl_certificate /etc/letsencrypt/live/...;
    ssl_certificate_key /etc/letsencrypt/live/...;

    gzip on;
    ... gzip config here 

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host       $host;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header User-Agent $http_user_agent;
        proxy_connect_timeout       300;
        proxy_send_timeout          300;
        proxy_read_timeout          300;
        send_timeout                300;
    }
}

слухає 80, редіректить на 443 https, і proxy_pass на 127.0.0.1:8000 (аппка з guincorn)

А зараз приходять запити прям ну дуже підозрілі:

Invalid HTTP_HOST header: 'ip_of_server:8000'. You may need to add 'ip_of_server' to ALLOWED_HOSTS.

Request Method: GET
Request URL: http://ip_of_server:8000/public/index.php?s=/index/%5Cthink%5Capp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20%5E%3C?php%20$action%20=%20$_GET['xcmd'];system($action);?%5E%3E%3Ehydra.php

8000 порт відкрити назовні, можна заблокувати через firewall, є сенс?

Або помилка на 0.0.0.0:8000

Invalid HTTP_HOST header: '0.0.0.0:8000'. You may need to add '0.0.0.0' to ALLOWED_HOSTS.

Тут взагалі дивно запит без header? Куди копати, що зробити? Чи забити і все?

2

Re: Invalid http requests

Схоже на спробу експлуатувати дірку в Hydra.
ваша строка це

"/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^<?php $action = $_GET['xcmd'];system($action);?^>>hydra.php"

пошукайте по схожому запиту.

3

Re: Invalid http requests

навіть не знаю що таке hydra, вони ж не встановлена навіть.
А що зробити?  Може закрити 8000 назовні?

4

Re: Invalid http requests

може так - поставити fail2ban натравити на цей випадок і блокувати IP?

Подякували: varkon, Q-bart2

5

Re: Invalid http requests

Q-bart написав:

навіть не знаю що таке hydra, вони ж не встановлена навіть.
А що зробити?  Може закрити 8000 назовні?

Це може бути сліди роботи сканера який шукає дірки на ресурсах. Може балується хтось з амінв датацентру наприклад. Подивіться відкіля йдуть запити, що це за мережа. Ну а загалом, якщо ви не використовуєте цей порт - то звичайно закрийти його.

Подякували: Q-bart1

6

Re: Invalid http requests

Ще одна дивна хрінь: якщо в браузері стукнутись на ip сервера, відкриває заглушку апача. Чому він встановлений - я хз, вочевидь був у стандартній збірці. Але суть в тому що я не можу запити апач, sudo service apache2 stop виконується успішно, /etc/init.d/apache2/stop теж успішно, але по запиту на ip:80 все одно повертається заглушка апача.

7

Re: Invalid http requests

1. ipconfig на 80 бачить апач?
2. Це не локальний кеш?

Подякували: Q-bart1

8

Re: Invalid http requests

1. Не зрозумів, як використати ipconfig. (як саме, там ж ним лише конфігурують) Подумав, що маєте на увазі: треба переглянути, які процеси читають, які порти:

#netstat -ltnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      1095/redis-server 1
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8000/nginx -g daemo
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1110/sshd
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      962/postgres
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      8000/nginx -g daemo
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      32320/python
tcp6       0      0 :::80                   :::*                    LISTEN      8000/nginx -g daemo
tcp6       0      0 :::22                   :::*                    LISTEN      1110/sshd
tcp6       0      0 ::1:5432                :::*                    LISTEN      962/postgres

2. Та ні, кеш почистив. Зайшов з девайсу, з якого ніколи не відкривав IP - те саме.

9

Re: Invalid http requests

Так, вибачте, загальмував. netstat, звісно.

Q-bart написав:
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8000/nginx -g daemo

Ось ваш "апач".

Подякували: Q-bart, varkon2

10

Re: Invalid http requests

Ну але "8000/nginx"? Але при запиті повертається стандартна сторінка апаче. Це nginx сервить якусь папочку з файлами від апач?

11

Re: Invalid http requests

Так, за

/var/www/html/

знайшов два файлики, один з них від апача. Просто видалаю.

12 Востаннє редагувалося koala (27.03.2019 15:21:47)

Re: Invalid http requests

Очевидно, що енджінкс просто підтягнув налаштування апача.
Якщо вам не потрібні на сервері Apache та nginx - видаліть їх через менеджер пакетів.

13

Re: Invalid http requests

koala написав:

Очевидно, що енджінкс просто підтягнув налаштування апача.
Якщо вам не потрібні на сервері Apache та nginx - видаліть їх через менеджер пакетів.

Видаляв вже) Вони відновлюються при рестарті сервера) Як фенікси

14

Re: Invalid http requests

Q-bart написав:
koala написав:

Очевидно, що енджінкс просто підтягнув налаштування апача.
Якщо вам не потрібні на сервері Apache та nginx - видаліть їх через менеджер пакетів.

Видаляв вже) Вони відновлюються при рестарті сервера) Як фенікси

а як ви без веб сервера збираєтесь віддавати веб сторінки? Це перше. Друге - може спрацьовує тригер на рестор з бекапу?

Подякували: leofun011

15

Re: Invalid http requests

Я раз закривав порт з використанням фаєрвола, і воно блокануло мені 22 порт для доступу по ssh  :) .
Ця команда закриє лише 8000 порт?

 iptables -A INPUT -p tcp --dport 8000 -j REJECT

16

Re: Invalid http requests

Ее, що ніхто так і не підкаже/підстрахує?