правильно ли я понял что, чтобы запертить прямое прохождение трафика через шлюз, а разрешить только прохождение через прокси нужно запертить цепочку FORWARD?
нет, не совсем правильно. Не надо запрещать всю цепочку FORWARD, достаотчно запретить 80 порт. Пример (возможно не совсем рабочий) того, как можно сделать то, что вы хотите
-A INPUT -m state --state INVALID -j DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# дальше пройдут только новые пакеты
-A INPUT -p tcp -m tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset
-A INPUT -p tcp -m state --state NEW ! --syn -j DROP
# дальше пройдут только пакеты с установленным флагом SYN
# откроем порт к сквиду
-A INPUT -p tcp -dport 3128 -j ACCEPT
-A INPUT -j DROP
... начало примерно таким же макаром, как в цепочке INPUT, а в конце
-A FORWARD -p tcp -dport 80 -j REJECT --reject-with tcp-reset (или просто DROP)
.. пропустить нужные порты
-A FORWARD -j DROP
PS Лично я делю свои цепочки на tcp, udp и icmp, так как это позволяет эффективно разгружать ЦПУ за счет применения принципа "Разделяй и влавствуй"