- •Защита it-инфраструктуры от ddos Содержание
- •1 Характеристики DoS-атак
- •1.1 Краткое описание DoS/dDoS-атак
- •1.2 Обнаружение DoS/dDoS-атак
- •2 Анализ наиболее распространённых методов защиты
- •2.1 Программные методы защиты
- •2.1.1 Icmp-флуд
- •2.1.4 Http-флуд
- •2.2 «Универсальная методика защиты»
- •2.1.5 Обновление используемого по и тщательная проверка log-файлов
- •2.3 Методы защиты, основанные на аппаратном и сетевом подходах
- •2.3.1 Лишение атаки «смысла»
- •2.3.2 Решения компании Cisco
- •2.3.3 Решения компании Reactive Networks
- •2.3.4 Решения компании Intel
- •2.4 Комплексное решение на основе кластеризации
- •2.5 Решение на основе front-end/back-end
- •3 Разработка программно-аппаратного комплекса
- •3.1 Выбор концепции для проектирования пак
- •3.2 Архитектура пак
- •4 Экспериментальное исследование пак
- •Заключение
- •Список использованных источников
- •Приложение в Настройка Varnish
Приложение в Настройка Varnish
/boot/loader.conf
net.inet.tcp.syncache.hashsize="1024"
net.inet.tcp.syncache.bucketlimit="100"
net.inet.tcp.tcbhashsize="4096"
vm.kmem_size="1G"
kern.ipc.nmbclusters="262144"
net.inet.tcp.hostcache.hashsize="16384"
net.inet.tcp.hostcache.bucketlimit="100"
/etc/sysctl.conf
#
нужно
для
jumbo frames . смотреть
можно
через
netstat -m : 18192/1733/19925/65536 4k (page size) jumbo
clusters in use
(current/cache/total/max)
kern.ipc.nmbjumbop=131072
#
нужно
для
варниша
kern.threads.max_threads_per_proc=100000
net.inet.tcp.msl=7500
net.inet.tcp.delayed_ack=0
net.inet.ip.random_id=1
net.inet.ip.fw.dyn_buckets=65536
net.inet.ip.fw.dyn_max=65536
net.inet.ip.fw.dyn_ack_lifetime=120
net.inet.ip.fw.dyn_syn_lifetime=10
net.inet.ip.fw.dyn_fin_lifetime=2
net.inet.ip.fw.dyn_short_lifetime=10
net.inet.tcp.keepidle=40000
net.inet.tcp.keepintvl=40000
net.inet.tcp.keepinit=40000
net.inet.tcp.sendspace=65536
net.inet.tcp.recvspace=16384
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
kern.maxvnodes=400000
#
увеличивает
количество
tcptw для
хранения
TAIM_WAIT сокетов
net.inet.tcp.maxtcptw=40960
#
порты
для
исходящих
соединений
начинаются
с
номера
16384, вместо
49152. Также
надо
firewall подправить,
чтобы
он
этот
интервал
портов
учитвал
#
net.inet.ip.portrange.first=16384
# выдавать
порты
для
исходящих
соединений
последовательно
net.inet.ip.portrange.randomized=0
#
не
переводить
в
состояние
TAIM_WAIT соединения
на
локальном
сервере
#
bugly
#net.inet.tcp.nolocaltimewait=1
#
разрешаем
переключение
с
syncache на
syncookies, если
syncache переполнен
net.inet.tcp.syncookies=1
#
увеличиваем
максимальное
количество
сокетов.
увеличивает
лимиты
в
vmstat -z для
socket, inpcb и
tcpcb. можно
задрать
до
204800, тогда
будет
сложнее
задосить
kern.ipc.maxsockets=204800
#
сложнее
задосить.
kern.maxfiles задрать,
а
kern.maxfilesperproc не
задирать,
если
реально
не
требуется.
kern.maxfiles=204800
kern.maxfilesperproc=200000
#
нужно
чтобы
соединения
не
сбрасывались,
если
не
будем
успевать
их
акцептить
kern.ipc.somaxconn=4096
#
нужно
чтобы
не
падали
сообщения
вроде:
kernel: Limiting open port RST response from 596 to 200
packets/sec
net.inet.icmp.icmplim=2000
debug.minidump=1
/etc/rc.conf.d/varnishd
varnishd_enable="YES"
varnishd_flags="-P
/var/run/varnishd.pid -a xx.xx.xx.xx:80 -f
/usr/local/etc/varnish/varnish.vcl -T localhost:6082 -s
file,/data,12G -u www -g www -p listen_depth=4096 -p
srcaddr_hash=200003 -p lru_interval=600 -p overflow_max=4096 -p
thread_pools=8 -p
thread_pool_max=40000"
/usr/local/etc/varnish/varnish.vcl
backend
default {
.host = "xx.xx.xx.xx";
.port =
"80";
}
acl ournet
{
"xx.xx.xx.";
"xx.xx.xx.xx"/xx;
}
#Below
is a commented-out copy of the default VCL logic. If you
#redefine
any of these subroutines, the built-in logic will be
#appended
to your code.
sub vcl_recv {
if (req.request != "GET"
&&
req.request != "HEAD" &&
req.request
!= "PUT" &&
req.request != "POST"
&&
# req.request != "TRACE" &&
#
req.request != "OPTIONS" &&
req.request !=
"DELETE") {
/* Non-RFC2616 or CONNECT which is weird.
*/
pipe;
# error 405 "Not allowed";
}
#
remove usless headers
unset req.http.Cookie;
unset
req.http.Authenticate;
unset req.http.Accept;
unset
req.http.Accept-Language;
unset
req.http.Accept-Encoding;
unset
req.http.Accept-Charset;
unset req.http.Referer;
#
remove args from url
set req.url = regsub(req.url, "\?.*",
"");
# if content changing
if (req.request
== "DELETE" || req.request == "PUT") {
if
(client.ip ~ ournet) {
lookup;
} else {
error 405 "Not
allowed";
}
}
if (req.request != "GET"
&& req.request != "HEAD") {
/* We only deal
with GET and HEAD by default */
pass;
}
if
(req.http.Authorization || req.http.Cookie) {
/* Not
cacheable by default */
pass;
}
lookup;
}
sub
vcl_pipe {
pipe;
}
sub vcl_pass {
pass;
}
sub
vcl_hash {
set req.hash += req.url;
if (req.http.host)
{
set req.hash += req.http.host;
} else {
set req.hash
+= server.ip;
}
hash;
}
sub vcl_hit {
#
if content changing, remove it from cache
if (req.request ==
"DELETE" || req.request == "PUT") {
set
obj.ttl = 0s;
pass;
}
if (!obj.cacheable)
{
pass;
}
deliver;
}
sub
vcl_miss {
# if content changing, remove it from cache
if
(req.request == "DELETE" || req.request == "PUT")
{
pass;
}
fetch;
}
sub vcl_fetch
{
if (!obj.cacheable) {
pass;
}
# don't
cache redirects
if (obj.status == 302) {
pass;
}
if
(obj.http.Set-Cookie) {
pass;
}
set obj.prefetch
= -30s;
deliver;
}
sub vcl_deliver
{
deliver;
}
#sub vcl_discard {
# /* XXX:
Do not redefine vcl_discard{}, it is not yet supported */
#
discard;
#}
#
#sub vcl_prefetch {
# /* XXX: Do
not redefine vcl_prefetch{}, it is not yet supported */
#
fetch;
#}
#
#sub vcl_timeout {
# /* XXX: Do not
redefine vcl_timeout{}, it is not yet supported */
#
discard;
#}
#
sub vcl_error {
set
obj.http.Content-Type = "text/html;
charset=utf-8";
synthetic {"
<?xml
version="1.0" encoding="utf-8"?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>"}
obj.status " " obj.response
{"</title>
</head>
<body>
<h1>Error
"} obj.status " " obj.response {"</h1>
<p>"}
obj.response {"</p>
<h3>Guru
Meditation:</h3>
<p>XID: "} req.xid
{"</p>
<address><a
href="
http://www.varnish-cache.org/">Varnish</a></address>
</body>
</html>
"};
deliver;
}
