请问 Linux 防火墙屏蔽 IP 为什么无效?

2019-08-02 01:31:45 +08:00
 Phishion

之前使用 fail2ban 设置了一下 ssh 暴力尝试 root 用户名密码会被拒绝的功能

现在想如法炮制设置 nginx 404 访问次数达到阈值之后,也会被拒绝访问

但是我发现 iptable 能看到被捕获的 ip 也生成了相应规则,但是依然可以正常访问,然而 ssh 登录的规则一直是正常的

另外,我自己直接在防火墙写规则也是无效,还是可以正常访问。

iptables -A INPUT -s 182.254.74.167 -j DROP

有没有大佬能指点一二,我自己琢磨半天了,谢谢

附上 fail2ban 规则

/etc/fail2ban/jail.local

[nginxno404]
enabled = true
port = http,https
filter = nginx-not-found
action = iptables[name=nginxno404, port=http, protocol=tcp]
logpath  = /var/log/nginx/access.log
bantime = 86400
findtime = 300
maxretry = 50

附上 iptable 结果

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    8   320 f2b-nginxno404  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
 3748  305K f2b-SSH    tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
 2585  243K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
 1293 70223 INPUT_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
 1293 70223 INPUT_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
 1293 70223 INPUT_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   15   747 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID
 1119 61450 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 

Chain f2b-SSH (1 references)
 pkts bytes target     prot opt in     out     source               destination         
   20  1720 REJECT     all  --  *      *       218.92.0.181         0.0.0.0/0            reject-with icmp-port-unreachable
   31  2176 REJECT     all  --  *      *       132.232.18.128       0.0.0.0/0            reject-with icmp-port-unreachable
   57  3776 REJECT     all  --  *      *       177.32.64.189        0.0.0.0/0            reject-with icmp-port-unreachable
   2259  210K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0  


