types.go 14 KB

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