Распределенная защита от атак.
Самое основная защита от атак отказа в обслуживании (DoS атак) - это скрыть от трухацкеров уязвимые сервисы.
Под уязвимыми сервисами я подразумеваю GamedBD, UniqueNamed, GS, GDelivery, GProvider. Они не контроллируют траффик, поступаемый к ним, не шифруют его, не проверяют его легитимности и суки падают от любой ошибки.
Игрокам известна, например, уязвимость "ивеб со своего компа" (меняем ip в конфиге ивеба на ip сервера и используем 80% возможностей Iweba).
Решение есть!
1. Арендуем 2 машины: 1 - слабее (0,5 GiB ОЗУ; 1,2 ГГц; можно VPS), вторую - сильнее (большая мощность). Обязательно разные машины с разными ip адресами. Желательно один провайдер, чтобы ping между ними был минимален и скорость передачи данных максимально.
2. Ставим следующие конфиги
IP слабой - ip1
IP сильной - ip2
GLink :
3. На сильную машину ставим все, кроме GLink и вебсервера. Запускаем.
4. На слабую машину устанавливаем только nginx (apache) c PHР для ЛК, GLink, загружаем конфиг для GLink. Запускаем.
4.1. Для ЛК открываем mysql для ip1.
5 (примечание). Можно заказать несколько "слабых" машин. Сервера поддерживают несколько GLink => можно продублировать сервис => большая устойчивость.
Теперь защита:
1. Блокируем все подключения к сильной машине отовсюду.
2. Разрешаем все подключения к сильной со слабой.
3. Защищаем слабую машину.
4. Никому нельзя говорить ip2.
+ данной схемы:
Злоумышленник не узнает ip2 => не может DoSить эту машину => она не сможет упасть из-за наплыва траффика.
Злоумышленник не сможет послать на ip2 никакие данные напрямую => исключен доступ к GamedBD (редактирование персов, прописываение вещей и прч.), исключена возможность принятия битых пакетов, вызывающих segmentation fault (падение сервиса).
см. Пункт 5 (примечание).
Злоумышленник не сможет использовать эксплойты для проникновения на сильную машину и украсть базы данных и ценную сборку.
- данной схемы.
Незначительное увеличение pinga.
Усложняется контроль сервера. Следить за двумя серверами сложнее.
Такая система используется на pwmail. Только там каждый сервис на отдельной машине.
PS: в описании раздела исправьте:"Мы не требуем от Вас чего то сверх естественного" на "Мы не требуем от Вас чего-то сверхъестественного"
Самое основная защита от атак отказа в обслуживании (DoS атак) - это скрыть от трухацкеров уязвимые сервисы.
Под уязвимыми сервисами я подразумеваю GamedBD, UniqueNamed, GS, GDelivery, GProvider. Они не контроллируют траффик, поступаемый к ним, не шифруют его, не проверяют его легитимности и суки падают от любой ошибки.
Игрокам известна, например, уязвимость "ивеб со своего компа" (меняем ip в конфиге ивеба на ip сервера и используем 80% возможностей Iweba).
Решение есть!
1. Арендуем 2 машины: 1 - слабее (0,5 GiB ОЗУ; 1,2 ГГц; можно VPS), вторую - сильнее (большая мощность). Обязательно разные машины с разными ip адресами. Желательно один провайдер, чтобы ping между ними был минимален и скорость передачи данных максимально.
2. Ставим следующие конфиги
IP слабой - ip1
IP сильной - ip2
GLink :
Код:
[GLinkServer1]
type = tcp
port = 29000
address = ip1
so_sndbuf = 12288
so_rcvbuf = 12288
ibuffermax = 16384
obuffermax = 65536
tcp_nodelay = 0
listen_backlog = 10
accumulate = 131072
max_users = 3000
halflogin_users = 6000
sender_interval = 200000
accumu_packets = 32768
mtrace = /tmp/m_trace.link
compress = 0
close_discard = 1
urgency_support = 1
version = 10304
[GLinkServer2]
type = tcp
port = 29000
address = ip1
so_sndbuf = 12288
so_rcvbuf = 12288
ibuffermax = 16384
obuffermax = 65536
tcp_nodelay = 0
listen_backlog = 10
accumulate = 131072
max_users = 3000
halflogin_users = 6000
sender_interval = 200000
accumu_packets = 32768
mtrace = /tmp/m_trace.link
compress = 0
close_discard = 1
urgency_support = 1
version = 10304
[GLinkServer3]
type = tcp
port = 29000
address = ip1
so_sndbuf = 12288
so_rcvbuf = 12288
ibuffermax = 16384
obuffermax = 65536
tcp_nodelay = 0
listen_backlog = 10
accumulate = 131072
max_users = 3000
halflogin_users = 6000
sender_interval = 200000
accumu_packets = 32768
mtrace = /tmp/m_trace.link
compress = 0
close_discard = 1
urgency_support = 1
version = 10304
[GLinkServer4]
type = tcp
port = 29000
address = ip1
so_sndbuf = 12288
so_rcvbuf = 12288
ibuffermax = 16384
obuffermax = 65536
tcp_nodelay = 0
listen_backlog = 10
accumulate = 131072
max_users = 3000
halflogin_users = 6000
sender_interval = 200000
accumu_packets = 32768
mtrace = /tmp/m_trace.link
compress = 0
close_discard = 1
urgency_support = 1
version = 10304
[GDeliveryClient]
type = tcp
port = 29100
address = ip2
so_sndbuf = 65536
so_rcvbuf = 65536
ibuffermax = 1048576
obuffermax = 1048576
tcp_nodelay = 0
accumulate = 268435456
[GProviderServer1]
type = tcp
port = 29301
address = 127.0.0.1
so_sndbuf = 65536
so_rcvbuf = 65536
ibuffermax = 1048576
obuffermax = 1048576
tcp_nodelay = 0
accumulate = 268435456
[GProviderServer2]
type = tcp
port = 29302
address = 127.0.0.1
so_sndbuf = 65536
so_rcvbuf = 65536
ibuffermax = 1048576
obuffermax = 1048576
tcp_nodelay = 0
accumulate = 268435456
[GProviderServer3]
type = tcp
port = 29303
address = 127.0.0.1
so_sndbuf = 65536
so_rcvbuf = 65536
ibuffermax = 1048576
obuffermax = 1048576
tcp_nodelay = 0
accumulate = 268435456
[GProviderServer4]
type = tcp
port = 29304
address = 127.0.0.1
so_sndbuf = 65536
so_rcvbuf = 65536
ibuffermax = 1048576
obuffermax = 1048576
tcp_nodelay = 0
accumulate = 268435456
[GFactionClient]
type = tcp
port = 29500
address = ip2
so_sndbuf = 65536
so_rcvbuf = 65536
ibuffermax = 1638400
obuffermax = 1638400
tcp_nodelay = 0
accumulate = 268435456
[LogclientClient]
type = udp
port = 11100
address = ip2
so_sndbuf = 65536
so_rcvbuf = 65536
ibuffermax = 65536
obuffermax = 1048576
accumulate = 1048576
[LogclientTcpClient]
type = tcp
port = 11101
address = ip2
so_sndbuf = 65536
so_rcvbuf = 65536
ibuffermax = 65536
obuffermax = 1048576
accumulate = 1048576
[ThreadPool]
threads = (1,3)(100,1)(101,1)(0,1)
max_queuesize = 1048576
prior_strict = 1
3. На сильную машину ставим все, кроме GLink и вебсервера. Запускаем.
4. На слабую машину устанавливаем только nginx (apache) c PHР для ЛК, GLink, загружаем конфиг для GLink. Запускаем.
4.1. Для ЛК открываем mysql для ip1.
5 (примечание). Можно заказать несколько "слабых" машин. Сервера поддерживают несколько GLink => можно продублировать сервис => большая устойчивость.
Теперь защита:
1. Блокируем все подключения к сильной машине отовсюду.
2. Разрешаем все подключения к сильной со слабой.
3. Защищаем слабую машину.
4. Никому нельзя говорить ip2.
+ данной схемы:
Злоумышленник не узнает ip2 => не может DoSить эту машину => она не сможет упасть из-за наплыва траффика.
Злоумышленник не сможет послать на ip2 никакие данные напрямую => исключен доступ к GamedBD (редактирование персов, прописываение вещей и прч.), исключена возможность принятия битых пакетов, вызывающих segmentation fault (падение сервиса).
см. Пункт 5 (примечание).
Злоумышленник не сможет использовать эксплойты для проникновения на сильную машину и украсть базы данных и ценную сборку.
- данной схемы.
Незначительное увеличение pinga.
Усложняется контроль сервера. Следить за двумя серверами сложнее.
Такая система используется на pwmail. Только там каждый сервис на отдельной машине.
PS: в описании раздела исправьте:"Мы не требуем от Вас чего то сверх естественного" на "Мы не требуем от Вас чего-то сверхъестественного"