@Hamparle
Předně bych počítal, že router může mít víc než dva interface. Ať už fyzické, nebo i jiné. Tím mám na mysli např. VPN, tunely, VLAN. Pravidla bych si tvořil dopředu tak, jako kdyby byla rozhraní tři, čtyři - je to lepší na představivost.
Teď začneme u záludnosti s NATEM. Na FORWARDU už u packetu uvidíte adresu po DNAT překladu. Takže na FORWARDU už nerozlišíte, jestli packet -o interni -dst 192.168.x.x takto přišel z internetu, nebo tu adresu získal až překladem. Ověření, jestli dst/src odpovídají tomu, co se očekává na interfacu musí přijít do místa, kde se s tím dá pracovat.
Kolegové mě opraví, nemám to před sebou, ale myslím, že je to nějak takto:
1) kontrola src vůči vstupnímu interface patří do raw/prerouting
2) kontrola dst vůči výstupnímu interface patří na dvě místa: filter/output + filter/forward
Osobně bych tyto kontroly nascriptoval, aby se příslušná pravidla vygenerovala, protože ta samá pravidla v obdobách patří do vícero míst.
Teprve po nich bych zpracovával pravidla pro filtrování provozu - tedy co kam smí a co kam nesmí. Jestli používat -i, -o, -src, -dst záleží na směru (a dalších okolnostech). Např. povolení provozu směrem ven z routeru bych řešil -src 192.168.x.x/24 -o vystupni_interface -j ACCEPT a naopak přesměrování portů dovnitř pomocí -i -dst.
Ku pomoci jsou chainy. Do chainu nasměrujete např. veškerý provoz z internetu dovnitř (pomocí -i), ale uvnitř chainu už můžete pracovat jen s -dst.
Metod je spousta, a těžko se radí, protože to záleží na situaci i gustu každého.
Znovu opakuji, nevynalézejte kolo, na toto jsou hotová řešení, kde si jiní lámali hlavu za Vás.