Chain f2b-nginxno404 (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    8   320 REJECT     all  --  *      *       182.254.74.167       0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       182.254.28.36        0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           
5651 次点击
所在节点    程序员
32 条回复
ladypxy
2019-08-02 05:26:12 +08:00
顺序很重要,drop 部分要放在最上面
ik
2019-08-02 08:46:47 +08:00
iptables -I INPUT -s 182.254.74.167 -j DROP
Bardon
2019-08-02 08:55:56 +08:00
什么情况
INPUT 引用 f2b-nginxno404 链,然后 f2b-nginxno404 中 针对 182.254.74.167 reject 了

暴力破解 ssh 的,在 f2b-SSH 链中 reject 了
xduanx
2019-08-02 10:38:49 +08:00
@Bardon 理论上,这样操作没问题吧,但 LZ 说不生效,大佬是否看出哪里不对么
lpvekk
2019-08-02 10:58:18 +08:00
iptables service start
skylancer
2019-08-02 11:23:07 +08:00
@lpvekk 回帖前请看清楚人家写了什么,谢谢茄子
omph
2019-08-02 11:33:41 +08:00
网页有缓存吗?
laminux29
2019-08-02 12:27:05 +08:00
开 debug 模式,规则全删,一条条地加进去,加一条测一条。当加到某条,发生测试结果与预计不符的情况时,调换顺序,或者随机删除某几项。
Phishion
2019-08-02 12:50:32 +08:00
@ik @omph @lpvekk @xduanx @Bardon @ladypxy

报告各位大佬:
输入 iptables -I INPUT -s 182.254.74.167 -j DROP 之后,SSH 会被立即断开,但是 web 依然可以正常访问,应该不是 iptable 没有启动,肯定不是缓存的问题,也没有 CDN,我推测会不会是 fail2ban 里面规则的顺序问题。
znood
2019-08-02 12:51:28 +08:00
是不是只 REJECT 了 80 端口,依然可以通过 443 访问?
Phishion
2019-08-02 12:55:31 +08:00
@znood 我开没启用 https,目前访问都是 80 的
VD
2019-08-02 13:12:31 +08:00
-I 是插入到指定位置,然而你没有指定行位置,所以还是插入到 INPUT 最后一行了


如果你就是想对 INPUT 操作,不论 f2b-SSH 还是 f2b-nginxno404 都要生效,注意顺序,譬如放在 INPUT 中的第一行,iptables 是从上到下匹配。
iptables -I INPUT 1 -s 182.254.74.167 -j DROP
VD
2019-08-02 13:14:28 +08:00
说错了,不指定行数,默认就是第一行...

那就不可能了呀,对方访问的是缓存数据?你确定对方 web 访问后,你的 nginx 中有对应的日志产生?
VD
2019-08-02 13:20:15 +08:00
一般而言,iptables 的 input 默认 drop

然后第一条放行 ping,禁 ping 的忽略
-A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
第二条放行以连接的,譬如 ssh 目前连接着,防止被立即 drop 掉
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
第三条放行 lo 回环
-A INPUT -i lo -j ACCEPT
......
中间放具体规则
......
末尾收尾
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
VD
2019-08-02 13:29:45 +08:00
问下 182.254.74.167 是你的外网吧,你在内网测试?流量通过网关直接走了内网。
Phishion
2019-08-02 13:58:19 +08:00
@VD 感谢你的回复,IP 是我的外网 IP,iptables -I INPUT 1 -s 182.254.74.167 -j DROP 之后,SSH 会立即断开,但是网页竟然还是正常的,不是内网,我是电信宽带,服务器在美国。

iptables -L -n

```
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 182.254.74.167 0.0.0.0/0
f2b-nginxno404 tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
DROP all -- 182.254.74.167 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
INPUT_direct all -- 0.0.0.0/0 0.0.0.0/0
INPUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
INPUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- 0.0.0.0/0 0.0.0.0/0
DOCKER-ISOLATION-STAGE-1 all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_direct all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_IN_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_IN_ZONES all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_OUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_OUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
OUTPUT_direct all -- 0.0.0.0/0 0.0.0.0/0

Chain DOCKER (2 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 172.19.0.2 tcp dpt:8080
ACCEPT tcp -- 0.0.0.0/0 172.19.0.2 tcp dpt:8000
ACCEPT tcp -- 0.0.0.0/0 172.19.0.3 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 172.19.0.4 tcp dpt:5432

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- 0.0.0.0/0 0.0.0.0/0
DOCKER-ISOLATION-STAGE-2 all -- 0.0.0.0/0 0.0.0.0/0
RETURN all -- 0.0.0.0/0 0.0.0.0/0

Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target prot opt source destination
DROP all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 0.0.0.0/0 0.0.0.0/0
RETURN all -- 0.0.0.0/0 0.0.0.0/0

Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0

Chain FORWARD_IN_ZONES (1 references)
target prot opt source destination
FWDI_public all -- 0.0.0.0/0 0.0.0.0/0 [goto]
FWDI_public all -- 0.0.0.0/0 0.0.0.0/0 [goto]

Chain FORWARD_IN_ZONES_SOURCE (1 references)
target prot opt source destination

Chain FORWARD_OUT_ZONES (1 references)
target prot opt source destination
FWDO_public all -- 0.0.0.0/0 0.0.0.0/0 [goto]
FWDO_public all -- 0.0.0.0/0 0.0.0.0/0 [goto]

Chain FORWARD_OUT_ZONES_SOURCE (1 references)
target prot opt source destination

Chain FORWARD_direct (1 references)
target prot opt source destination

Chain FWDI_public (2 references)
target prot opt source destination
FWDI_public_log all -- 0.0.0.0/0 0.0.0.0/0
FWDI_public_deny all -- 0.0.0.0/0 0.0.0.0/0
FWDI_public_allow all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0

Chain FWDI_public_allow (1 references)
target prot opt source destination

Chain FWDI_public_deny (1 references)
target prot opt source destination

Chain FWDI_public_log (1 references)
target prot opt source destination

Chain FWDO_public (2 references)
target prot opt source destination
FWDO_public_log all -- 0.0.0.0/0 0.0.0.0/0
FWDO_public_deny all -- 0.0.0.0/0 0.0.0.0/0
FWDO_public_allow all -- 0.0.0.0/0 0.0.0.0/0

Chain FWDO_public_allow (1 references)
target prot opt source destination

Chain FWDO_public_deny (1 references)
target prot opt source destination

Chain FWDO_public_log (1 references)
target prot opt source destination

Chain INPUT_ZONES (1 references)
target prot opt source destination
IN_public all -- 0.0.0.0/0 0.0.0.0/0 [goto]
IN_public all -- 0.0.0.0/0 0.0.0.0/0 [goto]

Chain INPUT_ZONES_SOURCE (1 references)
target prot opt source destination

Chain INPUT_direct (1 references)
target prot opt source destination

Chain IN_public (2 references)
target prot opt source destination
IN_public_log all -- 0.0.0.0/0 0.0.0.0/0
IN_public_deny all -- 0.0.0.0/0 0.0.0.0/0
IN_public_allow all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0

Chain IN_public_allow (1 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW

Chain IN_public_deny (1 references)
target prot opt source destination

Chain IN_public_log (1 references)
target prot opt source destination

Chain OUTPUT_direct (1 references)
target prot opt source destination

Chain f2b-nginxno404 (1 references)
target prot opt source destination
REJECT all -- 182.254.74.167 0.0.0.0/0 reject-with icmp-port-unreachable
RETURN all -- 0.0.0.0/0 0.0.0.0/0
```
daviswei
2019-08-02 13:59:45 +08:00
目测你这 INPUT 链没有啥问题,要不看看 mangle 表,是不是这里也配置了 INPUT 链啊?
daviswei
2019-08-02 14:01:27 +08:00
daviswei
2019-08-02 14:02:23 +08:00
@Phishion 还有个可能,你访问网页的时候 ,浏览器是不是有代理?
Phishion
2019-08-02 14:18:28 +08:00
@daviswei 感谢你的帮助
我试了一下,不是代理的问题,我关掉代理也可以访问,和我同一个局域网的手机也可以正常访问,而且 IP 地址实际上是服务端 fail2ban 捕获的,跟我本地的 IP 也吻合。
我不是专业运维,所以不太懂 mangle 这样的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/588382

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX