В Mikrotik все почти так же, но функциями он немного ограничен.
Для примера я взял 2 выделенных IPv4, выделил 2 VPS сервера и выключил фильтрацию через Общую сеть на CISCO ASA.
И так - у меня 2 IPv4 без так сказать l3/l4/l7 защиты:
Первый IP(1.1.1.1) это будет VPS Debian OS = Apache2 + php5 + mysql на котором будет стоять сайт с движком Xenforo, что бы атаки шли по полной.
Второй IP(2.2.2.2) это будет VPS Router OS Mikrotik 5.20 c крякнутой лицензией.
И так я поставил 2 VPS сервера с IPv4 внешними.
Пробросил NAT с Router VPS 2.2.2.2 => на Debian VPS 1.1.1.1
Запускаю SYN Flood на 80 порт = Сервер apache2 перестал отвечать(флуд вызвал нагрузку успешно), запустил GET/POST атаку = Сервер apache2 перестал отвечать(флуд вызвал нагрузку успешно). И так что же делать ? Задам сразу цепочку моих правил которые я прописал на быструю руку, что довольно эффективно повлияло на защиту http. Для начала я анализировал пакеты простых пользователей, а потом пакеты атакующих. Разница - огромная. Но даже если маленькая и то можно прописать целую цепочку правил для проверки и успешной фильтрации.
И так - правила лучше писать в той же последовательности как я укажу тут :
Правило 1 (Одобряем установленные соединения):
Код: Выделить всё
Chain = forward; Protocol = (6)tcp; Connection state = established; Action = accept;
Код: Выделить всё
Chain = forward; Protocol = (6)tcp; connection state = released; Action = accept;
Код: Выделить всё
Chain = forward; Protocol = (6)tcp; connection state = released; Action = drop;
Код: Выделить всё
Chain = forward; Protocol = (6)tcp; connection state = released; Action = drop;
Код: Выделить всё
Chain = forward; Protocol = (6)tcp; Dst. port = 80-443; connection state = new; Action = jump , Jupm Target = block-ddos;
Код: Выделить всё
Chain = block-ddos; Protocol = (6)tcp; Dst. port = 80-443; Dst. Limit = Rate 10/s, Brust 50 Limit by dst. address, Expire 50.00 ; Action = return;
Правило 7 (Создания IP листа для ddoser)
Код: Выделить всё
Chain = block-ddos; Protocol = (6)tcp; Dst. port = 80-443; Action = add src. address list, Address list = ddoser, time out = 00:10:00
Код: Выделить всё
Chain = block-ddos; Protocol = (6)tcp; Dst. port = 80-443; Action = add dst. address list, Address list = ddosed, time out = 00:10:00
Код: Выделить всё
Chain = forward; Protocol = (6)tcp; Dst. port = 80-443; Connection limit = Limit 200, Netmask 32; Action = add dst. address list, Address list = Limitor, time out = 00:10:00
Код: Выделить всё
Chain = forward; Protocol = udp; Action = reject (icmp network unreachable);
Список регэкспов :
Защита для PHP
Код: Выделить всё
^<HOST> -.*"(GET|POST).*\?.*\=http\:\/\/.* HTTP\/.*$
Код: Выделить всё
\[client <HOST>\] (File does not exist|script not found or unable to stat): [^ ]*/([^ ]*\.asp|[^ ]*\.dll|[^ ]*\.exe|admin|Admin|Ads|ads|apps|archive|awstats|b0ard|bin|blog|board|cgi|clan|cms|community|cube|database|datenbank|directforum|drupal|f0rum|file:|forum|horde|Horde|html|mail|myadmin|mysql|padmin|page|php|pma|PMA|rc|README|rms|round|scgi|script|seite|sql|stat|ucp.php|wbb|WBB|web|wm|wp-login.php|xmlrpc|xmlsrv)
Код: Выделить всё
^<HOST> - - \[[^]]+\] "GET / HTTP/1.1"$
Код: Выделить всё
^<HOST>.* "HEAD / .*$
Код: Выделить всё
^<HOST>.* "POST /xmlrpc.php HTTP.*$
Код: Выделить всё
\[[^]]*\] \[(error|\S+:\S+)\]( \[pid \d+:\S+ \d+\])? \[client <HOST>(:\d{1,5})?\]
Код: Выделить всё
^<HOST> - - \[[^]]+\] "POST / HTTP/1.1"$
Код: Выделить всё
^%(_apache_error_client)s (AH01797: )?client denied by server configuration: (uri )?\S*\s*$
^%(_apache_error_client)s (AH01617: )?user .* authentication failure for "\S*": Password Mismatch$
^%(_apache_error_client)s (AH01618: )?user .* not found(: )?\S*\s*$
^%(_apache_error_client)s (AH01614: )?client used wrong authentication scheme: \S*\s*$
^%(_apache_error_client)s (AH\d+: )?Authorization of user \S+ to access \S* failed, reason: .*$
^%(_apache_error_client)s (AH0179[24]: )?(Digest: )?user .*: password mismatch: \S*\s*$
^%(_apache_error_client)s (AH0179[01]: |Digest: )user `.*' in realm `.+' (not found|denied by provider): \S*\s*$
^%(_apache_error_client)s (AH01631: )?user .*: authorization failure for "\S*":\s*$
^%(_apache_error_client)s (AH01775: )?(Digest: )?invalid nonce .* received - length is not \S+\s*$
^%(_apache_error_client)s (AH01788: )?(Digest: )?realm mismatch - got `.*' but expected `.+'\s*$
^%(_apache_error_client)s (AH01789: )?(Digest: )?unknown algorithm `.*' received: \S*\s*$
^%(_apache_error_client)s (AH01793: )?invalid qop `.*' received: \S*\s*$
^%(_apache_error_client)s (AH01777: )?(Digest: )?invalid nonce .* received - user attempted time travel\s*$
Код: Выделить всё
^<HOST> -.*"(GET|POST).*HTTP.*"(Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|ContentSmartz|DataCha0s/2\.0|DBrowse 1\.4b|DBrowse 1\.4d|Demo Bot DOT 16b|Demo Bot Z 16b|DSurf15a 01|DSurf15a 71|DSurf15a 81|DSurf15a VA|EBrowse 1\.4b|Educate Search VxB|EmailSiphon|EmailSpider|EmailWolf 1\.00|ESurf15a 15|ExtractorPro|Franklin Locator 1\.8|FSurf15a 01|Full Web Bot 0416B|Full Web Bot 0516B|Full Web Bot 2816B|Guestbook Auto Submitter|Industry Program 1\.0\.x|ISC Systems iRc Search 2\.1|IUPUI Research Bot v 1\.9a|LARBIN-EXPERIMENTAL \(efp@gmx\.net\)|LetsCrawl\.com/1\.0 +http\://letscrawl\.com/|Lincoln State Web Browser|LMQueueBot/0\.2|LWP\:\:Simple/5\.803|Mac Finder 1\.0\.xx|MFC Foundation Class Library 4\.0|Microsoft URL Control - 6\.00\.8xxx|Missauga Locate 1\.0\.0|Missigua Locator 1\.9|Missouri College Browse|Mizzu Labs 2\.2|Mo College 1\.9|MVAClient|Mozilla/2\.0 \(compatible; NEWT ActiveX; Win32\)|Mozilla/3\.0 \(compatible; Indy Library\)|Mozilla/3\.0 \(compatible; scan4mail \(advanced version\) http\://www\.peterspages\.net/?scan4mail\)|Mozilla/4\.0 \(compatible; Advanced Email Extractor v2\.xx\)|Mozilla/4\.0 \(compatible; Iplexx Spider/1\.0 http\://www\.iplexx\.at\)|Mozilla/4\.0 \(compatible; MSIE 5\.0; Windows NT; DigExt; DTS Agent|Mozilla/4\.0 efp@gmx\.net|Mozilla/5\.0 \(Version\: xxxx Type\:xx\)|NameOfAgent \(CMS Spider\)|NASA Search 1\.0|Nsauditor/1\.x|PBrowse 1\.4b|PEval 1\.4b|Poirot|Port Huron Labs|Production Bot 0116B|Production Bot 2016B|Production Bot DOT 3016B|Program Shareware 1\.0\.2|PSurf15a 11|PSurf15a 51|PSurf15a VA|psycheclone|RSurf15a 41|RSurf15a 51|RSurf15a 81|searchbot admin@google\.com|ShablastBot 1\.0|snap\.com beta crawler v0|Snapbot/1\.0|Snapbot/1\.0 \(Snap Shots, +http\://www\.snap\.com\)|sogou develop spider|Sogou Orion spider/3\.0\(+http\://www\.sogou\.com/docs/help/webmasters\.htm#07\)|sogou spider|Sogou web spider/3\.0\(+http\://www\.sogou\.com/docs/help/webmasters\.htm#07\)|sohu agent|SSurf15a 11 |TSurf15a 11|Under the Rainbow 2\.2|User-Agent\: Mozilla/4\.0 \(compatible; MSIE 6\.0; Windows NT 5\.1\)|VadixBot|WebVulnCrawl\.unknown/1\.0 libwww-perl/5\.803|Wells Search II|WEP Search 00)"$
Код: Выделить всё
Chain = forward; Protocol = (6)tcp; Dst. port = 80-443; Layer 7 protocol = apache-attacker; Action = drop;
Если будут вопросы или исправления, пишите. Так же можете задать личные вопросы или советы в ЛС или по почте [email protected]