トラフィックフィルタリングをテストするために、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を使用して機能できないのか知りたいのですが。