板载 CentOS7.6 + iptables + OpenVPN2.4 (UDP proto)。
问题重复了,但似乎很简单:我只想为我的 VPN 用户阻止某些特定端口。所以我做了
iptables -I FORWARD -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp -m multiport --dports 445,3333,5228,17890 -j DROP
service iptables save
service iptables restart
然后执行iptables -L
并FORWARD
链包含我添加的规则。
完整的 iptables 设置如下:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to 111.222.333.444
iptables -I INPUT -p udp --dport 1194 -j ACCEPT
iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp -m multiport --dports 445,3333,5228,17890 -j DROP
但后来我尝试使用
tcptrack -i eth0
我仍然可以看到正在创建到被阻止端口的连接。
我做错了什么?
答案1
我不知道为什么,但这条规则解决了这个问题
iptables -I FORWARD -s 10.8.0.0/24 -p tcp -m multiport --dports 445,3333,5228,17890 -j DROP
答案2
我认为答案是,仅仅因为您已将 OpenVPN 配置为使用 udp,并不能阻止其他人向您发送 tcp 数据包。请注意,您尝试的第一条规则仅阻止 udp;有效的第二条规则阻止 tcp。
顺便说一句,我更喜欢使用 iptables -A 而不是 iptables -I,这样我编写规则的顺序就与执行规则的顺序相同。(无论如何,iptables -L 都会按执行顺序列出规则。)在我的第一个(已删除的)答案中,我被您使用 -I 而不是 -A 绊倒了,因此将您的规则执行顺序向后解释。