曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3092|回复: 0
打印 上一主题 下一主题

--syn --- 确认 TCP 中的连接请求

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2012-5-19 14:08:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一般情况下,我们打算允许 sshd ,ftpd, httpd 这些连接,可能会使用下面的防火墙规则:
[Plain Text] 纯文本查看 复制代码
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

一般情况下这样设置没什么问题。但是有点不够完美。众所周知,TCP 协议连接需要经过三次握手 这个过程,而第一次握手则是由客户端发出连接请求信号,其做法是在 TCP 包中将 TCP-Flag 中的 syn 标志置位,如下图所示:

如果,有一个不太守规矩的用户并不按章出牌,而是在发起连接时,直接送出一个带有 fin 的标志(完成连接)的数据包,即还没开始连接就要终止了。那么服务器会该如何响应?谁也不知道,可能一点事都没有,也可能会发生崩溃(事实上很少出现这种情况)。然而为了防止这样的行为,我们可以将上面的规则改为:
[Plain Text] 纯文本查看 复制代码
iptables -A INPUT -p tcp --syn --dport 21 -m state --state NEW -j ACCEPT

上面规则的意思是:我们使用 state 模块来确定,当一个连接是新发起的 (客户端发来第一个连接数据包 (-m state --state NEW)),防火墙要检查该包里是否含有 syn 标志,如果含有,那么认为该连接是个正常的连接,否则就是个非法连接,需要将其摒弃。

又如,如果想屏蔽一切的 TCP 进,而允许 TCP 出,那么可以:
[Plain Text] 纯文本查看 复制代码
iptables -A INPUT -p tcp --syn -j DROP

这样,你可以访问外面的所有可以访问的 TCP 网络服务,而别人则不能通过 TCP 协议来刺探你。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-7 01:48 , Processed in 0.063855 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表