Использование Netsh с брандмауэром Windows

Опубликовано: 24 Марта, 2023

Мне всегда нравились дома из кирпича. Помимо своего рода привлекательности «лорда поместья», они также выглядят прочно построенными по сравнению со многими сегодняшними домами с деревянным каркасом и пластиковым сайдингом. Кирпич также дает дополнительное чувство безопасности, поскольку кто собирается пробить кирпичную стену, чтобы проникнуть в ваш дом?


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


Сегодня многие корпоративные сети именно такие: вместо того, чтобы полагаться только на брандмауэр по периметру (внешней стене) сети, на отдельных клиентах и серверах (в комнатах) установлены брандмауэры, которые также действуют как еще один уровень защиты от атак. А в сетях, использующих Windows XP на клиентах и Windows Server 2003 на серверах, есть готовый кандидат на использование брандмауэра на основе хоста: брандмауэр Windows. Ведь это бесплатно!


К сожалению, наличие брандмауэров на клиентах и серверах также требует дополнительной работы по управлению, но групповая политика может справиться с этим, поскольку касается брандмауэра Windows (еще одна веская причина для развертывания брандмауэра Windows на хостах вместо сторонних брандмауэров от других поставщиков). Тем не менее, бывают случаи, когда вы хотите проверить или изменить конфигурацию брандмауэра Windows на некоторых хостах из-за каких-то проблем, и инструмент командной строки Netsh.exe как раз то, что нужно для этого.


Заставьте это работать


Предположим, Боб настраивает компьютер с Windows Server 2003 SP1 в качестве веб-сервера и файлового сервера для внутреннего использования в своей компании. Зная, что служба брандмауэра Windows/общего доступа к Интернету по умолчанию отключена, он открывает консоль «Службы» в разделе «Администрирование» и изменяет тип запуска для этой службы на «Автоматически», а затем запускает службу. Пока все хорошо, но если бы он попытался открыть утилиту брандмауэра Windows из панели управления, ему было бы представлено сообщение с вопросом, хочет ли он запустить эту службу, и с указанием, что после этого он должен перезагрузить свой сервер, чтобы убедиться, что Windows Брандмауэр распознает, что сервер прослушивает входящий трафик от файловых и веб-клиентов.


Как бы то ни было, теперь Боб хочет включить и настроить брандмауэр Windows на сервере, но его внезапно вызывают из-за чрезвычайной ситуации. Он отправляет своей помощнице Мэри быстрое электронное письмо со своим BlackBerry, говоря: «Включите брандмауэр на сервере, чтобы клиенты могли получить к нему доступ — заставьте его работать», и выходит за дверь. К сожалению, его помощник сегодня работает из дома, но Боб не забыл включить удаленный рабочий стол на новом сервере, поэтому Мэри запускает подключение к удаленному рабочему столу на своем компьютере с Windows XP SP2, и отображается консоль удаленного сервера.


Что теперь? Мэри могла бы открыть панель управления на удаленном компьютере и включить брандмауэр Windows, но какие исключения ей нужно настроить на нем? Боб явно торопился, когда сказал «чтобы клиенты могли получить к нему доступ», но какие клиенты? И это, очевидно, важно, потому что он хочет, чтобы это было сделано сегодня.


Вместо того, чтобы рыскать по консоли «Службы» в поисках дополнительных служб, которые Боб мог включить на машине, Мэри решает открыть командную строку на удаленной машине и пойти другим путем. Она начинает с ввода следующей команды:



netstat –ano > netstat.txt
блокнот netstat.txt


Затем она проверяет содержимое файла netstat.txt, который открывается в Блокноте:



Активные соединения


