ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Проблема бл окирования и распознова ния метода CONNECT, ошибка ?c lient sent invalid request "CONNECT {address}:25"?



On Mon, Oct 19, 2009 at 06:52:28PM -0400, Mrau Hu wrote:

> Здравствуйте.
> 
> 
> Не так давно на сервер (Linux Debian) был установлен Nginx (версии 0.8.20), 
> на время конфигурации он был настроен слушать порт 8080.
> 
> Через некоторое время в логах был замечен HTTP-метод CONNECT, на удаленный 
> адрес и 25 порт.
> 
> После чего в конфиг была добавлена проверка на правильные методы запросов:
> 
>         ## Only allow GET, HEAD and POST request methods
>         if ($request_method !~ ^(GET|HEAD|POST)$ ) {
>             return 444;
>         }
> 
> 
> 
> Но проверка не сработала, и в логи были произведены записи:
> 
> access.log
> 
> 94.100.178.70 - - "CONNECT 194.67.23.20:25 HTTP/1.0" 500 186 "-" "-" "-"
> 
> 
> error.log
> 
>  29637#0: *5 client sent invalid request while reading client request line, 
> client: 94.100.178.70, request: "CONNECT 194.67.23.20:25 HTTP/1.0"
> 
>  29637#0: *5 "^(GET|HEAD|POST)$" matches "GET", client: 94.100.178.70, 
> request: "CONNECT 194.67.23.20:25 HTTP/1.0"
> (строка повторяется еще 9 раз)
> 
>  29637#0: *5 rewrite or internal redirection cycle while internal redirect to 
> "/error/40x.html", client: 94.100.178.70, request: "CONNECT 194.67.23.20:25 
> HTTP/1.0"
> 
> 
> 
> Выдержка из конфига:
> 
> 
> server {
>         listen: 8080;
> 
>         ## Logs
>         access_log  /var/log/nginx/access.log  main;
>         error_log   /var/log/nginx/error.log  debug;
> 
>         ## Errors
>         # client errors
>         error_page  400 401 402 403 404 405 406 407 408 409 410 411 412 413 
> 414 415 416 417   /error/40x.html;
>         # server errors
>         error_page  500 501 502 503 504 505 506 507    /error/50x.html;
> 
>         location  /error {
>             internal;
>         }
> 
>         ## Only allow GET, HEAD and POST request methods
>         if ($request_method !~ ^(GET|HEAD|POST)$ ) {
>             return 444;
>         }
> 
>         ## Index names
>         index     index.php  index.html  index.htm;
> 
>         ## Main site
>         location  / {
>             try_files     $uri  $uri/  =404;
>         }
> }
> 
> 
> 
> Вопросы:
> 
> 1) Есть ли возможность отсеять HTTP-метод CONNECT на уровне Nginx?

Он не поддерживается:
  29637#0: *5 client sent invalid request while reading client request line, 
client: 94.100.178.70, request: "CONNECT 194.67.23.20:25 HTTP/1.0"

> 2) Почему при проверке переменной $request_method CONNECT совпал с GET?

Потому что запрос был перенаправлен в "GET /error/40x.html".

> 3) Возможно ли такое, что значение переменной $request_method было GET, а не 
> CONNECT?
> 
> 4) Каким образом вы бы отсеяли нездоровый метод?



-- 
Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.