I wanted to block all the incoming route to eth1 but only allow port 21. Just so that external IP can't access to our web server, ftp server, etc. Only allow port 21 for SSH access. Ping should work too.
A maneira mais limpa seria configurar os web / ftp-servers para escutar apenas na interface interna. Dessa forma, você não precisa se preocupar com nenhuma técnica relacionada à rede.
Se você não puder fazer isso por qualquer motivo, aplique estas regras:
iptables -A INPUT -i eth1 -p icmp -j ACCEPT # allow ping
iptables -A INPUT -i eth1 -p tcp --dport 21 -j ACCEPT # allow SSH
iptables -A INPUT -i eth1 -j DROP # drop everything else
(a porta padrão do SSH é 22, a propósito, mas eu acho que você sabe melhor onde seu SSH escuta.)
On the local network (eth0), anyone should be able to access anything but just block local ip's 192.168.1.20 and 192.168.1.30 from accessing to 192.168.1.50 server.
Simples:
iptables -A INPUT -i eth0 -s 192.168.1.20 -j DROP
iptables -A INPUT -i eth0 -s 192.168.1.30 -j DROP
Isso baixa todos os pacotes desses hosts. Se você quiser ping permitido aqui também, use uma regra semelhante para icmp como na eth1.