Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Защита игрового и web сервера средствами iptables
#1
После долгих тестов и чтения дополнительных манулов составил не большой гайд по защите игрового и web сервера средствами iptables.
Итак. Рассмотрим защиту игрового сервера на примерах ограничения портов и закрытия портов.
Для начала нужно разрешить то, что Вам нужно. К примеру нужно разрешить порты 22 (ssh) и 80 (http)
Код:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Далее нам нужно запретить все, что не разрешено.
Код:
iptables -P INPUT REJECT
Но разрешать 22 порт всем думаю не стоит. Поэтому надо его ограничить для определенного IP или маски.
Код:
iptables -A INPUT -p tcp -s IP --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT
Данное правило разрешит доступ на 22 порт только тому адресу, который Вы впишите. Всех остальных будет сбрасывать. Можно поставить вместо REJECT команду DROP. Но я пишу именно так, потому что на тестах команда DROP у меня выдавала сбой в работе защиты.
Так же можно запретить какому либо IP или маске подключаться к порту. Например, нужно запретить IP адресу 192.168.0.1 подключаться на порт 443:
Код:
iptables -A INPUT -p tcp -s 192.168.0.1 --dport 443 -j REJECT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Следует запомнить важную деталь. Все правила читаются сверху вниз! И команду "закрыть все" надо вписывать всегда последней, в противном случае защита не гарантирует стабильность.
Тоже самое можно сделать и с исходящими соединениями, но эту часть я ещё не разбирал. Если займусь, так же сделаю мини гайд. Надеюсь кому-нибудь будет полезно.
Все правила пишутся в файле rc.local перед строкой exit 0, который лежит в папке /etc/
Правила вступают в силу только после перезагрузки серверной машины или перезагрузки модуля iptables.
Огромное спасибо pilad'у и всем кто давал советы и мануалы.
Так же спасибо за помощь в тестировании Hecate, Quutamo и проекту PWPlay Online.

Защита web части.
Защищаем шлюз от проброса icmp туннеля.

Итак, рассмотрим защиту от проброса в 2 варианта.
Вариант 1: Фильтрация на основе размера пакета.
При пробрасывании icmp туннеля характерны нестандартные размеры пересылаемых icmp пакетов (echo-request), следовательно для защиты от туннеля можно фильтровать icmp трафик по длине пакета.
Ping по умолчанию посылает пакет с данными размером 56 байтов + 8 байтов icmp заголовок + 20 байтов ip заголовок, итого 84 байта.
Код:
iptables -A FORWARD -p icmp --icmp-type echo-request -m length --length 84 -j ACCEPT
Мы разрешили icmp пакет типа echo-request длинной 84 байта.
Код:
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
Пропускаем пакеты относящиеся к установленным соединениям.
Вариант 2: Фильтрация на основе номера последовательности.
При последовательной посылке icmp пакетов echo-request к хосту (ping), поле sequence number заголовка icmp пакета увеличиваться на 1 с каждым посланным пакетом.
Код:
iptables -A FORWARD -p icmp --icmp-type echo-request -m recent --name BLOCK --rcheck --seconds 240 -j DROP
Этой командой мы создадим таблицу для хранения ip адресов, которые будем блокировать, с интервалом обновления 240 секунд.
Код:
iptables -A FORWARD -p icmp --icmp-type echo-request -m string --algo kmp --from 27 --to 28 --hex-string "|0f|" -m recent --name BLOCK --set -j DROP
Проверяем вторую половину поля sequence number -from 27 --to 28, если оно равно 15 --hex-string "|0f|" , то добавляем в таблицу BLOCK для блокирования icmp пакетов с этого ip.
Код:
iptables -A FORWARD -p icmp --icmp-type echo-request -m string --algo kmp --from 26 --to 27 ! --hex-string "|00|" -m recent --name BLOCK --set -j DROP
Проверяем первую половину поля sequence number -from 26 --to 27 на отличное от нуля значения ! --hex-string "|00|" , если больше то добавляем в таблицу BLOCK для блокирования icmp пакетов с этого ip
Код:
iptables -A FORWARD -p icmp --icmp-type echo-request -j ACCEPT
Разрешаем icmp пакет типа echo-request.
Код:
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
Пропускаем пакеты относящиеся к установленным соединениям.

