Thanks for the answer it was really helpful. To answer your question, the ipaq has a static private ip. This is my setup:
NOTE: ipaq, desktoplinux and desktopwin are aliases in my /etc/hosts file. Will iptables understand them?????
#I want to filter all input and only allow the ones that match my rule:
iptables -P INPUT DROP
iptables -P FORWARD DROP
#Anything can go out.
iptables -P OUTPUT ACCEPT
#Accept any data from my ipaq to my main machine
iptables --append INPUT --source ipaq --in-interface ppp0 -j ACCEPT
#Accept any data from my ipaq to the outside
iptables --append FORWARD --source ipaq --in-interface ppp0 -j ACCEPT
#Accept only data from my windows machine to my main linux machine
iptables --append INPUT --source desktopwin --in-interface eth0 -j ACCEPT
#Accept only data from my windows machine to my ipaq???? Can I ssh directly into my ipaq from the outside with this
iptables --append FORWARD --source desktopwin --in-interface eth0 -j ACCEPT
#Accept packets from the outside if they are part of the established #connection
iptables --append INPUT --in-interface eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables --append FORWARD --in-interface eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
**Does this work with tcp, ssh and ftp???***
I am guessing I need to set up some NAT rules for packets coming out and in since my ipaq is on a private ip which cannot be seen from the outside.
#Change the source ip of packets from ipaq to outside
iptables -t nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE --to-source desktoplinux
#Change the destination ip of packets from outside to ipaq???????

This is something I do not understand. If the packet has an ip with destination address my main linux box (although it is for the ipaq), how does iptables know that the packet is destined for my ipaq and therefore change it's destination address to my ipaq's address
iptables -t nat --append PREROUTING --in-interface eth0 -j MASQUERADE --to-destination ipaq
Thanks a lot for any help,
Amish