트래픽 필터링을 테스트하기 위해 IP 소스를 기반으로 다양한 IP를 시뮬레이션하고 싶습니다.
브리지된 네트워크를 사용하여 노드 1과 노드 2를 시뮬레이션하는 iptables와 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
요청을 시뮬레이션하기 위해 컬을 사용했습니다.
# 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를 사용하여 작동할 수 없는지 알고 싶습니다.