Защищаем домашний сервер на Windows от DDoS

Поднять на домашнем компьютере сервер любимой игрушки или веб-сайта — это лишь полдела. Настоящее искусство — уметь грамотно его защитить. В этом небольшом материале мы рассмотрим методы защиты домашнего сервера на базе Windows от DDoS-атак.
8 апреля 2026, среда 13:01
Pavel_Priluckiy для раздела Блоги

Поднять на домашнем компьютере сервер любимой игрушки или веб-сайта — это лишь полдела. Настоящее искусство — уметь грамотно его защитить. В этом небольшом материале мы рассмотрим методы защиты домашнего сервера на базе Windows от DDoS-атак.

Пояснение

DDoS — это вид удалённых атак, использующих недостатки протокола TCP/IP для перегрузки интернет-канала или мощностей атакуемого сервера. Злоумышленнику нет нужды задействовать сетевые сканеры безопасности, ища бреши в системе: он эксплуатирует сам принцип передачи данных и готовность сервера отвечать на поступающий запрос.

Скрываем IP

Любая защита начинается с сокрытия IP-адреса. Ведь как злоумышленнику атаковать сервер, если его адрес не известен? Для этого специалистами по сетевой безопасности применяются так называемые зеркала (ретрансляторы), выступающие прокладкой между пользователем и конечным сервером.

Реализация скрытия IP сервера:

В итоге, DDoS-атаки поглощаются VPS, а IP вашего домашнего сервера остаётся скрытым. К огромному сожалению, я не могу подробно описать публично реализацию такого метода защиты из-за недавнего закона о средствах обхода блокировок, тем не менее имейте в виду, что это фундамент без которого не имеет никакого смысла поднимать что-то серьёзное на домашнем ПК.

Запрещаем ответы

По умолчанию практически все редакции Windows настроены таким образом, чтобы отвечать на любые запросы из вне. Затрудним жизнь хакеров запретив Windows отвечать на внешние команды.

P.S. Все последующие действия совершаются вами на свой страх и риск. Администрация overclockers.ru и автор материала не несут ответственности за любые возможные последствия.

1. Запрещаем через политики брандмауэра пропинговку нашего сервера.

2. Блокируем любой входящий трафик через брандмауэр для всех профилей (Domain, Public, Private), кроме того, что был нами разрешён на рабочие порты.

3. Запрещаем Windows оповещать злоумышленника, какие порты открыты/закрыты на сервере.

«PublicProfile»,"StandardProfile" | % { Set-ItemProperty «HKLM:\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\$_» «DisableStealthMode» 0 }

4. Отключаем так любимый хакерами протокол NetBIOS и службу SSDP.

5. Перезагружаем ПК и пробуем пропинговать сервер. Сервер молчит, как партизан на допросе!

Ограничиваем соединения

Если хакер всё же узнал настоящий IP-адрес сервера и бьёт напрямую, то необходимо всеми силами ограничить количество обрабатываемых соединений.

1. Ограничиваем число полуоткрытых TCP-соединений и уменьшаем время ожидания их подтверждения.

Оптимизирует TCP-параметры: минимальный RTO = 300 мс, максимум SYN-ретрансмиссий = 2, начальный RTO = 1000 мс. Ускоряет переподключение при потерях пакетов.

2. Уменьшаем время ожидания сброса неактивных соединений до 1 минуты, вместо стандартных 2 часов.

3. Запускаем скрипт, который автоматически будет сканировать порты сервера и банить злоумышленника, если с одного IP более 30 постоянных соединений.

$Limit = 30
$Ports = 3724, 8085, 7878
$Name  = "ANTIDDOS_TCP_BLOCK"
$Log   = "C:\tcp_bans.log"
$LastReset = Get-Date

if (-not (Get-NetFirewallRule -DisplayName $Name -EA 0)) {
    New-NetFirewallRule -DisplayName $Name -Direction Inbound -Action Block -RemoteAddress 255.255.255.255
}

Write-Host "[START] Active. Limit: $Limit" -FG Green

while($true) {
    # Очистка раз в 3 дня
    if ((Get-Date) -gt $LastReset.AddDays(3)) {
        Set-NetFirewallRule -DisplayName $Name -RemoteAddress 255.255.255.255
        $LastReset = Get-Date
        Write-Host "[RESET] Ban list cleared" -FG Cyan
    }

    $Conns = Get-NetTCPConnection -LocalPort $Ports -State Established -EA 0 |
             Group RemoteAddress | Where {$_.Count -gt $Limit -and $_.Name -notmatch "127.0.0.1|::1|0.0.0.0"}

    if ($Conns) {
        $Current = (Get-NetFirewallRule -DisplayName $Name | Get-NetFirewallAddressFilter).RemoteAddress
        $NewBans = $Conns.Name | Where {$Current -notcontains $_}

        if ($NewBans) {
            $Current += $NewBans
            Set-NetFirewallRule -DisplayName $Name -RemoteAddress $Current
            $Msg = "$(Get-Date -f 'HH:mm:ss') BAN: $($NewBans -join ', ')"
            Write-Host $Msg -FG Red
            $Msg | Out-File $Log -Append
        }
    }
    Start-Sleep 5
}


Лучше было бы воспользоваться программой BeeThink IP Blocker для минимизации ущерба, но она платная, поэтому имеем то, что имеем. Требует прав администратора.

Тестирование

Протестируем защиту, используя популярный сетевой сканер безопасности XSpider с профилем на проникновение для не отвечающих на запросы хостов.

Заключение

Конечно, описанные в материале методы не спасут ваш сервер от многотысячного ботнета, но от злостных школьников, возомнивших себя настоящими хакерами, — ещё как. Удачи на просторах сетевых морей.