1st, ,I'm glad to see yanksfan got it working.

This is incorrect. The number and location of rules in your file is unrelated to their situation in the actual rule chain.
ruleset:
iptables -A INPUT -p tcp -i eth1 -j DROP
iptables -A OUTPUT -p tcp -i eth1 --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -i eth1 --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -i eth1 -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

What would happen to ANY packet coming in on eth1 ?
Would any packet be ESTABLISHED ?


I probably should not have made such a general statement and thus prompt such a response. ( usually only have to watch myself when that closely when talking to lawyers. ) But it was not incorrect. I assumed the original poster had at least some knowledge of Netfilter.
And the location IS important, but important per chain.

My thoughts here were that NO ruleset would contain just what was listed. Before the stateful rules mentioned above, or the other rules, it is a VERY good idea to drop malformed packets, packets leaving to the net side with private IP addresses, packets coming in from the net side with private IP addresses, packets coming from the LAN outside the LAN IP range, etc.
And yes, I do yield, you could put the port ACCEPT rule after the stateful ESTABLISHED rule as they would be working on different packets and the ESTABLISHED packets would only be ESTABLISHED after the connection was established after the original packet was accepted by the port rule. ( ??? )
But why? Why confuse the issue? It is best to keep the rulsets as straight forward and logical as possible, isn't it?