Прото Местный адрес Иностранный адрес Состояние ПИД
TCP 0.0.0.0: 80 0.0.0.0:0 ПРОСЛУШИВАНИЕ 1664
TCP 0.0.0.0: 135 0.0.0.0:0 ПРОСЛУШИВАНИЕ 696
TCP 0.0.0.0: 445 0.0.0.0:0 ПРОСЛУШИВАНИЕ 4
TCP 0.0.0.0:1037 0.0.0.0:0 ПРОСЛУШИВАНИЕ 1000
TCP 0.0.0.0:1040 0.0.0.0:0 ПРОСЛУШИВАНИЕ 436
TCP 0.0.0.0:1045 0.0.0.0:0 ПРОСЛУШИВАНИЕ 1220
TCP 0.0.0.0:3389 0.0.0.0:0 ПРОСЛУШИВАНИЕ 1780
TCP 127.0.0.1:1051 0.0.0.0:0 ПРОСЛУШИВАНИЕ 1856 г.
TCP 172.16.11.182:139 0.0.0.0:0 ПРОСЛУШИВАНИЕ 4
TCP 172.16.11.182:1029 172.16.11.181:445 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1034 172.16.11.181:135 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1035 172.16.11.181:1025 УЧРЕДИЛ 436
TCP 172.16.11.182:1039 172.16.11.181:1025 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1043 172.16.11.181:445 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1052 172.16.11.181:389 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1053 172.16.11.181:389 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1055 172.16.11.181:389 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1056 172.16.11.181:139 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1062 172.16.11.181:389 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1063 172.16.11.181:389 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1071 172.16.11.181:445 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1075 172.16.11.181:135 УЧРЕДИЛ 436
TCP 172.16.11.182:1078 172.16.11.181:389 ВРЕМЯ ЖДЕТ 0
TCP 172.16.11.182:1079 172.16.11.181:389 ВРЕМЯ ЖДЕТ 0


Из этого файла ей сразу становится ясно, что на сервере установлена служба HTTP, поскольку машина прослушивает TCP-порт 80. Однако лучше проверить и убедиться, что эта служба действительно использует этот порт. Как она это делает? Сначала она записывает номер идентификатора процесса (PID), связанный с этими портами, который равен 1664. Затем она вводит следующие команды в командной строке:



список задач /svc > svclist.txt
блокнот svclist.txt


Затем она просматривает содержимое файла svclist.txt, которое выглядит следующим образом:



Имя изображения PID-сервисы
========================= ========================== ============================
Процесс бездействия системы 0 Н/Д
Система 4 Н/Д
smss.exe 260 Н/Д
csrss.exe 348 Н/Д
winlogon.exe 380 Н/Д
services.exe 424 Журнал событий, PlugPlay
lsass.exe 436 HTTPFilter, Netlogon, PolicyAgent,
ProtectedStorage, SamSs
svchost.exe 644 DcomLaunch
svchost.exe 696 RpcSs
svchost.exe 748 Dhcp, DNScache
svchost.exe 796 LmHosts, W32Time
svchost.exe 812 AeLookupSvc, Браузер, CryptSvc, dmserver,
EventSystem, helpvc, lanmanserver,
lanmanworkstation, Netman, Nla, Расписание,
секлогон, SENS, общий доступ,
ShellHWDetection, TrkWks, winmgmt,
вуаусерв, WZCSVC
spoolsv.exe 976 Спулер
msdtc.exe 1000 MSDTC
vmsrvc.exe 1120 1-вмсрвк
svchost.exe 1144 ERSvc
inetinfo.exe 1220 ИИСАДМИН
svchost.exe 1288 удаленный реестр
svchost.exe 1312 СрмСвк
vpcmap.exe 1420 VPCКарта
svchost.exe 1664 W3SVC
svchost.exe 1780 Срок службы
alg.exe 1856 АЛГ
проводник.exe 972 Н/Д
vmusrvc.exe 1412 Н/Д
wuauclt.exe 2120 н/д
csrss.exe 2176 Н/Д
winlogon.exe 2204 Н/Д
rdpclip.exe 2452 Н/Д
проводник.exe 2556 Н/Д
wmiprvse.exe 2564 Н/Д
vmusrvc.exe 2648 Н/Д
cmd.exe 2724 Н/Д
список задач.exe 2964 н/д
wmiprvse.exe 2988 н/д


Она просматривает этот файл в поисках PID, отмеченного ранее, и находит эту строку:



svchost.exe 1664 W3SVC


