服务器上的防火墙的一部分:
iptables -A INPUT -p tcp --dport 22 -m state NEW --state -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 100 --hitcount 10 -j DROP
当我在线搜索时,我总是看到该规则中使用了 NEW,但我很难理解为什么不使用 ESTABLISHED 和 RELATED。
像这样 :
iptables -A INPUT -p tcp --dport 22 -m state NEW,ESTABLISHED,RELATED --state -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -m recent --update --seconds 100 --hitcount 10 -j DROP
有人能向我解释一下 NEW 数据包何时变为 ESTABLISHED 和 RELATED 吗?
答案1
考虑在接收方接听电话之前拨打的电话中的新数据包。已建立数据包是他们的“你好”。如果您打电话告诉他们您即将发送的电子邮件,则相关数据包是相关数据包。(电子邮件是相关的。)
如果我的类比不是很好,我个人认为手册页处理得很好:
NEW——表示数据包已启动新连接,或与尚未在两个方向上看到数据包的连接相关联,并且
ESTABLISHED——表示该数据包与一个已在两个方向上看到数据包的连接相关联,
RELATED——表示数据包正在启动一个新连接,但与现有连接相关,例如 FTP 数据传输或 ICMP 错误。
答案2
假设服务器和客户端都是限制性的INPUT
和开放的OUTPUT
,即:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
来自iptables-扩展(8)以主动模式的 FTP 为例:
1. 全新
NEW 该数据包已启动新的连接或与尚未在两个方向上见过数据包的连接相关联。
端口 上的客户端50000
(任何随机的非特权端口)连接到端口 上的 FTP 服务器21
,服务器至少需要以下内容才能接受此传入连接:
iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT
2. 成立
已建立 该数据包与已在两个方向上看到数据包的连接相关联。
现在在客户端,他21
使用本地端口打开了到端口上的服务器的传出连接50000
,并且他需要以下 iptables 来允许响应从server (21)
到达client (50000)
:
sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
3. 相关
相关数据包正在启动新连接,但与现有连接相关,例如 FTP 数据传输或 ICMP 错误。
现在,在建立 FTP 连接并即将执行数据连接后,客户端将在端口上打开服务器套接字(是的,主动 FTP 客户端成为数据连接的服务器)60000
(据我了解,客户端会将此端口标记60000
为RELATED
来自的另一个连接50000->21
)并将使用 FTP 命令将此端口号发送到服务器。然后,FTP 服务器将从其端口到客户端上的端口PORT
打开一个新连接,并且,客户端现在需要以下内容才能使此新连接成功:20
60000
sudo iptables -A INPUT -m state --state RELATED -j ACCEPT
最后,为了使其工作,您需要启用ip_conntrack_ftp
内核模块以允许系统将连接/包标记为RELATED
(这是我的理解,我没有对此进行过多研究):
modprobe ip_conntrack_ftp