Linux内核2.6提供了很多默认的攻击阻止机制,由于是内核的网络功能,所以相关的设置数据放置
在/proc/sys/net/ipv4这个目录中。至于该目录下各个文件的详细说明,可以参考内核说明文件:
/usr/src/linux-{version}/networking/ip-sysctl.txt
这个文件由网站下载任何一个内核源代码后,解压缩后就能看到。
我们下面仅介绍几个简单的文件。
1./proc/sys/net/ipv4/tcp_syncookies
所谓的阻断式服务(DOS)攻击法中的一种方式,就是利用TCP数据包的三次握手原理实现的,这种方式
称为SYN Flooding 。如何预防这种方式的攻击呢?我们可以启用内核的SYN Cookies模块。这个SYN Cookie
模块可以在系统启动随机联机的端口(1024:65535)即将用完时自动启动。
当启动SYN Cookie时,主机在发送SYN/ACK确认包前,会要求client在短时间内回复一个序号,这个序
号包含许多原SYN数据包内的信息,包括 IP,PORT等,若client可以正确回复序号,那么主机就能确定该数
据包是可信的,因此会发送SYN/ACK数据包,否则就不理会此数据包。
启动这个模块很简单,如下:
#echo "1" > /proc/sys/net/ipv4/tcp_syncookies
注意:这个设置值由于违反了TCP的三次握手(因为主机在发送SYN/ACK之前需要先等待client的序号响
应),所以可能会造成某些服务的延迟现象,例如smtp邮件服务器,不过总的来说,这个设置值还是不错
的。只是不适合在负载已经很高的服务器内。因为负载太高的主机有时会让内核误判遭受到了SYN Flooding
攻击。
2./proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
如果有个人搞破坏,使用1000台主机ping你的主机,而且每个ping都高达数百K字节,你的网络带宽会怎
样?要么带宽被吃光,要么系统会死机。这种方式被称为ping flooding(死亡之ping)。
那要如何避免呢?取消ICMP类型8的响应就好了。我们可以通过防火墙的设置来阻止,这也是我们建议的一
种方式。当然也可以让内核自动取消ping的响应。不过某些局域网内常见的服务(例如DHCP协议)会使用
ping的方式来检测是否有重复的IP,所以最好不要取消所有的PING响应。
内核取消Ping响应的设置值有两个:/proc/sys/net/ipv4内的icmp_echo_ignore_broadcasts(仅有
ping broadcast地址时才取消ping的回应)及icmp_echo_all(全部的ping都不响应),建议设置
icmp_echo_ignore_broadcasts。你可以这么做:
#echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
3./proc/sys/net/ipv4/conf/网络接口/*
linux内核可以针对不同的网络接口进行不同的参数设置。网络接口的相关设置放置
在/proc/sys/net/ipv4/conf中,每个接口都以接口号做为其代表,例如eth0接口的相关设置
数据在/proc/sys/net/ipv4/conf/eth0/内。那么网络接口的设置参数有哪些比较需要注意呢?大概有下面
这几个。
rp_filter:反向路径过滤(reverse path filtering),可以通过分析网络接口的路由信息,配合
数据包的来源地址,分析该数据包是否合理。例如,你有两张网卡,eth0为192.168.10.100/24,eth1为
public ip。那么当有一个数据包自称来自eth1,但是其IP来源为192.168.10.200时,那么这个数据包就不
合理,应该丢弃。这个设置值建议启动。
log_martians:这个参数可以用来启动记录不合法IP来源的功能,例如,来源为0.0.0.0,
127.x.x.x 及class E的IP都是不合法的,因为这些来源IP不应该用于INTERNET。记录数据默认保存位置
为/var/log/messages
accept_source_route:或许某些路由器会启动这个设置值,但目前的设备很少使用,建议取消这个
设置值
accept_redirects:一个实体网段内有两个IP网段,例如192.168.0.0/24,192.168.1.0/24。我们
可以架设一个路由器,通过这个参数设置让两个网段直接通信,比如192.168.0.100想要访问192.168.1.100
时,路由器可能会传送一个ICMP redirect数据包,告诉192.168.0.100直接传送数据给192.168.1.100即
可,而不用通过路由器。因为192.168.0.100与192.168.1.100确实是在同一个实体线路上(两者可以直接互
通),所以路由器会告诉源IP使用最短路径去传递数据。但由于那两台主机在不同的IP网段,所以还是无法
传递信息。这个设置可能会产生一些轻微的安全风险,建议关闭。
send_redirects:与上一个类似,只是此值为发送一个ICMP redirect数据包。同样建议关闭。
4.要实现上述功能,需要这样做:
#vi somefile
-----------------------------------
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
for i in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo "1" > $i
done
for i in /proc/sys/net/ipv4/conf/*/log_martians
do
echo "1" > $i
done
for i in /proc/sys/net/ipv4/conf/*/accept_source_route
do
echo "0" > $i
done
for i in /proc/sys/net/ipv4/conf/*/accept_redirects
do
echo "0" > $i
done
for i in /proc/sys/net/ipv4/conf/*/send_redirects
do
echo "0" > $i
done
阅读(3156) | 评论(0) | 转发(1) |