CENTOS系统下DDOS检查与攻击防范案例

如何检查CENTOS服务器受到DDOS攻击

登录到你的服务器以root用户执行下面的命令,使用它你可以检查你的服务器是在DDOS攻击与否:
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort –n
该命令将显示已登录的是连接到服务器的最大数量的IP的列表。

DDOS变得更为复杂,因为攻击者在使用更少的连接,更多数量IP的攻击服务器的情况下,你得到的连接数量较少,即使你的服务器被攻击了。有一点很重要,你应该检查当前你的服务器活跃的连接信息,执行以下命令:
netstat -n | grep :80 |wc –l
上面的命令将显示所有打开你的服务器的活跃连接。

您也可以使用如下命令:
netstat -n | grep :80 | grep SYN |wc –l
从第一个命令有效连接的结果会有所不同,但如果它显示连接超过500,那么将肯定有问题。

如果第二个命令的结果是100或以上,那么服务器可能被同步攻击。

一旦你获得了攻击你的服务器的IP列表,你可以很容易地阻止它。

同构下面的命令来阻止IP或任何其他特定的IP:

route add ipaddress reject

一旦你在服务器上组织了一个特定IP的访问,你可以检查对它的阻止豆腐有效

通过使用下面的命令:

route -n |grep IPaddress

您还可以通过使用下面的命令,用iptables封锁指定的IP。

iptables -A INPUT 1 -s IPADRESS -j DROP/REJECT

service iptables restart

service iptables save

上面的命令执行后,停止httpd连接,重启httpd服务

使用下面的命令:

killall -KILL httpd

service httpd startssl

DDOS攻击防范

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文件中

 

netstat 工具来检测SYN攻击
# netstat -n -p -t
tcp0 0 10.11.11.11:23124.173.152.8:25882 SYN_RECV-
tcp0 0 10.11.11.11:23236.15.133.204:2577 SYN_RECV-
tcp0 0 10.11.11.11:23127.160.6.129:51748 SYN_RECV-

LINUX系统中看到的,很多连接处于SYN_RECV状态(在WINDOWS系统中是SYN_RECEIVED状态),
源IP地址都是随机的,表明这是一种带有IP欺骗的SYN攻击。
# netstat -n -p -t | grep SYN_RECV | grep :80 | wc -l
324
查看在LINUX环境下某个端囗的未连接队列的条目数,显示TCP端囗22的未连接数有324个,
虽然还远达不到系统极限,但应该引起管理员的注意。
[root@pub wxjsr]# netstat -na | grep SYN_RECV
tcp 0 0 58.193.192.20:80 221.0.108.162:32383 SYN_RECV
tcp 0 0 58.193.192.20:80 125.85.118.231:2601 SYN_RECV
tcp 0 0 58.193.192.20:80 222.242.171.215:2696 SYN_RECV
tcp 0 0 58.193.192.20:80 116.52.10.51:2629 SYN_RECV
tcp 0 0 58.193.192.20:80 218.171.175.157:1117
[root@pub wxjsr]# netstat -na | grep SYN_RECV |wc
11 66 979
查看系统SYN相关的配置
Linux内核提供了若干SYN相关的配置,用命令: sysctl -a | grep syn
[root@metc apache2]# /sbin/sysctl -a | grep syn
net.ipv6.conf.default.max_desync_factor = 600
net.ipv6.conf.all.max_desync_factor = 600
net.ipv6.conf.eth0.max_desync_factor = 600
net.ipv6.conf.lo.max_desync_factor = 600
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120
net.ipv4.tcp_max_syn_backlog = 1280
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5
fs.quota.syncs = 18
防范SYN攻击设置
#缩短SYN- Timeout时间:
iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT
iptables -A INPUT -i eth0 -m limit –limit 1/sec –limit-burst 5 -j ACCEPT
#每秒 最多3个 syn 封包 进入 表达为 :
iptables -N syn-flood
iptables -A INPUT -p tcp –syn -j syn-flood
iptables -A syn-flood -p tcp –syn -m limit –limit 1/s –limit-burst 3 -j RETURN
iptables -A syn-flood -j REJECT
#设置syncookies:
sysctl -w net.ipv4.tcp_syncookies=1
/sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=3000
/sbin/sysctl -w net.ipv4.tcp_synack_retries=1
/sbin/sysctl -w net.ipv4.tcp_syn_retries=1
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.forwarding=0
/sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
/sbin/sysctl -w net.ipv4.conf.default.accept_source_route=0 # 禁用icmp源路由选项
/sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 # 忽略icmp ping广播包,应开启
/sbin/sysctl -w net.ipv4.icmp_echo_ignore_all=1 # 忽略所有icmp ping数据,覆盖上一项

