Well, if you wanted behavior just like your old router as far as the policy wan->dmz, wan<-dmz, etc - you can do that by making chains. (I highly recommend it)
You can start by just creating the “default” rule for every combination and making sure that future rules go before these defaults, and then creating rules in the forwarding chain to jump into the various policies based on the interfaces…
/ip firewall filter
add comment="DEFAULT" chain=wan2lan action=drop
add comment="DEFAULT" chain=lan2wan action=accept
add comment="DEFAULT" chain=wan2dmz action=drop
add comment="DEFAULT" chain=dmz2wan action=accept
add comment="DEFAULT" chain=wan2guest action=drop
add comment="DEFAULT" chain=dmz2lan action=drop
add comment="DEFAULT" chain=lan2dmz action=accept
add comment="DEFAULT" chain=dmz2guest action=drop
add comment="DEFAULT" chain=guest2dmz action=accept
...
add chain=forward in-interface=ether1 out-interface=ether2 action=jump jump-target=wan2lan
add chain=forward in-interface=ether2 out-interface=ether1 action=jump jump-target=lan2wan
...
After this is built, you just put exceptions to the various traffic path default policies into those chains, making sure they’re before the one with the comment DEFAULT.
After adding a web server and mail server to your DMZ, the wan2dmz policy might have this as the full chain:
chain=wan2dmz protocol=tcp dst-ports=80,443 dst-address=192.168.10.10 action=accept comment="web server"
chain=wan2dmz protocol=tcp dst-ports=25,110,143 dst-address=192.168.10.20 action=accept comment="mail server"
chain=wan2dmz action=drop comment="DEFAULT"
I usually put a blacklist rule that checks address lists as the very first rule in the forward, input, and output chains:
/ip firewall address-list add list=BLACKLIST address=192.168.6.6
/ip firewall filter
add chain=input src-address-list=BLACKLIST action=drop
add chain=output dst-address-list=BLACKLIST action=drop
add chain=forward src-address-list=BLACKLIST action=drop
add chain=forward dst-address-list=BLACKLIST action=drop
Afterwards, if you see some attack coming from a particular IP, you can add it to BLACKLIST and it will immediately be dropped.
I also make sure that accept rules for established/related connections come right after the blacklist commands, for the sake of performance. (No need to check each-and-every packet against dozens of rules and criteria.) So consider most of your rules to be “how to handle new requests”
If you want to handle strange packets, like new TCP requests without SYN flag, put them between the “accept established” rule and the policy jumps, because you’re going to want that to apply everywhere.
I’m usually not too keen to go put so many such rules in force though because the general policy of “if you didn’t ask for it, throw it away” pretty much covers all of that stuff anyway. Dropping too much stuff in the name of security can even cause some things to break in a subtle way, for instance throwing away all ICMP will break pings, traceroutes, and little things like path mtu discovery that are pretty important, and quite obscure to novices.