我有一个与udp和tcp一起工作的PBX(电话系统称为Astersik )。 有时我会从一些我想阻止的IP地址收到无效的请求。 我无法阻止这些请求,直到我重新启动我的电脑。 我认为这是因为UFW不会阻止build立的连接 。
假设我从IP地址1.2.3.4获取恶意请求。 然后我需要通过执行命令来阻止这些请求:
sudo ufw insert 1 deny from 1.2.3.4 to any
我需要insert 1以便规则在其他之前执行。
无论如何,即使我执行该命令,我仍然看到我的电脑回复到1.2.3.4 。 问题是因为已经build立了连接,所以ufw在这些连接closures之前不会丢弃这些数据包。
我find了一个临时解决scheme
1)我打开nano /etc/ufw/before.rules
2)注释行:
(在图片中,线条没有被评论,但是评论红圈内的所有东西)
3)重新启动防火墙ufw disable然后ufw enable
如果我评论这些线路,那么我的防火墙就会像我想的那样工作。 它会立即阻止连接!
问题是,评论这些行导致我的DNS停止工作换句话说,现在当我执行ping google.com我看到uknown host google.com
为什么当我评论这些行时dns停止工作? 总之,我需要当我执行sudo ufw insert 1 deny from 1.2.3.4 to any我没有得到从该IP的更多请求! 每次我想阻止一个IP地址时,我都无法重新启动计算机。
UDP是一种无状态协议,但是Linux内核仍然追踪IP和端口号30秒,以确定build立的和相关的通信量。 (30秒或/proc/sys/net/netfilter/nf_conntrack_udp_timeout ) – ServerFault链接: iptables:“-p udp –state ESTABLISHED”
DNS工作在UDP上,所以如果你发送一个DNS查询,并且你已经注释掉允许相关返回stream量的规则,你将不会得到任何答复 – >破坏的DNS。
因为UDP状态被追踪了30秒,所以你试图在INPUT顶部插入一个新的阻塞规则没有任何作用。 “ufw-before-input”首先发生并允许ESTABLISHEDstream量,在您的INPUT规则开始查看并删除它之前。
要修复它,你需要:
使用类似'conntrack'的东西来删除要阻塞的主机的跟踪UDP条目,然后将阻止规则添加到防火墙。 将不会有一个build立或相关的连接,所以该块应立即生效。 例如删除特定的conntrack条目?
重做你的防火墙规则,这样你就可以在DROP之后的INPUT规则中build立ESTABLISHED,RELATED规则,而不是先做。
每次我想阻止一个IP地址时,我都无法重新启动计算机
但是你可以负担得起过滤40亿个IP地址,一次一个,手工阻止他们? 这似乎并不合理。 使用IPS设备,使用fail2ban。
远野,
ufw是iptables的前端。 你基本上要问的是,为什么当你停止接受相关,build立连接时,DNS会失败。 conntrack跟踪你的连接。 如果stream量与Conntrack中的条目相匹配,那么它是“已build立”的。 如果已build立的连接创build一个新的连接,则它是相关的。 如果stream量是新的,而且没有build立或相关则是新的。
如果已经build立连接,则需要在链的开头插入放置指令。 编辑/etc/ufw/before.rules,以便在您评论的规则之前有一个块区段。 添加-A ufw-before-input -s 1.2.3.4 -j DROP条目-A ufw-before-input -s 1.2.3.4 -j DROP在那里。 然后使用sudo ufw reload 。
如果你在使用iptables而不是ufw时仍然有问题,因为ufw是iptables的前端,并且不包括所有的select。
https://www.cyberciti.biz/faq/how-to-block-an-ip-address-with-ufw-on-ubuntu-linux-server/
https://help.ubuntu.com/community/UFW
在这里input链接描述