该方法能解决一些小型服务的DOS防御问题,成本不高,能在一定程度上起到DOS防御的作用。
原本服务架构
我们的服务器向多个客户机提供服务,这里以腾讯云服务器为例,假设服务商租了一台腾讯云的服务器,一旦服务器收到攻击并达到一定程度之后,腾讯云有保护策略,会开启黑洞模式,也就是所,它会屏蔽一切与它通信的网络,包括你是服务器的租赁者。这个时候,不管你用远程桌面连接还是客户来请求服务器,都是无法进行通讯的。
Windows防火墙
windows防火墙能按照指定的规则进行通讯,比如让服务器只开放某个端口,或者让服务器能够与指定的用户进行通讯。
在DOS下配置防火墙策略
添加入站规则
dos下输入 netsh advfirewall firewall add rule ?
可以查看到用法,下面列出具体用法
add rule name= dir=in|out action=allow|block|bypass
[program=]
[service=|any]
[description=]
[enable=yes|no (default=yes)]
[profile=public|private|domain|any[,…]]
[localip=any|||||]
[remoteip=any|localsubnet|dns|dhcp|wins|defaultgateway|||||]
[localport=0-65535|[,…]|RPC|RPC-EPMap|IPHTTPS|any (default=any)]
[remoteport=0-65535|[,…]|any (default=any)]
[protocol=0-255|icmpv4|icmpv6|icmpv4:type,code|icmpv6:type,code|tcp|udp|any (default=any)]
[interfacetype=wireless|lan|ras|any]
[rmtcomputergrp=]
[rmtusrgrp=]
[edge=yes|deferapp|deferuser|no (default=no)]
[security=authenticate|authenc|authdynenc|authnoencap|notrequired(default=notrequired)]
参数说明:
dir = in/out 选择入站规则 还是出站规则
action=allow/block 允许还是拒绝
name=”xxx” 规则名称
remoteip 远程ip
localip 本地ip
localport 本地端口
remoteport 远程端口
添加一个规则
netsh advfirewall firewall add rule name="ipcesi" dir=in action=block remoteip="204.13.201.137/32,204.13.201.139/32,45.55.224.1-45.55.224.255"
以上表示的意思是,添加一个入站规则,名称为ipcesi,方式为拒绝访问,对方ip地址为4.13.201.137/32,204.13.201.139/32,45.55.224.1-45.55.224.255”。
修改一个规则
比如我要将上面我设置的规则的ip修改
netsh advfirewall firewall set rule name="ipcesi" remoteip="224.113.201.137/32"
修改服务架构
有了入站规则,我们就能规定哪些用户与本服务器进行通信了
我们将服务一开屏蔽所有的通信,只留下管理员的主机和一台中间通信服务器,通信服务器的成本不必太高,只需要可以转发数据就行。
如上图所示,我们分别在中转服务器和服务器上部署一个程序,中转服务器用来转发客户机的请求,服务器收到请求之后,设置防火墙策略,这里可以用C/C#/Java/C++等调用dos来实现对防火墙策略的增加和修改,我们只让服务器首先只对中转服务器服务,然后通过这种手段来逐渐扩大服务器,只有用户在客户端进行合法登录,我们就再策略组中添加用户的ip地址,而dos攻击,例如,SYN攻击,就是伪造一堆IP地址来进行TCP三次握手,而这里一开始就被windows防火墙给屏蔽了,也就起到了防御dos的作用。