Гайд конечно хорош, но он не подходит для выделенного сервера. Если сервер находится в ДЦ, то айвэб не будет работать в локальной среде, так как к локальной сети сервера будет не возможно подключиться.
upd: Защищаем шлюз от проброса 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 Пропускаем пакеты относящиеся к установленным соединениям. © ТАМИОР
upd: Небольшая пакость для сканеров портов. Разработано не совсем мной, я просто лишь уменьшил все в два правила. Собственно суть заключается в следующем. Весь трафик идущий не на 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 iptables -P INPUT DROP iptables -P INPUT DROP - ставите либо после либо перед правилами, у каждого сервера почему-то по разному работает. --connlimit-above 5 - количество разрешенных подключений с одного IP адреса. Редактируете под себя. Ну и в результате сканирования с набором таких правил сканер может Вам показать огромное количество открытых портов, на самом деле закрытых =) P.S. Это не относится к серверной части Perfect World. Это только для Web-сервера. P.P.S. Выложил в эту тему, так как веду полный разбор защиты средствами iptables.
upd: Защита порта 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. Дана только начальная точка, доработку и все прочее доделываете самостоятельно исходя из гайда. © ТАМИОР
Скачиваешь с сервера файл world2.log (лежит в /home/logservice/logs) и открываешь его в этой программе. А дальше читаешь)
Заметил, что в некоторых шаровых сборках часто попадается пустой данж рай3 и в локации рая не хватает нпц для выполнения квестов. Долго рылся и дополнял карты. Выкладываю, вдруг кому-нибудь пригодится. Распаковываем архив и кидаем папки на сервер в /home/gamed/config/ с заменой. Скачать с Narod.ru Скачать с Яндекса © ТАМИОР
На многих шаровых сборках в ГИ либо нет пис зоны вообще, либо весь ГИ пис зона. Вот Вам файлы (сервер+клиент), в котрых Город Истоков порадует Вас пис зоной на месте телепорта и респа. Так же в дополнение в файлах идет пис зона мест осады Города Драконов. region.sev залить на сервер в папку /home/gamed/config/world/ region.clt залить в клиент в папку /element/maps/world/ Скачать с Narod.ru © ТАМИОР
upd: Процедура -p tcp означает по какому протоколу производится проверка. Для протокола UDP будет выглядеть так -p udp, если нужны ограничения на оба протокола, то нужно написать два правила (как подумали бы многие). Достаточно просто не указывать протокол проверки: iptables -A INPUT -s IP --dport №№ -j ACCEPT iptables -A INPUT --dport №№ -j REJECT
iptables -A INPUT -i eth0 -p tcp --dport 29000 -m state --state NEW -m recent --set --name pw iptables -A INPUT -i eth0 -p tcp --dport 29000 -m state --state NEW -m recent --update --seconds 30 --hitcount 3 --rttl --name pw -j DROP --set --name pw - это имя правила. --seconds 30 - время, на которое сервер банит пользователя. --hitcount 3 - количество коннектов в секунду, при превышении которого будет бан. Как прописать количество коннектов в минуту, прости, не знаю.
На фоне водопада наверное красивее бы смотрелось. (ИМХО)
Начало только по входящим, в плане еще отсечение флуда по tcp\udp протоколам, отсечение DDoS атак методом скоростного коннекта, и разбор по исходящим соединениям =) Если смогу что-то дельное наработать, выложу.
Этот гайд составлялся только как пример. Сами правила и их постановку уже будут продумывать юзвери. Я только лишь разобрал саму суть и показал пару примеров.
После долгих тестов и чтения дополнительных манулов составил защиту для сервера. В целом спасибо pilad'у за мануал и небольшое разъяснение. Итак. Для начала нужно разрешить то, что Вам нужно. К примеру нужно разрешить порты 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/ Правила вступают в силу только после перезагрузки серверной машины или перезагрузки apache2 и iptables. Еще раз огромное спасибо pilad'у и всем кто давал советы. Так же спасибо за помощь в тестировании Hecate, Quutamo и проекту PWPlay Online. © ТАМИОР
//off и долго вы еще писюнами мериться будете?
//offtop а может вы разборки перенесете в более закрытое место такое как скайп, лс и тд.?
Мда... Вот из-за такой критики чаще всего народ перестает что либо вкладывать в шару... Хочешь шаблон - купи, моё мнение, что бесплатных и нормальных шаблонов нету Зачем тогда вообще шару придумали? Давайте все всё будут покупать :D KRAVCH, за старание плюсанул, шаблон не скажу что красив, но все же если еще немного с ним повозиться можно сделать красоту.
www.denwer.ru для вЕнды нэ ? Тоже как вариант подходит =_=
Что в этом гайде хорошего? я не чего нужного и полезного не нашел! Скоро уже гайды пойдут как менять ноздрю персонажу! Ну видимо у тебя просто мозг не мог сообразить для чего гайд написан. Лично мне он помог в нескольких аспектах да и не только мне он помог... За такую работу на продвижение бы пользователя.
После долгих мучений не подключилась программка к базе :D данные введены правильно, проверял много раз :D
А можно было сделать еще проще. Поставить убунту и мускуль =) Тестируй сколько влезет совершенно бесплатно)
Имена участников (разделяйте запятой).