Chinaunix首页 | 论坛 | 博客
  • 博客访问: 850470
  • 博文数量: 65
  • 博客积分: 534
  • 博客等级: 中士
  • 技术积分: 885
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-23 14:42
个人简介

世上没有东西可以取代坚毅的地位,才干不能,有才能而失败者比比皆是;天才不能,才华横溢又毫无进取者不胜枚举;单靠教育不能,受过教育但潦倒终生者充斥世间;惟有坚毅与果断者能够无所不能,得到成功。雷?克罗克

文章分类

全部博文(65)

文章存档

2017年(1)

2015年(4)

2014年(1)

2013年(19)

2012年(32)

2011年(8)

我的朋友

分类: LINUX

2012-04-09 22:42:22

   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
阅读(3152) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~