暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Windows 防火墙命令行模式

生有可恋 2022-04-22
7347

Windows 防火墙也支持命令行管理,对于需要批量添加防火墙规则的场景,命令行会非常有用。

先说一下 Windows 防火墙的工作原理,在 Windows 下网络是分类型的。在网络属性中可以查看当前网络是公开的,还是专用的。

打开当前连接的网络,可以查看到当前网络类型为 “公开”

实际上在命令行中,英文原文就是指

  • private

  • public

查看防火墙配置文件属性

    netsh advfirewall show ?

    两种网络,对应了两种配置,即专用配置和公用配置。除了这两种配置文件,还有一种在个人电脑中很少用到的 domainprofile,即域配置。

    我们在防火墙配置中,可以对每种配置进行默认行为定义。在防护墙属性中,我们可以查看具体内容:

    点开防火墙属性,可以看到有三种配置

    如果当前网络类型为"公用" , 此时就是公用配置起作用,而专用配置不生效。

    防火墙配置文件的作用是定义默认规则,有点类似 iptables 的默认表的规则,规定的默认是阻止还是放行。

    比如当前公用配置文件规定了出站全允许,入站全阻止

      netsh advfirewall show publicprofile

      配置文件的相关命令为

        开启公用配置的防火墙
        netsh advfirewall set publicprofile state on

        默认策略,出站全允许,入站全阻止
        netsh advfirewall set publicprofile \
        firewallpolicy blockinbound,allowoutbound

        记录被阻止的会话记录
        netsh advfirewall set publicprofile \
        logging droppedconnections enable

        指定日志文件
        netsh advfirewall set publicprofile \
        logging filename d:\public.log

        具体命令和字段可以在子命令中使用 ?查询

        这里的命令行对应到图形界面下的具体参数

        比如看入站默认规则时,阻止与阻止所有连接,看这个下拉菜单是看不懂的,但命令行中就解释的比较清楚。

        入站行为:

        • blockinbound        - 阻止与入站规则不匹配的入站连接。

        • blockinboundalways  - 阻止所有入站连接,即使连接与规则匹配。

        • allowinbound        - 允许与规则不匹配的入站连接。

        • notconfigured       - 将值返回到未配置状态。

        出站行为:

        • allowoutbound       - 允许与规则不匹配的出站连接。

        • blockoutbound       - 阻止与规则不匹配的出站连接。

        • notconfigured       - 将值返回到未配置状态。

        此时不能选阻上所有,还然就算在防火墙规则中放行了一样会被阻止。我就在测试入站默认规则时试了一下第二个选项,远程桌面直接被断掉了,所有入站包都进不去,只能去服务器显示器上去重新配置防火墙策略,当然后业务也会受影响,直接造成业务中断。

        配置默认策略的命令

          适用于终端
          netsh advfirewall set publicprofile \
          firewallpolicy blockinbound,allowoutbound

          适用于服务器
          netsh advfirewall set publicprofile \
              firewallpolicy blockinbound,blockoutbound

          这里要解释一下,终端也就是我们个人使用的电脑,默认策略应该是入站全阻止,出站全允许。因为作为终端,应该是没有人主动访问你才对,如果有人访问,那很有可能是黑客。所以作为终端要阻止别人访问我们的电脑,也就是入站阻止。出站就是我们要上网,要访问服务器,这些都是出站方向。

          对于服务器的默认规则建议入、出站全部阻止。首先如果没有外联要求,或与其它业务交互的需要,比如它就是一台单服务器,只有别人访问它,它不需要访问别人。此时出站方向要禁掉,服务器不会主动访问别人,这个与普通电脑是有区别的。入站为什么也要禁掉,因为服务器放行是按端口来放行的,默认策略如果全放行了要写很多阻止策略,而且有被入侵的风险,所以建议入站规则也要默认改为阻止,后面再逐个放行。

          后面就到了详细写明细规则的时候了,我建议把入出站规则中的规则全部清空,即全都删掉。

          里面大量内容是出厂设置,在删之前可以试试它的导入导出功能。

          就算删掉了,还有一个选项 - “还原默认策略”,所以不用担心把系统搞坏了。这三个功能,在命令行都支持。

            导出防火墙配置
            netsh advfirewall export d:\firewall.conf

            导入防火墙配置
            netsh advfirewall import d:\firewall.conf

            恢复防火墙出厂设置
            netsh advfirewall reset

            命令行查看所有防火墙规则 

              查看所有规则
              netsh advfirewall firewall \
              show rule name=all verbose

              查看所有入站规则
              netsh advfirewall firewall \
                  show rule name=all dir=in verbose

              查看所有出站规则
              netsh advfirewall firewall \
                  show rule name=all dir=out verbose

              命令行创建规则例子

              加 80 端口的入站允许规则

                加了换行,方便阅读,无法执行需要去掉换行
                netsh advfirewall firewall add rule \
                name= "Open Port 80" \
                dir=in \
                action=allow \
                protocol=TCP \
                localport=80

                可执行版:
                netsh advfirewall firewall add rule name= "Open Port 80" dir=in action=allow protocol=TCP localport=80

                删除规则

                  netsh advfirewall firewall \
                  delete rule \
                  name= "Open Port 80"
                          
                  可执行版:
                  netsh advfirewall firewall delete rule name= "Open Port 80"

                  禁 ping

                    加了换行,方便阅读,无法执行需要去掉换行
                    netsh advfirewall firewall \
                        add rule \
                        name= "disable ping" \
                        protocol=icmpv4 \
                        dir=in \
                        action=block

                    可执行版:
                    netsh advfirewall firewall add rule name= "disable ping" protocol=icmpv4 dir=in action=block

                    允许 ping

                      netsh advfirewall firewall \
                      add rule name= "All ICMP V4" \
                      protocol=icmpv4:any,any \
                      dir=in \
                      action=allow

                      可执行版:
                      netsh advfirewall firewall add rule name= "All ICMP V4" protocol=icmpv4:any,any dir=in action=allow

                      为指定程序启用放行策略

                        netsh advfirewall firewall add rule name="My Application" dir=in action=allow program="C:\MyApp\MyApp.exe" enable=yes

                        netsh advfirewall firewall add rule name="My Application" dir=in action=allow program= "C:\MyApp\MyApp.exe" enable=yes remoteip=157.60.0.1,172.16.0.0/16,LocalSubnet profile=public

                        放行IP

                          netsh advfirewall firewall \
                          add rule \
                          name="allow IP" \
                          dir=in \
                          action=allow \
                          localip=any \
                          remoteip=192.168.1.1

                          可执行版:
                          netsh advfirewall firewall add rule name="allow IP" dir=in action=allow localip=any remoteip=192.168.1.1

                          具体参数说明

                            C:\Users\Administrator>netsh advfirewall firewall add rule ?

                            用法: add rule name=<string>
                            dir=in|out
                            action=allow|block|bypass
                                  [program=<program path>]
                            [enable=yes|no (default=yes)]
                            [profile=public|private|domain|any[,...]]
                            [localip=any|<IPv4 address>|<IPv6 address>|<subnet>|<range>|<list>]
                            [remoteip=any|localsubnet|dns|dhcp|wins|defaultgateway|
                            <IPv4 address>|<IPv6 address>|<subnet>|<range>|<list>]
                            [localport=0-65535|<port range>[,...]|RPC|RPC-EPMap|IPHTTPS|any (default=any)]
                            [remoteport=0-65535|<port range>[,...]|any (default=any)]
                            [protocol=0-255|icmpv4|icmpv6|icmpv4:type,code|icmpv6:type,code|
                                     tcp|udp|any (default=any)]

                            添加规则时主要定义

                            • 源端口、目的端口

                            • 本地IP、远程IP

                            • 动作:allow|block

                            • 入出站:in|out

                            参考:

                            • https://docs.microsoft.com/zh-cn/troubleshoot/windows-server/networking/netsh-advfirewall-firewall-control-firewall-behavior

                            • https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc771920(v=ws.10)?redirectedfrom=MSDN

                            文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论