linux系统怎么防止DDOS攻击

linux系统怎么防止DDOS攻击,第1张

用squid是利用端口映射的功能,可以将80端口转换一下,其实一般的DDOS攻击可以修改/proc/sys/net/ipv4/tcp_max_syn_backlog里的参数就行了,默认参数一般都很小,设为8000以上,一般的DDOS攻击就可以解决了。如果上升到timeout阶段,可以将/proc/sys/net/ipv4/tcp_fin_timeout设小点。

大家都在讨论DDOS,个人认为目前没有真正解决的方法,只是在缓冲和防御能力上的扩充,跟黑客玩一个心理战术,看谁坚持到最后,网上也有很多做法,例如syncookies等,就是复杂点。

sysctl -w net.ipv4.icmp_echo_ignore_all=1

echo 1 >/proc/sys/net/ipv4/tcp_syncookies

sysctl -w net.ipv4.tcp_max_syn_backlog="2048"

sysctl -w net.ipv4.tcp_synack_retries="3"

iptables -A INPUT -i eth0 -p tcp --syn -j syn-flood

# Limit 12 connections per second (burst to 24)

iptables -A syn-flood -m limit --limit 12/s --limit-burst 24 -j RETURN

这个地方可以试着该该:

iptbales -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

虚拟主机服务商在运营过程中可能会受到黑客攻击,常见的攻击方式有SYN,DDOS等。

通过更换IP,查找被攻击的站点可能避开攻击,但是中断服务的时间比较长。比较彻底

的解决方法是添置硬件防火墙。不过,硬件防火墙价格比较昂贵。可以考虑利用Linux

系统本身提供的防火墙功能来防御。

1. 抵御SYN

SYN攻击是利用TCP/IP协议3次握手的原理,发送大量的建立连接的网络包,但不实际

建立连接,最终导致被攻击服务器的网络队列被占满,无法被正常用户访问。

Linux内核提供了若干SYN相关的配置,用命令:

sysctl -a | grep syn

看到:

net.ipv4.tcp_max_syn_backlog = 1024

net.ipv4.tcp_syncookies = 0

net.ipv4.tcp_synack_retries = 5

net.ipv4.tcp_syn_retries = 5

tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie

功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN

的重试次数。

加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分

SYN攻击,降低重试次数也有一定效果。

调整上述设置的方法是:

增加SYN队列长度到2048:

sysctl -w net.ipv4.tcp_max_syn_backlog=2048

打开SYN COOKIE功能:

sysctl -w net.ipv4.tcp_syncookies=1

降低重试次数:

sysctl -w net.ipv4.tcp_synack_retries=3

sysctl -w net.ipv4.tcp_syn_retries=3

为了系统重启动时保持上述配置,可将上述命令加入到/etc/rc.d/rc.local文件中。

2. 抵御DDOS

DDOS,分布式拒绝访问攻击,是指黑客组织来自不同来源的许多主机,向常见的端口,如80,

25等发送大量连接,但这些客户端只建立连接,不是正常访问。由于一般Apache配置的接受连接

数有限(通常为256),这些“假” 访问会把Apache占满,正常访问无法进行。

使用ipchains抵御DDOS,就是首先通过netstat命令发现攻击来源地址,然后用ipchains命令阻断

攻击。发现一个阻断一个。

首先查看ipchains服务是否设为自动启动:

chkconfig --list ipchains

以下几种方法检测linux服务器是否被攻击:

1、检查系统密码文件

首先从明显的入手,查看一下passwd文件,ls –l /etc/passwd查看文件修改的日期。

2、查看一下进程,看看有没有奇怪的进程

重点查看进程:ps –aef | grep inetd inetd是UNIX系统的守护进程,正常的inetd的pid都比较靠前,如果看到输出了一个类似inetd –s

/tmp/.xxx之类的进程,着重看inetd

–s后面的内容。在正常情况下,LINUX系统中的inetd服务后面是没有-s参数的,当然也没有用inetd去启动某个文件;而solaris系统中

也仅仅是inetd

–s,同样没有用inetd去启动某个特定的文件;如果使用ps命令看到inetd启动了某个文件,而自己又没有用inetd启动这个文件,那就说明已经有人入侵了系统,并且以root权限起了一个简单的后门。

3、检查系统守护进程

检查/etc/inetd.conf文件,输入:cat /etc/inetd.conf | grep –v “^#”,输出的信息就是这台机器所开启的远程服务。

一般入侵者可以通过直接替换in.xxx程序来创建一个后门,比如用/bin/sh 替换掉in.telnetd,然后重新启动inetd服务,那么telnet到服务器上的所有用户将不用输入用户名和密码而直接获得一个rootshell。

4、检查网络连接和监听端口

输入netstat -an,列出本机所有的连接和监听的端口,查看有没有非法连接。

输入netstat –rn,查看本机的路由、网关设置是否正确。

输入 ifconfig –a,查看网卡设置。

5、检查系统日志

命令last |

more查看在正常情况下登录到本机的所有用户的历史记录。但last命令依赖于syslog进程,这已经成为入侵者攻击的重要目标。入侵者通常会停止系

统的syslog,查看系统syslog进程的情况,判断syslog上次启动的时间是否正常,因为syslog是以root身份执行的,如果发现

syslog被非法动过,那说明有重大的入侵事件。

在linux下输入ls –al /var/log

检查wtmp utmp,包括messgae等文件的完整性和修改时间是否正常,这也是手工擦除入侵痕迹的一种方法。

6、检查系统中的core文件

通过发送畸形请求来攻击服务器的某一服务来入侵系统是一种常规的入侵方法,典型的RPC攻击就是通过这种方式。这种方式有一定的成功率,也就是说并不能

100%保证成功入侵系统,而且通常会在服务器相应目录下产生core文件,全局查找系统中的core文件,输入find / -name core

–exec ls –l {} \依据core所在的目录、查询core文件来判断是否有入侵行为。

7、检查系统文件完整性

检查文件的完整性有多种方法,通常通过输入ls –l

文件名来查询和比较文件,这种方法虽然简单,但还是有一定的实用性。但是如果ls文件都已经被替换了就比较麻烦。在LINUX下可以用rpm –V

`rpm –qf 文件名`

来查询,查询的结果是否正常来判断文件是否完整。在LINUX下使用rpm来检查文件的完整性的方法也很多,这里不一一赘述,可以man

rpm来获得更多的格式。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8521843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存