iptables allow all outgoing - still can't resolve dns or make a http request

I recommend you add rules to the INPUT chain which allows ESTABLISHED and RELATED packets:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

If later you lock down your OUTPUT chain more, you are also going to want the corresponding OUTPUT rule:

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

These rules are safe, and you'll find that they are typically the among the first rules added in almost all firewall scripts. ESTABLISHED means "once I've allowed a connection to be established, let all the packets for this connection through" it doesn't allow otherwise disallowed connections to be created. "RELATED" allows useful packets like "Since I sent a request to start a connection, allow the ICMP packet back which tells me this host is not reachable" or "Since I allowed an ftp connection, also allow the ftp data connection". Again, it should not allow additional connections to be created which were not already allowed by other rules.

Right now you are allowing the DNS query to go out, but not the reply to come back. You are currently allowing dpt:53 which will allow someone to query your DNS server, but doesn't help with a DNS response (which you'd expect to have 53 for a source port, but not a dest port)

Another thing of note is that since your default policy of OUTPUT is ACCEPT, all your other rules are not useful (since they are all also ACCEPT). So you are essentially saying "if the packet is one of the following types of packets, then ACCEPT them, otherwise also ACCEPT them anyway", you could skip all the rules in this case and just say "Accept all outgoing packets" It sounds like, however, this is temporary until you get DNS traffic working better.