iptables - 快速安全评估并限制一段时间内的最大连接数

iptables - 快速安全评估并限制一段时间内的最大连接数

正在使用一些花哨的 iptable(v1.4.4)规则锁定 *nix 服务器盒。我以一种“偏执,每个人都想抓我”的方式处理这个问题,不一定是因为我认为这个盒子会吸引黑客,而只是为了更彻底地学习 iptables 和 *nix 安全。所有内容都有很好的注释 - 所以如果有人看到我遗漏了什么请告诉我!*nat 表的“--to-ports”指向唯一具有主动监听服务的端口。(除了 ping 之外)第 2 层应用程序专门监听由第 1 层守护进程之一桥接的 chmod 套接字。第 3 层及以上以类似的方式从第 2 层继承。

让我苦恼的两行代码在*filter 规则的最底部被注释掉了。第一行运行正常,但要么全有要么全无。:)

非常感谢,

彼得·H.

*自然
#刷新'nat'表的先前规则、链和计数器
-F
-X
-Z

#将流量重定向到备用内部端口
-I PREROUTING --src 0/0 -p tcp --dport 80 -j REDIRECT --to-ports 8080
-I PREROUTING --src 0/0 -p tcp --dport 443 -j REDIRECT --to-ports 8443
-I PREROUTING --src 0/0 -p udp --dport 53 -j REDIRECT --to-ports 8053
-I PREROUTING --src 0/0 -p tcp --dport 9022 -j REDIRECT --to-ports 8022
犯罪

*筛选
#刷新“过滤器”表的先前设置、链和计数器
-F
-X
-Z

#设置所有连接和协议的默认行为
-P 输入下降
-P 输出下降
-A 转发 -j 删除

#仅接受来自本地网卡的环回流量
-A 输入-i lo -j 接受
-A 输入!-i lo -d 127.0.0.0/8 -j 删除

#接受所有具有有效状态的传出非碎片流量
-A 输出 !-f -m 状态 --状态 NEW,RELATED,ESTABLISHED -j 接受

#丢弃碎片化的传入数据包(并非总是恶意的 - 现在可以接受使用)
-A 输入 -f -j 删除

#允许 ping 请求速率限制为每秒一次(突发确保高延迟连接的可靠结果)
-A 输入-p icmp --icmp-type 8 -m limit --limit 1/sec --limit-burst 2 -j 接受

#自定义链的声明
-N 检查 TCP 标志
-N 检查状态
-N 检查

#丢弃具有无效 tcp-flags 的传入 tcp 连接
-A INSPECT_TCP_FLAGS -p tcp --tcp-flags 全部全部 -j DROP
-A INSPECT_TCP_FLAGS -p tcp --tcp-flags 全部无 -j 删除
-A INSPECT_TCP_FLAGS -p tcp --tcp-flags ACK,FIN FIN -j DROP
-A INSPECT_TCP_FLAGS -p tcp --tcp-flags ACK,PSH PSH -j DROP
-A INSPECT_TCP_FLAGS -p tcp --tcp-flags ACK,URG URG -j DROP
-A INSPECT_TCP_FLAGS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
-A INSPECT_TCP_FLAGS -p tcp --tcp-flags 全部 FIN、PSH、URG -j DROP
-A INSPECT_TCP_FLAGS -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
-A INSPECT_TCP_FLAGS -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A INSPECT_TCP_FLAGS -p tcp --tcp-flags 全部 SYN、FIN、PSH、URG -j DROP
-A INSPECT_TCP_FLAGS -p tcp --tcp-flags 全部 SYN、RST、ACK、FIN、URG -j DROP

#接受具有已建立或相关状态的传入流量
-A INSPECT_STATE -m 状态 --状态 ESTABLISHED,RELATED -j ACCEPT
#如果新传入的 TCP 连接不是 SYN 数据包,则丢弃它们
-A INSPECT_STATE -m state --state NEW -p tcp !--syn -j DROP
#丢弃状态无效的传入流量
-A INSPECT_STATE -m 状态 --状态无效 -j DROP

#INSPECT 链定义
-A 检查-p tcp -j 检查TCP标志
-A 检查 -j 检查状态

#通过 INSPECT 链路由传入流量
-A 输入 -j 检查

#通过 HA 反向代理接受重定向的 HTTP 流量
-A 输入-p tcp --dport 8080-j 接受

#通过 STUNNEL SSH 网关接受重定向的 HTTPS 流量(以及发往其他服务的隧道 HTTPS 流量)
-A 输入-p tcp --dport 8443 -j 接受

#接受 NSD 权威名称服务器的重定向 DNS 流量
-A 输入-p udp --dport 8053 -j 接受

#接受 OpenSSH 服务器的重定向 SSH 流量
#临时解决方案:
-A 输入-p tcp --dport 8022-j 接受
#理想的解决方案:
#将每 10 分钟的新 ssh 连接数限制为最多 10 个,同时允许建立的连接数“不受限制”(或者更好地说是合理限制?)。
#-A 输入 -p tcp --dport 8022 --state NEW,ESTABLISHED -m recent --set -j 接受
#-A 输入 -p tcp --dport 8022 --state NEW -m recent --update --seconds 600 --hitcount 11 -j DROP
犯罪

*弄脏
#刷新'mangle'表中的先前规则、链和计数器
-F
-X
-Z
犯罪

答案1

你的问题到底是什么?我猜你是在问为什么这两行不起作用,因为你缺少“-m 状态”。

改变

#-A INPUT -p tcp --dport 8022 --state NEW,ESTABLISHED -m recent --set -j ACCEPT
#-A INPUT -p tcp --dport 8022 --state NEW -m recent --update --seconds 600 --hitcount 11 -j 

#-A INPUT -p tcp --dport 8022 -m state --state NEW,ESTABLISHED -m recent --set -j ACCEPT
#-A INPUT -p tcp --dport 8022 -m state --state NEW -m recent --update --seconds 600 --hitcount 11 -j 

如果您希望我们阅读您的配置并验证它,这里不适合您,但如果您对 iptables 有具体的问题,或者对于如何构建防火墙规则有一般性疑问,这里是个不错的询问场所。

相关内容