Osobiście zamiast modułu conntrack użyłbym -m state --state (NEW,ESTASBLISHED,INVALID,RELATED) dzięki temu nie trzeba definiować wszystkich bitow dla flag tcp - samo INALID klasyfikuje wszystkie możliwe kombinacje, które nie pasują do zsychronizowanego połączenia. Jeżeli chodzi o ilość modułów, to możesz używać ich dowolną ilość - należy tylko pamiętać, że jeśli na przykład definiujesz -m multiport --dports 22,23 to osobno musisz zdefiniować moduł dla src portów (-m multiport --sports ...).
Odnośnie sprawdzania portów: używaj plecenia netstat, które poda ci wszystkie porty (TCP/UDP), na których słuchają twoje usługi razem ze zbindowanymi portami, lub z którymi ustanowiono połączenie (opcjonalnie możesz użyć też lsof, sockety tak jak wszystko w linuxie to po prostu pliki). podczas skanowania , zależnie od tego czy podasz adres pętli zwrotnej czy swój prywatny adres dostępny w LAN-ie, wynik nmap'a będzie inny. Dla bezpieczeństwa warto jest włączać niektore usługi (jak daemony pocztowe) na pętlach zwrotnych - dostęp do takiej usługi dla klienta będzie możliwy tylko w momencie kiedy odpalisz odpowiedni tunel/VPN.

Najlepiej też pobawić się z różnymi skanowaniami -sS -sA -sU, etc. Jakbyś chciał śledzić pakiety tworzone przez nmapa dla pewniejszego zrozumienia jego działania to polecam użycie opcji --packet-trace...lub po prostu odpalić sniffera.
