NAT (Network Address Translation) works like this:
Computer A (MAC 00:00:00:00:00:01 IP 10.1.1.1) opens a connection to
www.msn.com with source port TCP/4000, destination port TCP/80.
A DNS request is sent out to whatever the configured DNS server is, with a source port of UDP/4000, and a destination port of UDP/53.
The request is sent to the default gateway (MAC 00:00:00:00:00:02 IP 10.1.1.254) since its destined for a host outside the local subnet (255.255.255.0).
The default gateway (NAT box) receives the request, and opens the Connection State Table. It remembers the combination of 10.1.1.1/UDP/4000. It then strips the IP and MAC from the packet, replaces it with it's own information, and makes the request to the DNS server for the address for
www.msn.com with the source being 24.48.34.68/UDP4001 to the DNS server. When the request comes back, the state table identifies the traffic coming back to port 4001, and forwards it back to 10.1.1.1.
Then the same thing happens with the HTTP request. Traffic is sent to the DG, the IP and MAC are stripped, and then replaced with the information from the external interface on the NAT box.
It IS entirely possible to get around NAT machines, and it isn't terribly difficult. The fact of the matter is that not many people are interested in doing it, and it isn't common-knowledge.
Stateful Packet Inspection is a wonderful way of going about firewalling, as it actually evaluates each packet. For instance, if a telnet request came in to port 25 (SMTP), the firewall would look at it and say "Wait a minute, telnet traffic doesn't belong on this port", and drops it. If a malformed or fragmented packet comes in, even if it is on the correct port and has valid addressing, it is dropped because it's not correct/complete.
The best way to stop spyware and zombies and such is to firewall in BOTH directions. ONLY let out traffic on the ports that you want (TCP 21,23,25,80,110, UDP 53), and then only allow responses to traffic initiated from the inside.
It is entirely possible to sniff traffic, spoof a source IP, and then hi-jack a session to gain access.
Trying to spoof an internal address to get in from the outside won't work, because (I think someone mentioned this already) RFC 1918 prevents certain address ranges from being publicly routable (10.x.x.x -- Class A, 172.x.x.x -- Class B, and 192.168.x.x -- Class C), so the traffic would never get to your NAT box to begin with because it couldn't be routed there.
However, if someone was able to compromise the NAT box itself, and root it, then they could simply get into that box via the external interface, install a root kit, and then use that as a launching pad for attacks against the internal network.
HTH,
Jeff