It's either the firewall or the router but I am having a little trouble drawing out your network. Which talks directly to the Internet the router or the firewall? When a packet leaves your PC does it go first to the firewall or to the router? Does the router have two ethernet connections? One on the private LAN and one on the Web Server's public?
From your PC which I assume is a window box open a DOS window (start/run/cmd or start/run/command) and type
tracert -d 66.218.71.90
This should show the path that a packet takes. You would expect it to go to your default gateway which I assume is your router and then be sent to your server. Instead it will probably be sent out to your ISP's router. The ISP router might send it back to you but since it would look to the firewall like someone was spoofing the address it would be dropped.
If it doesn't go to the ISP then it might actually be delivered to the webserver but when the webserver tries to reply the traffic may automatically be sent to the ISP where the same thing could happen.
You can run the same command from the webserver if it is a window box or if not try
traceroute ipaddressofboxdoingtheNAT
sometimes you have to say
/usr/sbin/traceroute ipaddressofboxdoingtheNAT
Another possibility is that the routing works correctly but the interface to the webserver is not declared as "NAT outside" so that packets coming from it are not examined to see if the destination address is in the external NAT pool and thus subject to having the destination changed back to an internal private address.
Finally the firewall or router filters may not allow such traffic. (They may also not allow traceroute replies either.)
Ron