zoukankan      html  css  js  c++  java
  • kernel: possible SYN flooding on port 80. Sending cookies

    1.

    sysctl -w net.ipv4.tcp_syncookies=1 #启用使用syncookies
    sysctl -w net.ipv4.tcp_synack_retries=1 #降低syn重试次数
    sysctl -w net.ipv4.tcp_syn_retries=1 #降低syn重试次数
    sysctl -w net.ipv4.tcp_max_syn_backlog=6000 #最大半连接数
    sysctl -w net.ipv4.conf.all.send_redirects=0
    sysctl -w net.ipv4.conf.all.accept_redirects=0 #不接受重定向的icmp數據包
    sysctl -w net.ipv4.tcp_fin_timeout=30
    sysctl -w net.ipv4.tcp_keepalive_time=60
    sysctl -w net.ipv4.tcp_window_scaling=1
    sysctl -w net.ipv4.icmp_echo_ignore_all=1 #禁止ICMP
    sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1#ICMP禁止广播

    2.限制单位时间内连接数

    iptables -N syn-flood
    iptables -A FORWARD -p tcp --syn -j syn-flood
    iptables -A INPUT -p tcp --syn -j syn-flood
    iptables -A syn-flood -p tcp --syn -m limit --limit 3/s--limit-burst 1 -j ACCEP
    iptables -A syn-flood -j DROP
    iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW-j DROP
    iptables -A INPUT -p tcp --syn -m state --state NEW -jDROP

    3 如果还是不行,
    iptables -A INPUT -p tcp --dport 80 -m recent --nameBAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT
    iptables -A INPUT -p tcp --dport 80 -m recent --nameBAD_HTTP_ACCESS --set -j ACCEP

    如攻击过来的流量大于你的服务器的流量,那就没有什么办法了,如果流量不大,以上方法,可以暂时保证你的80可以访问
    ---------------------------------------------------------------------------------------------
    如果你的内核已经支持iptables connlimit可以使用, iptables设定部份,也可以使用

    iptables -I FORWARD -p tcp --syn -m connlimit--connlimit-above 5 -j DROP

    iptables -A INPUT -p tcp --syn --dport 80 -m connlimit--connlimit-above 5 -j REJECT
    ------------------------------------------------------------------------------------
    iptables -A INPUT -p tcp --syn -m limit --limit 1/s -jACCEPT
    iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -mlimit --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]}'
    ---------------------------------------------------------------------------------------------
    防止同步包洪水(Sync Flood)
    # iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -jACCEPT
    也有人写作
    #iptables -A INPUT -p tcp --syn -m limit --limit 1/s -jACCEPT
    --limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改
    防止各种端口扫描
    # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST-m limit --limit 1/s -j ACCEPT
    Ping洪水攻击(Ping of Death)
    # iptables -A FORWARD -p icmp --icmp-type echo-request -mlimit --limit 1/s -j ACCEPT

    vi /etc/sysctl.conf
    net.ipv4.tcp_tw_reuse = 1
    该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。
    net.ipv4.tcp_tw_recycle = 1
    recyse是加速TIME-WAIT sockets回收
    对tcp_tw_reuse和tcp_tw_recycle的修改,可能会出现.warning, got duplicatetcp line warning, got BOGUS tcpline.上面这二个参数指的是存在这两个完全一样的TCP连接,这会发生在一个连接被迅速的断开并且重新连接的情况,而且使用的端口和地址相同。但基本上这样的事情不会发生,无论如何,使能上述设置会增加重现机会。这个提示不会有人和危害,而且也不会降低系统性能,目前正在进行工作
    net.ipv4.tcp_syncookies = 1
    表示开启SYNCookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
    net.ipv4.tcp_synack_retries = 1
    net.ipv4.tcp_keepalive_time = 1200
    表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时
    net.ipv4.tcp_fin_timeout = 30
    fin_wait1状态是在发起端主动要求关闭tcp连接,并且主动发送fin以后,等待接收端回复ack时候的状态。对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。
    net.ipv4.ip_local_port_range = 1024 65000
    net.ipv4.tcp_max_syn_backlog = 8192
    该文件指定了,在接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
    net.ipv4.tcp_max_tw_buckets = 5000

    sysctl -p

  • 相关阅读:
    Python Flask数据库连接池
    Python Flask 配置文件
    Flask 通过扩展来实现登录验证
    Flask 的系统学习
    Python Flask装饰器登录验证
    Django 批量导入文件
    fedora25的免密码rsync服务配置
    linux强制拷贝避免输入yes方法
    linux系统web站点设置-http基础设置
    rsync用法详细解释
  • 原文地址:https://www.cnblogs.com/tony2017/p/11236448.html
Copyright © 2011-2022 走看看