我遇到了一个问题,我的服务器被锁定了,因为它正在向私有 IP 发送数据包。
我的问题是,阻止这种情况的最佳解决方案是什么?
以下是我从托管服务提供商处获得的日志:
[Mon Jun 2 00:04:36 2014] forward-to-private:IN=br0 OUT=br0
PHYSIN=vm-44487.0 PHYSOUT=eth0 MAC=78:fe:3d:47:3d:20:00:1c:14:01:4e:cd:08:00
SRC=78.46.198.21 DST=192.168.249.128 LEN=1454 TOS=0x00 PREC=0x00 TTL=64
ID=58859 DF PROTO=UDP SPT=41366 DPT=41234 LEN=1434
[Mon Jun 2 00:17:15 2014] forward-to-private:IN=br0 OUT=br0
PHYSIN=vm-44487.0 PHYSOUT=eth0 MAC=78:fe:3d:47:3d:20:00:1c:14:01:4e:cd:08:00
SRC=78.46.198.21 DST=192.168.249.128 LEN=1456 TOS=0x00 PREC=0x00 TTL=64
ID=52234 DF PROTO=UDP SPT=55430 DPT=41234 LEN=1436
答案1
如果您不了解托管服务提供商为何会这样做*,您可以通过 iptables 或调整路由来过滤它。
如果您有私有网络(VPN 等),则应添加适当的路由。否则,请在规则集的开头丢弃发往这些网络的数据包:
iptables -N BLOCKPRIVATE
iptables -A BLOCKPRIVATE -d 192.168.0.0/16 -j DROP
iptables -A BLOCKPRIVATE -d 172.16.0.0/12 -j DROP
iptables -A BLOCKPRIVATE -d 10.0.0.0/8 -j DROP
iptables -I OUTPUT -j BLOCKPRIVATE
iptables -I FORWARD -j BLOCKPRIVATE
如果您有确实需要这些路由的私有接口,您也可以通过替换最后两行来进行更细粒度的阻止,例如:
iptables -I OUTPUT -o eth0 -j BLOCKPRIVATE
iptables -I FORWARD -o eth0 -j BLOCKPRIVATE
* 您的托管服务提供商不应该因此而惩罚您,因为如果您没有私有网络,您的应用程序可能会通过尝试连接到私有服务而意外发送数据包。这是完全正常的。