Безопасность ботов в PoE: VPN

В прошлой статье мы рассмотрели подготовку виртуальной машины vmware для ботоводства PoE. Теперь следующий важный пункт: VPN.

Что это такое и зачем это нужно? VPN расшифровывается как Virtual Private Network, т.е. ваша личная частная сеть. Если вы отлично разбираетесь в сетевых технологиях, тогда моё объяснение вам не нужно. Поэтому попытаюсь объяснить для менее подкованных в сетевых технологиях читателей.

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

  1. Вам присвоен постоянный выделенный/белый IP-адрес, таким образом адрес всегда уникален для вас. Некоторые провайдеры даже выделяют пул (несколько) адресов, чтобы вы могли установить уникальный адрес для каждого компьютера в домашней сети.
  2. Вам присваивается динамический белый IP-адрес. В каждый момент времени этот адрес принадлежит только вам, но затем вам могут выдать другой адрес, а ваш отдать другому пользователю.
  3. Вы "сидите за НАТом". У вас есть лишь серый IP-адрес. Это значит, что сервера GGG видят и вас и всех остальных пользователей провайдера, будто у всех вас один и тот же адрес.

Стоит отметить, что часто провайдеры продают "выделенный белый IP-адрес" за дополнительную плату. Но не спешите покупать эту услугу. Белый ИП - достаточно опасная штука, хакеры и вирусы со всего интернета будут беспощадно стучаться к вам, если вы не предпримите соответствующие меры.

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

Таким образом, одним из сильных факторов вычисления ботов для ПоЕ является ИП-адрес. Поэтому во-первых нам стоит позаботиться о том, чтобы как минимум не засветить за ботоводством свой основной белый ИП-адрес, если у вас такой имеется. Затем, у вас может быть две тактики: "спрятать дерево в лесу" или же каждому боту использовать уникальный ИП-адрес. Последнее предпочтительнее, но стоит дороже.

ВПН делает именно то, о чём мы говорим: он как-будто бы создаёт виртуальный сетевой провод, который вставляется в виртуальный ВПН сервер. И теперь эффективно трафик до серверов GGG идёт не от вашего провайдера / с вашего IP-адреса, а с адреса VPN сервера.

Т.е. находясь всегда в одной и той же квартире, подключаясь к разным ВПН серверам, вы можете заставить GGG поверить в то, что вы подключаетесь к игре с разных точек планеты.

Теперь вы знаете, зачем нужен ВПН: чтобы если один бот и попался, все остальные, включая вашего мейна, избежали его участи. Ведь всех их ничего не связывает, IP-адреса были разные.

Непосредственно настройка VPN для Windows 8

Хватит теории, перейдём к практике. Сначала нам нужно решить важную задачу: если ВПН вдруг отвалится, нам нужно быть уверенными, что мы не раскроем свою маскировку, начав подключаться к серверам GGG на своём родном интернете.

Для этого существуют специальные программы, но лично мне они доверия не внушают. Я вижу несколько возможных узких мест в их функциональности. Поэтому для себя я выбрал следующий способ.

Я блокирую через стандартный Windows Firewall доступ в интернет не через VPN.

В виртуальной ОС создаю VPN соединение стандартными средствами виндоуса, сохраняю пароль. Соединение ВПН я назначаю "приватной сетью", соединение с основным интернетом я назначаю "публичной сетью".

Затем я иду в настройки файрвола, Advanced settings, Outbound rules, и создаю там три новых правила.

  1. Block all icmp (ping)
    Блокирую весь исходящий ICPM трафик для всех профилей кроме Private.

  2. Block all out tcp from port range
    Блокирую весь исходящий TCP трафик на порты в следующем диапазоне: 5, 46, 48-52, 54-1722, 1724-1772, 1724-65535 для всех профилей кроме Private.

  3. Block all out udp except dns and dhcp
    Блокирую весь исходящий UDP трафик на порты в следующем диапазоне: 1-52, 54-66, 68-65535 для всех профилей кроме Private.

Кроме того, я вообще отключаю файрвол для Private профиля.

Таким образом для VPNа не блокируется вообще ничего, потому что он относится к Private network. А вот для стандартного интернета, который относится к Public network, блокируется как можно больше. Всё кроме необходимого для того, чтобы подключиться к ВПНу.

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

Таким образом вы за каменной стеной. Точнее, за огненной стеной, встроенной в виндоус. Когда ВПН не подключен, трафик не идёт. Когда ВПН подключен, разрешается всё. Как раз то, что надо. Можете проверить это, например, через браузер. Или запустите PoE и убедитесь, что без VPNа он не запускается "не удаётся подключиться к серверу обновлений".

Скрипты автоматизации

Кроме того, для своего удобства я написал несколько AutoHotkey скриптов:

;vpn-on.ahk
run %comspec% /c "rasphone -d vvv",,hide
WinWait, Connect vvv ahk_class #32770
ControlClick, &Connect

;vpn-off.ahk
run %comspec% /c "rasphone -h vvv",,hide

;firewall-public-on.ahk
run %comspec% /c "netsh advfirewall set public state on",,hide

;firewall-public-off.ahk
InputBox, input, Are you sure you want firewall OFF?, type "yes" if you are sure
StringUpper, input, input
if(input == "YES")
    run %comspec% /c "netsh advfirewall set public state off",,hide
else
    msgbox,, Settings not changed, Firewall settings was NOT CHANGED.

;vpn-keep-up.ahk
while, 1
{
    if(!IsInternetLive())
    {
        WinClose, Connect vvv ahk_class #32770
        Sleep 1000
        WinClose, Error Connecting to ahk_class #32770
        Sleep 1000
        run %comspec% /c "rasphone -h vvv",,hide
        Sleep 5000
        WinClose, Error Connecting to ahk_class #32770
        Sleep 1000
        run %comspec% /c "rasphone -d vvv",,hide
        WinWait, Connect vvv ahk_class #32770,,30
        ControlClick, &Connect
    }

    while, 1
    {
        sleep 30000
        if(!IsInternetLive())
        {
            sleep 30000
            if(!IsInternetLive())
                break
        }
    }
}

IsInternetLive()
{
    Random, rnd
    file = tmp\is-internet-live-%rnd%.txt
    RunWait %comspec% /c "ping ya.ru -n 1 > %file%",,hide
    FileReadLine, line, %file%, 3
    FileDelete, %file%
    return InStr(line, "Reply from")
}

Файрвол должен быть включён всегда. А vpn-keep-up.ahk можно положить в автозагрузку виндоуса.

Теперь у нас есть прочная основа для боттинга:

  • отлично настроенная виртуальная машина
  • надёжная и удобная маскировка за VPNом

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