table inet main { # handle 1 set ssh_meter { # handle 4 type ipv4_addr size 65535 flags dynamic,timeout timeout 1m } set ssh6_meter { # handle 5 type ipv6_addr size 65535 flags dynamic,timeout timeout 1m } set my_connlimit { # handle 6 type ipv4_addr size 65535 flags dynamic } set guest_quota { # handle 7 type ipv4_addr size 65535 flags dynamic } set trusted { # handle 8 type ipv4_addr flags interval elements = { 10.0.10.0/24 } } chain input { # handle 1 type filter hook input priority filter; policy drop; ct state established,related accept # handle 9 tcp dport 22 ct state new update @ssh_meter { ip saddr limit rate over 3/minute burst 5 packets } counter packets 0 bytes 0 drop # handle 10 tcp dport 22 ct state new update @ssh6_meter { ip6 saddr & ffff:ffff:ffff:ffff:: limit rate over 3/minute burst 5 packets } counter packets 0 bytes 0 drop # handle 11 ip saddr @trusted tcp dport 22 accept # handle 12 } chain forward { # handle 2 type filter hook forward priority filter; policy drop; ct state new add @my_connlimit { ip saddr ct count over 20 } counter packets 0 bytes 0 drop # handle 13 iifname "lan" oifname "wan" limit rate over 10 mbytes/second burst 512 kbytes drop # handle 14 iifname "guest0" oifname "wan" add @guest_quota { ip saddr & 255.255.255.0 quota over 1000 mbytes } drop # handle 15 iifname "lan" oifname "wan" quota over 100000 mbytes drop # handle 16 iifname "lan" oifname "wan" accept # handle 17 } chain output { # handle 3 type filter hook output priority filter; policy accept; } }