Защита порта 29000, 80 от сканирования.
Внимание: без некоторых дополнительных правил игровой порт станет не доступным для игроков или будет наблюдаться высокий пинг и разрывы!
Итак, что такое сканирование порта? Это отправка, как правило, одного пакета по протоколу tcp с флагом syn. Следовательно нам нужно запретить получать первый пакет и пропускать все остальные.
Код:
iptables -A INPUT -p tcp --dport 29000 -m state --state NEW -m hashlimit --hashlimit-name NAME1 --hashlimit-mode srcport --hashlimit-upto 1/m --hashlimit-burst 1 -j DROP
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m hashlimit --hashlimit-name NAME1 --hashlimit-mode srcport --hashlimit-upto 1/m --hashlimit-burst 1 -j DROP
iptables -A INPUT -p tcp --syn -m multiport --dports 29000,80 -j ACCEPT
Данная политика правил запретит первый пакет по протоколу tcp с флагом syn и пропустит все остальные. При сканировании сканер покажет Вам что порт закрыт. Данная политика подходит для порта 80 (проверено), для порта 29000 на свой страх и риск. Единственный минус: не значительно увеличится время соединения.
Значение -hashlimit-upto 1/m и --hashlimit-burst 1 может быть от 1 до 4, при увеличении значения задержка установки соединения будет пропорционально увеличиваться. То есть чем больше первых пакетов пропускается, тем дольше устанавливается соединение.
Так же данный метод может хорошо защитить от syn флуда (один из методов DDoS атаки).
Правила прописываются в файл rc.local по адресу /etc/, после написания правил следует перезагрузить iptables или саму серверную машину.
P.S. Дана только начальная точка, доработку и все прочее доделываете самостоятельно исходя из гайда.
Небольшая пакость для сканеров портов. Разработано не совсем мной, я просто лишь уменьшил все в два правила.
Собственно суть заключается в следующем. Весь трафик идущий не на 80 порт будет перенаправлен на 80 порт:
Код:
iptables -A PREROUTING -t nat -p tcp ! --dport 80 -j REDIRECT --to-port 80
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit ! --connlimit-above 5 -j ACCEPT
--connlimit-above 5 - количество разрешенных подключений с одного IP адреса. Редактируете под себя.
Ну и в результате сканирования с набором таких правил сканер может Вам показать огромное количество открытых портов, на самом деле закрытых =)
P.S. Это не относится к серверной части Perfect World. Это только для Web-сервера.

Защищаем http proxy от пробрасывания http туннеля.
При пробрасывании http туннеля через http proxy, http заголовок пакета имеет маленький размер порядка 80-90 байт, тогда как стандартный заголовок (передаваемый браузером) в среднем равен от 350 байт. Основываясь на этом будем настраивать фильтрацию трафика.

Создаем новую цепочку правил LENGHT
Код:
iptables -N LENGTH

Проверяем длину пакета, если меньше 350 байт то блокируем
Код:
iptables -A LENGTH -p tcp --dport 3128 -m length --length :350 -j DROP

Если пакет больше 350 байт то пропускаем
Код:
iptables -A LENGTH -p tcp --dport 3128 -j ACCEPT

Разрешаем подключение на порт 3128
Код:
iptables -A INPUT -p tcp --syn --dport 3128 -j ACCEPT

В установленом соединении проверяем пакеты на запрос GET --hex-string "|47 45 54 20|" если есть такой пакет то направляем его в цепочку LENGTH для проверки длины пакета
Код:
iptables -A INPUT -p tcp --dport 3128 -m state --state ESTABLISHED -m string --algo kmp --hex-string "|47 45 54 20|" --from 52 --to 56 -j LENGTH

© ТАМИОР
Ответ
#2
http://forum.zone-game.info/showpost.php...ostcount=9
Ответ
#3
Сравниваем обе темы. Тут дано нормальное описание, понятное 99% посетителям форума.
К тому же, в той теме много лишнего в правилах в плане портов.
И еще, человек, создающий ПВ сервер не полезет в раздел линейки для поиска защиты.

P.S. Мозг онлайн =\
Если администрация или модераторы посчитают тему не нужной, могут удалить...
Ответ
#4
Защита так для малолеток которые досят....

