Eu recomendo vivamente o uso de um wrapper em torno de IPtables. Por si só, fica bastante feio além das regras simples que você precisa.
Nós usamos FireHOL com bons resultados - existem pacotes Debian / Ubuntu na distro padrão e RHEL / CentOS via RPMForge ( iirc).
Uma configuração do firehol para as regras que você descreve seria da seguinte forma:
my_ips="<your server list>"
interface any world
protection strong 100/sec 50
policy drop
server ident reject with tcp-reset
server ssh accept
server http accept
server https accept
server all accept src "$my_ips"
Também não é muito difícil criar regras completas de roteador - o exemplo acima é para um firewall local (sem roteamento), como você descreve em sua pergunta.
FireHOL e outros invólucros IPtables, também tendem a adicionar (ou tornar mais fácil adicionar) padrões sensíveis às suas regras de firewall que filtram pacotes conhecidos como ruins - por exemplo, a linha de 'proteção' acima, que acaba criando muitos (10+) regras iptables úteis.
Outro motivo pelo qual eu prefiro o FireHOL é que o arquivo de configuração ainda é apenas um script bash, permitindo a flexibilidade total de qualquer shell script IPtables que você acabaria escrevendo.