Эта строка подтверждает ей, что Боб установил IIS на сервер и настроил его для работы в качестве веб-сервера.


Теперь Мэри должна включить брандмауэр Windows на машине и создать исключение для HTTP-клиентов, чтобы получить к нему доступ. Поскольку она уже находится в командной строке на удаленной машине, она решает сделать это с помощью команды Netsh. Сначала она просматривает конфигурацию брандмауэра Windows на сервере:



C:>брандмауэр netsh показать режим работы


Конфигурация профиля домена (текущая):
———————————————————————
Режим работы = Отключить
Исключительный режим = Включить


Стандартная конфигурация профиля:
———————————————————————
Режим работы = Отключить
Исключительный режим = Включить


Конфигурация брандмауэра для подключения по локальной сети:
———————————————————————
Режим работы = Включить


Из этого вывода команды она подтверждает, что брандмауэр Windows в настоящее время отключен и его необходимо включить. Для этого Мария вводит следующую команду:



C:>брандмауэр netsh установить opmode включить
Ok.


Теперь она добавляет исключение порта для службы HTTP:



C:>брандмауэр netsh добавить portopening TCP 80 HTTP включить подсеть
Ok.


Чтобы проверить это, она временно сворачивает окно подключения к удаленному рабочему столу, открывает Internet Explorer и вводит http://172.16.11.182 в адресной строке, и вот что она получает в ответ (рис. 1):



Изображение 20831
Рисунок 1: Доступ к серверу по HTTP


Это похоже на Боба! Всегда играет «тяжёлую» роль администратора.


Теперь давайте посмотрим, что еще работает на сервере. Мэри возвращается к показанному ранее файлу netstat.txt и находит следующие интересные строки:



TCP 0.0.0.0: 445 0.0.0.0:0 ПРОСЛУШИВАНИЕ 4
TCP 172.16.11.182:139 0.0.0.0:0 ПРОСЛУШИВАНИЕ 4


Это верный признак того, что сервер настроен как файловый сервер с общими папками на нем, поскольку эти два порта (и два других, перечисленных ниже) используются протоколом Server Message Block (SMB) (протокол обмена файлами Microsoft) следующим образом:



  • UDP-порт 137 — это прослушивающий порт для службы имен NETBIOS.
  • UDP-порт 138 — это прослушивающий порт для службы дейтаграмм NETBIOS.
  • TCP-порт 139 — это порт прослушивания для службы сеансов NETBIOS.
  • TCP-порт 445 — это прослушивающий порт для SMB через TCP/IP.

Другими словами, первые три порта предназначены для SMB через NBT (NETBIOS через TCP/IP), а последний (новый в Windows 2000 и более поздних версиях) — для SMB напрямую через TCP/IP.


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



брандмауэр netsh добавить открытие порта UDP 137 blah включить подсеть
брандмауэр netsh добавить открытие порта UDP 138 blah включить подсеть
брандмауэр netsh добавить открытие порта TCP 139 blah включить подсеть
брандмауэр netsh добавить открытие порта TCP 445 blah включить подсеть


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



Изображение 20832
Рис. 2. Общий доступ к файлам и принтерам включен на сервере


После этого Мэри сможет отобразить общие папки на удаленном сервере, просто нажав «Пуск», затем «Выполнить», введя \172.16.11.182 и нажав «ОК».


Вывод


Мэри могла бы облегчить себе жизнь, настроив брандмауэр Windows из графического интерфейса вместо использования Netsh, поскольку она все равно входила в сеанс удаленного рабочего стола с сервером, но тогда у нее не было бы возможности научиться использовать Netsh, действительно классный инструмент в наборе инструментов администратора!


И последнее замечание: прежде чем Мэри выйдет из сеанса RDC, она должна была ввести еще одну команду на сервере:



Брандмауэр netsh добавить порт, открывающий TCP 3389, бла, включить любой


В противном случае она не сможет подключиться с помощью RDC к удаленному компьютеру, потому что после включения брандмауэр Windows по умолчанию блокирует сеансы удаленного рабочего стола!