![iptables - 快速安全评估并限制一段时间内的最大连接数](https://linux22.com/image/535015/iptables%20-%20%E5%BF%AB%E9%80%9F%E5%AE%89%E5%85%A8%E8%AF%84%E4%BC%B0%E5%B9%B6%E9%99%90%E5%88%B6%E4%B8%80%E6%AE%B5%E6%97%B6%E9%97%B4%E5%86%85%E7%9A%84%E6%9C%80%E5%A4%A7%E8%BF%9E%E6%8E%A5%E6%95%B0.png)
正在使用一些花哨的 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 有具体的问题,或者对于如何构建防火墙规则有一般性疑问,这里是个不错的询问场所。