时间: 2024-09-14 06:12:09

CENTOS系统下DDOS检查与攻击防范案例的相关文章

CentOS系统下如何设置mysql每天自动备份_Mysql

前言 大家都知道数据是一个比较重要的数据,经常需要备份,每次都手动比较麻烦.通过本文来一起来看看CentOS系统下如何设置mysql每天自动备份吧. 步骤如下 建备份文件夹: mkdir mysql_data_bak 建脚本文件: touch autobackupmysql.sh 打开文件 vi autobackupmysql.sh 在脚本中加入如下内容: filename=`date +%Y%m%d` /usr/bin/mysqldump -uroot -proot boss >>/home

求助,搬瓦工centos系统下vps搭建vpn

问题描述 求助,搬瓦工centos系统下vps搭建vpn 想问一下,出现这个问题是怎么回事?求大神,希望大神能稍微讲清晰一点!感谢! 解决方案 http://www.bandwagong.com/pptpd-vpn/

Linux(CentOS)系统下安装好apache(httpd)服务后,其他电脑无法访问的原因

原文:Linux(CentOS)系统下安装好apache(httpd)服务后,其他电脑无法访问的原因 今天试了下在虚拟机上利用CentOS系统的yum命令安装好了httpd(apache2.4.6),然后在windows系统下访问此虚拟机的ip地址,却访问不了. 因为前段时间有知道过iptable的限制,所以在想是不是因为iptable限制了80端口呢! 所以在网上找了下iptable的命令,并且把tcp的80端口设置成允许任何IP都可以访问: iptables -I INPUT -p TCP

linux CentOS 系统下如何将php和mysql命令加入到环境变量中_Linux

linux CentOS 系统下如何将php和mysql命令加入到环境变量中 在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行"php -v"命令查看当前php版本信息时时,则会提示命令不存在的错误,下面我们详细介绍一下在linux下将php和mysql加入到环境变量中的方法(假设php.mysql和apache分别安装在/phpstudy/server/php/./phpstudy

CentOS系统下MongoDB安装及配置教程_MongoDB

一.准备工作:运行yum命令查看MongoDB的包信息 复制代码 代码如下: [root@vm ~]# yum info mongo-10gen (提示没有相关匹配的信息,) 说明你的centos系统中的yum源不包含MongoDB的相关资源,所以要在使用yum命令安装MongoDB前需要增加yum源,也就是在 /etc/yum.repos.d/目录中增加 *.repo yum源配置文件,以下分别是针对centos 64位和32位不同的系统的MongoDB yum 源配置内容: 我们这里就将该文

centos系统下配置vsftp(ftp)方法介绍

最近购买了阿里云的云主机,自己在配置好php环境后在去配置ftp: 大致过程为: 首先安装vsftp.1安装vsftpdyum install vsftpd 按Y回车,系统自动安装 /etc/init.d/vsftpd start #启动vsftpd service vsftpd restart #重启 service vsftpd stop #停止 chkconfig vsftpd on #设置开机时自动运行2.配置vsftp服务器配置文件说明: /etc/vsftpd/vsftpd.conf

centos系统下卸载lamp的全过程

[root@localhost ~]# rpm -qa|grep mysql mod_auth_mysql-2.6.1-2.2 php-mysql-4.3.9-3.15 mysql-devel-4.1.20-1.RHEL4.1 mysql-4.1.20-1.RHEL4.1 mysqlclient10-3.23.58-4.RHEL4.1 libdbi-dbd-mysql-0.6.5-10.RHEL4.1 说明:rpm –qa | grep mysql 命令是为了把mysql相关的包都列出来,我上面

centos系统下php5安装curl扩展两种方法

php5.3 安装curl扩展  代码如下 复制代码 tar zxf 解压 ./configure --prefix=/usr/local/curl make make install 进入PHP的源码包,没有的话,重新下载php5.3.tar.gz解压即可.  代码如下 复制代码 cd ext/curl 运行一下phpize /usr/local/php5/bin/phpize 配置curl  代码如下 复制代码 ./configure --with-php-config=/usr/local

CentOS系统下Redis安装和自启动配置的步骤_Redis

一. 安装Redis Redis的安装其实相当简单,推荐的方式是下载redis的源码,并在本机编译后安装. 首次进入主文件夹的下载目录下,执行wget下载源码 [zhxilin@localhost ~]$ cd 下载 [zhxilin@localhost 下载]$ wget http://download.redis.io/redis-stable.tar.gz 接下来解压之后,移动到/usr/redis目录下 [zhxilin@localhost 下载]$ tar -zxvf redis-st