TCP SYN FLOOD 攻击

正常的TCP三次握手过程:

处于SYN FLOOD攻击状态时的三次握手过程:

查看示例:x_syn.c文件,一个实现了自定义mac,ip,tcp头部的syn flood攻击模拟程序。

专门讲解如何应对此类攻击的 RFC4987

TCP 完整连接攻击

客户端和服务端反复建立TCP连接。导致服务器维护大量的TCP连接。这是一种资源对抗的攻击。只要有足够的肉鸡数,就可以把服务器拖垮。防护设备一般也无法防护之类攻击。因为现在的防护设备几乎都是防护连接建立的过程的。连接只要建立完成,防护设备就认为这是一个真实的连接。就会放过。

TCP 连接结束半连接攻击

正常的TCP连接结束的过程(四次握手):

让服务器出现大量LAST-ACK状态的socket连接的办法:客户端发起断开连接的请求。然后当收到服务器发来的FIN包的时候,进入TIME-WAIT状态,其实已经释放了资源。此时服务器估计不回复ACK数据包。这个时候服务器不知道客户端是否收到了自己的FIN包,可能会重传多次FIN包。客户端只要丢弃发过来的FIN包,就可以让服务器保留长时间的LAST-ACK连接。因为处于LAST-ACK状态的socket还是一个完整的socket,所以还是消耗资源的。并且会被CPU调度。

TCP连接结束的四次握手都可以进行攻击。导致服务器出现大量的半连接攻击。这是现在几乎所有的安全厂商都不能防护的攻击方式。

UDP 流量类型攻击

UDP协议容易发送比较大的数据包。UDP协议不需要提前建立TCP连接,所以客户端直接以自己有的最大带宽数来发送数据。凡是到达服务器的数据包都会对服务器已有带宽进行消耗。

DNS 放大类攻击

使用UDP协议运送的DNS数据包,因为DNS响应包远远大于DNS请求包。所以通过伪造IP地址发送DNS请求,就可以让受害主机收到很大流量的DNS响应包。导致带宽堵塞。

查看一个DNS请求攻击。这个请求攻击代码只要修改为可伪造源IP地址的程序,就可以实现放大攻击。dns_flood_c.c 注意里面的USD headr。这是方便数据包解析的时候获取IP头关键信息添加的。

伪造源IP地址现在是相对困难了。一些机房以及网络设备已经可以识别伪造的源IP地址,并进行处理。

基于IP的流量统计和分析(工具)

iftop 分IP实时统计带宽占用情况

nload 实时查看网卡流量

ifstat 工具是个网络接口监测工具,比较简单看网络流量

netstat/ss 查看本机网络连接状态

本机TCP连接状况的分析

统计和本机建立连接最多的一些iP地址:

ss -ant |grep ESTAB|awk '{print $5}'| awk -F: '{print $1}'|sort|uniq -c |sort -r

统计本机各种状态的TCP连接数:

ss -ant |awk '{print $1}' |sort |uniq -c |sort -k1 -n -r

tcpdump 抓包分析

tcpdump -Ani eth0 port 5050 and host 10.10.10.10 -w a.pcap -nnn -vvv

-c 指定只抓多少个包之后自动退出。

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' 打印80端口有数据的包

参照IP数据包头和tcp数据包头检测这个抓包规则的有效性。

iptables 常用模块和命令

使用iptables过滤超过500大小的syn数据包并记录日志:

iptables -N LOGGING
iptables -A INPUT -p tcp --tcp-flags SYN SYN -m length --length 500: -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP

常用命令

新建表:iptables -N LOGGING
删除表:iptables -X LOGGING
列出规则和编号:iptables -L --line-numbers
删除指定(第一条)规则:iptables -D LOGGING 1
设置一个内置表的默认策略:iptables -P INPUT ACCEPT
清空表:iptables -F INPUT

使用 ipset 封禁大量恶意IP

ipset create hacker hash:ip
iptables -I INPUT -m set --match-set hacker src -j DROP
ipset add hacker 1.2.3.4
ipset add hacker 3.4.5.6
ipset list hacker
ipset flush hacker
ipset destroy hacker

首包丢弃的方法

将第一个syn包丢弃的方法来规避大量syn包导致的syn flood攻击。因为tcp协议的重传机制丢弃掉的syn包会被重传。而伪造的syn包不会再次出现。以此来防止syn flood攻击。

基于NetFilter开发的定制工具(迅速关闭半连接的方法)

NetFilter是内置在linux内核中的数据包处理框架。通过在内核的协议栈中内置了一些钩子,允许通过开发内核模块的方式在内核协议栈中注册回调函数来对每个内核处理的数据包进行操作。

iptables中的表和链

iptables 中的4个表

raw 对报文设置一个标志,决定数据包是否被状态跟踪机制处理。只有两个链:OUTPUT、PREROUTING

