types.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. package firewall
  2. import "time"
  3. // FilterRule represents a MikroTik-style /ip firewall filter rule
  4. type FilterRule struct {
  5. ID string `json:"id"`
  6. Order int `json:"order"`
  7. Chain string `json:"chain"` // input, forward, output, or custom
  8. Action string `json:"action"` // accept, drop, reject, return, jump, log, passthrough
  9. RejectWith string `json:"reject_with,omitempty"` // icmp-network-unreachable, icmp-host-unreachable, tcp-reset, etc.
  10. JumpTarget string `json:"jump_target,omitempty"`
  11. SrcAddress string `json:"src_address,omitempty"` // e.g. 192.168.1.0/24, !10.0.0.1
  12. DstAddress string `json:"dst_address,omitempty"`
  13. Protocol string `json:"protocol,omitempty"` // all, tcp, udp, icmp, etc.
  14. SrcPort string `json:"src_port,omitempty"` // e.g. 80, 80-443, 80,443
  15. DstPort string `json:"dst_port,omitempty"`
  16. InInterface string `json:"in_interface,omitempty"` // e.g. eth0, !eth0, wg0
  17. OutInterface string `json:"out_interface,omitempty"`
  18. ConnectionState []string `json:"connection_state,omitempty"` // new, established, related, invalid, untracked
  19. ConnectionMark string `json:"connection_mark,omitempty"`
  20. RoutingMark string `json:"routing_mark,omitempty"`
  21. SrcAddressList string `json:"src_address_list,omitempty"`
  22. DstAddressList string `json:"dst_address_list,omitempty"`
  23. SrcGeoIP string `json:"src_geoip,omitempty"`
  24. DstGeoIP string `json:"dst_geoip,omitempty"`
  25. Log bool `json:"log"`
  26. LogPrefix string `json:"log_prefix,omitempty"`
  27. Comment string `json:"comment,omitempty"`
  28. Disabled bool `json:"disabled"`
  29. Packets uint64 `json:"packets"`
  30. Bytes uint64 `json:"bytes"`
  31. // Extended WebFig / WinBox v4 properties
  32. AnyPort string `json:"any_port,omitempty"`
  33. InInterfaceList string `json:"in_interface_list,omitempty"`
  34. OutInterfaceList string `json:"out_interface_list,omitempty"`
  35. PacketMark string `json:"packet_mark,omitempty"`
  36. ConnectionType string `json:"connection_type,omitempty"`
  37. ConnectionNATState []string `json:"connection_nat_state,omitempty"`
  38. // Advanced tab
  39. Layer7Protocol string `json:"layer7_protocol,omitempty"`
  40. Content string `json:"content,omitempty"`
  41. ConnectionBytes string `json:"connection_bytes,omitempty"`
  42. ConnectionRate string `json:"connection_rate,omitempty"`
  43. PCC string `json:"pcc,omitempty"`
  44. SrcMACAddress string `json:"src_mac_address,omitempty"`
  45. InBridgePort string `json:"in_bridge_port,omitempty"`
  46. OutBridgePort string `json:"out_bridge_port,omitempty"`
  47. InBridgePortList string `json:"in_bridge_port_list,omitempty"`
  48. OutBridgePortList string `json:"out_bridge_port_list,omitempty"`
  49. IPsecPolicy string `json:"ipsec_policy,omitempty"`
  50. TLSHost string `json:"tls_host,omitempty"`
  51. IngressPriority string `json:"ingress_priority,omitempty"`
  52. Priority string `json:"priority,omitempty"`
  53. DSCP string `json:"dscp,omitempty"`
  54. TCPMSS string `json:"tcp_mss,omitempty"`
  55. TOS string `json:"tos,omitempty"`
  56. PacketSize string `json:"packet_size,omitempty"`
  57. Random string `json:"random,omitempty"`
  58. TCPFlags string `json:"tcp_flags,omitempty"`
  59. ICMPOptions string `json:"icmp_options,omitempty"`
  60. IPv4Options string `json:"ipv4_options,omitempty"`
  61. TTL string `json:"ttl,omitempty"`
  62. // Extra tab
  63. Time string `json:"time,omitempty"`
  64. Days string `json:"days,omitempty"`
  65. Limit string `json:"limit,omitempty"`
  66. DstLimit string `json:"dst_limit,omitempty"`
  67. PSD string `json:"psd,omitempty"`
  68. // Action tab extended
  69. AddressList string `json:"address_list,omitempty"`
  70. AddressListTimeout string `json:"address_list_timeout,omitempty"`
  71. }
  72. // NATRule represents a MikroTik-style /ip firewall nat rule
  73. type NATRule struct {
  74. ID string `json:"id"`
  75. Order int `json:"order"`
  76. Chain string `json:"chain"` // srcnat, dstnat
  77. Action string `json:"action"` // masquerade, src-nat, dst-nat, redirect, accept, return
  78. ToAddresses string `json:"to_addresses,omitempty"` // for src-nat or dst-nat
  79. ToPorts string `json:"to_ports,omitempty"` // for dst-nat, redirect, src-nat
  80. SrcAddress string `json:"src_address,omitempty"`
  81. DstAddress string `json:"dst_address,omitempty"`
  82. Protocol string `json:"protocol,omitempty"`
  83. SrcPort string `json:"src_port,omitempty"`
  84. DstPort string `json:"dst_port,omitempty"`
  85. InInterface string `json:"in_interface,omitempty"`
  86. OutInterface string `json:"out_interface,omitempty"`
  87. SrcAddressList string `json:"src_address_list,omitempty"`
  88. DstAddressList string `json:"dst_address_list,omitempty"`
  89. SrcGeoIP string `json:"src_geoip,omitempty"`
  90. DstGeoIP string `json:"dst_geoip,omitempty"`
  91. Comment string `json:"comment,omitempty"`
  92. Disabled bool `json:"disabled"`
  93. Packets uint64 `json:"packets"`
  94. Bytes uint64 `json:"bytes"`
  95. // Extended WebFig / WinBox v4 properties
  96. AnyPort string `json:"any_port,omitempty"`
  97. InInterfaceList string `json:"in_interface_list,omitempty"`
  98. OutInterfaceList string `json:"out_interface_list,omitempty"`
  99. PacketMark string `json:"packet_mark,omitempty"`
  100. ConnectionMark string `json:"connection_mark,omitempty"`
  101. RoutingMark string `json:"routing_mark,omitempty"`
  102. ConnectionType string `json:"connection_type,omitempty"`
  103. // Advanced tab
  104. Layer7Protocol string `json:"layer7_protocol,omitempty"`
  105. Content string `json:"content,omitempty"`
  106. ConnectionBytes string `json:"connection_bytes,omitempty"`
  107. ConnectionRate string `json:"connection_rate,omitempty"`
  108. PCC string `json:"pcc,omitempty"`
  109. SrcMACAddress string `json:"src_mac_address,omitempty"`
  110. OutBridgePort string `json:"out_bridge_port,omitempty"`
  111. InBridgePort string `json:"in_bridge_port,omitempty"`
  112. InBridgePortList string `json:"in_bridge_port_list,omitempty"`
  113. OutBridgePortList string `json:"out_bridge_port_list,omitempty"`
  114. IPsecPolicy string `json:"ipsec_policy,omitempty"`
  115. IngressPriority string `json:"ingress_priority,omitempty"`
  116. Priority string `json:"priority,omitempty"`
  117. DSCP string `json:"dscp,omitempty"`
  118. TCPMSS string `json:"tcp_mss,omitempty"`
  119. TOS string `json:"tos,omitempty"`
  120. PacketSize string `json:"packet_size,omitempty"`
  121. Random string `json:"random,omitempty"`
  122. ICMPOptions string `json:"icmp_options,omitempty"`
  123. IPv4Options string `json:"ipv4_options,omitempty"`
  124. TTL string `json:"ttl,omitempty"`
  125. // Extra tab
  126. Time string `json:"time,omitempty"`
  127. Days string `json:"days,omitempty"`
  128. Limit string `json:"limit,omitempty"`
  129. DstLimit string `json:"dst_limit,omitempty"`
  130. PSD string `json:"psd,omitempty"`
  131. // Action tab extended
  132. Log bool `json:"log"`
  133. LogPrefix string `json:"log_prefix,omitempty"`
  134. JumpTarget string `json:"jump_target,omitempty"`
  135. AddressList string `json:"address_list,omitempty"`
  136. AddressListTimeout string `json:"address_list_timeout,omitempty"`
  137. }
  138. // MangleRule represents a MikroTik-style /ip firewall mangle rule
  139. type MangleRule struct {
  140. ID string `json:"id"`
  141. Order int `json:"order"`
  142. Chain string `json:"chain"` // prerouting, postrouting, input, output, forward
  143. Action string `json:"action"` // mark-connection, mark-routing, mark-packet, change-mss, set-dscp, accept, return
  144. NewConnectionMark string `json:"new_connection_mark,omitempty"`
  145. NewRoutingMark string `json:"new_routing_mark,omitempty"`
  146. NewPacketMark string `json:"new_packet_mark,omitempty"`
  147. NewMSS string `json:"new_mss,omitempty"` // e.g. "1440" or "clamp-to-pmtu"
  148. NewDSCP int `json:"new_dscp,omitempty"`
  149. NewTTL string `json:"new_ttl,omitempty"`
  150. NewPriority string `json:"new_priority,omitempty"`
  151. Route string `json:"route,omitempty"`
  152. SniffTarget string `json:"sniff_target,omitempty"`
  153. Passthrough bool `json:"passthrough"` // default true in MikroTik
  154. SrcAddress string `json:"src_address,omitempty"`
  155. DstAddress string `json:"dst_address,omitempty"`
  156. Protocol string `json:"protocol,omitempty"`
  157. SrcPort string `json:"src_port,omitempty"`
  158. DstPort string `json:"dst_port,omitempty"`
  159. InInterface string `json:"in_interface,omitempty"`
  160. OutInterface string `json:"out_interface,omitempty"`
  161. ConnectionState []string `json:"connection_state,omitempty"`
  162. ConnectionMark string `json:"connection_mark,omitempty"`
  163. RoutingMark string `json:"routing_mark,omitempty"`
  164. SrcAddressList string `json:"src_address_list,omitempty"`
  165. DstAddressList string `json:"dst_address_list,omitempty"`
  166. SrcGeoIP string `json:"src_geoip,omitempty"`
  167. DstGeoIP string `json:"dst_geoip,omitempty"`
  168. Comment string `json:"comment,omitempty"`
  169. Disabled bool `json:"disabled"`
  170. Packets uint64 `json:"packets"`
  171. Bytes uint64 `json:"bytes"`
  172. // Extended WebFig / WinBox v4 properties
  173. AnyPort string `json:"any_port,omitempty"`
  174. InInterfaceList string `json:"in_interface_list,omitempty"`
  175. OutInterfaceList string `json:"out_interface_list,omitempty"`
  176. PacketMark string `json:"packet_mark,omitempty"`
  177. ConnectionType string `json:"connection_type,omitempty"`
  178. ConnectionNATState []string `json:"connection_nat_state,omitempty"`
  179. // Advanced tab
  180. Layer7Protocol string `json:"layer7_protocol,omitempty"`
  181. Content string `json:"content,omitempty"`
  182. ConnectionBytes string `json:"connection_bytes,omitempty"`
  183. ConnectionRate string `json:"connection_rate,omitempty"`
  184. PCC string `json:"pcc,omitempty"`
  185. SrcMACAddress string `json:"src_mac_address,omitempty"`
  186. OutBridgePort string `json:"out_bridge_port,omitempty"`
  187. InBridgePort string `json:"in_bridge_port,omitempty"`
  188. InBridgePortList string `json:"in_bridge_port_list,omitempty"`
  189. OutBridgePortList string `json:"out_bridge_port_list,omitempty"`
  190. IPsecPolicy string `json:"ipsec_policy,omitempty"`
  191. TLSHost string `json:"tls_host,omitempty"`
  192. IngressPriority string `json:"ingress_priority,omitempty"`
  193. Priority string `json:"priority,omitempty"`
  194. DSCP string `json:"dscp,omitempty"`
  195. TCPMSS string `json:"tcp_mss,omitempty"`
  196. TOS string `json:"tos,omitempty"`
  197. PacketSize string `json:"packet_size,omitempty"`
  198. Random string `json:"random,omitempty"`
  199. TCPFlags string `json:"tcp_flags,omitempty"`
  200. ICMPOptions string `json:"icmp_options,omitempty"`
  201. IPv4Options string `json:"ipv4_options,omitempty"`
  202. TTL string `json:"ttl,omitempty"`
  203. // Extra tab
  204. Nth string `json:"nth,omitempty"`
  205. ConnectionLimit string `json:"connection_limit,omitempty"`
  206. SrcAddressType string `json:"src_address_type,omitempty"`
  207. DstAddressType string `json:"dst_address_type,omitempty"`
  208. Hotspot string `json:"hotspot,omitempty"`
  209. IPFragment string `json:"ip_fragment,omitempty"`
  210. Limit string `json:"limit,omitempty"`
  211. DstLimit string `json:"dst_limit,omitempty"`
  212. Time string `json:"time,omitempty"`
  213. PSD string `json:"psd,omitempty"`
  214. // Action tab extended
  215. Log bool `json:"log"`
  216. LogPrefix string `json:"log_prefix,omitempty"`
  217. JumpTarget string `json:"jump_target,omitempty"`
  218. AddressList string `json:"address_list,omitempty"`
  219. AddressListTimeout string `json:"address_list_timeout,omitempty"`
  220. }
  221. // AddressListEntry represents a MikroTik /ip firewall address-list entry
  222. type AddressListEntry struct {
  223. ID string `json:"id"`
  224. Name string `json:"name"` // list name, e.g. "LAN_Subnets", "Blocked"
  225. Address string `json:"address"` // IP or CIDR, e.g. "192.168.1.0/24"
  226. Comment string `json:"comment,omitempty"`
  227. Disabled bool `json:"disabled"`
  228. }
  229. // GeoCountryInfo represents a Geo-Location country entry in the firewall
  230. type GeoCountryInfo struct {
  231. Code string `json:"code"` // e.g. "GR"
  232. Name string `json:"name"` // e.g. "Greece"
  233. Continent string `json:"continent"` // e.g. "Europe"
  234. SubnetCount int `json:"subnet_count"` // number of CIDR subnets
  235. Enabled bool `json:"enabled"` // enabled in firewall (mk_geo_XX)
  236. IPSetName string `json:"ipset_name"` // e.g. "mk_geo_GR"
  237. LastUpdated time.Time `json:"last_updated,omitempty"`
  238. }
  239. // ActiveConnection represents an active flow from /proc/net/nf_conntrack / conntrack table
  240. type ActiveConnection struct {
  241. ID string `json:"id"`
  242. Protocol string `json:"protocol"`
  243. SrcAddress string `json:"src_address"`
  244. SrcPort int `json:"src_port"`
  245. DstAddress string `json:"dst_address"`
  246. DstPort int `json:"dst_port"`
  247. ReplySrcAddress string `json:"reply_src_address"`
  248. ReplySrcPort int `json:"reply_src_port"`
  249. ReplyDstAddress string `json:"reply_dst_address"`
  250. ReplyDstPort int `json:"reply_dst_port"`
  251. TCPState string `json:"tcp_state"`
  252. Timeout int `json:"timeout"`
  253. ConnectionMark string `json:"connection_mark,omitempty"`
  254. Assured bool `json:"assured"`
  255. Bytes uint64 `json:"bytes,omitempty"`
  256. Packets uint64 `json:"packets,omitempty"`
  257. }
  258. // FirewallSummary contains total rule and connection counts
  259. type FirewallSummary struct {
  260. FilterRulesCount int `json:"filter_rules_count"`
  261. NATRulesCount int `json:"nat_rules_count"`
  262. MangleRulesCount int `json:"mangle_rules_count"`
  263. AddressListsCount int `json:"address_lists_count"`
  264. GeoCountriesCount int `json:"geo_countries_count"`
  265. GeoSubnetsCount int `json:"geo_subnets_count"`
  266. ActiveConnections int `json:"active_connections"`
  267. }