2012-02-10 13:52:26 来源:《网管员世界》杂志社
防范DDoS 攻击
到目前为止,针对分布式拒绝服务攻击(DDoS)的防御依然没有特别直接有效的方法,因为这种攻击会利用TCP/IP 协议的漏洞。除非您完全不使用TCP/IP,才有可能抵御DDoS 攻击。
但面对DDoS,我们也不能因此而“逆来顺受”, 还是应该考虑其他办法进行必要的防范。
几乎所有的主机平台都有抵御DDoS 的设置。以Linux 操作系统为例,其防范技术主要分为3 大类:第一类是通过合理配置系统,达到资源最优化和利用最大化;第二类是通过加固TCP/IP 协议栈来防范DDoS ;第三类是通过防火墙、路由器等过滤网关,有效地探测攻击类型并阻击攻击。
必须明确的是,DDoS 攻击在TCP 连接原理上是合法的,除非TCP 协议重新设计,明确定义DDoS 和其他正常请求有何不同,否则不可能完全阻止DDoS 的攻击,我们所做的只是尽可能地减轻DDoS 攻击所带来的危害。
1. 服务器设置
除了防范他人攻击外,也要提防不要成为被人利用的对象。可以通过以下方法来实现:
(1)安全配置系统,杜绝攻击漏洞,及时安装系统补丁程序。
(2)关闭不必要的服务,并优化服务。
(3)有规律地查看日志。
(4)利用相关工具检查文件完整性。
2、加固TCP / IP 协议栈
这里通过修改TCP / IP 参数来控制连接资源的利用。
(1)SYN Cookies 技术
限制同时打开的SYN半连接数。以RedHat Linux 为例,通过在启动环境中设置以下命令来启用SYN Cookies :
#echo 1> /proc/sys/net/ipv4/tcp_
syncookies
也可以通过修改其他参数, 或者使用/proc/sys/net/ipv4/netfilter/ip_contrack_* 来实现。
(2)增加最大半连接数
加大未连接队列空间。Linux 使用变量tcp-max-syn_backlog 来定义backlog 队列容纳的最大半连接数。在RedHat Linux 中,该变量的默认值为256,在RHEL AS Linux中则是1024。该数值是远远不够的,一次强度不大的SYN 攻击就能使半连接队列占满。通过以下命令可以修改此变量值:
#sysctl -W net.ipv4.tcp_max_syn_
backlog=“2048”
(3)缩短SYN 半连接的Timeout 时间
RedHat Linux 使用变量tcP_synack_retries 定义重传次数,其默认值是5,总超时时间需要3 分钟。
#sysctl -W net.ipv4.tcp_ synack_
retries=“0”
(4)及时更新系统补丁
可以添加如下脚本到Linux 的/etc/sysctl.conf 文件,重启后会自动启动,达到防御DDoS 的效果。
## add by geminis for syn crack
net.ipv4.tcp_syncookied=1
net.ipv4.tcp_max_syn_backlog=“2048”
net.ipv4.tcp_synack_ retries=“1”
3. 防火墙防御
在网关超时设置处,将防火墙SYN 转发超时参数设置为小于服务器的Timeout。如果客户端在防火墙的Timeout时间内无响应,防火墙将发送终止RST 消息给服务器,使服务器从队列中删除该半连接,节省开销。
需要注意的是,网关超时参数设置不宜过小也不宜过大,超时参数设置过小会影响,正常的通信,设置过大则会影响防范SYN drome 攻击的效果,必须根据所处的网络环境来设置参数。
(1)SYN 网关:SYN 网关的原理是代替客户端发送ACK 消息,然后转发数据。SYN 网关收到服务器的SYN/ACK 包后,将该包转发给客户端,同时以客户端的名义给服务器发ACK 确认包。此时,服务器由半连接状态进入连接状态。当客户端确认包到达时,如果有数据则转发,否则丢弃。一般服务器所能承受的连接数量比半连接数量要大得多,所以这种方法能有效地减轻对服务器的攻击。
[page] (2)SYN 代理:当客户端SYN 包到达过滤网关时,SYN 代理并不转发SYN 包,而是以服务器的名义主动回复SYN+ACK 包给客户。收到客户的ACK 包表明是正常访问,此时防火墙向服务器发送ACK 包,并完成三次握手。这里的防火墙作为独立的服务器,需要有较强的抵抗DDoS 攻击的能力。使用专用NP(网络处理器)及专用操作系统的高档防火墙都会具备这种功能。
#!/bin/sh
#定义变量
MAX_TOTAL_SYN_RECV=“1000”
MAX_PER_IP_SYN_RECV =“20”
MARK=“SYN_RECV”
#定义链接状态为“SYN_ RECV”
PORT=“80”
LOGFILE=“/var/og/netstat_$MARK-
$PORT”
LOGFILE_IP=“/var/log/netstat_
connect_ip.log”
DROP_IP_LOG=“/var/log/netstat_syn_
drop_ip.log”
#iptables初始化,拒绝非法包和不明状态包
允许请求包和已连接的包进入
iptable -F -t filter
iptable -A INPUT -p TCP --syn -m
stat --state NEW -j DROP
iptables -A INPUT -p ALL - m state
--state INVALID -j DROP
iptables -A INPUT -p ALL -m state
-state ESTABLISHED,RELATED -j ACCEPT
#初始化变量
if [-z $MARK];then
MARK=“LISTEN”
fi
if [-z $PORT];then
SPRT=“tcp”
else
SPORT=“:$PORT”
fi#
end
#保存netstat结果到指定记录文件中便于分析
netstat -atun|grep $MARK |grep
$SPORT 2>/dev/null >$LOGFILE
if [-s $DROP_IP_ LOG]; then
for i in `less$DROP_IP_ LOG|awk
'{print $1}`;
do
/sbin/iptables -A INPUT -p ALL -s
$i -j DROP
done
fi
for i in 'less $LOGFILE_ IP';
#统计同一IP的SYN-RECV状态
R E P E A T _ C O N N E C T _ N U M = ' g r e p $ i
$LOGFILE|wc -l
[page] #如果超过预设的统一IP连接数,则拒绝此IP连
接包进入
if [$REPEAT_CONNECT_ NUM -gt $MAX_
PER_IP_SYN_RECV];then
echo “$I $REPEAT_ CONNEC_NUM” 》
$DROP_ IP_LOG
iptables -A INPUT -p ALL -s $i -j
DROP
fid
one
#统计所有状态为SN_ RECV的数据包,如果数
量超过预设则重置状态
ALL_CONNETC='uniq -u $LOGFILE|wc -l '
echo $ALL_CONNECT
if [$ALL_CONNECT -gt $MAX_TOTAL_
SYN_ REC];then
echo $ALL_CONNECT
exit
fi
该脚本一旦发现有恶意连接的IP 地址后,会马上生效,利用Iptables 命令阻止该IP 地址的任何请求,直到管理员手动去除为止。但是这种做法在某些情况下显得过于严格,因为该IP 也可能是一个公共出口。
解决方法是再配合一个释放IP,运行于cron 服务中,设置成每隔一段时间自动从Iptables 规则中去掉该IP 地址,时间可以根据具体网络连接情况设置。
基于角色的防范
互联网上的用户各种各样,不同角色有着不同的任务。下面以企业网络管理员/ 系统管理员、ISP/ICP 管理员和骨干网络运营商3 种角色为例,分别谈谈如何防范Linux 的DDoS 攻击。
1. 企业网络管理员/ 系统管理员
作为企业网络员/ 系统管理员,有责任做到对系统了如指掌,以下几项工作是必需的:
(1)时刻留意安全站点公布的与Linux 系统和软件有关的最新安全漏洞和报告;尽早发现系统存在的攻击漏洞,及时安装系统补丁程序;对一些重要信息(例如,系统配置信息)建立并完善备份机制;对一些特权账号(如管理员账号)的密码设置要谨慎。通过这样的一系列举措,可以把攻击者的机会降到最小。
(2)在网络管理方面,要经常检查系统的物理环境,禁止那些不必要的网络服务;充分了解系统和服务器软件是如何工作的;经常检查系统配置和安全策略,并注意查看每天的安全日志。
(3)利用工具检查文件完整性。在确定系统未被入侵时,应该尽快为所有二进制程序和其他重要系统文件产生文件签名,并且周期性地进行比较,以确保没有被非法修改。另外,强烈推荐将文件校验和保存到另一台主机或可移动介质中。工具可以使用免费的tripwire 和aide 等文件/目录完整性检查程序,有条件也可以选择购买商业软件包。如果使用基于RPM 的软件包,可以直接使用RPM 的校验功能来校验软件特征码。
(4)利用网络安全设备(例如,防火墙)来加固网络的安全性。配置好这些设备的安全规则,过滤掉所有可能的伪造数据包。目前,市场上无论IDS 还是IPS 都具备防范DDoS 攻击的功能,购买时多比较相关数据,可根据处理能力、数据包吞吐量和转发等性能指标来进行选择。
(5)经常与IDC 中心管理员沟通,以及与主要互联网服务供应商(ISP)的协作是非常重要的。因为DDoS 攻击主要是耗用带宽,虽然攻击来自四面八方,但进入上游ISP 网络的入口点是有限的。个人管理的网络无法单独对付这些攻击,可以与ISP 协商,通过他们帮助实施正确的路由访问控制策略,以保护带宽和内部网络,实现路由访问控制和对带宽总量的限制。
(6)当发现自己正在遭受DDoS 攻击时,应当启动应对策略,如采用网络数据包嗅探工具,尽可能快地追踪攻击包,保存好攻击日志文件,并且及时联系ISP 和应急组织,分析受影响系统,确定涉及的其他节点,从而阻挡来自已知攻击节点的流量。
2. ISP/ICP 管理员
ISP/ICP 为中小型企业提供各种规模的主机托管业务,所以在防范DDoS 时,除了需要与企业网络管理员一样管理好主机外,还要特别注意管理范围内的客户托管主机不要成为“肉鸡”,同时注意保护自己的网络设备。
针对ISP 的网络攻击越来越多,应付这些攻击除了需要自身具有较高的技术水平外,还需要丰富的攻防经验和事半功倍的工作设备,分析网络流量,采取应对措施。
目前,比较流行的防范方法是网络下水道技术。网络下水道技术应用网络上的Honey Pot 收集发向ISP 的垃圾流量,并通过对这些垃圾信息的分析来判断是否有人在扫描网络或进行攻击,从而实现预警和防范功能。如果有攻击者正在对ISP 网络展开攻击,网络下水道技术可将攻击的网络流量引导开。“下水道”通过一台路由来实现,可以是默认的路由,也可以是一个特定的子网,ISP 网络无法识别的网络流量都会送到这里。
对于ISP 来说,这些网络流量可能隐藏着许多有用的信息,想要获取这些信息,可以在路由后面加上一个网络分析器,如Linux 下的IDS 软件Snort,并配合Tcpdump协议分析工具,就可实现数据的截取和分析。
如果ISP 在监视过程中发现有攻击者正在攻击一个子网的网段,可以用BGP 通知其他路由,把指向该子网的网络流量都送到下水道路由,从而改变攻击方向。
假设攻击者正在对一个子网进行攻击,网络流量经过ISP 网络后被ISP 管理员发现,ISP 管理员及时采取措施,利用网络下水道技术向相邻BGP 发送一个下水道路由记录。于是针对该子网的攻击被改向,该子网获得保护。
3. 骨干网络运营商IDC
骨干网络运营商IDC 提供互联网的物理基础。通过骨干网络运营商,DDoS 攻击可以很好地被预防。2000 年Yahoo 等知名网站被攻击后,美国网络安全研究机构就提出了骨干网络运营商联手解决DDoS 攻击的方案。该方法其实很简单,就是在每家运营商的出口路由器上进行源IP地址验证,如果在自己的路由表中没有这个数据包源IP 的路由就丢弃这个包。
这种方法可以阻止攻击者利用伪造的源IP 进行DDoS攻击。但是,这样会降低路由器的效率,而这是骨干运营商非常关注的问题。所以该方案真正实施起来还很困难。事实上,IDC 更多是通过高端设备,如高端路由器、网络监控设备和事件告警应急设备等来防范DDoS 等攻击的。
当然,DDoS 的防范方法也需要不断改进,应该对其原理与应对方法进行持续性的关注和研究。目前已有证据显示,DDoS 攻击方式已经改进,因此防范工作也要随之不断改进。
手动清除顽固恶意启动项
笔者的计算机本已安装360 安全卫士,并通过“全盘查杀”进行流行木马的查杀后,仍然不定时出现提示AF455C.exe 的系统启动项。
于是,笔者单击“阻止此动作和总是执行相同动作”,谁知,一段时间后再次出现。
笔者决定按照以下几步挖出病毒并将其删除:
1、找到C:WindowsSystem321EFA66 文件夹后,发现是空文件夹。选择“文件夹”选项,勾选“显示所有文件和文件夹”仍然没有发现,这时发现系统推荐的隐藏受保护的操作系统文件(推荐),勾选去掉后找到了AF455C.exe 罪魁祸首。
2、马上点击“删除”按钮,系统提示该程序正在使用。
3、用“Ctrl+Alt+Del”组合键调出任务管理器,结束该进程后,删除该程序,问题解决。
免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。