From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on sa.int.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.2.5 Date: Mon, 6 Jul 2009 21:13:17 +0300 From: Michael Shigorin To: sysadmins@lists.altlinux.org Message-ID: <20090706181317.GA28185@osdn.org.ua> Mail-Followup-To: sysadmins@lists.altlinux.org Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.4.2.1i Subject: [Sysadmins] apache DoS by slowloris X-BeenThere: sysadmins@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: shigorin@gmail.com, ALT Linux sysadmin discuss List-Id: ALT Linux sysadmin discuss List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2009 18:13:35 -0000 Archived-At: List-Archive: Здравствуйте. Думал было упаковать slowloris и mod_qos, но похоже, сегодня не успею, а потом забуду -- решил по крайней мере письмом описать. Как известно, apache с моделью "один клиент -- один процесс" (или одна нить, не суть важно) уязвим к слишком большому количеству соединений, когда выедается память. Поэтому обычно лимиты на количество соединений устанавливаются "в разумных пределах". Правда, при этом возможно организовать отказ в обслуживании методом создания и поддержания соответствующего количества соединений. По адресу http://ha.ckers.org/slowloris/ не так давно был опубликован скрипт, использующий довольно давно известные моменты, но переводящий их в практическое русло и весьма эффективно DoS'ящий apache 1.x/2.x (в отличие от IIS 6/7, lighttpd и nginx). В логах не отсвечивает, заметен только по стопке ESTABLISHED в `netstat -pan | grep httpd`. Насколько понимаю, из используемого мной: * mod_security неэффективен, поскольку до него дело не доходит; * mod_limitipconn умеренно эффективен, поскольку не занимается сокетами (?); * nginx может быть неэффективен, если до backend apache "долетает" достаточное количество таких тормозных соединений. До mod_qos руки не дошли, пока кажется достаточным добавление в секцию http{} уже используемого в качестве реверс-прокси nginx: client_header_timeout 11; client_body_timeout 11; keepalive_timeout 11; send_timeout 11; # limit_zone slowdown $binary_remote_addr 1m; # limit_conn slowdown 7; при лимитах в httpd.conf (вероятно, ещё будут корректироваться): Timeout 35 KeepAlive On KeepAliveTimeout 65 MinSpareServers 1 MaxSpareServers 2 StartServers 4 #MaxClients 8 MaxClients 16 MaxRequestsPerChild 100 ListenBacklog 511 и подобной настройке mod_limitipconn: MaxConnPerIP 2 # ... Речь про apache-1.3. См. тж.: * http://ha.ckers.org/blog/20090620/http-longevity-during-dos/ * http://www.codexon.com/posts/defending-against-the-new-dos-tool-slowloris -- ---- WBR, Michael Shigorin ------ Linux.Kiev http://www.linux.kiev.ua/