mangle主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time ToLive,生存周期)值以及为数据包设置Mark标记,以实现Qos (Quality of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

nat 主要用处是网络地址转换、端口映射,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。

filter 这个表主要用于过滤包的,是系统预设的表,内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。

iptables -t 选择操作哪个表

iptables 中的5个链

prerouting

input

forward

output

postrouting

netfilter 数据包流图

记录恶意IP

iptables -N LOGGING
iptables -I INPUT -p tcp --dport 80 -s 192.168.10.155 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped-6379: " --log-level 4
iptables -A LOGGING -j DROP

东哥讲义2 - 基于TCP,UDP协议的攻击,分析与防护的更多相关文章

  1. 基于tcp/udp协议的套接字通信

    目录 一.套接字分类 二.套接字的工作流程 三.基于tcp协议的套接字 四.基于udp协议的套接字 一.套接字分类 1.基于文件类型的套接字家族:AF_UNIX 2.基于网络类型的套接字家族:AF_I ...

  2. 基于TCP/UDP协议的socket

    基于TCP协议的socket tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 server端 import socket sk = socket.socket() sk.bind( ...

  3. QQ--基于TCP/UDP协议的通讯原理

    QQ是一个基于TCP/UDP协议的通讯软件  发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!   一 ...

  4. 基于tcp/udp的协议

    使用TCP协议的常见端口主要有以下几种: (1) FTP:定义了文件传输协议,使用21端口.常说某某计算机开了FTP服务便是启动了文件传输服务.下载文件,上传主页,都要用到FTP服务. (2) Tel ...

  5. 涨知识-VI 基于TCP/UDP的应用层协议

    基于TCP/UDP的应用层协议: 基于TCP: Telnet(Teletype over the Network, 网络电传),通过一个终端(terminal)登陆到网络 FTP(File Trans ...

  6. Fixed-Length Frames 谈谈网络编程中应用层(基于TCP/UDP)的协议设计

    http://blog.sina.com.cn/s/blog_48d4cf2d0101859x.html 谈谈网络编程中应用层(基于TCP/UDP)的协议设计 (2013-04-27 19:11:00 ...

  7. 网络编程—网络基础概览、socket,TCP/UDP协议

    网络基础概览 socket概览 socket模块—TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...

  8. Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理

    通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至 ...

  9. TCP/UDP协议简要梳理

    TCP/UDP协议简要梳理 TCP TCP,Transmission Control Protocol,传输控制协议是一种面向连接的.可靠的.基于字节流的传输层通信协议.在因特网协议族中,TCP所在的 ...

随机推荐

  1. Python easyGUI 文件浏览 显示文件内容

    #提供一个文件浏览夹.让用户选择需要打开的文件,打开并显示文件内容: import easygui as g import os msg='浏览文件并打开' title='测试' default='D ...

  2. 【Leaflet】鼠标提取坐标

    map.on('mousemove', function (e) { document.getElementById('info').innerHTML = /* innerHTML 属性设置或返回表 ...

  3. openjdk源码阅读

    http://rednaxelafx.iteye.com/blog/1549577 http://blog.csdn.net/fancyerii/article/details/7007503 ├—a ...

  4. SaltStack Grains 和 Pillar

    Grains: (1) grains 是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息(2) grains 是 minion 启动时收集到的一些系统信息,比如操作系统版本.内核版本.C ...

  5. JavaScript 简介--对javascript的初识,最基础的了解

    一.javascript的介绍 JavaScript是网景(Netscape)公司开发的一种基于客户端浏览器.面向(基于)对象.事件驱动式的网页脚本语言.JavaScript语言的前身叫作Livesc ...

  6. Kindeditor问题

    1.初始的时候,拿到切图,kindeditor不知道为什么就是显示不出来,只出来个文本框一样的东西 原因:样式未加载,这个是因为美工那边样式重调了,而且新项目并没有将整个插件拷贝过来,而只是拿了kin ...

  7. Matlab 矩阵函数

    clear; clc; A = rand() cond(A) %求矩阵A的条件数 Det(A) %求方阵A的行列式 Dot(A,B) %矩阵A与B的点积 Eig(A) %方阵A的特征值和特征向量 No ...

  8. linux进程永久放后台运行

    我们使用ssh连接服务器之后,如果在执行某个命令需要时间特别长,当把终端断掉之后,命令就自动停止了一般我们在ssh客户端执行命令之后,默认他的父进程是ssh,所以把ssh终端关掉之后,子进程也就被自动 ...

  9. 【大数据系列】基于MapReduce的数据处理 SequenceFile序列化文件

    为键值对提供持久的数据结构 1.txt纯文本格式,若干行记录 2.SequenceFile key-value格式,若干行记录,类似于map 3.编写写入和读取的文件 package com.slp; ...

  10. Word 2010 制作文档结构之图标自动编号设置

    注意: 使用图片自动编号时,如果文档标题使用的样式是通过“将所选内容保存为新快速样式”所生成的样式,则图片自动编号不会生效 因此设置标题样式时,不要 新建样式,直接使用word预设的“标题 1”样式和 ...