Как закрыть или открыть порты в Windows

Автор: Admin | 22.08.2016

WF_iconПростой способ закрыть все порты в Windows при помощи Брандмауэра Windows (Windows Firewall) и оставить только нужные

Проблема

Проблема Брандмауэра Windows (Windows Firewall) заключается не в том как закрыть все порты, а в том, как открыть только необходимые. И главное, что сходу хрен поймешь, каким образом ограничить подключение к некоторым портам по IP адресам клиентов. По отдельности решить эти задачи не сложно, но чтобы было вместе - не встретил ни одного толкового руководства, поэтому и написана данная заметка. Так же, найденное решение не предполагает установки стороннего фаервола.

Недостатки Брандмауэра Windows:
- Если создать запрещающее правило для всех портов, а потом разрешающие для необходимых, то они не попадают в белый список, т.к. запрещающие правила приоритетнее разрешающих. Т.е. если запрет на подключение по порту существует, то разрешение на этот порт работать уже не будет.
- Нет приоритетов правил, как в нормальных фаерволах, чтобы сначала указать открытые порты, а последним задать запрещающее правило для всех остальных.

Допустим, есть VPS на винде, но у хостера нет внешнего фаервола, которым можно прикрыться. Свежеустановленная винда торчит наружу как минимум 135/tcp, 445/tcp, 49154/tcp и 3389/tcp (если включен RDP) портами даже в публичной сети (Public network), что требует исправления.

Алгоритм

Есть три типа портов, это:
- Общедоступные порты, которые должны быть открыты для всего интернета. Пусть будут 80 и 443 (http и https)
- Фильтруемые порты, доступные только с определенных IP адресов. Возьмем 3389 (RDP)
- Все остальные, должны быть закрыты
Требуется:
1. Создать правило, запрещающее всё, кроме трех вышеобозначенных портов.
2. Для общедоступных больше делать ни чего не требуется.
3. Для фильтруемого создать разрешающее правило, указав белые адреса.

Секрет в том, что при запрещении всех портов надо явно указать разрешенные. Иначе, как было сказано выше, не получится открыть нужные.

Пример

Задача 1: оставить открытыми для всего интернета 80, 443 и 3389 порты. Все остальные закрыть.
1. Создать новое правило для входящих подключений
2. Тип правила (Rule Type). Настраиваемые (Custom)
3. Программа (Program). Все программы (All programs)
4. Протокол и порты (Protocol and Ports). Тип протокола (Protocol type) - TCP. Локальный порт (Local port) - Специальные порты (Specific Ports). В поле вписать диапазон портов, за исключением 80, 443 и 3389. Должно выглядеть так - 1-79, 81-442, 444-3388, 3390-65535
5. Область (Scope). Локальный (local) - Любой IP-адрес (Any IP address). Удаленный (remote) - Любой IP-адрес (Any IP address).
6. Действие (Action). Блокировать подключение (Block the connection).
7. Профиль (Profile). Выбрать на свое усмотрение. Если не уверен, то выбрать все.
8. Имя (Name). Назвать его, например, Block_TCP.

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

Задача 2: оставить открытыми для всего интернета 80 и 443 порты. Ограничить подключение на порт 3389 только с разрешенных IP адресов. Все остальные закрыть.
Шаги 1-8 аналогичны предыдущей задаче, т.е. создается правило, разрешающее коннект по трем указанным портам.
Для фильтрации по IP надо создать второе правило:
9. Создать новое правило для входящих подключений
10. Тип правила. Настраиваемые
11. Программа. Все программы
12. Протокол и порты. Тип протокола - TCP. Локальный порт - специальные порты. Вписать порт 3389
13. Область. Локальный - Любой IP-адрес. Удаленный - Указанные IP-адреса. Сюда вписать белый список IPшников или подсетей, которым разрешен коннект по данному порту
14. Действие. Разрешить подключение.
15. Профиль. Выбрать на свое усмотрение. Если не уверен, то выбрать все.
16. Имя. Назвать его, например, RDP.

Если фильтруемых портов несколько, то создается по одному правилу на каждый порт.

