我正在运行一个公共服务器。我只想允许 TCP 连接,我想限制数据包以防止 ddosing,并使用 iptables 设置每秒最大 IP/新连接数。我该怎么做?
答案1
要仅在一个端口上允许传入流量,您应该将 iptables 链 INPUT 的默认策略设置为 REJECT 或 DROP。在此之前,您至少应该允许 ssh 端口(可能是 22)上的 tcp 流量,这样您就不会把自己锁在外面。
iptables -A INPUT -p tcp --dport 22 -J ACCEPT
iptables -P INPUT DROP
如果要限制到此端口的新连接,可以使用 state 和 recent 模块。此行设置了当您打开到端口 22 的新连接时类似日志条目的内容。
iptables -I INPUT 1 -p tcp --dport 22 -m state --state NEW -m recent --set
此行检查过去 60 秒内有多少“日志条目”,如果大于 2(即第三个新连接),它将丢弃数据包。它还会更新“日志条目”,以便发送方在接下来的 60 秒内无法打开新连接,如果他再次尝试,它将再次更新此计时器。
iptables -I INPUT 2 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 -j DROP
您应该注意,这两行位于接受到端口 22 的流量的行的顶部,因为 iptables 只使用第一行带有 ACCEPT、DROP 或 REJECT 来决定数据包是否应该通过。