模拟不同的 Src IP(欺骗)以测试 geoip 过滤

模拟不同的 Src IP(欺骗)以测试 geoip 过滤

我想根据ip来源模拟不同的ip来测试流量过滤。

我使用 iptables 和 2 个使用桥接网络模拟节点 1 和节点 2 的容器做了一些测试。

  • node1是欺骗其源地址并向node2发送请求的节点
  • node2只是接收端,我们打算在其中检查ip的来源

我首先尝试使用 ICMP,这很简单:

# node1 : target icmp protocol and change the src @
node1> sudo iptables -t nat -A POSTROUTING -p icmp -j SNAT --to-source 0.0.1.45

# node2 : redirect traffic targeted to 192.168.1.66 to 
node2> declare node1="$(dig +short node1)"
node2> iptables -t nat -A OUTPUT -p icmp -d 0.0.1.45 -j DNAT --to-source $node1

TCP ip 欺骗结果并不是那么简单:我尝试通过对请求进行 SNAT 并使用 DNAT 规则将流量发送回真实主机来模拟 ip 223.253.0.5。 node2 上的 tcpdump 显示请求已被很好地接收,但数据包必须在到达用户空间之前的某个时刻被丢弃。

# node1 : 
node1> declare node2="$( dig +short node2 )"
node1> sudo iptables -t nat -A POSTROUTING -p tcp -d "$node2" --dport 80 -j SNAT --to-source 223.253.0.5
node1> sudo iptables -t nat -A POSTROUTING -p tcp -d "$node2" --dport 443 -j SNAT --to-source 223.253.0.5


# node2 : where we check the origin of the ip
node2> declare node1="$(dig +short node1)"
node2> iptables -t nat -A OUTPUT -p tcp -d 223.253.0.5 -j DNAT --to-destination $node  # to send back traffic to the spoofer

为了模拟请求,我使用了curl

# on the client's side
node1> curl -vvv --insecure -Ls http://$node2:80

# or using socat
  # the client 
node1> socat - TCP:node2:80 
  # the server
node2> socat - TCP-LISTEN:80,fork,bind=172.16.2.6

我真的很想知道为什么我不能让它使用 TCP 工作。

相关内容