CentOS系统作为常用的服务器操作系统,在面对大量异常并发请求时,如果没有合理的限制策略,很容易遭受拒绝服务攻击,导致正常用户无法访问服务。通过内核参数调整、防火墙规则配置和服务自身限制,可以有效管控并发连接,抵御常见的拒绝服务攻击。

内核参数优化限制系统级并发
通过修改sysctl配置可以调整系统内核的网络相关参数,从系统层面限制连接数和请求频率,减少拒绝服务攻击的影响。
首先编辑sysctl配置文件:
# 编辑sysctl配置文件 vi /etc/sysctl.conf
在文件末尾添加以下参数:
# 开启SYN Cookie防护,应对SYN洪水攻击 net.ipv4.tcp_syncookies = 1 # 允许的最大半连接数 net.ipv4.tcp_max_syn_backlog = 8192 # 系统同时处理的最大连接数 net.core.somaxconn = 4096 # 每个端口最大监听队列长度 net.ipv4.tcp_synack_retries = 2 # 减少TCP连接存活时间,释放无效连接 net.ipv4.tcp_fin_timeout = 30 # 限制单个IP可建立的连接数上限 net.ipv4.tcp_max_tw_buckets = 5000
保存后执行以下命令让配置生效:
# 加载sysctl配置 sysctl -p
使用iptables配置连接限制规则
iptables是CentOS自带的防火墙工具,可以通过规则限制单个IP的并发连接数和请求频率,直接拦截异常流量。
限制单IP并发连接数
以下规则限制单个IP最多只能建立20个SSH连接,超过的连接会被丢弃:
# 限制单个IP的SSH并发连接数为20 iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 20 -j DROP
限制单IP请求频率
使用recent模块限制单个IP在单位时间内的请求次数,以下规则限制单个IP每分钟最多发起10次HTTP请求:
# 创建recent列表记录HTTP请求IP iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set --name http_limit # 限制每分钟最多10次请求,超过则丢弃 iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --name http_limit -j DROP
配置完成后保存iptables规则,避免重启后失效:
# 保存iptables规则 service iptables save # 重启iptables服务 service iptables restart
服务自身并发连接限制
除了系统层面和防火墙层面,还可以在常用服务中配置并发连接限制,这里以Nginx为例说明配置方法。
编辑Nginx的配置文件nginx.conf:
http {
# 限制单个IP的并发连接数为10
limit_conn_zone $binary_remote_addr zone=perip:10m;
server {
listen 80;
server_name localhost;
# 应用连接限制
limit_conn perip 10;
# 限制单个请求的处理速率为每秒1个请求
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s;
limit_req zone=req_limit burst=5 nodelay;
location / {
root html;
index index.html index.htm;
}
}
}
修改完成后重新加载Nginx配置:
# 测试Nginx配置是否正确 nginx -t # 重新加载配置 nginx -s reload
防护策略验证与维护
配置完成后可以通过以下方式验证限制是否生效:
- 使用
ab工具模拟并发请求,观察是否会被拦截 - 查看
/proc/net/ip_conntrack文件确认当前连接数是否符合限制 - 通过
iptables -L -n -v查看防火墙规则的匹配计数
日常维护中需要定期查看系统日志/var/log/messages和服务的访问日志,及时发现异常IP,将恶意IP加入黑名单。同时根据业务实际访问量调整并发限制参数,避免过度限制影响正常用户访问。