Ну и чтобы стать совсем защищенным - создать правило, блокирующее все UDP соединения.

Задача 2 из консоли

Для хардcoreщиков приведу вторую задачу в виде консольных команд:

netsh advfirewall firewall add rule dir=in action=block protocol=TCP localport=1-79,81-442,444-3388,3390-65535 name="Block_TCP"
netsh advfirewall firewall add rule dir=in action=allow protocol=TCP localport=3389 remoteip=192.168.0.0/24,x.x.x.x name="RDP"
netsh advfirewall firewall add rule dir=in action=block protocol= UDP name="Block_All_UDP"

В конечном итоге, в гуёвине должно выглядеть так:
Для правила RDP:
rdp
rdp3
rdp2

Для правила Block_TCP:

block_tcp_2

block_tcp
 


UPDATE

Выяснилось, что приведенный выше синтаксис командной строки не работает на WS2008R2, а конкретно - перечисления в любом параметре, поэтому пришлось разбивать два правила на восемь:

netsh advfirewall firewall add rule dir=in action=block protocol=TCP localport=1-79 name="Block_TCP-1"
netsh advfirewall firewall add rule dir=in action=block protocol=TCP localport=81-442 name="Block_TCP-2"
netsh advfirewall firewall add rule dir=in action=block protocol=TCP localport=444-3388 name="Block_TCP-3"
netsh advfirewall firewall add rule dir=in action=block protocol=TCP localport=3390-65535 name="Block_TCP-4"

netsh advfirewall firewall add rule dir=in action=allow protocol=TCP localport=80 name="HTTP"
netsh advfirewall firewall add rule dir=in action=allow protocol=TCP  localport=443 name="HTTPS"

netsh advfirewall firewall add rule dir=in action=allow protocol=TCP localport=3389 remoteip=192.168.0.0/24 name="RDP-1"
netsh advfirewall firewall add rule dir=in action=allow protocol=TCP localport=3389 remoteip=x.x.x.x name="RDP-2"

Комментарии к посту “Как закрыть или открыть порты в Windows

  1. СБ

    …да-а-а-а-с… Все це цікаво… Але в мене «4 класи» компьютерної освіти, а пояснення розраховано мабуть на вищу к.о…. Тому скористатись цими поясненнями можна тільки за допомогою спеціаліста… А прочитати варто, щоб мати загальне уявлення яким чином все це робиться…

    1. Без вищої освти

      тут же розписано, що куди вписувати, навіть на скрінах показано, що вибирати і вписувати. Можна просто:
      1) натиснути winkey + R (або пуск-выполнить)
      2) ввести «cmd» і натиснути enter, з’явиться консоль
      3) в консоль по черзі береш з блоку, обведеного пунктиром кожен рядок, копіюєш або вводиш сам і тиснеш enter, потім слідуючий. І так всі, крім останнього (там де «remoteip=x.x.x.x» — туди просто треба вписати ip, з якого ти хочеш мати можливість підключатись віддалено до даного ПК)

      1. Без вищої освти

        правда там ще й пропущено:

        netsh advfirewall firewall add rule dir=in action=block protocol=TCP localport=444-3388 name=»Block_TCP_444-3388″

  2. андрей

    а как открыть порт только для конкретной программы?

    1. admin Автор записи

      Для этого есть вкладка «Программы и службы», там указывайте путь к исполняемому файлу

      1. андрей

        Возможно я некорректно выразился… Вопрос был в рамках статьи: создаем общее запрещающее правило для всех портов кроме http(s) и нужно для одной из программ открыть еще один порт (к примеру порт 45678, который должен быть открыт только для этой одной программы)

  3. nospam_please

    Для того чтобы открыть порт надо обязательно выполнить в брэндмауэре две вещи:
    — открыть нужный порт (протокол, номер)
    — перестать блокировать вашу конкретную программу (путь, имя) от доступа к любым портам (и открытым, и закрытым)

    !важно, что открытие нужного порта не включает в себя разблокирование приложений, как может показаться на первый взгляд, оба типа блокировки работаю независимо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *