当前位置:首页 >  IDC >  安全 >  正文

被CC打挂之前先做这三步:SYN Flood内核参数调优实战

 2026-08-30 10:35  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

SYN Flood的原理一句话:攻击者狂发TCP握手第一个包(SYN),但不回第三次握手的ACK,服务器傻等,半连接队列被占满,正常用户的握手请求进不来,表现为网站打不开但机器负载并不高。这种攻击成本极低,一个脚本就能打,站长几乎人人会遇到。

先确认是不是这个病:ss -s看一眼,或者netstat -ant里数SYN_RECV状态的数量,正常应该是个位数,几百上千基本就是被打或者被扫描。确认之后从内核、Nginx、高防三层处理。

# 1. 开启SYN Cookie,收到SYN先不占队列,伪造握手
sysctl -w net.ipv4.tcp_syncookies=1

# 2. 缩短SYN重试和半连接存活,别陪攻击者耗
sysctl -w net.ipv4.tcp_synack_retries=2
sysctl -w net.ipv4.tcp_fin_timeout=15

# 3. 半连接队列加大,扛突发
sysctl -w net.ipv4.tcp_max_syn_backlog=8192

# 写入/etc/sysctl.conf后 sysctl -p 生效

内核参数能扛小流量,真正的攻击还得Nginx层配合。单个IP的并发连接和速率限制之前写过limit_req和limit_conn,这里补一个对慢速连接的清理:客户端建立连接后不发数据干耗着,也要踢。

# nginx.conf http块
client_body_timeout 10s; # 读请求体超时
client_header_timeout 10s; # 读请求头超时
send_timeout 10s; # 响应超时

# keepalive别设太长,占用连接
keepalive_timeout 15s;
keepalive_requests 100;

验证:改完之后用ab或者wrk模拟压测,观察ss -s里SYN_RECV数量是否快速回落,正常请求的成功率有没有受影响。压测别拿生产域名打,打本机或者内网测试机。

说句掏心窝的:这三步能挡住脚本小子的业余攻击,挡不住真花钱买的攻击流量。一旦攻击带宽超过你服务器带宽(比如1G口被打了3G),机器层面怎么调都没用,流量根本到不了你机器。这种情况直接切高防IP或者上云清洗,别在服务器上死磕,浪费时间。

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
php教程
服务器安全

相关文章

  • phpredis扩展装完就完事?连接超时、序列化和长连接三个坑先排掉

    PHP连Redis基本都用phpredis这个C扩展,pecl一键装完,newRedis一句就连上了。但默认配置是给本机测试用的,直接上生产迟早出问题。下面三个坑是我见过翻车率最高的。第一个坑:连接超时没设。默认连接超时是0,意思是永远等。Redis那边要是卡了,PHP进程全在等连接,FPM的wor

  • Redis重启数据全丢?RDB和AOF持久化怎么选,别拍脑袋

    Redis快是真快,代价是数据在内存里,进程一崩、机器一断电,没落盘的数据就没了。站长场景里最疼的两种:一是拿Redis存Session,重启一次全员掉线重登;二是拿它存计数器和队列,重启后数字归零、任务丢失。持久化配置平时没人看,出事才知道疼。Redis给两种持久化方案。RDB是定时快照,每隔一段

    标签:
    php教程
  • 网站加了两台服务器用户就掉线?PHP Session存Redis,十分钟搞定多机共享

    单机跑得好好的站,一上负载均衡就出怪事:用户登录着,刷新一下变成未登录;购物车里的东西随机消失。十有八九是Session的问题——Session默认存在本机文件里,用户第一次请求落在A机,Session写在A机,第二次请求被分到B机,B机根本没这个Session,可不就掉线了。解决思路就一句话:Se

    标签:
    php教程
  • Redis缓存穿透打垮数据库?空值缓存加布隆过滤器双保险

    缓存穿透的典型场景:有人拿脚本扫你的站,每次请求一个根本不存在的ID,比如/goods.php?id=99999999。Redis里查不到,请求全落到MySQL,而MySQL也查不到,什么都不缓存。下一波请求还是这个流程,数据库白挨打,缓存形同虚设。跟缓存击穿(某个热key过期)不一样,穿透的点是“

    标签:
    php教程
  • 手机端图片占了八成流量?srcset 响应式图片让每个设备只下载该下的那张

    打开手机流量一看,一个页面干了3MB,图片占了八成。罪魁祸首通常是同一张2000px宽的大图,PC和手机都在原样下载——手机屏幕400px宽,下载的像素是实际需要的几十倍,流量和渲染性能全浪费了。srcset就是解决这个问题的原生方案,不用任何JS。先准备好同一张图的多个尺寸版本,然后一行代码让浏览

    标签:
    php教程

热门排行

信息推荐