У меня есть хостинг (Free BSD) и на нём хоститься несколько маленьких проектов. На них постоянно идут (D)Dos,sql inl,xss,php-include атаки, могу ли я обезопасить сервер от этих атак? Многие из нас знакомы с распределенной атакой отказа в доступе (Distributed Denial of Servece Attack). Как говориться, от этой собаки спасенье нет. Или эффективной sql inj, а также xss и межсайтового скриптинга. К решению этой проблемы на помощь к нам приходит, знаменитый модуль mod_security! Download : http://www.modsecurity.org/download/modsecurity-apache-1.9.2.tar.gz Code: <IfModule mod_security.c> # On or Off движка фильтра SecFilterEngine On # Включения проверки правильности кодирования URL SecFilterCheckURLEncoding On # Использования байтов их этого диапазона SecFilterForceByteRange 32 126 # Ведения логов для подозрительных запросов SecAuditEngine RelevantOnly # Имя файла лога SecAuditLog logs/audit_log # Вывод отладочной информации SecFilterDebugLog logs/modsec_debug_log SecFilterDebugLevel 0 # Проверка POST запросов SecFilterScanPOST On # Запись подозрительных запросов (по дефолту пишет в лог) # возрат http ответа с кодом 406 SecFilterDefaultAction "deny,log,status:406" # Redirect user on filter match SecFilter xxx redirect:http://www.webkreator.com # Execute the external script on filter match SecFilter yyy log,exec:/home/ivanr/apache/bin/report-attack.pl # Simple filter SecFilter 111 # Only check the QUERY_STRING variable SecFilterSelective QUERY_STRING 222 # Only check the body of the POST request SecFilterSelective POST_PAYLOAD 333 # Only check arguments (will work for GET and POST) SecFilterSelective ARGS 444 # Test filter SecFilter "/cgi-bin/keyword" # Another test filter, will be denied with 404 but not logged # action supplied as a parameter overrides the default action SecFilter 999 "deny,nolog,status:404" # Раскритие конфигов SecFilter /etc/password # Чтения выше корня SecFilter "\.\./" # Межсайтовый скриптинг SecFilter "<( |\n)*script" SecFilter "<(.|\n)+>" # Защита от sql inj SecFilter "delete[[:space:]]+from" SecFilter "insert[[:space:]]+into" SecFilter "select.+from" # Атаки с использованием cookie SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$" # Forbid file upload SecFilterSelective "HTTP_CONTENT_TYPE" multipart/form-data # Only watch argument p1 SecFilterSelective "ARG_p1" 555 # Watch all arguments except p1 SecFilterSelective "ARGS|!ARG_p2" 666 # Only allow our own test utility to send requests (or Mozilla) SecFilterSelective HTTP_USER_AGENT "!(mod_security|mozilla)" # Do not allow variables with this name SecFilterSelective ARGS_NAMES 777 # Do now allow this variable value (names are ok) SecFilterSelective ARGS_VALUES 888 # Скажи спаму нет! <Location /cgi-bin/FormMail> SecFilterSelective "ARG_recipient" "[email protected]$" </Location> # Фильтрация форматов изображения <Location /fileupload.php> SecFilterInheritance Off SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)" </Location> </IfModule> Также ставим модуль mod_evasive, который поможет уменьшить активность (D)Dos атаки. Download: http://www.nuclearelephant.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz Конфигурируем модуль: /etc/apache2/modules.d/mod_evasive20.conf Code: <IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 </IfModule> Как мне запретить запуск программ в /tmp, на тот случай если взломщик проник на мой сервер? Для этого Вам надо вынести /var/tmp в отдельную файловую систему, при этом /tmp сделаем симлинком на /var/tmp. Идём в /etc/fstab ищем строчку для /var/tmp и в опциях добавляем noexex. После проделанной операции , запуск программ из /tmp будет не возможна. Как мне можно скрыть названия ОС и Apache от всяких (x-toolz) сканеров? Apache 1.3.x and 2.x : Для Apache 1.3.x мы лезем в src/include/httpd.h и меняем: Code: # define SERVER_BASEPRODUCT "Apache" # define SERVER_BASEREVISION "7.7.7" На : Code: # define SERVER_BASEPRODUCT "Tamagochi" # define SERVER_BASEREVISION "1.1.1" Для второй ветки Apache, идём в httpd.conf и добавляем: Header set Server "version not listed" При этом отключаем службу индексации каталогов в /etc/httpd/conf/httpd.conf : Code: ServerSignature Off Надо поменять системные переменные sysctl: Code: # sysctl net.inet.ip.random_id=1 # sysctl net.inet.tcp.blackhole=2 # sysctl net.inet.udp.blackhole=1 # sysctl -w net.inet.icmp.maskrepl=1 Далее в /etc/pf.conf вносим директивы: Code: scrub in all fragment reassemble pass in quick proto tcp from to $my_ip port $ports flags S/SA synproxy state block quick all Я слышал о модуле "mod_rewrite". Зачем же нужен этот модуль? //материал взят с http://blog.excode.ru/post13-protect_site_sql_injection_mod_rewrite.html Этот модуль используется в Apache и используется для разных вещей. Кто то делает ссылки более красивыми, но использовать его можно для разных целей. А одни используют для защиты своего сайта от sql inj. Рассмотрим пример с паролем администратора. Пускай переменная $idmd передаёт GET запрос http://mysite.ru/script.php?idmd=4k55hk34ghkdf6kh7khf5 Нам нужно заменить адрес http://mysite.ru/script_4k55hk34ghkdf6kh7khf5.html на адрес http://mysite.ru/script.php?idmd=4k55hk34ghkdf6kh7khf5 Делается это следующей строкой: Code: RewriteRule http://mysite.ru/script_([a-z0-9]*).html http://mysite.ru/script.php?idmd=$1 Выражение ([a-z0-9]*) означает, что в данном месте может находиться последовательность из цифр и букв любой длины. [a-z0-9] - перечисление допустимых символов (в данном примере заданы диапазоны), знак * означает что таких символов может быть несколько. Выражение которое соответствует маске находящейся в скобках присваивается переменной $1 (цифра обозначает номер скобок) и вставляется в адрес на который будем заменять входящий адрес.В результате этой манипуляции после того как пользователь введет в строке адреса http://mysite.ru/script_4k55hk34ghkdf6kh7khf5.html он автоматически попадет на страницу http://mysite.ru/script.php?idmd=4k55hk34ghkdf6kh7khf5. И конечно же переменная $idmd будет содержать значение "4k55hk34ghkdf6kh7khf5".Теперь давайте рассмотрим, что же произойдет если пользователь попытается ввести http://mysite.ru/script_'%20or%20login='admin'#.html (%20 - тоже самое что и пробел). В результате этого запроса адрес попадет модулю mod_rewrite, который проанализирует его, т.к. выражение '%20or%20login='admin'# не подходит под маску ([a-z0-9]*), т.к. содержит недопустимые символы, то mod_rewrite ничего не сделает, так как будто его вообще нет, очевидно, что в этом случае пользователю будет возвращена ошибка 404 Page not found (404 страница не найдена). Это и есть защита. Она не идеальна и имеет минусы, но есть и плюсы. Главный минус - это то, что в скрипты, все же можно передать вредоносную информацию, но для этого придется воспользоваться методом POST, а не GET. Второй минус - mod_rewrite немного нагружает сервер, как и любые регулярные выражения. Главный плюс - пользователь не видит, как называются ваши переменные. Теперь с помощью mod_rewrite мы сделаем адрес на более красивый, а заодно и реализуем проверку на входные данные. Для того чтобы использовать модуль mod_rewrite вам необходимо создать файл .htaccess в корневом каталоге: Code: RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteRule ^.htaccess$ - [F] Например, чтобы нам подменить адрес http://mysite.ru/blabla.html на http://mysite.ru/xek.html необходимо написать: Code: RewriteRule http://mysite.ru/blabla.html http://mysite.ru/xek.html
Незнаю как начало, но mod_rewrite сдут с http://webscript.ru/stories/07/02/01/2099269 (просто узнал), причем линков на источники и списка используемых матерьялов нет А как остальное?
Согласен, не было времени писать свои мысли по поводу mod_rewrite. Но что же писать когда я напишу тоже самое, прость другими словами.
4k55hk34ghkdf6kh7khf5 4k2jhk34jhkjh6kh7kh33 не сильно отличаются, неправда? ) ЗЫ: неуказание источников наказывается, а вот сбор инфы и ее переработка - приветствуется, хотябы поиск по ачату поюзал: http://forum.antichat.ru/thread27498.html - тут лучше про мод реврайт написано. ИМХО.
От народ ранимый пошел,ненужно писать чегото в чем неуверен,а если уже написал тогда слушай поправки другх и исправляйся.
Маленькое дополнение Установка mod_security на apache22 переходим в каталог [root@gw-server]cd /usr/ports/www/mod_security2 набираем make install clean возможно у вас появиться такая ошибка как появилась у меня Code: [root@gw-server /usr/ports/www/mod_security2]# make install clean ===> Building for mod_security2-2.1.0 ===> Generating apache plist /usr/local/build-1/libtool --silent --mode=compile cc -prefer-pic -O2 -fno-strict-aliasing -pipe -I/usr/local/include/apache22 -I/usr/local/include/apr-1 -I/usr/local/include/apr-1 -I/usr/local/include -c -o apache2_config.lo apache2_config.c && touch apache2_config.slo In file included from modsecurity.h:37, from apache2_config.c:15: msc_pcre.h:18:18: pcre.h: No such file or directory apache2_config.c: In function `cmd_audit_log_relevant_status': apache2_config.c:583: error: `PCRE_DOTALL' undeclared (first use in this function) apache2_config.c:583: error: (Each undeclared identifier is reported only once apache2_config.c:583: error: for each function it appears in.) apxs:Error: Command failed with rc=65536 . *** Error code 1 Stop in /usr/ports/www/mod_security2. [root@gw-server /usr/ports/www/mod_security2]# для коректной установки понадобаиться добавить pcre переходим в /usr/ports/devel/pcre и набираем make install clean после того как соберёться сможем собрать наконец наш mod_security
Ошибка... noexeC Также, не понятно, зачем Права поменять разве нельзя? Ещё хороший метод защиты сервера: использование chroot-окружения. Статья так се, если честно...
Во-первых. откуда взялась эта решетка #? здесь поидее должен быть комментарий /* или --. Во-вторых, методов котороые здесь описаны, недостаточно для нормальной безопасности веб-сервера. имхо, на faq не тянет \=
Замена php на питон увеличит производимость раз в 35(ну или просто в десяток раз с переходом на перл/руби). http://www.alrond.com/ru/2007/jan/25/rezultaty-testirovanija-6-frameworks/
По поводу mod_security. А его кто-нибудь вообще использует? Просто пытаться исправлять бреши веб-приложений с помощью сервера - это неправильно. Так же надо добавить, что если кто захочет его использовать, то проще заюзать уже готовые, идующие в комплекте с mod_security, наборы правил (в том числе и против XSS, SQL inj, и так далее). Причём тут служба индексации и подпись сервера? А где ServerTokens? Code: # # ServerTokens # This directive configures what you return as the Server HTTP response # Header. The default is 'Full' which sends information about the OS-Type # and compiled in modules. # Set to one of: Full | OS | Minor | Minimal | Major | Prod # where Full conveys the most information, and Prod the least. # ServerTokens Prod # # Optionally add a line containing the server version and virtual host # name to server-generated pages (internal error documents, FTP directory # listings, mod_status and mod_info output etc., but not CGI generated # documents or custom error documents). # Set to "EMail" to also include a mailto: link to the ServerAdmin. # Set to one of: On | Off | EMail # ServerSignature EMail