Добавлено через 31 секунду
Смогу продосить иптаблес без проблем....
Ответ
#5
Ок оставьте iP и Порт,протестируем.
Ответ
#6
ZmeiChi Написал:Защита так для малолеток которые досят....

Добавлено через 31 секунду
Смогу продосить иптаблес без проблем....
Моя защита установлена на трех нормальных проектах, ни один не упал под нагрузкой ДДоС. Прежде чем говорить о длине своего органа, подумайте, не окажется ли он меньше среднестатистического размера.
И да, если минус ставите, постарайтесь составить нормальное описание а не букофку "f"...
Pain[The];141325 Написал:Ок оставьте iP и Порт,протестируем.
Подробнее.
Ответ
#7
Ниоро Написал:Моя защита установлена на трех нормальных проектах, ни один не упал под нагрузкой ДДоС. Прежде чем говорить о длине своего органа, подумайте, не окажется ли он меньше среднестатистического размера.
И да, если минус ставите, постарайтесь составить нормальное описание а не букофку "f"...

Подробнее.

Твоя защита? пахахаха не смеши.... Эта защиту уже есть давно в шаре на морге и пвдеве и уверен на 100500% что не ты там её выложил....

Конечно если вы досили с интернет каналом 1 кб/сек Colinux даже не упадёт.

Дай ip и порт любого проекта где ты ставил эту защиту я покажу как у тебя не падает
Ответ
#8
ZmeiChi Написал:Защита так для малолеток которые досят....

Добавлено через 31 секунду
Смогу продосить иптаблес без проблем....
Чудак человек. Вы придумали лучший аналог iptables? Среди всех софтовых файрволов это лучший выбор. Заддосить можно все что угодно, даже аппаратные файрволы. Было бы желание и ресурсы.

p.s. автору хотя бы за то что написал много букв + в репу.
p.s. ZmeiChi тут понты типа "Дай ип и тебе КаПеЦ" не ценятся, а вот минус можно отхватить легко
Ответ
#9
m095 Написал:Чудак человек. Вы придумали лучший аналог iptables? Среди всех софтовых файрволов это лучший выбор. Заддосить можно все что угодно, даже аппаратные файрволы. Было бы желание и ресурсы.

p.s. автору хотя бы за то что написал много букв + в репу.
p.s. ZmeiChi тут понты типа "Дай ип и тебе КаПеЦ" не ценятся, а вот минус можно отхватить легко

Понимаешь, он решил что эта защита ///невъебеная\\\

И еще он выдаёт её за свою
Ответ
#10
ZmeiChi Написал:Понимаешь, он решил что эта защита ///невъебеная\\\

И еще он выдаёт её за свою
Каждый мануал по iptables похож на любой другой, потому как это набор команд. Даже если он его скопипастил, это не повод так себя вести.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Сборка сервера 1.4.7(v80) by MrKiller Kn1fe12 15 15,031 04-14-2016, 12:15 PM
Последний пост: Hamper
  Перенос сервера VirtualBox (Проблемы) toks 4 3,662 01-20-2015, 05:44 AM
Последний пост: toks
  Создаю сервера OksidAzota 0 3,190 12-27-2014, 01:41 PM
Последний пост: OksidAzota
  Создаю сервера Perfect World 3ptop 1 3,943 05-11-2014, 11:09 AM
Последний пост: Smiler
  Сборка сервера 1.4.8v85 Kn1fe12 0 2,283 01-16-2014, 09:57 PM
Последний пост: Kn1fe12
  Iweb не может подключиться к базе сервера mallins 10 4,499 12-10-2013, 09:20 PM
Последний пост: asura013
  Сборщика сервера 1.4.6 Anasteisha 3 2,755 10-09-2013, 06:12 PM
Последний пост: Lucifer1990
  Ищу сборку сервера 1.4.5 toks 12 3,903 09-21-2013, 10:01 PM
Последний пост: Kn1fe12
  Создание сервера PW Den127 0 1,657 06-21-2013, 05:30 PM
Последний пост: Den127
  Сборка сервера 1.4.5 IIARTEMII 500 149,141 04-03-2013, 06:33 PM
Последний пост: AlekIV

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)