遭遇”慢连接”DOS攻击小记

 晨,网站访问突然变得非常困难,最初怀疑机房的路由出问题(曾经出过一次),和机房联系后更换了路由,但问题仍旧。

    中午,偶然发现有大量处于SYN_RECV状态的链接,google后怀疑遭到SYN Flood攻击。

    查询处于SYN状态的连接数,可以用这个命令:

    netstat -atn | grep -c SYN

    查询连接最多的ip:

    netstat -atn | grep “SYN” | awk ‘{print $5}’ | awk -F’:’ ‘{print $1}’ | sort -nr | uniq -c | sort -nr | head

    发现有若干ip的连接数在200以上,基本确定为SYN攻击。

    然后开始用手工方式BAN掉这些IP:

    iptables -A INPUT -p tcp -s 攻击者ip -dport 80 -j REJECT

    因为在上班,没有更多时间处理,只能隔一阵子BAN一些连接数超过50的IP,勉强维持网站的访问。

    9.19凌晨

    在几位朋友的帮忙下,改了一个脚本,把上述工作改成了自动执行。每隔一分钟检查SYN状态下连接数过高的ip,然后BAN掉。

    9月19日

    脚本非常有效,除load稍高之外,访问正常。

    9月20日

    攻击方发现SYN无效后,改为使用WAIT状态的连接攻击。这个相对好办,只要把上述代码中的SYN改成 “SYN\\|WAIT”即可。如:

    netstat -atn | grep -c “SYN\\|WAIT”

    9月22日

    攻击加剧,可能是攻击方调用了更多的机器发动攻击。服务器load高达800-900,ssh完全无法登录。

    通知机房停掉了电信ip,对方果然不知道这机器的网通ip。电信ip停掉后,顺利地通过网通ip登入Shell。

    暂时没有更好的办法,改了一些shell内核参数,包括启用syn cookie等,然后把自动BAN IP的脚本改为超过30个慢连接就BAN。

    但这样很容易误杀,比如一些学校、公司和网吧用户,他们是同一网站ip的。

    这样改了之后又勉强撑住。

    9月23日

    终于找到一个治本的办法:使用nginx当apache的反向代理。

    nginx是老毛子开发的一个web服务器和反向代理,把它架在apache的前面,作为前端web服务器。

    因为它本身具有防慢连接的机制(原理不说了,google一大堆),所以先把所有对80端口的访问交由nginx来处理。

    对于图片/js/css等静态文件,由nginx直接返回,不交给apache。

    而php文件才交给apache处理。

    TIP:这么做还有一个好处,如果把nginx的connection设为keep-alive,而apache设为close,整体效率还会高很多。

    这么一来,居然效果奇好。apache的进程数直接从200+降为15左右,而nginx本身的进程才2个,系统load直接下降。

    而且对慢连接,即使有几个ip的WAIT状态链接高达1000+也对网站访问毫无影响。

    TIP:记得把apache设为只侦听127.0.0.1的访问,以免外部直接绕过nginx冲击apache。

    这里有一篇文章讲这个结构:http://kovyrin.net/2006/05/18/nginx-as-reverse-proxy/

### 使用 UniApp 开发小记账本应用程序 #### 项目概述 生活记账小程序通过前端 Vue 和 UniApp 设计开发,后端采用 SpringBoot 提供数据接口支持。主要功能模块包括首页展示、分类记账以及微信登录状态管理[^1]。 #### 创建新项目 首先安装 HBuilderX 或者其他 IDE 工具来创建一个新的 UniApp 项目: ```bash npm install -g @dcloudio/uni-cli uni create myAccountBookProject ``` 进入项目目录并初始化必要的配置文件。 #### 配置 App.vue 生命周期函数 为了更好地控制应用生命周期,在 `App.vue` 中定义如下几个重要钩子函数用于处理不同场景下的逻辑操作: - **onLaunch**: 当整个程序启动时调用此方法, 可以在这里做一些全局性的初始化工作. - **onShow**: 页面每次从前台切到后台再返回前台都会触发这个事件, 合适用来刷新某些实时变化的内容. - **onHide**: 对应于当用户点击 Home 键使 APP 进入后台运行模式时执行的动作. 这些设置有助于提升用户体验流畅度和响应速度[^2]. #### 数据绑定与交互实现 确保所有的业务逻辑都放置在 methods 下面,并且避免 data 属性名称同 method 名冲突以免造成不必要的错误;另外注意检查 HTML 标签内部是否存在重复属性声明尤其是集成第三方 UI 组件库 uView-ui 的时候要格外小心[^3]: ```html <template> <!-- 记录条目输入框 --> </template> <script> export default { name: 'RecordEntry', data() { return { recordType: '', amount: null, date: '' } }, methods:{ addNewRecord(){ // 添加新的财务记录... } } } </script> ``` #### 接口对接与缓存机制 对于前后端分离架构的应用来说,合理的 API 路由规划至关重要。这里推荐使用 RESTful 风格的服务端点配合 axios 发起 HTTP 请求完成增删改查等基本 CRUD 功能。与此同时引入 Redis 做为临时存储介质加速频繁访问的数据读取效率降低 MySQL 查询压力。 #### 微信开放能力接入 如果计划让这款理财工具具备社交分享特性,则需按照官方文档指引注册成为微信公众平台开发者账号获得 appid 权限认证之后才能正常使用诸如支付等功能服务。此外还可以考虑加入直播营销插件吸引更多潜在客户群体关注产品动态[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值