专业,专注,企业信息化建设-中技互联网
品牌建站 OA系统 重庆seo 全国咨询电话 023-67742189 建站 67742189 维护 67742189

网站超市 商城WEB FLASH站点

首页 >> 网站优化 >> 中技推荐 >> TCP协议的握手过程及如何利用iptables防止syn攻击
TCP协议的握手过程及如何利用iptables防止syn攻击
作者:大东 来源:www.zjcoo.net 日期:2013-05-23
文章分享:

   SYN_RECV状态,顾名思义,是收到SYN包后应该置的状态。关 于SYN_RECV状态,受某些教科书的误导,笔者以前一直理解为服务器收到 SYN包后应该置此状态。也没细想到底是置那个socket的状态,最近在看三次握手协议在linux内核中的实现时,才仔细思考这个问题应该是置连接套 接字的状态而非监听套接字的状态。

  通常,SYN包只用于TCP三次握手协议中。常见的tcp三次握手协议过程(当然还有同时连接、半连接等其它一些情况),如下:

  1、client SYN包---> server

  2、client <---SYN包/ACK包 server

  3、client ACK包---> server

  根据tcp状态图,对应下述4个状态的变化

  a、client发送完毕,状态变成SYN_SEND;

  b、server收到SYN报并发送ack确认包和SYN包,状态变为SYN_RECV

  c、client发送ack包完毕,状态变成ESTABLISHED

  d、server发送ack包完毕,状态变成ESTABLISHED 在linux内核中,上述几个状态对应为TCP_SYN_SEND、TCP_SYN_RECV、TCP_ESTABLISHED.

  RFC793中关于SYN_RECV状态的描述如下:

  SYN-RECEIVED - represents waiting for a confirming connection

  request acknowledgment after having both received and sent a

  connection request.

  利用iptables防tcp_syn攻击

  修改iptables

  iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT

  iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

  iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

  echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog

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

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

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

  查询某ip并发连接数

  netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r

  统计

  netstat -na |grep SYN_RECV |grep 80 |wc -l

  查看各个状态总数

  netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

  sysctl内核

  net.ipv4.ip_forward = 0

  net.ipv4.conf.default.rp_filter = 1

  net.ipv4.conf.default.accept_source_route = 0

  kernel.sysrq = 0

  kernel.core_uses_pid = 1

  net.ipv4.tcp_syncookies = 1

  kernel.msgmnb = 65536

  kernel.msgmax = 65536

  kernel.shmmax = 68719476736

  kernel.shmall = 4294967296

  net.ipv4.tcp_max_syn_backlog = 65536

  net.core.netdev_max_backlog = 32768

  net.core.somaxconn = 32768

  net.ipv4.tcp_max_tw_buckets = 5000

  net.core.wmem_default = 8388608

  net.core.rmem_default = 8388608

  net.core.rmem_max = 16777216

  net.core.wmem_max = 16777216

  net.ipv4.tcp_rmem = 4096 87380 16777216

  net.ipv4.tcp_wmem = 4096 65536 16777216

  net.ipv4.tcp_timestamps = 0

  net.ipv4.tcp_synack_retries = 2

  net.ipv4.tcp_syn_retries = 2

  net.ipv4.tcp_tw_recycle = 1

  net.ipv4.tcp_tw_reuse = 1

  net.ipv4.tcp_mem = 196608 262144 393216

  net.ipv4.tcp_max_orphans = 3276800

  net.ipv4.tcp_fin_timeout = 30

  net.ipv4.tcp_keepalive_time = 120

  net.ipv4.ip_local_port_range = 1024 65535

重庆中技互联网信息咨询有限公司 www.zjcoo.co

文章分享: