forked from NationTech/harmony
		
	Merge pull request 'Actual implementation of opnsense dhcp' (#4) from feat/opnsenseDhcp into master
Reviewed-on: https://git.nationtech.io/NationTech/harmony/pulls/4
This commit is contained in:
		
						commit
						58a4e7882b
					
				
							
								
								
									
										340
									
								
								harmony-rs/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										340
									
								
								harmony-rs/Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -59,14 +59,16 @@ dependencies = [ | |||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "affilium" | name = "ahash" | ||||||
| version = "0.1.0" | version = "0.8.11" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "cidr", |  "cfg-if", | ||||||
|  "env_logger", |  "const-random", | ||||||
|  "harmony", |  "once_cell", | ||||||
|  "log", |  "version_check", | ||||||
|  "tokio", |  "zerocopy", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -78,6 +80,21 @@ dependencies = [ | |||||||
|  "memchr", |  "memchr", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "android-tzdata" | ||||||
|  | version = "0.1.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "android_system_properties" | ||||||
|  | version = "0.1.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" | ||||||
|  | dependencies = [ | ||||||
|  |  "libc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "anstream" | name = "anstream" | ||||||
| version = "0.6.15" | version = "0.6.15" | ||||||
| @ -135,7 +152,7 @@ checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "syn", |  "syn 2.0.77", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -199,6 +216,9 @@ name = "bitflags" | |||||||
| version = "2.6.0" | version = "2.6.0" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" | ||||||
|  | dependencies = [ | ||||||
|  |  "serde", | ||||||
|  | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "bitvec" | name = "bitvec" | ||||||
| @ -254,9 +274,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" | |||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "bytes" | name = "bytes" | ||||||
| version = "1.7.1" | version = "1.8.0" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" | checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "cbc" | name = "cbc" | ||||||
| @ -293,6 +313,20 @@ dependencies = [ | |||||||
|  "cpufeatures", |  "cpufeatures", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "chrono" | ||||||
|  | version = "0.4.38" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" | ||||||
|  | dependencies = [ | ||||||
|  |  "android-tzdata", | ||||||
|  |  "iana-time-zone", | ||||||
|  |  "js-sys", | ||||||
|  |  "num-traits", | ||||||
|  |  "wasm-bindgen", | ||||||
|  |  "windows-targets 0.52.6", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "cidr" | name = "cidr" | ||||||
| version = "0.2.3" | version = "0.2.3" | ||||||
| @ -321,6 +355,26 @@ version = "0.9.6" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" | checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "const-random" | ||||||
|  | version = "0.1.18" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" | ||||||
|  | dependencies = [ | ||||||
|  |  "const-random-macro", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "const-random-macro" | ||||||
|  | version = "0.1.16" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" | ||||||
|  | dependencies = [ | ||||||
|  |  "getrandom", | ||||||
|  |  "once_cell", | ||||||
|  |  "tiny-keccak", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "core-foundation" | name = "core-foundation" | ||||||
| version = "0.9.4" | version = "0.9.4" | ||||||
| @ -355,6 +409,12 @@ dependencies = [ | |||||||
|  "cfg-if", |  "cfg-if", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "crunchy" | ||||||
|  | version = "0.2.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "crypto-bigint" | name = "crypto-bigint" | ||||||
| version = "0.5.5" | version = "0.5.5" | ||||||
| @ -411,7 +471,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "syn", |  "syn 2.0.77", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -439,7 +499,7 @@ checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "syn", |  "syn 2.0.77", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -451,6 +511,12 @@ dependencies = [ | |||||||
|  "cipher", |  "cipher", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "diff" | ||||||
|  | version = "0.1.13" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "digest" | name = "digest" | ||||||
| version = "0.10.7" | version = "0.10.7" | ||||||
| @ -603,6 +669,18 @@ dependencies = [ | |||||||
|  "miniz_oxide 0.8.0", |  "miniz_oxide 0.8.0", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "flurry" | ||||||
|  | version = "0.5.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "cf5efcf77a4da27927d3ab0509dec5b0954bb3bc59da5a1de9e52642ebd4cdf9" | ||||||
|  | dependencies = [ | ||||||
|  |  "ahash", | ||||||
|  |  "num_cpus", | ||||||
|  |  "parking_lot", | ||||||
|  |  "seize", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "fnv" | name = "fnv" | ||||||
| version = "1.0.7" | version = "1.0.7" | ||||||
| @ -706,7 +784,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "syn", |  "syn 2.0.77", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -817,6 +895,7 @@ dependencies = [ | |||||||
|  "env_logger", |  "env_logger", | ||||||
|  "libredfish", |  "libredfish", | ||||||
|  "log", |  "log", | ||||||
|  |  "opnsense-config", | ||||||
|  "reqwest", |  "reqwest", | ||||||
|  "russh", |  "russh", | ||||||
|  "rust-ipmi", |  "rust-ipmi", | ||||||
| @ -832,6 +911,12 @@ version = "0.14.5" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "heck" | ||||||
|  | version = "0.5.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "hermit-abi" | name = "hermit-abi" | ||||||
| version = "0.3.9" | version = "0.3.9" | ||||||
| @ -948,6 +1033,29 @@ dependencies = [ | |||||||
|  "tokio-native-tls", |  "tokio-native-tls", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "iana-time-zone" | ||||||
|  | version = "0.1.61" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" | ||||||
|  | dependencies = [ | ||||||
|  |  "android_system_properties", | ||||||
|  |  "core-foundation-sys", | ||||||
|  |  "iana-time-zone-haiku", | ||||||
|  |  "js-sys", | ||||||
|  |  "wasm-bindgen", | ||||||
|  |  "windows-core", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "iana-time-zone-haiku" | ||||||
|  | version = "0.1.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" | ||||||
|  | dependencies = [ | ||||||
|  |  "cc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "idna" | name = "idna" | ||||||
| version = "0.5.0" | version = "0.5.0" | ||||||
| @ -1045,6 +1153,16 @@ version = "0.4.14" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "lock_api" | ||||||
|  | version = "0.4.12" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" | ||||||
|  | dependencies = [ | ||||||
|  |  "autocfg", | ||||||
|  |  "scopeguard", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "log" | name = "log" | ||||||
| version = "0.4.22" | version = "0.4.22" | ||||||
| @ -1174,6 +1292,16 @@ dependencies = [ | |||||||
|  "libm", |  "libm", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "num_cpus" | ||||||
|  | version = "1.16.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" | ||||||
|  | dependencies = [ | ||||||
|  |  "hermit-abi", | ||||||
|  |  "libc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "object" | name = "object" | ||||||
| version = "0.36.4" | version = "0.36.4" | ||||||
| @ -1218,7 +1346,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "syn", |  "syn 2.0.77", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -1239,6 +1367,41 @@ dependencies = [ | |||||||
|  "vcpkg", |  "vcpkg", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "opnsense-config" | ||||||
|  | version = "0.1.0" | ||||||
|  | dependencies = [ | ||||||
|  |  "async-trait", | ||||||
|  |  "chrono", | ||||||
|  |  "env_logger", | ||||||
|  |  "log", | ||||||
|  |  "opnsense-config-xml", | ||||||
|  |  "pretty_assertions", | ||||||
|  |  "russh", | ||||||
|  |  "russh-keys", | ||||||
|  |  "russh-sftp", | ||||||
|  |  "serde", | ||||||
|  |  "serde_json", | ||||||
|  |  "thiserror", | ||||||
|  |  "tokio", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "opnsense-config-xml" | ||||||
|  | version = "0.1.0" | ||||||
|  | dependencies = [ | ||||||
|  |  "async-trait", | ||||||
|  |  "env_logger", | ||||||
|  |  "log", | ||||||
|  |  "pretty_assertions", | ||||||
|  |  "serde", | ||||||
|  |  "thiserror", | ||||||
|  |  "tokio", | ||||||
|  |  "xml-rs", | ||||||
|  |  "yaserde", | ||||||
|  |  "yaserde_derive", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "p256" | name = "p256" | ||||||
| version = "0.13.2" | version = "0.13.2" | ||||||
| @ -1277,6 +1440,29 @@ dependencies = [ | |||||||
|  "sha2", |  "sha2", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "parking_lot" | ||||||
|  | version = "0.12.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" | ||||||
|  | dependencies = [ | ||||||
|  |  "lock_api", | ||||||
|  |  "parking_lot_core", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "parking_lot_core" | ||||||
|  | version = "0.9.10" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" | ||||||
|  | dependencies = [ | ||||||
|  |  "cfg-if", | ||||||
|  |  "libc", | ||||||
|  |  "redox_syscall", | ||||||
|  |  "smallvec", | ||||||
|  |  "windows-targets 0.52.6", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "password-hash" | name = "password-hash" | ||||||
| version = "0.4.2" | version = "0.4.2" | ||||||
| @ -1413,6 +1599,16 @@ dependencies = [ | |||||||
|  "zerocopy", |  "zerocopy", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "pretty_assertions" | ||||||
|  | version = "1.4.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" | ||||||
|  | dependencies = [ | ||||||
|  |  "diff", | ||||||
|  |  "yansi", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "primeorder" | name = "primeorder" | ||||||
| version = "0.13.6" | version = "0.13.6" | ||||||
| @ -1476,6 +1672,15 @@ dependencies = [ | |||||||
|  "getrandom", |  "getrandom", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "redox_syscall" | ||||||
|  | version = "0.5.7" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" | ||||||
|  | dependencies = [ | ||||||
|  |  "bitflags 2.6.0", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "regex" | name = "regex" | ||||||
| version = "1.10.6" | version = "1.10.6" | ||||||
| @ -1680,6 +1885,24 @@ dependencies = [ | |||||||
|  "zeroize", |  "zeroize", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "russh-sftp" | ||||||
|  | version = "2.0.6" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "c2a72c8afe2041c17435eecd85d0b7291841486fd3d1c4082e0b212e5437ca42" | ||||||
|  | dependencies = [ | ||||||
|  |  "async-trait", | ||||||
|  |  "bitflags 2.6.0", | ||||||
|  |  "bytes", | ||||||
|  |  "chrono", | ||||||
|  |  "flurry", | ||||||
|  |  "log", | ||||||
|  |  "serde", | ||||||
|  |  "thiserror", | ||||||
|  |  "tokio", | ||||||
|  |  "tokio-util", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "rust-ipmi" | name = "rust-ipmi" | ||||||
| version = "0.1.1" | version = "0.1.1" | ||||||
| @ -1756,6 +1979,12 @@ dependencies = [ | |||||||
|  "windows-sys 0.52.0", |  "windows-sys 0.52.0", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "scopeguard" | ||||||
|  | version = "1.2.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "scrypt" | name = "scrypt" | ||||||
| version = "0.11.0" | version = "0.11.0" | ||||||
| @ -1804,6 +2033,12 @@ dependencies = [ | |||||||
|  "libc", |  "libc", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "seize" | ||||||
|  | version = "0.3.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "689224d06523904ebcc9b482c6a3f4f7fb396096645c4cd10c0d2ff7371a34d3" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "semver" | name = "semver" | ||||||
| version = "1.0.23" | version = "1.0.23" | ||||||
| @ -1827,14 +2062,14 @@ checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "syn", |  "syn 2.0.77", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "serde_json" | name = "serde_json" | ||||||
| version = "1.0.128" | version = "1.0.133" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" | checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "itoa", |  "itoa", | ||||||
|  "memchr", |  "memchr", | ||||||
| @ -1999,6 +2234,17 @@ version = "2.6.1" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "syn" | ||||||
|  | version = "1.0.109" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "unicode-ident", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "syn" | name = "syn" | ||||||
| version = "2.0.77" | version = "2.0.77" | ||||||
| @ -2073,7 +2319,16 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "syn", |  "syn 2.0.77", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tiny-keccak" | ||||||
|  | version = "2.0.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" | ||||||
|  | dependencies = [ | ||||||
|  |  "crunchy", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -2116,7 +2371,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "syn", |  "syn 2.0.77", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -2287,7 +2542,7 @@ dependencies = [ | |||||||
|  "once_cell", |  "once_cell", | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "syn", |  "syn 2.0.77", | ||||||
|  "wasm-bindgen-shared", |  "wasm-bindgen-shared", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| @ -2321,7 +2576,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "syn", |  "syn 2.0.77", | ||||||
|  "wasm-bindgen-backend", |  "wasm-bindgen-backend", | ||||||
|  "wasm-bindgen-shared", |  "wasm-bindgen-shared", | ||||||
| ] | ] | ||||||
| @ -2364,6 +2619,15 @@ version = "0.4.0" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "windows-core" | ||||||
|  | version = "0.52.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows-targets 0.52.6", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "windows-sys" | name = "windows-sys" | ||||||
| version = "0.48.0" | version = "0.48.0" | ||||||
| @ -2531,6 +2795,38 @@ dependencies = [ | |||||||
|  "tap", |  "tap", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "xml-rs" | ||||||
|  | version = "0.8.22" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "yansi" | ||||||
|  | version = "1.0.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "yaserde" | ||||||
|  | version = "0.11.1" | ||||||
|  | dependencies = [ | ||||||
|  |  "log", | ||||||
|  |  "xml-rs", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "yaserde_derive" | ||||||
|  | version = "0.11.1" | ||||||
|  | dependencies = [ | ||||||
|  |  "heck", | ||||||
|  |  "log", | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "syn 1.0.109", | ||||||
|  |  "xml-rs", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "zerocopy" | name = "zerocopy" | ||||||
| version = "0.7.35" | version = "0.7.35" | ||||||
| @ -2549,7 +2845,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" | |||||||
| dependencies = [ | dependencies = [ | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
|  "syn", |  "syn 2.0.77", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ resolver = "2" | |||||||
| members = [ | members = [ | ||||||
|   "private_repos/*", |   "private_repos/*", | ||||||
|   "harmony", |   "harmony", | ||||||
|  |   "opnsense-config", "opnsense-config-xml", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [workspace.package] | [workspace.package] | ||||||
| @ -17,3 +18,8 @@ derive-new = "0.7.0" | |||||||
| async-trait = "0.1.82" | async-trait = "0.1.82" | ||||||
| tokio = { version = "1.40.0", features = ["io-std"] } | tokio = { version = "1.40.0", features = ["io-std"] } | ||||||
| cidr = "0.2.3" | cidr = "0.2.3" | ||||||
|  | russh = "0.45.0" | ||||||
|  | russh-keys = "0.45.0" | ||||||
|  | 
 | ||||||
|  | #[workspace.target.x86_64-unknown-linux-gnu] | ||||||
|  | #rustflags = ["-C", "link-arg=-fuse-ld=mold"] | ||||||
|  | |||||||
| @ -17,3 +17,4 @@ log = { workspace = true } | |||||||
| env_logger = { workspace = true } | env_logger = { workspace = true } | ||||||
| async-trait = { workspace = true } | async-trait = { workspace = true } | ||||||
| cidr = { workspace = true } | cidr = { workspace = true } | ||||||
|  | opnsense-config = { path = "../opnsense-config" } | ||||||
|  | |||||||
| @ -7,6 +7,7 @@ use crate::topology::MacAddress; | |||||||
| pub type HostGroup = Vec<PhysicalHost>; | pub type HostGroup = Vec<PhysicalHost>; | ||||||
| pub type SwitchGroup = Vec<Switch>; | pub type SwitchGroup = Vec<Switch>; | ||||||
| pub type FirewallGroup = Vec<PhysicalHost>; | pub type FirewallGroup = Vec<PhysicalHost>; | ||||||
|  | 
 | ||||||
| #[derive(Debug, Clone)] | #[derive(Debug, Clone)] | ||||||
| pub struct PhysicalHost { | pub struct PhysicalHost { | ||||||
|     pub category: HostCategory, |     pub category: HostCategory, | ||||||
|  | |||||||
| @ -23,6 +23,9 @@ use super::{ | |||||||
| pub struct Inventory { | pub struct Inventory { | ||||||
|     pub location: Location, |     pub location: Location, | ||||||
|     pub switch: SwitchGroup, |     pub switch: SwitchGroup, | ||||||
|  |     // Firewall is really just a host but with somewhat specialized hardware
 | ||||||
|  |     // I'm not entirely sure it belongs to its own category but it helps make things easier and
 | ||||||
|  |     // clearer for now so let's try it this way.
 | ||||||
|     pub firewall: FirewallGroup, |     pub firewall: FirewallGroup, | ||||||
|     pub worker_host: HostGroup, |     pub worker_host: HostGroup, | ||||||
|     pub storage_host: HostGroup, |     pub storage_host: HostGroup, | ||||||
| @ -34,9 +37,11 @@ impl Inventory { | |||||||
|     pub fn empty_inventory() -> Self { |     pub fn empty_inventory() -> Self { | ||||||
|         Self { |         Self { | ||||||
|             location: Location::test_building(), |             location: Location::test_building(), | ||||||
|             host: HostGroup::new(), |  | ||||||
|             switch: SwitchGroup::new(), |             switch: SwitchGroup::new(), | ||||||
|             firewall: FirewallGroup::new(), |             firewall: FirewallGroup::new(), | ||||||
|  |             worker_host: HostGroup::new(), | ||||||
|  |             storage_host: HostGroup::new(), | ||||||
|  |             control_plane_host: HostGroup::new(), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,10 +1,11 @@ | |||||||
|  | use crate::executors::ExecutorError; | ||||||
| use super::{IpAddress, LogicalHost}; | use super::{IpAddress, LogicalHost}; | ||||||
| 
 | 
 | ||||||
| pub trait LoadBalancer: Send + Sync { | pub trait LoadBalancer: Send + Sync { | ||||||
|     fn add_backend(&mut self, backend: Backend) -> Result<(), LoadBalancerError>; |     fn add_backend(&mut self, backend: Backend) -> Result<(), ExecutorError>; | ||||||
|     fn remove_backend(&mut self, backend_id: &str) -> Result<(), LoadBalancerError>; |     fn remove_backend(&mut self, backend_id: &str) -> Result<(), ExecutorError>; | ||||||
|     fn add_frontend(&mut self, frontend: Frontend) -> Result<(), LoadBalancerError>; |     fn add_frontend(&mut self, frontend: Frontend) -> Result<(), ExecutorError>; | ||||||
|     fn remove_frontend(&mut self, frontend_id: &str) -> Result<(), LoadBalancerError>; |     fn remove_frontend(&mut self, frontend_id: &str) -> Result<(), ExecutorError>; | ||||||
|     fn list_backends(&self) -> Vec<Backend>; |     fn list_backends(&self) -> Vec<Backend>; | ||||||
|     fn list_frontends(&self) -> Vec<Frontend>; |     fn list_frontends(&self) -> Vec<Frontend>; | ||||||
|     fn get_ip(&self) -> IpAddress; |     fn get_ip(&self) -> IpAddress; | ||||||
| @ -17,8 +18,6 @@ impl std::fmt::Debug for dyn LoadBalancer { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub struct LoadBalancerError; |  | ||||||
| 
 |  | ||||||
| #[derive(Clone, Debug)] | #[derive(Clone, Debug)] | ||||||
| pub struct Backend { | pub struct Backend { | ||||||
|     pub id: String, |     pub id: String, | ||||||
|  | |||||||
| @ -22,6 +22,7 @@ pub struct HAClusterTopology { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub type IpAddress = IpAddr; | pub type IpAddress = IpAddr; | ||||||
|  | 
 | ||||||
| /// Represents a logical member of a cluster that provides one or more services.
 | /// Represents a logical member of a cluster that provides one or more services.
 | ||||||
| ///
 | ///
 | ||||||
| /// A LogicalHost can represent various roles within the infrastructure, such as:
 | /// A LogicalHost can represent various roles within the infrastructure, such as:
 | ||||||
|  | |||||||
| @ -1,21 +1,30 @@ | |||||||
|  | use std::net::Ipv4Addr; | ||||||
|  | 
 | ||||||
|  | use async_trait::async_trait; | ||||||
|  | 
 | ||||||
|  | use crate::executors::ExecutorError; | ||||||
|  | 
 | ||||||
| use super::{IpAddress, LogicalHost}; | use super::{IpAddress, LogicalHost}; | ||||||
| 
 | 
 | ||||||
| #[derive(Debug)] | #[derive(Debug)] | ||||||
| pub struct DHCPStaticEntry { | pub struct DHCPStaticEntry { | ||||||
|     pub name: String, |     pub name: String, | ||||||
|     pub mac: MacAddress, |     pub mac: MacAddress, | ||||||
|     pub ip: IpAddress, |     pub ip: Ipv4Addr, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl std::fmt::Display for DHCPStaticEntry { | impl std::fmt::Display for DHCPStaticEntry { | ||||||
|     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||||||
|         f.write_fmt(format_args!("DHCPStaticEntry : name {}, mac {}, ip {}", self.name, self.mac, self.ip)) |         f.write_fmt(format_args!( | ||||||
|  |             "DHCPStaticEntry : name {}, mac {}, ip {}", | ||||||
|  |             self.name, self.mac, self.ip | ||||||
|  |         )) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub trait Firewall: Send + Sync { | pub trait Firewall: Send + Sync { | ||||||
|     fn add_rule(&mut self, rule: FirewallRule) -> Result<(), FirewallError>; |     fn add_rule(&mut self, rule: FirewallRule) -> Result<(), ExecutorError>; | ||||||
|     fn remove_rule(&mut self, rule_id: &str) -> Result<(), FirewallError>; |     fn remove_rule(&mut self, rule_id: &str) -> Result<(), ExecutorError>; | ||||||
|     fn list_rules(&self) -> Vec<FirewallRule>; |     fn list_rules(&self) -> Vec<FirewallRule>; | ||||||
|     fn get_ip(&self) -> IpAddress; |     fn get_ip(&self) -> IpAddress; | ||||||
|     fn get_host(&self) -> LogicalHost; |     fn get_host(&self) -> LogicalHost; | ||||||
| @ -31,10 +40,11 @@ pub struct NetworkDomain { | |||||||
|     pub name: String, |     pub name: String, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #[async_trait] | ||||||
| pub trait DhcpServer: Send + Sync { | pub trait DhcpServer: Send + Sync { | ||||||
|     fn add_static_mapping(&self, entry: &DHCPStaticEntry) -> Result<(), DhcpError>; |     async fn add_static_mapping(&self, entry: &DHCPStaticEntry) -> Result<(), ExecutorError>; | ||||||
|     fn remove_static_mapping(&self, mac: &MacAddress) -> Result<(), DhcpError>; |     async fn remove_static_mapping(&self, mac: &MacAddress) -> Result<(), ExecutorError>; | ||||||
|     fn list_static_mappings(&self) -> Vec<(MacAddress, IpAddress)>; |     async fn list_static_mappings(&self) -> Vec<(MacAddress, IpAddress)>; | ||||||
|     fn get_ip(&self) -> IpAddress; |     fn get_ip(&self) -> IpAddress; | ||||||
|     fn get_host(&self) -> LogicalHost; |     fn get_host(&self) -> LogicalHost; | ||||||
| } | } | ||||||
| @ -51,8 +61,12 @@ pub trait DnsServer: Send + Sync { | |||||||
|         name: &str, |         name: &str, | ||||||
|         record_type: DnsRecordType, |         record_type: DnsRecordType, | ||||||
|         value: &str, |         value: &str, | ||||||
|     ) -> Result<(), DnsError>; |     ) -> Result<(), ExecutorError>; | ||||||
|     fn remove_record(&mut self, name: &str, record_type: DnsRecordType) -> Result<(), DnsError>; |     fn remove_record( | ||||||
|  |         &mut self, | ||||||
|  |         name: &str, | ||||||
|  |         record_type: DnsRecordType, | ||||||
|  |     ) -> Result<(), ExecutorError>; | ||||||
|     fn list_records(&self) -> Vec<DnsRecord>; |     fn list_records(&self) -> Vec<DnsRecord>; | ||||||
|     fn get_ip(&self) -> IpAddress; |     fn get_ip(&self) -> IpAddress; | ||||||
|     fn get_host(&self) -> LogicalHost; |     fn get_host(&self) -> LogicalHost; | ||||||
| @ -89,12 +103,25 @@ pub enum Action { | |||||||
| #[derive(Clone, Debug, PartialEq, Eq, Hash)] | #[derive(Clone, Debug, PartialEq, Eq, Hash)] | ||||||
| pub struct MacAddress(pub [u8; 6]); | pub struct MacAddress(pub [u8; 6]); | ||||||
| 
 | 
 | ||||||
|  | // TODO create a small macro to provide a nice API to initiate a MacAddress
 | ||||||
|  | // MacAddress::from!("00:90:7f:df:2c:23"),
 | ||||||
|  | 
 | ||||||
| impl MacAddress { | impl MacAddress { | ||||||
|  |     #[cfg(test)] | ||||||
|     pub fn dummy() -> Self { |     pub fn dummy() -> Self { | ||||||
|         Self([0, 0, 0, 0, 0, 0]) |         Self([0, 0, 0, 0, 0, 0]) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | impl From<&MacAddress> for String { | ||||||
|  |     fn from(value: &MacAddress) -> Self { | ||||||
|  |         format!( | ||||||
|  |             "{}:{}:{}:{}:{}:{}", | ||||||
|  |             value.0[0], value.0[1], value.0[2], value.0[3], value.0[4], value.0[5] | ||||||
|  |         ) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| impl std::fmt::Display for MacAddress { | impl std::fmt::Display for MacAddress { | ||||||
|     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||||||
|         f.write_fmt(format_args!( |         f.write_fmt(format_args!( | ||||||
| @ -119,8 +146,3 @@ pub struct DnsRecord { | |||||||
|     pub record_type: DnsRecordType, |     pub record_type: DnsRecordType, | ||||||
|     pub value: String, |     pub value: String, | ||||||
| } | } | ||||||
| 
 |  | ||||||
| // Error types
 |  | ||||||
| pub struct FirewallError; |  | ||||||
| pub struct DhcpError; |  | ||||||
| pub struct DnsError; |  | ||||||
|  | |||||||
| @ -1,29 +1,52 @@ | |||||||
| mod management; | mod management; | ||||||
|  | use std::sync::{Arc, Mutex, RwLock, RwLockWriteGuard}; | ||||||
|  | 
 | ||||||
|  | use async_trait::async_trait; | ||||||
|  | use log::debug; | ||||||
| pub use management::*; | pub use management::*; | ||||||
| 
 | 
 | ||||||
| use crate::topology::{ | use crate::{ | ||||||
|     Backend, DHCPStaticEntry, DhcpServer, DnsServer, Firewall, FirewallError, FirewallRule, |     executors::ExecutorError, | ||||||
|     Frontend, IpAddress, LoadBalancer, LoadBalancerError, LogicalHost, |     topology::{ | ||||||
|  |         Backend, DHCPStaticEntry, DhcpServer, DnsServer, Firewall, FirewallRule, Frontend, | ||||||
|  |         IpAddress, LoadBalancer, LogicalHost, | ||||||
|  |     }, | ||||||
| }; | }; | ||||||
| use derive_new::new; |  | ||||||
| 
 | 
 | ||||||
| #[derive(new, Clone)] | #[derive(Clone)] | ||||||
| pub struct OPNSenseFirewall { | pub struct OPNSenseFirewall { | ||||||
|  |     opnsense_config: Arc<RwLock<opnsense_config::Config>>, | ||||||
|     host: LogicalHost, |     host: LogicalHost, | ||||||
|  |     cluster_nic_name: String, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl OPNSenseFirewall { | impl OPNSenseFirewall { | ||||||
|     pub fn get_ip(&self) -> IpAddress { |     pub fn get_ip(&self) -> IpAddress { | ||||||
|         self.host.ip |         self.host.ip | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     pub async fn new( | ||||||
|  |         host: LogicalHost, | ||||||
|  |         cluster_nic_name: &str, | ||||||
|  |         username: &str, | ||||||
|  |         password: &str, | ||||||
|  |     ) -> Self { | ||||||
|  |         Self { | ||||||
|  |             opnsense_config: Arc::new(RwLock::new( | ||||||
|  |                 opnsense_config::Config::from_credentials(host.ip, username, password).await, | ||||||
|  |             )), | ||||||
|  |             host, | ||||||
|  |             cluster_nic_name: cluster_nic_name.into(), | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Firewall for OPNSenseFirewall { | impl Firewall for OPNSenseFirewall { | ||||||
|     fn add_rule(&mut self, _rule: FirewallRule) -> Result<(), FirewallError> { |     fn add_rule(&mut self, _rule: FirewallRule) -> Result<(), ExecutorError> { | ||||||
|         todo!() |         todo!() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn remove_rule(&mut self, _rule_id: &str) -> Result<(), FirewallError> { |     fn remove_rule(&mut self, _rule_id: &str) -> Result<(), ExecutorError> { | ||||||
|         todo!() |         todo!() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -40,19 +63,19 @@ impl Firewall for OPNSenseFirewall { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl LoadBalancer for OPNSenseFirewall { | impl LoadBalancer for OPNSenseFirewall { | ||||||
|     fn add_backend(&mut self, _backend: Backend) -> Result<(), LoadBalancerError> { |     fn add_backend(&mut self, _backend: Backend) -> Result<(), ExecutorError> { | ||||||
|         todo!() |         todo!() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn remove_backend(&mut self, _backend_id: &str) -> Result<(), LoadBalancerError> { |     fn remove_backend(&mut self, _backend_id: &str) -> Result<(), ExecutorError> { | ||||||
|         todo!() |         todo!() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn add_frontend(&mut self, _frontend: Frontend) -> Result<(), LoadBalancerError> { |     fn add_frontend(&mut self, _frontend: Frontend) -> Result<(), ExecutorError> { | ||||||
|         todo!() |         todo!() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn remove_frontend(&mut self, _frontend_id: &str) -> Result<(), LoadBalancerError> { |     fn remove_frontend(&mut self, _frontend_id: &str) -> Result<(), ExecutorError> { | ||||||
|         todo!() |         todo!() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -72,22 +95,30 @@ impl LoadBalancer for OPNSenseFirewall { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #[async_trait] | ||||||
| impl DhcpServer for OPNSenseFirewall { | impl DhcpServer for OPNSenseFirewall { | ||||||
|     fn add_static_mapping( |     async fn add_static_mapping(&self, entry: &DHCPStaticEntry) -> Result<(), ExecutorError> { | ||||||
|         &self, |         let mac: String = String::from(&entry.mac); | ||||||
|         entry: &DHCPStaticEntry, | 
 | ||||||
|     ) -> Result<(), crate::topology::DhcpError> { |         { | ||||||
|         todo!("Register {:?}", entry) |             let mut writable_opnsense = self.opnsense_config.write().unwrap(); | ||||||
|  |             writable_opnsense | ||||||
|  |                 .dhcp() | ||||||
|  |                 .add_static_mapping(&mac, entry.ip, &entry.name).unwrap(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         debug!("Registered {:?}", entry); | ||||||
|  |         Ok(()) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn remove_static_mapping( |     async fn remove_static_mapping( | ||||||
|         &self, |         &self, | ||||||
|         _mac: &crate::topology::MacAddress, |         _mac: &crate::topology::MacAddress, | ||||||
|     ) -> Result<(), crate::topology::DhcpError> { |     ) -> Result<(), ExecutorError> { | ||||||
|         todo!() |         todo!() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn list_static_mappings(&self) -> Vec<(crate::topology::MacAddress, IpAddress)> { |     async fn list_static_mappings(&self) -> Vec<(crate::topology::MacAddress, IpAddress)> { | ||||||
|         todo!() |         todo!() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -98,13 +129,14 @@ impl DhcpServer for OPNSenseFirewall { | |||||||
|         self.host.clone() |         self.host.clone() | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
| impl DnsServer for OPNSenseFirewall { | impl DnsServer for OPNSenseFirewall { | ||||||
|     fn add_record( |     fn add_record( | ||||||
|         &mut self, |         &mut self, | ||||||
|         _name: &str, |         _name: &str, | ||||||
|         _record_type: crate::topology::DnsRecordType, |         _record_type: crate::topology::DnsRecordType, | ||||||
|         _value: &str, |         _value: &str, | ||||||
|     ) -> Result<(), crate::topology::DnsError> { |     ) -> Result<(), ExecutorError> { | ||||||
|         todo!() |         todo!() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -112,7 +144,7 @@ impl DnsServer for OPNSenseFirewall { | |||||||
|         &mut self, |         &mut self, | ||||||
|         _name: &str, |         _name: &str, | ||||||
|         _record_type: crate::topology::DnsRecordType, |         _record_type: crate::topology::DnsRecordType, | ||||||
|     ) -> Result<(), crate::topology::DnsError> { |     ) -> Result<(), ExecutorError> { | ||||||
|         todo!() |         todo!() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,3 +1,5 @@ | |||||||
|  | use std::{net::Ipv4Addr, sync::Arc}; | ||||||
|  | 
 | ||||||
| use async_trait::async_trait; | use async_trait::async_trait; | ||||||
| use derive_new::new; | use derive_new::new; | ||||||
| use log::info; | use log::info; | ||||||
| @ -7,7 +9,6 @@ use crate::{ | |||||||
|         data::{Id, Version}, |         data::{Id, Version}, | ||||||
|         interpret::InterpretStatus, |         interpret::InterpretStatus, | ||||||
|     }, |     }, | ||||||
|     infra::executors::russh::RusshClient, |  | ||||||
|     interpret::{Interpret, InterpretError, InterpretName, Outcome}, |     interpret::{Interpret, InterpretError, InterpretName, Outcome}, | ||||||
|     inventory::Inventory, |     inventory::Inventory, | ||||||
|     topology::{DHCPStaticEntry, HAClusterTopology, HostBinding}, |     topology::{DHCPStaticEntry, HAClusterTopology, HostBinding}, | ||||||
| @ -114,28 +115,35 @@ impl Interpret for DhcpInterpret { | |||||||
|         topology: &HAClusterTopology, |         topology: &HAClusterTopology, | ||||||
|     ) -> Result<Outcome, InterpretError> { |     ) -> Result<Outcome, InterpretError> { | ||||||
|         info!("Executing {} on inventory {inventory:?}", self.get_name()); |         info!("Executing {} on inventory {inventory:?}", self.get_name()); | ||||||
|         let ssh_client = RusshClient {}; |  | ||||||
| 
 | 
 | ||||||
|         let entries: Vec<DHCPStaticEntry> = self |         let dhcp_entries: Vec<DHCPStaticEntry> = self | ||||||
|             .score |             .score | ||||||
|             .host_binding |             .host_binding | ||||||
|             .iter() |             .iter() | ||||||
|             .map(|binding| DHCPStaticEntry { |             .map(|binding| { | ||||||
|                 name: binding.logical_host.name.clone(), |                 let ip = match binding.logical_host.ip { | ||||||
|                 mac: binding.physical_host.cluster_mac(), |                     std::net::IpAddr::V4(ipv4) => ipv4, | ||||||
|                 ip: binding.logical_host.ip, |                     std::net::IpAddr::V6(_) => unimplemented!("DHCPStaticEntry only supports ipv4 at the moment"), | ||||||
|  |                 }; | ||||||
|  | 
 | ||||||
|  |                 DHCPStaticEntry { | ||||||
|  |                     name: binding.logical_host.name.clone(), | ||||||
|  |                     mac: binding.physical_host.cluster_mac(), | ||||||
|  |                     ip, | ||||||
|  |                 } | ||||||
|             }) |             }) | ||||||
|             .collect(); |             .collect(); | ||||||
|         info!("DHCPStaticEntry : {:?}", entries); |         info!("DHCPStaticEntry : {:?}", dhcp_entries); | ||||||
| 
 | 
 | ||||||
|         let dhcp = topology.dhcp_server.clone(); |         let dhcp = Arc::new(Box::new(topology.dhcp_server.clone())); | ||||||
|         info!("DHCP server : {:?}", dhcp); |         info!("DHCP server : {:?}", dhcp); | ||||||
|         entries.iter().for_each(|entry| { |         for entry in dhcp_entries.into_iter() { | ||||||
|             match dhcp.add_static_mapping(&entry) { |             match dhcp.add_static_mapping(&entry).await { | ||||||
|                 Ok(_) => info!("Successfully registered DHCPStaticEntry {}", entry), |                 Ok(_) => info!("Successfully registered DHCPStaticEntry {}", entry), | ||||||
|                 Err(_) => todo!(), |                 Err(_) => todo!(), | ||||||
|             } |             } | ||||||
|         }); |         } | ||||||
|  | 
 | ||||||
|         todo!("Configure DHCPServer"); |         todo!("Configure DHCPServer"); | ||||||
| 
 | 
 | ||||||
|         Ok(Outcome::new( |         Ok(Outcome::new( | ||||||
|  | |||||||
							
								
								
									
										25
									
								
								harmony-rs/opnsense-config-xml/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								harmony-rs/opnsense-config-xml/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | |||||||
|  | [package] | ||||||
|  | name = "opnsense-config-xml" | ||||||
|  | edition = "2021" | ||||||
|  | version.workspace = true | ||||||
|  | readme.workspace = true | ||||||
|  | license.workspace = true | ||||||
|  | 
 | ||||||
|  | [dependencies] | ||||||
|  | serde = { version = "1.0.123", features = [ "derive" ] } | ||||||
|  | log = { workspace = true } | ||||||
|  | env_logger = { workspace = true } | ||||||
|  | #yaserde = { git = "https://git.nationtech.io/NationTech/yaserde" } | ||||||
|  | #yaserde_derive = { git = "https://git.nationtech.io/NationTech/yaserde" } | ||||||
|  | yaserde = { path = "../../../../github/yaserde/yaserde" } | ||||||
|  | yaserde_derive = { path = "../../../../github/yaserde/yaserde_derive" } | ||||||
|  | xml-rs = "0.8" | ||||||
|  | thiserror = "1.0" | ||||||
|  | async-trait = { workspace = true } | ||||||
|  | tokio = { workspace = true } | ||||||
|  | 
 | ||||||
|  | [dev-dependencies] | ||||||
|  | pretty_assertions = "1.4.1" | ||||||
|  | 
 | ||||||
|  | [target.x86_64-unknown-linux-gnu] | ||||||
|  | rustflags = ["-C", "link-arg=-fuse-ld=mold"] | ||||||
							
								
								
									
										2134
									
								
								harmony-rs/opnsense-config-xml/interfaces_expand.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2134
									
								
								harmony-rs/opnsense-config-xml/interfaces_expand.rs
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										113
									
								
								harmony-rs/opnsense-config-xml/src/data/dhcpd.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								harmony-rs/opnsense-config-xml/src/data/dhcpd.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,113 @@ | |||||||
|  | use yaserde_derive::{YaDeserialize, YaSerialize}; | ||||||
|  | 
 | ||||||
|  | use yaserde::MaybeString; | ||||||
|  | 
 | ||||||
|  | use super::opnsense::{NumberOption, Range, StaticMap}; | ||||||
|  | 
 | ||||||
|  | // #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)]
 | ||||||
|  | // #[yaserde(rename = "dhcpd")]
 | ||||||
|  | // pub struct Dhcpd {
 | ||||||
|  | //     #[yaserde(rename = "lan")]
 | ||||||
|  | //     pub lan: DhcpInterface,
 | ||||||
|  | // }
 | ||||||
|  | 
 | ||||||
|  | #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] | ||||||
|  | pub struct DhcpInterface { | ||||||
|  |     pub enable: Option<MaybeString>, | ||||||
|  |     pub gateway: Option<MaybeString>, | ||||||
|  |     pub domain: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "ddnsdomainalgorithm")] | ||||||
|  |     pub ddns_domain_algorithm: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "numberoptions")] | ||||||
|  |     pub number_options: Vec<NumberOption>, | ||||||
|  |     #[yaserde(rename = "range")] | ||||||
|  |     pub range: Range, | ||||||
|  |     pub winsserver: Option<MaybeString>, | ||||||
|  |     pub dnsserver: Option<MaybeString>, | ||||||
|  |     pub ntpserver: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "staticmap")] | ||||||
|  |     pub staticmaps: Vec<StaticMap>, | ||||||
|  |     pub pool: Option<MaybeString>, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[derive(Default, PartialEq, Debug, YaSerialize, YaDeserialize)] | ||||||
|  | pub struct DhcpRange { | ||||||
|  |     #[yaserde(rename = "from")] | ||||||
|  |     pub from: String, | ||||||
|  |     #[yaserde(rename = "to")] | ||||||
|  |     pub to: String, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[cfg(test)] | ||||||
|  | mod test { | ||||||
|  |     use crate::xml_utils::to_xml_str; | ||||||
|  | 
 | ||||||
|  |     use pretty_assertions::assert_eq; | ||||||
|  | 
 | ||||||
|  |     #[test] | ||||||
|  |     fn dhcpd_should_deserialize_serialize_identical() { | ||||||
|  |         let dhcpd: Dhcpd = | ||||||
|  |             yaserde::de::from_str(SERIALIZED_DHCPD).expect("Deserialize Dhcpd failed"); | ||||||
|  | 
 | ||||||
|  |         assert_eq!( | ||||||
|  |             to_xml_str(&dhcpd).expect("Serialize Dhcpd failed"), | ||||||
|  |             SERIALIZED_DHCPD | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const SERIALIZED_DHCPD: &str = "<?xml version=\"1.0\"?>
 | ||||||
|  | <dhcpd> | ||||||
|  |   <lan> | ||||||
|  |     <enable>1</enable> | ||||||
|  |     <gateway>192.168.20.1</gateway> | ||||||
|  |     <domain>somedomain.yourlocal.mcd</domain> | ||||||
|  |     <ddnsdomainalgorithm>hmac-md5</ddnsdomainalgorithm> | ||||||
|  |     <numberoptions> | ||||||
|  |       <item/> | ||||||
|  |     </numberoptions> | ||||||
|  |     <range> | ||||||
|  |       <from>192.168.20.50</from> | ||||||
|  |       <to>192.168.20.200</to> | ||||||
|  |     </range> | ||||||
|  |     <winsserver/> | ||||||
|  |     <dnsserver>192.168.20.1</dnsserver> | ||||||
|  |     <ntpserver/> | ||||||
|  |     <staticmap> | ||||||
|  |       <mac>55:55:55:55:55:1c</mac> | ||||||
|  |       <ipaddr>192.168.20.160</ipaddr> | ||||||
|  |       <hostname>somehost983</hostname> | ||||||
|  |       <descr>someservire8</descr> | ||||||
|  |       <winsserver/> | ||||||
|  |       <dnsserver/> | ||||||
|  |       <ntpserver/> | ||||||
|  |     </staticmap> | ||||||
|  |     <staticmap> | ||||||
|  |       <mac>55:55:55:55:55:1c</mac> | ||||||
|  |       <ipaddr>192.168.20.155</ipaddr> | ||||||
|  |       <hostname>somehost893</hostname> | ||||||
|  |       <winsserver/> | ||||||
|  |       <dnsserver/> | ||||||
|  |       <ntpserver/> | ||||||
|  |     </staticmap> | ||||||
|  |     <staticmap> | ||||||
|  |       <mac>55:55:55:55:55:1c</mac> | ||||||
|  |       <ipaddr>192.168.20.165</ipaddr> | ||||||
|  |       <hostname>somehost893</hostname> | ||||||
|  |       <descr/> | ||||||
|  |       <winsserver/> | ||||||
|  |       <dnsserver/> | ||||||
|  |       <ntpserver/> | ||||||
|  |     </staticmap> | ||||||
|  |     <staticmap> | ||||||
|  |       <mac>55:55:55:55:55:1c</mac> | ||||||
|  |       <ipaddr>192.168.20.50</ipaddr> | ||||||
|  |       <hostname>hostswitch2</hostname> | ||||||
|  |       <descr>switch-2 (bottom)</descr> | ||||||
|  |       <winsserver/> | ||||||
|  |       <dnsserver/> | ||||||
|  |       <ntpserver/> | ||||||
|  |     </staticmap> | ||||||
|  |     <pool/> | ||||||
|  |   </lan> | ||||||
|  | </dhcpd>\n";
 | ||||||
|  | } | ||||||
							
								
								
									
										193
									
								
								harmony-rs/opnsense-config-xml/src/data/interfaces.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								harmony-rs/opnsense-config-xml/src/data/interfaces.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,193 @@ | |||||||
|  | use yaserde_derive::{YaDeserialize, YaSerialize}; | ||||||
|  | 
 | ||||||
|  | use yaserde::MaybeString; | ||||||
|  | 
 | ||||||
|  | #[derive(Default, PartialEq, Debug, YaDeserialize, YaSerialize)] | ||||||
|  | pub struct Interface { | ||||||
|  |     pub internal_dynamic: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "if")] | ||||||
|  |     pub physical_interface_name: String, | ||||||
|  |     pub descr: Option<MaybeString>, | ||||||
|  |     pub enable: MaybeString, | ||||||
|  |     pub lock: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "spoofmac")] | ||||||
|  |     pub spoof_mac: Option<MaybeString>, | ||||||
|  |     pub ipaddr: Option<MaybeString>, | ||||||
|  |     pub dhcphostname: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "alias-address")] | ||||||
|  |     pub alias_address: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "alias-subnet")] | ||||||
|  |     pub alias_subnet: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "blockpriv")] | ||||||
|  |     pub block_priv: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "blockbogons")] | ||||||
|  |     pub block_bogons: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "type")] | ||||||
|  |     pub r#type: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "virtual")] | ||||||
|  |     pub r#virtual: Option<MaybeString>, | ||||||
|  |     pub subnet: Option<MaybeString>, | ||||||
|  |     pub ipaddrv6: Option<MaybeString>, | ||||||
|  |     pub networks: Option<MaybeString>, | ||||||
|  |     pub subnetv6: Option<MaybeString>, | ||||||
|  |     pub media: Option<MaybeString>, | ||||||
|  |     pub mediaopt: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "track6-interface")] | ||||||
|  |     pub track6_interface: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "track6-prefix-id")] | ||||||
|  |     pub track6_prefix_id: Option<MaybeString>, | ||||||
|  |     #[yaserde(rename = "dhcprejectfrom")] | ||||||
|  |     pub dhcprejectfrom: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_pt_timeout: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_pt_retry: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_pt_select_timeout: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_pt_reboot: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_pt_backoff_cutoff: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_pt_initial_interval: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_pt_values: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_send_options: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_request_options: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_required_options: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_option_modifiers: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_config_advanced: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_config_file_override: Option<MaybeString>, | ||||||
|  |     pub adv_dhcp_config_file_override_path: Option<MaybeString>, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[cfg(test)] | ||||||
|  | mod test { | ||||||
|  |     use crate::xml_utils::to_xml_str; | ||||||
|  | 
 | ||||||
|  |     use super::*; | ||||||
|  |     use pretty_assertions::assert_eq; | ||||||
|  |     use yaserde::NamedList; | ||||||
|  | 
 | ||||||
|  |     #[derive(Default, PartialEq, Debug, YaDeserialize, YaSerialize)] | ||||||
|  |     pub struct InterfacesParent { | ||||||
|  |         foo: String, | ||||||
|  |         interfaces: NamedList<Interface>, | ||||||
|  |         bar: String, | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     #[test] | ||||||
|  |     fn should_deserialize_interfaces() { | ||||||
|  |         let interfaces = | ||||||
|  |             yaserde::de::from_str::<NamedList<Interface>>(FULL_INTERFACES_XML).unwrap(); | ||||||
|  |         assert_eq!(interfaces.elements.len(), 6) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     #[test] | ||||||
|  |     fn should_serialize_interfaces() { | ||||||
|  |         let named_list = NamedList { | ||||||
|  |             elements: vec![ | ||||||
|  |                 (String::from("paul"), Interface::default()), | ||||||
|  |                 (String::from("anotherpaul"), Interface::default()), | ||||||
|  |                 (String::from("thirdone"), Interface::default()), | ||||||
|  |                 (String::from("andgofor4"), Interface::default()), | ||||||
|  |             ], | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         let parent = InterfacesParent { | ||||||
|  |             foo: String::from("foo"), | ||||||
|  |             interfaces: named_list, | ||||||
|  |             bar: String::from("foo"), | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         assert_eq!( | ||||||
|  |             &to_xml_str(&parent).unwrap(), | ||||||
|  |             r#"<?xml version="1.0"?>
 | ||||||
|  | <InterfacesParent> | ||||||
|  |   <foo>foo</foo> | ||||||
|  |   <interfaces> | ||||||
|  |     <paul> | ||||||
|  |       <if></if> | ||||||
|  |       <descr></descr> | ||||||
|  |       <enable/> | ||||||
|  |     </paul> | ||||||
|  |     <anotherpaul> | ||||||
|  |       <if></if> | ||||||
|  |       <descr></descr> | ||||||
|  |       <enable/> | ||||||
|  |     </anotherpaul> | ||||||
|  |     <thirdone> | ||||||
|  |       <if></if> | ||||||
|  |       <descr></descr> | ||||||
|  |       <enable/> | ||||||
|  |     </thirdone> | ||||||
|  |     <andgofor4> | ||||||
|  |       <if></if> | ||||||
|  |       <descr></descr> | ||||||
|  |       <enable/> | ||||||
|  |     </andgofor4> | ||||||
|  |   </interfaces> | ||||||
|  |   <bar>foo</bar> | ||||||
|  | </InterfacesParent> | ||||||
|  | "#
 | ||||||
|  |         ) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const FULL_INTERFACES_XML: &str = "<interfaces>
 | ||||||
|  |     <lan> | ||||||
|  |       <if>em1</if> | ||||||
|  |       <descr>LAN</descr> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <spoofmac/> | ||||||
|  |       <media/> | ||||||
|  |       <mediaopt/> | ||||||
|  |       <ipaddr>192.168.20.1</ipaddr> | ||||||
|  |       <subnet>24</subnet> | ||||||
|  |       <ipaddrv6>track6</ipaddrv6> | ||||||
|  |       <track6-interface/> | ||||||
|  |       <track6-prefix-id>0</track6-prefix-id> | ||||||
|  |     </lan> | ||||||
|  |     <wan> | ||||||
|  |       <if>pppoe0</if> | ||||||
|  |       <descr>WAN</descr> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <lock>1</lock> | ||||||
|  |       <spoofmac/> | ||||||
|  |       <blockpriv>1</blockpriv> | ||||||
|  |       <blockbogons>1</blockbogons> | ||||||
|  |       <ipaddr>pppoe</ipaddr> | ||||||
|  |     </wan> | ||||||
|  |     <lo0> | ||||||
|  |       <internal_dynamic>1</internal_dynamic> | ||||||
|  |       <descr>Loopback</descr> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <if>lo0</if> | ||||||
|  |       <ipaddr>127.0.0.1</ipaddr> | ||||||
|  |       <ipaddrv6>::1</ipaddrv6> | ||||||
|  |       <subnet>8</subnet> | ||||||
|  |       <subnetv6>128</subnetv6> | ||||||
|  |       <type>none</type> | ||||||
|  |       <virtual>1</virtual> | ||||||
|  |     </lo0> | ||||||
|  |     <opt1> | ||||||
|  |       <if>em5</if> | ||||||
|  |       <descr>backup_sync</descr> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <lock>1</lock> | ||||||
|  |       <spoofmac/> | ||||||
|  |       <ipaddr>10.10.5.1</ipaddr> | ||||||
|  |       <subnet>24</subnet> | ||||||
|  |     </opt1> | ||||||
|  |     <wireguard> | ||||||
|  |       <internal_dynamic>1</internal_dynamic> | ||||||
|  |       <descr>WireGuard (Group)</descr> | ||||||
|  |       <if>wireguard</if> | ||||||
|  |       <virtual>1</virtual> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <type>group</type> | ||||||
|  |       <networks/> | ||||||
|  |     </wireguard> | ||||||
|  |     <openvpn> | ||||||
|  |       <internal_dynamic>1</internal_dynamic> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <if>openvpn</if> | ||||||
|  |       <descr>OpenVPN</descr> | ||||||
|  |       <type>group</type> | ||||||
|  |       <virtual>1</virtual> | ||||||
|  |       <networks/> | ||||||
|  |     </openvpn> | ||||||
|  |   </interfaces>";
 | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								harmony-rs/opnsense-config-xml/src/data/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								harmony-rs/opnsense-config-xml/src/data/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | mod opnsense; | ||||||
|  | mod interfaces; | ||||||
|  | mod dhcpd; | ||||||
|  | pub use opnsense::*; | ||||||
|  | pub use interfaces::*; | ||||||
|  | pub use dhcpd::*; | ||||||
							
								
								
									
										2052
									
								
								harmony-rs/opnsense-config-xml/src/data/opnsense.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2052
									
								
								harmony-rs/opnsense-config-xml/src/data/opnsense.rs
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										4
									
								
								harmony-rs/opnsense-config-xml/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								harmony-rs/opnsense-config-xml/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | mod xml_utils; | ||||||
|  | mod data; | ||||||
|  | pub use data::*; | ||||||
|  | pub use yaserde::MaybeString; | ||||||
							
								
								
									
										20
									
								
								harmony-rs/opnsense-config-xml/src/xml_utils/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								harmony-rs/opnsense-config-xml/src/xml_utils/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | use yaserde::YaSerialize; | ||||||
|  | 
 | ||||||
|  | pub fn to_xml_str<T: YaSerialize>(model: &T) -> Result<String, String> { | ||||||
|  |     let yaserde_cfg = yaserde::ser::Config { | ||||||
|  |         perform_indent: true, | ||||||
|  |         write_document_declaration: false, | ||||||
|  |         pad_self_closing: false, | ||||||
|  |         ..Default::default() | ||||||
|  |     }; | ||||||
|  |     let serialized = yaserde::ser::to_string_with_config::<T>(model, &yaserde_cfg)?; | ||||||
|  | 
 | ||||||
|  |     // Opnsense does not specify encoding in the document declaration
 | ||||||
|  |     //
 | ||||||
|  |     // yaserde / xml-rs does not allow disabling the encoding attribute in the
 | ||||||
|  |     // document declaration
 | ||||||
|  |     //
 | ||||||
|  |     // So here we just manually prefix the xml document with the exact document declaration
 | ||||||
|  |     // that opnsense uses
 | ||||||
|  |     Ok(format!("<?xml version=\"1.0\"?>\n{serialized}\n")) | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								harmony-rs/opnsense-config/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								harmony-rs/opnsense-config/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | [package] | ||||||
|  | name = "opnsense-config" | ||||||
|  | edition = "2021" | ||||||
|  | version.workspace = true | ||||||
|  | readme.workspace = true | ||||||
|  | license.workspace = true | ||||||
|  | 
 | ||||||
|  | [dependencies] | ||||||
|  | serde = { version = "1.0.123", features = [ "derive" ] } | ||||||
|  | log = { workspace = true } | ||||||
|  | env_logger = { workspace = true } | ||||||
|  | russh = { workspace = true } | ||||||
|  | russh-keys = { workspace = true } | ||||||
|  | thiserror = "1.0" | ||||||
|  | async-trait = { workspace = true } | ||||||
|  | tokio = { workspace = true } | ||||||
|  | opnsense-config-xml = { path = "../opnsense-config-xml" } | ||||||
|  | chrono = "0.4.38" | ||||||
|  | russh-sftp = "2.0.6" | ||||||
|  | serde_json = "1.0.133" | ||||||
|  | 
 | ||||||
|  | [dev-dependencies] | ||||||
|  | pretty_assertions = "1.4.1" | ||||||
							
								
								
									
										38
									
								
								harmony-rs/opnsense-config/adr/001-yaserde.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								harmony-rs/opnsense-config/adr/001-yaserde.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | # Architecture Decision Record: Using yaserde for OPNsense Config Parsing | ||||||
|  | 
 | ||||||
|  | - Status : Proposed | ||||||
|  | - Author : Jean-Gabriel Gill-Couture | ||||||
|  | 
 | ||||||
|  | ## Context | ||||||
|  | 
 | ||||||
|  | We need to parse and manipulate the OPNsense config.xml file in our Rust crate. We considered several XML parsing libraries, including quick-xml, xml-dom, minidom and yaserde. Each library has its own strengths and trade-offs in terms of performance, ease of use, and robustness. | ||||||
|  | 
 | ||||||
|  | ## Decision | ||||||
|  | 
 | ||||||
|  | We have decided to use yaserde for parsing and manipulating the OPNsense config.xml file. | ||||||
|  | 
 | ||||||
|  | ## Rationale | ||||||
|  | 
 | ||||||
|  | 1. Type Safety: yaserde allows us to define a complete Rust representation of the config.xml structure. This provides strong type safety and makes it easier to catch errors at compile-time rather than runtime. | ||||||
|  | 
 | ||||||
|  | 2. Robustness: By mapping the entire config structure to Rust types, we ensure that our code interacts with the config in a well-defined manner. This reduces the risk of runtime errors due to unexpected XML structures. | ||||||
|  | 
 | ||||||
|  | 3. Ease of Use: Working with native Rust types is more intuitive and less error-prone than manipulating XML directly. This can lead to more maintainable and readable code. | ||||||
|  | 
 | ||||||
|  | 4. Memory Usage: While yaserde may use more memory than streaming parsers like quick-xml, the OPNsense config files are typically not large enough for this to be a significant concern. We prioritize robustness and ease of use over minimal memory usage in this context. | ||||||
|  | 
 | ||||||
|  | 5. Serialization/Deserialization: yaserde provides both deserialization (XML to Rust structs) and serialization (Rust structs to XML) out of the box, which simplifies our implementation. | ||||||
|  | 
 | ||||||
|  | ## Consequences | ||||||
|  | 
 | ||||||
|  | Positive: | ||||||
|  | - Increased type safety and robustness in handling the config.xml structure. | ||||||
|  | - More intuitive API for developers working with the config. | ||||||
|  | - Easier to extend and maintain the code that interacts with different parts of the config. | ||||||
|  | 
 | ||||||
|  | Negative: | ||||||
|  | - It will be harder to maintain when there are breaking changes in the config.xml format. Any structural changes in the XML will require corresponding updates to our Rust struct definitions. | ||||||
|  | - Slightly higher memory usage compared to streaming parsers. | ||||||
|  | - Initial development time may be longer due to the need to define the entire config structure upfront. | ||||||
|  | 
 | ||||||
|  | We accept the trade-off of potentially more difficult maintenance in the face of breaking config.xml changes, as we believe the benefits of increased robustness and type safety outweigh this drawback. When OPNsense releases updates that change the config.xml structure, we will need to update our Rust struct definitions accordingly. | ||||||
							
								
								
									
										147
									
								
								harmony-rs/opnsense-config/src/config/config.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								harmony-rs/opnsense-config/src/config/config.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,147 @@ | |||||||
|  | use std::{net::Ipv4Addr, sync::Arc, time::Duration}; | ||||||
|  | 
 | ||||||
|  | use crate::{config::{SshConfigManager, SshCredentials, SshOPNSenseShell}, error::Error, modules::dhcp::DhcpConfig}; | ||||||
|  | use log::trace; | ||||||
|  | use opnsense_config_xml::OPNsense; | ||||||
|  | use russh::client; | ||||||
|  | 
 | ||||||
|  | use super::{ConfigManager, OPNsenseShell}; | ||||||
|  | 
 | ||||||
|  | #[derive(Debug)] | ||||||
|  | pub struct Config { | ||||||
|  |     opnsense: OPNsense, | ||||||
|  |     repository: Arc<dyn ConfigManager>, | ||||||
|  |     shell: Arc<dyn OPNsenseShell>, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl Config { | ||||||
|  |     pub async fn new( | ||||||
|  |         repository: Arc<dyn ConfigManager>, | ||||||
|  |         shell: Arc<dyn OPNsenseShell>, | ||||||
|  |     ) -> Result<Self, Error> { | ||||||
|  |         let xml = repository.load_as_str().await?; | ||||||
|  |         trace!("xml {}", xml); | ||||||
|  | 
 | ||||||
|  |         let opnsense = OPNsense::from(xml); | ||||||
|  | 
 | ||||||
|  |         Ok(Self { | ||||||
|  |             opnsense, | ||||||
|  |             repository, | ||||||
|  |             shell, | ||||||
|  |         }) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub fn dhcp(&mut self) -> DhcpConfig { | ||||||
|  |         DhcpConfig::new(&mut self.opnsense, self.shell.clone()) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub async fn apply(&self) -> Result<(), Error> { | ||||||
|  |         self.repository | ||||||
|  |             .apply_new_config(&self.opnsense.to_xml()) | ||||||
|  |             .await | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub async fn from_credentials(ipaddr: std::net::IpAddr, username: &str, password: &str) -> Self { | ||||||
|  |         let config = Arc::new(client::Config { | ||||||
|  |             inactivity_timeout: Some(Duration::from_secs(5)), | ||||||
|  |             ..<_>::default() | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         let credentials = SshCredentials::Password { | ||||||
|  |             username: String::from(username), | ||||||
|  |             password: String::from(password), | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         let shell = Arc::new(SshOPNSenseShell::new( | ||||||
|  |             (ipaddr, 22), | ||||||
|  |             credentials, | ||||||
|  |             config, | ||||||
|  |         )); | ||||||
|  |         let manager = Arc::new(SshConfigManager::new(shell.clone())); | ||||||
|  | 
 | ||||||
|  |         Config::new(manager, shell).await.unwrap() | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[cfg(test)] | ||||||
|  | mod tests { | ||||||
|  |     use crate::config::{DummyOPNSenseShell, LocalFileConfigManager}; | ||||||
|  |     use crate::modules::dhcp::DhcpConfig; | ||||||
|  |     use std::fs; | ||||||
|  |     use std::net::Ipv4Addr; | ||||||
|  | 
 | ||||||
|  |     use super::*; | ||||||
|  |     use pretty_assertions::assert_eq; | ||||||
|  |     use std::path::PathBuf; | ||||||
|  | 
 | ||||||
|  |     #[tokio::test] | ||||||
|  |     async fn test_load_config_from_local_file() { | ||||||
|  |         for path in vec![ | ||||||
|  |             "src/tests/data/config-vm-test.xml", | ||||||
|  |             "src/tests/data/config-full-1.xml", | ||||||
|  |             "src/tests/data/config-structure.xml", | ||||||
|  |         ] { | ||||||
|  |             let mut test_file_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); | ||||||
|  |             test_file_path.push(path); | ||||||
|  | 
 | ||||||
|  |             let config_file_path = test_file_path.to_str().unwrap().to_string(); | ||||||
|  |             println!("File path {config_file_path}"); | ||||||
|  |             let repository = Arc::new(LocalFileConfigManager::new(config_file_path)); | ||||||
|  |             let shell = Arc::new(DummyOPNSenseShell {}); | ||||||
|  |             let config_file_str = repository.load_as_str().await.unwrap(); | ||||||
|  |             let config = Config::new(repository, shell) | ||||||
|  |                 .await | ||||||
|  |                 .expect("Failed to load config"); | ||||||
|  | 
 | ||||||
|  |             println!("Config {:?}", config); | ||||||
|  | 
 | ||||||
|  |             let serialized = config.opnsense.to_xml(); | ||||||
|  | 
 | ||||||
|  |             fs::write("/tmp/serialized.xml", &serialized).unwrap(); | ||||||
|  | 
 | ||||||
|  |             // Since the order of all fields is not always the same in opnsense config files
 | ||||||
|  |             // I think it is good enough to have exactly the same amount of the same lines
 | ||||||
|  |             let config_file_str_sorted = vec![config_file_str.lines().collect::<Vec<_>>()].sort(); | ||||||
|  |             let serialized_sorted = vec![config_file_str.lines().collect::<Vec<_>>()].sort(); | ||||||
|  |             assert_eq!(config_file_str_sorted, serialized_sorted); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     #[tokio::test] | ||||||
|  |     async fn test_add_dhcpd_static_entry() { | ||||||
|  |         let mut test_file_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); | ||||||
|  |         test_file_path.push("src/tests/data/config-structure.xml"); | ||||||
|  | 
 | ||||||
|  |         let config_file_path = test_file_path.to_str().unwrap().to_string(); | ||||||
|  |         println!("File path {config_file_path}"); | ||||||
|  |         let repository = Arc::new(LocalFileConfigManager::new(config_file_path)); | ||||||
|  |         let shell = Arc::new(DummyOPNSenseShell {}); | ||||||
|  |         let mut config = Config::new(repository, shell.clone()) | ||||||
|  |             .await | ||||||
|  |             .expect("Failed to load config"); | ||||||
|  | 
 | ||||||
|  |         println!("Config {:?}", config); | ||||||
|  | 
 | ||||||
|  |         let mut dhcp_config = DhcpConfig::new(&mut config.opnsense, shell); | ||||||
|  |         dhcp_config | ||||||
|  |             .add_static_mapping( | ||||||
|  |                 "00:00:00:00:00:00", | ||||||
|  |                 Ipv4Addr::new(192, 168, 20, 100), | ||||||
|  |                 "hostname", | ||||||
|  |             ) | ||||||
|  |             .expect("Should add static mapping"); | ||||||
|  | 
 | ||||||
|  |         let serialized = config.opnsense.to_xml(); | ||||||
|  | 
 | ||||||
|  |         fs::write("/tmp/serialized.xml", &serialized).unwrap(); | ||||||
|  | 
 | ||||||
|  |         let mut test_file_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); | ||||||
|  |         test_file_path.push("src/tests/data/config-structure-with-dhcp-staticmap-entry.xml"); | ||||||
|  | 
 | ||||||
|  |         let config_file_path = test_file_path.to_str().unwrap().to_string(); | ||||||
|  |         println!("File path {config_file_path}"); | ||||||
|  |         let repository = Box::new(LocalFileConfigManager::new(config_file_path)); | ||||||
|  |         let expected_config_file_str = repository.load_as_str().await.unwrap(); | ||||||
|  |         assert_eq!(expected_config_file_str, serialized); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								harmony-rs/opnsense-config/src/config/manager/local_file.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								harmony-rs/opnsense-config/src/config/manager/local_file.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | use crate::config::manager::ConfigManager; | ||||||
|  | use crate::error::Error; | ||||||
|  | use async_trait::async_trait; | ||||||
|  | use std::fs; | ||||||
|  | 
 | ||||||
|  | #[derive(Debug)] | ||||||
|  | pub struct LocalFileConfigManager { | ||||||
|  |     file_path: String, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl LocalFileConfigManager { | ||||||
|  |     pub fn new(file_path: String) -> Self { | ||||||
|  |         Self { file_path } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[async_trait] | ||||||
|  | impl ConfigManager for LocalFileConfigManager { | ||||||
|  |     async fn load_as_str(&self) -> Result<String, Error> { | ||||||
|  |         Ok(fs::read_to_string(&self.file_path)?) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async fn apply_new_config(&self, content: &str) -> Result<(), Error> { | ||||||
|  |         Ok(fs::write(&self.file_path, content)?) | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										13
									
								
								harmony-rs/opnsense-config/src/config/manager/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								harmony-rs/opnsense-config/src/config/manager/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | mod ssh; | ||||||
|  | mod local_file; | ||||||
|  | use async_trait::async_trait; | ||||||
|  | pub use ssh::*; | ||||||
|  | pub use local_file::*; | ||||||
|  | 
 | ||||||
|  | use crate::Error; | ||||||
|  | 
 | ||||||
|  | #[async_trait] | ||||||
|  | pub trait ConfigManager: std::fmt::Debug + Send + Sync { | ||||||
|  |     async fn load_as_str(&self) -> Result<String, Error>; | ||||||
|  |     async fn apply_new_config(&self, content: &str) -> Result<(), Error>; | ||||||
|  | } | ||||||
							
								
								
									
										62
									
								
								harmony-rs/opnsense-config/src/config/manager/ssh.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								harmony-rs/opnsense-config/src/config/manager/ssh.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | |||||||
|  | use crate::config::{manager::ConfigManager, OPNsenseShell}; | ||||||
|  | use crate::error::Error; | ||||||
|  | use async_trait::async_trait; | ||||||
|  | use log::info; | ||||||
|  | use russh_keys::key::KeyPair; | ||||||
|  | use std::sync::Arc; | ||||||
|  | 
 | ||||||
|  | #[derive(Debug)] | ||||||
|  | pub enum SshCredentials { | ||||||
|  |     SshKey { username: String, key: Arc<KeyPair> }, | ||||||
|  |     Password { username: String, password: String }, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[derive(Debug)] | ||||||
|  | pub struct SshConfigManager { | ||||||
|  |     opnsense_shell: Arc<dyn OPNsenseShell>, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl SshConfigManager { | ||||||
|  |     pub fn new(opnsense_shell: Arc<dyn OPNsenseShell>) -> Self { | ||||||
|  |         Self { opnsense_shell } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl SshConfigManager { | ||||||
|  |     async fn backup_config_remote(&self) -> Result<String, Error> { | ||||||
|  |         let backup_filename = format!("config_{}.xml", chrono::Local::now().format("%Y%m%d%H%M%S")); | ||||||
|  | 
 | ||||||
|  |         self.opnsense_shell.exec(&format!("cp /conf/config.xml /tmp/{}", backup_filename)) | ||||||
|  |             .await | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async fn move_to_live_config(&self, new_config_path: &str) -> Result<String, Error> { | ||||||
|  |         info!("Overwriting OPNSense /conf/config.xml with {new_config_path}"); | ||||||
|  |         self.opnsense_shell.exec(&format!("mv {new_config_path} /conf/config.xml")) | ||||||
|  |             .await | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async fn reload_all_services(&self) -> Result<String, Error> { | ||||||
|  |         info!("Reloading all opnsense services"); | ||||||
|  |         self.opnsense_shell.exec(&format!("configctl service reload all")) | ||||||
|  |             .await | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[async_trait] | ||||||
|  | impl ConfigManager for SshConfigManager { | ||||||
|  |     async fn load_as_str(&self) -> Result<String, Error> { | ||||||
|  |         self.opnsense_shell.exec("cat /conf/config.xml").await | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async fn apply_new_config(&self, content: &str) -> Result<(), Error> { | ||||||
|  |         let temp_filename = self | ||||||
|  |             .opnsense_shell | ||||||
|  |             .write_content_to_temp_file(content) | ||||||
|  |             .await?; | ||||||
|  |         self.backup_config_remote().await?; | ||||||
|  |         self.move_to_live_config(&temp_filename).await?; | ||||||
|  |         self.reload_all_services().await?; | ||||||
|  |         Ok(()) | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								harmony-rs/opnsense-config/src/config/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								harmony-rs/opnsense-config/src/config/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | mod config; | ||||||
|  | mod manager; | ||||||
|  | mod shell; | ||||||
|  | pub use manager::*; | ||||||
|  | pub use config::*; | ||||||
|  | pub use shell::*; | ||||||
							
								
								
									
										27
									
								
								harmony-rs/opnsense-config/src/config/shell/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								harmony-rs/opnsense-config/src/config/shell/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | mod ssh; | ||||||
|  | pub use ssh::*; | ||||||
|  | 
 | ||||||
|  | use async_trait::async_trait; | ||||||
|  | 
 | ||||||
|  | use crate::Error; | ||||||
|  | 
 | ||||||
|  | #[async_trait] | ||||||
|  | pub trait OPNsenseShell: std::fmt::Debug + Send + Sync { | ||||||
|  |     async fn exec(&self, command: &str) -> Result<String, Error>; | ||||||
|  |     async fn write_content_to_temp_file(&self, content: &str) -> Result<String, Error>; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[cfg(test)] | ||||||
|  | #[derive(Debug)] | ||||||
|  | pub struct DummyOPNSenseShell; | ||||||
|  | 
 | ||||||
|  | #[cfg(test)] | ||||||
|  | #[async_trait] | ||||||
|  | impl OPNsenseShell for DummyOPNSenseShell { | ||||||
|  |     async fn exec(&self, _command: &str) -> Result<String, Error> { | ||||||
|  |         unimplemented!("This is a dummy implementation"); | ||||||
|  |     } | ||||||
|  |     async fn write_content_to_temp_file(&self, _content: &str) -> Result<String, Error> { | ||||||
|  |         unimplemented!("This is a dummy implementation"); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										137
									
								
								harmony-rs/opnsense-config/src/config/shell/ssh.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								harmony-rs/opnsense-config/src/config/shell/ssh.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,137 @@ | |||||||
|  | use std::{ | ||||||
|  |     net::IpAddr, | ||||||
|  |     sync::Arc, | ||||||
|  |     time::{SystemTime, UNIX_EPOCH}, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | use async_trait::async_trait; | ||||||
|  | use log::debug; | ||||||
|  | use russh::{ | ||||||
|  |     client::{Config, Handler, Msg}, | ||||||
|  |     Channel, | ||||||
|  | }; | ||||||
|  | use russh_keys::key; | ||||||
|  | use russh_sftp::client::SftpSession; | ||||||
|  | use tokio::io::AsyncWriteExt; | ||||||
|  | 
 | ||||||
|  | use crate::{config::SshCredentials, Error}; | ||||||
|  | 
 | ||||||
|  | use super::OPNsenseShell; | ||||||
|  | 
 | ||||||
|  | #[derive(Debug)] | ||||||
|  | pub struct SshOPNSenseShell { | ||||||
|  |     host: (IpAddr, u16), | ||||||
|  |     credentials: SshCredentials, | ||||||
|  |     ssh_config: Arc<Config>, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[async_trait] | ||||||
|  | impl OPNsenseShell for SshOPNSenseShell { | ||||||
|  |     async fn exec(&self, command: &str) -> Result<String, Error> { | ||||||
|  |         self.run_command(command).await | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async fn write_content_to_temp_file(&self, content: &str) -> Result<String, Error> { | ||||||
|  |         let temp_filename = format!( | ||||||
|  |             "/tmp/opnsense-config-tmp-config_{}", | ||||||
|  |             SystemTime::now() | ||||||
|  |                 .duration_since(UNIX_EPOCH) | ||||||
|  |                 .unwrap() | ||||||
|  |                 .as_millis() | ||||||
|  |         ); | ||||||
|  |         let channel = self.get_ssh_channel().await?; | ||||||
|  |         channel | ||||||
|  |             .request_subsystem(true, "sftp") | ||||||
|  |             .await | ||||||
|  |             .expect("Should request sftp subsystem"); | ||||||
|  |         let sftp = SftpSession::new(channel.into_stream()) | ||||||
|  |             .await | ||||||
|  |             .expect("Should acquire sftp subsystem"); | ||||||
|  | 
 | ||||||
|  |         let mut file = sftp.create(&temp_filename).await.unwrap(); | ||||||
|  |         file.write_all(content.as_bytes()).await?; | ||||||
|  | 
 | ||||||
|  |         Ok(temp_filename) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl SshOPNSenseShell { | ||||||
|  |     pub async fn get_ssh_channel(&self) -> Result<Channel<Msg>, Error> { | ||||||
|  |         let mut ssh = russh::client::connect(self.ssh_config.clone(), self.host, Client {}).await?; | ||||||
|  | 
 | ||||||
|  |         match &self.credentials { | ||||||
|  |             SshCredentials::SshKey { username, key } => { | ||||||
|  |                 ssh.authenticate_publickey(username, key.clone()).await?; | ||||||
|  |             } | ||||||
|  |             SshCredentials::Password { username, password } => { | ||||||
|  |                 ssh.authenticate_password(username, password).await?; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         Ok(ssh.channel_open_session().await?) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async fn run_command(&self, command: &str) -> Result<String, Error> { | ||||||
|  |         debug!("Running ssh command {command}"); | ||||||
|  |         let mut channel = self.get_ssh_channel().await?; | ||||||
|  |         channel.exec(true, command).await?; | ||||||
|  |         wait_for_completion(&mut channel).await | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub fn new(host: (IpAddr, u16), credentials: SshCredentials, ssh_config: Arc<Config>) -> Self { | ||||||
|  |         Self { | ||||||
|  |             host, | ||||||
|  |             credentials, | ||||||
|  |             ssh_config, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | struct Client {} | ||||||
|  | 
 | ||||||
|  | #[async_trait] | ||||||
|  | impl Handler for Client { | ||||||
|  |     type Error = Error; | ||||||
|  | 
 | ||||||
|  |     async fn check_server_key( | ||||||
|  |         &mut self, | ||||||
|  |         _server_public_key: &key::PublicKey, | ||||||
|  |     ) -> Result<bool, Self::Error> { | ||||||
|  |         Ok(true) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | async fn wait_for_completion(channel: &mut Channel<Msg>) -> Result<String, Error> { | ||||||
|  |     let mut output = Vec::new(); | ||||||
|  | 
 | ||||||
|  |     loop { | ||||||
|  |         let Some(msg) = channel.wait().await else { | ||||||
|  |             break; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         match msg { | ||||||
|  |             russh::ChannelMsg::ExtendedData { ref data, .. } | ||||||
|  |             | russh::ChannelMsg::Data { ref data } => { | ||||||
|  |                 output.append(&mut data.to_vec()); | ||||||
|  |             } | ||||||
|  |             russh::ChannelMsg::ExitStatus { exit_status } => { | ||||||
|  |                 if exit_status != 0 { | ||||||
|  |                     return Err(Error::Command(format!( | ||||||
|  |                         "Command failed with exit status {exit_status}, output {}", | ||||||
|  |                         String::from_utf8(output).unwrap_or_default() | ||||||
|  |                     ))); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             russh::ChannelMsg::Success { .. } | ||||||
|  |             | russh::ChannelMsg::WindowAdjusted { .. } | ||||||
|  |             | russh::ChannelMsg::Eof { .. } => {} | ||||||
|  |             _ => { | ||||||
|  |                 return Err(Error::Unexpected(format!( | ||||||
|  |                     "Russh got unexpected msg {msg:?}" | ||||||
|  |                 ))) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     Ok(String::from_utf8(output).unwrap_or_default()) | ||||||
|  | } | ||||||
							
								
								
									
										17
									
								
								harmony-rs/opnsense-config/src/error.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								harmony-rs/opnsense-config/src/error.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | use thiserror::Error; | ||||||
|  | 
 | ||||||
|  | #[derive(Error, Debug)] | ||||||
|  | pub enum Error { | ||||||
|  |     #[error("XML error: {0}")] | ||||||
|  |     Xml(String), | ||||||
|  |     #[error("SSH error: {0}")] | ||||||
|  |     Ssh(#[from] russh::Error), | ||||||
|  |     #[error("Command failed : {0}")] | ||||||
|  |     Command(String), | ||||||
|  |     #[error("I/O error: {0}")] | ||||||
|  |     Io(#[from] std::io::Error), | ||||||
|  |     #[error("Config error: {0}")] | ||||||
|  |     Config(String), | ||||||
|  |     #[error("Unexpected error: {0}")] | ||||||
|  |     Unexpected(String), | ||||||
|  | } | ||||||
							
								
								
									
										55
									
								
								harmony-rs/opnsense-config/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								harmony-rs/opnsense-config/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | |||||||
|  | pub mod config; | ||||||
|  | pub mod error; | ||||||
|  | pub mod modules; | ||||||
|  | 
 | ||||||
|  | pub use config::Config; | ||||||
|  | pub use error::Error; | ||||||
|  | #[cfg(test)] | ||||||
|  | mod test { | ||||||
|  |     use opnsense_config_xml::StaticMap; | ||||||
|  |     use std::net::Ipv4Addr; | ||||||
|  | 
 | ||||||
|  |     use crate::Config; | ||||||
|  |     use pretty_assertions::assert_eq; | ||||||
|  | 
 | ||||||
|  |     #[tokio::test] | ||||||
|  |     async fn test_public_sdk() { | ||||||
|  |         let mac = "11:22:33:44:55:66"; | ||||||
|  |         let ip = Ipv4Addr::new(10, 100, 8, 200); | ||||||
|  |         let hostname = "test_hostname"; | ||||||
|  | 
 | ||||||
|  |         remove_static_mapping(mac).await; | ||||||
|  | 
 | ||||||
|  |         // Make sure static mapping does not exist anymore
 | ||||||
|  |         let static_mapping_removed = get_static_mappings().await; | ||||||
|  |         assert!(!static_mapping_removed.iter().any(|e| e.mac == mac)); | ||||||
|  | 
 | ||||||
|  |         add_static_mapping(mac, ip, hostname).await; | ||||||
|  | 
 | ||||||
|  |         // Make sure static mapping has been added successfully
 | ||||||
|  |         let static_mapping_added = get_static_mappings().await; | ||||||
|  |         assert_eq!(static_mapping_added.len(), static_mapping_removed.len() + 1); | ||||||
|  |         assert!(static_mapping_added.iter().any(|e| e.mac == mac)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async fn initialize_config() -> Config { | ||||||
|  |         Config::from_credentials(Ipv4Addr::new(192, 168, 5, 229), "root", "opnsense").await | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async fn get_static_mappings() -> Vec<StaticMap> { | ||||||
|  |         let mut config = initialize_config().await; | ||||||
|  |         config.dhcp().get_static_mappings().await.unwrap() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async fn add_static_mapping(mac: &str, ip: Ipv4Addr, hostname: &str) { | ||||||
|  |         let mut config = initialize_config().await; | ||||||
|  |         config.dhcp().add_static_mapping(mac, ip, hostname).unwrap(); | ||||||
|  |         config.apply().await.unwrap(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async fn remove_static_mapping(mac: &str) { | ||||||
|  |         let mut config = initialize_config().await; | ||||||
|  |         config.dhcp().remove_static_mapping(mac); | ||||||
|  |         config.apply().await.unwrap(); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										211
									
								
								harmony-rs/opnsense-config/src/modules/dhcp.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										211
									
								
								harmony-rs/opnsense-config/src/modules/dhcp.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,211 @@ | |||||||
|  | use opnsense_config_xml::MaybeString; | ||||||
|  | use opnsense_config_xml::Range; | ||||||
|  | use opnsense_config_xml::StaticMap; | ||||||
|  | use std::cmp::Ordering; | ||||||
|  | use std::net::Ipv4Addr; | ||||||
|  | use std::sync::Arc; | ||||||
|  | 
 | ||||||
|  | use opnsense_config_xml::OPNsense; | ||||||
|  | 
 | ||||||
|  | use crate::config::OPNsenseShell; | ||||||
|  | use crate::Error; | ||||||
|  | 
 | ||||||
|  | pub struct DhcpConfig<'a> { | ||||||
|  |     opnsense: &'a mut OPNsense, | ||||||
|  |     opnsense_shell: Arc<dyn OPNsenseShell>, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[derive(Debug)] | ||||||
|  | pub enum DhcpError { | ||||||
|  |     InvalidMacAddress(String), | ||||||
|  |     InvalidIpAddress(String), | ||||||
|  |     IpAddressAlreadyMapped(String), | ||||||
|  |     MacAddressAlreadyMapped(String), | ||||||
|  |     IpAddressOutOfRange(String), | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl std::fmt::Display for DhcpError { | ||||||
|  |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||||||
|  |         match self { | ||||||
|  |             DhcpError::InvalidMacAddress(mac) => write!(f, "Invalid MAC address format: {}", mac), | ||||||
|  |             DhcpError::InvalidIpAddress(ip) => write!(f, "Invalid IP address format: {}", ip), | ||||||
|  |             DhcpError::IpAddressAlreadyMapped(ip) => { | ||||||
|  |                 write!(f, "IP address {} is already mapped", ip) | ||||||
|  |             } | ||||||
|  |             DhcpError::MacAddressAlreadyMapped(mac) => { | ||||||
|  |                 write!(f, "MAC address {} is already mapped", mac) | ||||||
|  |             } | ||||||
|  |             DhcpError::IpAddressOutOfRange(ip) => { | ||||||
|  |                 write!(f, "IP address {} is out of interface range", ip) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl std::error::Error for DhcpError {} | ||||||
|  | 
 | ||||||
|  | impl<'a> DhcpConfig<'a> { | ||||||
|  |     pub fn new(opnsense: &'a mut OPNsense, opnsense_shell: Arc<dyn OPNsenseShell>) -> Self { | ||||||
|  |         Self { | ||||||
|  |             opnsense, | ||||||
|  |             opnsense_shell, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub fn remove_static_mapping(&mut self, mac: &str) { | ||||||
|  |         let lan_dhcpd = self.get_lan_dhcpd(); | ||||||
|  |         lan_dhcpd.staticmaps.retain(|static_entry| static_entry.mac != mac); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn get_lan_dhcpd(&mut self) -> &mut opnsense_config_xml::DhcpInterface { | ||||||
|  |         &mut self | ||||||
|  |             .opnsense | ||||||
|  |             .dhcpd | ||||||
|  |             .elements | ||||||
|  |             .iter_mut() | ||||||
|  |             .find(|(name, _config)| return name == "lan") | ||||||
|  |             .expect("Interface lan should have dhcpd activated") | ||||||
|  |             .1 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub fn add_static_mapping( | ||||||
|  |         &mut self, | ||||||
|  |         mac: &str, | ||||||
|  |         ipaddr: Ipv4Addr, | ||||||
|  |         hostname: &str, | ||||||
|  |     ) -> Result<(), DhcpError> { | ||||||
|  |         let mac = mac.to_string(); | ||||||
|  |         let hostname = hostname.to_string(); | ||||||
|  |         let lan_dhcpd = self.get_lan_dhcpd(); | ||||||
|  |         let range = &lan_dhcpd.range; | ||||||
|  |         let existing_mappings: &mut Vec<StaticMap> = &mut lan_dhcpd.staticmaps; | ||||||
|  | 
 | ||||||
|  |         if !Self::is_valid_mac(&mac) { | ||||||
|  |             return Err(DhcpError::InvalidMacAddress(mac)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if !Self::is_ip_in_range(&ipaddr, range) { | ||||||
|  |             return Err(DhcpError::IpAddressOutOfRange(ipaddr.to_string())); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if existing_mappings.iter().any(|m| { | ||||||
|  |             m.ipaddr | ||||||
|  |                 .parse::<Ipv4Addr>() | ||||||
|  |                 .expect("Mapping contains invalid ipv4") | ||||||
|  |                 == ipaddr | ||||||
|  |         }) { | ||||||
|  |             return Err(DhcpError::IpAddressAlreadyMapped(ipaddr.to_string())); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if existing_mappings.iter().any(|m| m.mac == mac) { | ||||||
|  |             return Err(DhcpError::MacAddressAlreadyMapped(mac)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         let static_map = StaticMap { | ||||||
|  |             mac, | ||||||
|  |             ipaddr: ipaddr.to_string(), | ||||||
|  |             hostname, | ||||||
|  |             descr: Default::default(), | ||||||
|  |             winsserver: Default::default(), | ||||||
|  |             dnsserver: Default::default(), | ||||||
|  |             ntpserver: Default::default(), | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         existing_mappings.push(static_map); | ||||||
|  |         Ok(()) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn is_valid_mac(mac: &str) -> bool { | ||||||
|  |         let parts: Vec<&str> = mac.split(':').collect(); | ||||||
|  |         if parts.len() != 6 { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         parts | ||||||
|  |             .iter() | ||||||
|  |             .all(|part| part.len() == 2 && part.chars().all(|c| c.is_ascii_hexdigit())) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn is_ip_in_range(ip: &Ipv4Addr, range: &Range) -> bool { | ||||||
|  |         let range_start = range | ||||||
|  |             .from | ||||||
|  |             .parse::<Ipv4Addr>() | ||||||
|  |             .expect("Invalid DHCP range start"); | ||||||
|  |         let range_end = range.to.parse::<Ipv4Addr>().expect("Invalid DHCP range to"); | ||||||
|  | 
 | ||||||
|  |         let start_compare = range_start.cmp(ip); | ||||||
|  |         let end_compare = range_end.cmp(ip); | ||||||
|  | 
 | ||||||
|  |         if (Ordering::Less == start_compare || Ordering::Equal == start_compare) | ||||||
|  |             && (Ordering::Greater == end_compare || Ordering::Equal == end_compare) | ||||||
|  |         { | ||||||
|  |             return true; | ||||||
|  |         } else { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub async fn get_static_mappings(&self) -> Result<Vec<StaticMap>, Error> { | ||||||
|  |         let list_static_output = self | ||||||
|  |             .opnsense_shell | ||||||
|  |             .exec("configctl dhcpd list static") | ||||||
|  |             .await?; | ||||||
|  | 
 | ||||||
|  |         let value: serde_json::Value = serde_json::from_str(&list_static_output).expect(&format!( | ||||||
|  |             "Got invalid json from configctl {list_static_output}" | ||||||
|  |         )); | ||||||
|  |         let static_maps = value["dhcpd"] | ||||||
|  |             .as_array() | ||||||
|  |             .ok_or(Error::Command(format!( | ||||||
|  |                 "Invalid DHCP data from configctl command, got {list_static_output}" | ||||||
|  |             )))? | ||||||
|  |             .iter() | ||||||
|  |             .map(|entry| StaticMap { | ||||||
|  |                 mac: entry["mac"].as_str().unwrap_or_default().to_string(), | ||||||
|  |                 ipaddr: entry["ipaddr"].as_str().unwrap_or_default().to_string(), | ||||||
|  |                 hostname: entry["hostname"].as_str().unwrap_or_default().to_string(), | ||||||
|  |                 descr: entry["descr"].as_str().map(MaybeString::from), | ||||||
|  |                 winsserver: MaybeString::default(), | ||||||
|  |                 dnsserver: MaybeString::default(), | ||||||
|  |                 ntpserver: MaybeString::default(), | ||||||
|  |             }) | ||||||
|  |             .collect(); | ||||||
|  | 
 | ||||||
|  |         Ok(static_maps) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[cfg(test)] | ||||||
|  | mod test { | ||||||
|  |     use super::*; | ||||||
|  |     use pretty_assertions::assert_eq; | ||||||
|  |     use std::net::Ipv4Addr; | ||||||
|  | 
 | ||||||
|  |     #[test] | ||||||
|  |     fn test_ip_in_range() { | ||||||
|  |         let range = Range { | ||||||
|  |             from: "192.168.1.100".to_string(), | ||||||
|  |             to: "192.168.1.200".to_string(), | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         // Test IP within range
 | ||||||
|  |         let ip = "192.168.1.150".parse::<Ipv4Addr>().unwrap(); | ||||||
|  |         assert_eq!(DhcpConfig::is_ip_in_range(&ip, &range), true); | ||||||
|  | 
 | ||||||
|  |         // Test IP at start of range
 | ||||||
|  |         let ip = "192.168.1.100".parse::<Ipv4Addr>().unwrap(); | ||||||
|  |         assert_eq!(DhcpConfig::is_ip_in_range(&ip, &range), true); | ||||||
|  | 
 | ||||||
|  |         // Test IP at end of range
 | ||||||
|  |         let ip = "192.168.1.200".parse::<Ipv4Addr>().unwrap(); | ||||||
|  |         assert_eq!(DhcpConfig::is_ip_in_range(&ip, &range), true); | ||||||
|  | 
 | ||||||
|  |         // Test IP before range
 | ||||||
|  |         let ip = "192.168.1.99".parse::<Ipv4Addr>().unwrap(); | ||||||
|  |         assert_eq!(DhcpConfig::is_ip_in_range(&ip, &range), false); | ||||||
|  | 
 | ||||||
|  |         // Test IP after range
 | ||||||
|  |         let ip = "192.168.1.201".parse::<Ipv4Addr>().unwrap(); | ||||||
|  |         assert_eq!(DhcpConfig::is_ip_in_range(&ip, &range), false); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								harmony-rs/opnsense-config/src/modules/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								harmony-rs/opnsense-config/src/modules/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | pub mod dhcp; | ||||||
							
								
								
									
										2769
									
								
								harmony-rs/opnsense-config/src/tests/data/config-full-1.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2769
									
								
								harmony-rs/opnsense-config/src/tests/data/config-full-1.xml
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1423
									
								
								harmony-rs/opnsense-config/src/tests/data/config-structure.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1423
									
								
								harmony-rs/opnsense-config/src/tests/data/config-structure.xml
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										994
									
								
								harmony-rs/opnsense-config/src/tests/data/config-vm-test.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										994
									
								
								harmony-rs/opnsense-config/src/tests/data/config-vm-test.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,994 @@ | |||||||
|  | <?xml version="1.0"?> | ||||||
|  | <opnsense> | ||||||
|  |   <theme>opnsense</theme> | ||||||
|  |   <sysctl> | ||||||
|  |     <item> | ||||||
|  |       <descr>Increase UFS read-ahead speeds to match the state of hard drives and NCQ.</descr> | ||||||
|  |       <tunable>vfs.read_max</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set the ephemeral port range to be lower.</descr> | ||||||
|  |       <tunable>net.inet.ip.portrange.first</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Drop packets to closed TCP ports without returning a RST</descr> | ||||||
|  |       <tunable>net.inet.tcp.blackhole</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Do not send ICMP port unreachable messages for closed UDP ports</descr> | ||||||
|  |       <tunable>net.inet.udp.blackhole</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Randomize the ID field in IP packets</descr> | ||||||
|  |       <tunable>net.inet.ip.random_id</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr> | ||||||
|  |         Source routing is another way for an attacker to try to reach non-routable addresses behind your box. | ||||||
|  |         It can also be used to probe for information about your internal networks. These functions come enabled | ||||||
|  |         as part of the standard FreeBSD core system. | ||||||
|  |       </descr> | ||||||
|  |       <tunable>net.inet.ip.sourceroute</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr> | ||||||
|  |         Source routing is another way for an attacker to try to reach non-routable addresses behind your box. | ||||||
|  |         It can also be used to probe for information about your internal networks. These functions come enabled | ||||||
|  |         as part of the standard FreeBSD core system. | ||||||
|  |       </descr> | ||||||
|  |       <tunable>net.inet.ip.accept_sourceroute</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr> | ||||||
|  |         This option turns off the logging of redirect packets because there is no limit and this could fill | ||||||
|  |         up your logs consuming your whole hard drive. | ||||||
|  |       </descr> | ||||||
|  |       <tunable>net.inet.icmp.log_redirect</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)</descr> | ||||||
|  |       <tunable>net.inet.tcp.drop_synfin</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable sending IPv6 redirects</descr> | ||||||
|  |       <tunable>net.inet6.ip6.redirect</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable privacy settings for IPv6 (RFC 4941)</descr> | ||||||
|  |       <tunable>net.inet6.ip6.use_tempaddr</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Prefer privacy addresses and use them over the normal addresses</descr> | ||||||
|  |       <tunable>net.inet6.ip6.prefer_tempaddr</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Generate SYN cookies for outbound SYN-ACK packets</descr> | ||||||
|  |       <tunable>net.inet.tcp.syncookies</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum incoming/outgoing TCP datagram size (receive)</descr> | ||||||
|  |       <tunable>net.inet.tcp.recvspace</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum incoming/outgoing TCP datagram size (send)</descr> | ||||||
|  |       <tunable>net.inet.tcp.sendspace</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Do not delay ACK to try and piggyback it onto a data packet</descr> | ||||||
|  |       <tunable>net.inet.tcp.delayed_ack</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum outgoing UDP datagram size</descr> | ||||||
|  |       <tunable>net.inet.udp.maxdgram</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Handling of non-IP packets which are not passed to pfil (see if_bridge(4))</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_onlyip</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set to 1 to additionally filter on the physical interface for locally destined packets</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_local_phys</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set to 0 to disable filtering on the incoming and outgoing member interfaces.</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_member</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set to 1 to enable filtering on the bridge interface</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_bridge</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Allow unprivileged access to tap(4) device nodes</descr> | ||||||
|  |       <tunable>net.link.tap.user_open</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())</descr> | ||||||
|  |       <tunable>kern.randompid</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Disable CTRL+ALT+Delete reboot from keyboard.</descr> | ||||||
|  |       <tunable>hw.syscons.kbd_reboot</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable TCP extended debugging</descr> | ||||||
|  |       <tunable>net.inet.tcp.log_debug</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set ICMP Limits</descr> | ||||||
|  |       <tunable>net.inet.icmp.icmplim</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>TCP Offload Engine</descr> | ||||||
|  |       <tunable>net.inet.tcp.tso</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>UDP Checksums</descr> | ||||||
|  |       <tunable>net.inet.udp.checksum</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum socket buffer size</descr> | ||||||
|  |       <tunable>kern.ipc.maxsockbuf</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Page Table Isolation (Meltdown mitigation, requires reboot.)</descr> | ||||||
|  |       <tunable>vm.pmap.pti</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Disable Indirect Branch Restricted Speculation (Spectre V2 mitigation)</descr> | ||||||
|  |       <tunable>hw.ibrs_disable</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Hide processes running as other groups</descr> | ||||||
|  |       <tunable>security.bsd.see_other_gids</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Hide processes running as other users</descr> | ||||||
|  |       <tunable>security.bsd.see_other_uids</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable/disable sending of ICMP redirects in response to IP packets for which a better, | ||||||
|  |         and for the sender directly reachable, route and next hop is known. | ||||||
|  |       </descr> | ||||||
|  |       <tunable>net.inet.ip.redirect</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum outgoing UDP datagram size</descr> | ||||||
|  |       <tunable>net.local.dgram.maxdgram</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |   </sysctl> | ||||||
|  |   <system> | ||||||
|  |     <optimization>normal</optimization> | ||||||
|  |     <hostname>OPNsense</hostname> | ||||||
|  |     <domain>localdomain</domain> | ||||||
|  |     <dnsallowoverride>1</dnsallowoverride> | ||||||
|  |     <group> | ||||||
|  |       <name>admins</name> | ||||||
|  |       <description>System Administrators</description> | ||||||
|  |       <scope>system</scope> | ||||||
|  |       <gid>1999</gid> | ||||||
|  |       <member>0</member> | ||||||
|  |       <priv>page-all</priv> | ||||||
|  |     </group> | ||||||
|  |     <user> | ||||||
|  |       <name>root</name> | ||||||
|  |       <descr>System Administrator</descr> | ||||||
|  |       <scope>system</scope> | ||||||
|  |       <groupname>admins</groupname> | ||||||
|  |       <password>$2y$10$YRVoF4SgskIsrXOvOQjGieB9XqHPRra9R7d80B3BZdbY/j21TwBfS</password> | ||||||
|  |       <uid>0</uid> | ||||||
|  |     </user> | ||||||
|  |     <nextuid>2000</nextuid> | ||||||
|  |     <nextgid>2000</nextgid> | ||||||
|  |     <timezone>Etc/UTC</timezone> | ||||||
|  |     <timeservers>0.opnsense.pool.ntp.org 1.opnsense.pool.ntp.org 2.opnsense.pool.ntp.org 3.opnsense.pool.ntp.org</timeservers> | ||||||
|  |     <webgui> | ||||||
|  |       <protocol>https</protocol> | ||||||
|  |       <ssl-certref>6734d6c82dc59</ssl-certref> | ||||||
|  |       <port/> | ||||||
|  |       <ssl-ciphers/> | ||||||
|  |       <interfaces/> | ||||||
|  |       <compression/> | ||||||
|  |     </webgui> | ||||||
|  |     <disablenatreflection>yes</disablenatreflection> | ||||||
|  |     <usevirtualterminal>1</usevirtualterminal> | ||||||
|  |     <disableconsolemenu>1</disableconsolemenu> | ||||||
|  |     <disablevlanhwfilter>1</disablevlanhwfilter> | ||||||
|  |     <disablechecksumoffloading>1</disablechecksumoffloading> | ||||||
|  |     <disablesegmentationoffloading>1</disablesegmentationoffloading> | ||||||
|  |     <disablelargereceiveoffloading>1</disablelargereceiveoffloading> | ||||||
|  |     <ipv6allow>1</ipv6allow> | ||||||
|  |     <powerd_ac_mode>hadp</powerd_ac_mode> | ||||||
|  |     <powerd_battery_mode>hadp</powerd_battery_mode> | ||||||
|  |     <powerd_normal_mode>hadp</powerd_normal_mode> | ||||||
|  |     <bogons> | ||||||
|  |       <interval>monthly</interval> | ||||||
|  |     </bogons> | ||||||
|  |     <pf_share_forward>1</pf_share_forward> | ||||||
|  |     <lb_use_sticky>1</lb_use_sticky> | ||||||
|  |     <ssh> | ||||||
|  |       <group>admins</group> | ||||||
|  |       <noauto>1</noauto> | ||||||
|  |       <interfaces/> | ||||||
|  |       <kex/> | ||||||
|  |       <ciphers/> | ||||||
|  |       <macs/> | ||||||
|  |       <keys/> | ||||||
|  |       <keysig/> | ||||||
|  |       <enabled>enabled</enabled> | ||||||
|  |       <passwordauth>1</passwordauth> | ||||||
|  |       <permitrootlogin>1</permitrootlogin> | ||||||
|  |     </ssh> | ||||||
|  |     <rrdbackup>-1</rrdbackup> | ||||||
|  |     <netflowbackup>-1</netflowbackup> | ||||||
|  |     <firmware version="1.0.1"> | ||||||
|  |       <mirror/> | ||||||
|  |       <flavour/> | ||||||
|  |       <plugins/> | ||||||
|  |       <type/> | ||||||
|  |       <subscription/> | ||||||
|  |       <reboot/> | ||||||
|  |     </firmware> | ||||||
|  |     <dnsserver>192.168.5.1</dnsserver> | ||||||
|  |     <language>en_US</language> | ||||||
|  |     <serialspeed>115200</serialspeed> | ||||||
|  |     <primaryconsole>video</primaryconsole> | ||||||
|  |     <secondaryconsole>serial</secondaryconsole> | ||||||
|  |   </system> | ||||||
|  |   <interfaces> | ||||||
|  |     <lan> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <if>le1</if> | ||||||
|  |       <ipaddr>10.100.8.1</ipaddr> | ||||||
|  |       <subnet>24</subnet> | ||||||
|  |       <ipaddrv6>track6</ipaddrv6> | ||||||
|  |       <subnetv6>64</subnetv6> | ||||||
|  |       <media/> | ||||||
|  |       <mediaopt/> | ||||||
|  |       <track6-interface>wan</track6-interface> | ||||||
|  |       <track6-prefix-id>0</track6-prefix-id> | ||||||
|  |     </lan> | ||||||
|  |     <lo0> | ||||||
|  |       <internal_dynamic>1</internal_dynamic> | ||||||
|  |       <descr>Loopback</descr> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <if>lo0</if> | ||||||
|  |       <ipaddr>127.0.0.1</ipaddr> | ||||||
|  |       <ipaddrv6>::1</ipaddrv6> | ||||||
|  |       <subnet>8</subnet> | ||||||
|  |       <subnetv6>128</subnetv6> | ||||||
|  |       <type>none</type> | ||||||
|  |       <virtual>1</virtual> | ||||||
|  |     </lo0> | ||||||
|  |     <wan> | ||||||
|  |       <if>le0</if> | ||||||
|  |       <descr/> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <spoofmac/> | ||||||
|  |       <ipaddr>dhcp</ipaddr> | ||||||
|  |       <dhcphostname/> | ||||||
|  |       <alias-address/> | ||||||
|  |       <alias-subnet>32</alias-subnet> | ||||||
|  |       <dhcprejectfrom/> | ||||||
|  |       <adv_dhcp_pt_timeout/> | ||||||
|  |       <adv_dhcp_pt_retry/> | ||||||
|  |       <adv_dhcp_pt_select_timeout/> | ||||||
|  |       <adv_dhcp_pt_reboot/> | ||||||
|  |       <adv_dhcp_pt_backoff_cutoff/> | ||||||
|  |       <adv_dhcp_pt_initial_interval/> | ||||||
|  |       <adv_dhcp_pt_values>SavedCfg</adv_dhcp_pt_values> | ||||||
|  |       <adv_dhcp_send_options/> | ||||||
|  |       <adv_dhcp_request_options/> | ||||||
|  |       <adv_dhcp_required_options/> | ||||||
|  |       <adv_dhcp_option_modifiers/> | ||||||
|  |       <adv_dhcp_config_advanced/> | ||||||
|  |       <adv_dhcp_config_file_override/> | ||||||
|  |       <adv_dhcp_config_file_override_path/> | ||||||
|  |     </wan> | ||||||
|  |   </interfaces> | ||||||
|  |   <dhcpd> | ||||||
|  |     <lan> | ||||||
|  |       <enable/> | ||||||
|  |       <range> | ||||||
|  |         <from>10.100.8.10</from> | ||||||
|  |         <to>10.100.8.245</to> | ||||||
|  |       </range> | ||||||
|  |       <staticmap> | ||||||
|  |         <mac>d8:5e:d3:e7:2c:8c</mac> | ||||||
|  |         <ipaddr>10.100.8.15</ipaddr> | ||||||
|  |         <hostname>rtx4090</hostname> | ||||||
|  |         <winsserver/> | ||||||
|  |         <dnsserver/> | ||||||
|  |         <ntpserver/> | ||||||
|  |       </staticmap> | ||||||
|  |     </lan> | ||||||
|  |   </dhcpd> | ||||||
|  |   <snmpd> | ||||||
|  |     <syslocation/> | ||||||
|  |     <syscontact/> | ||||||
|  |     <rocommunity>public</rocommunity> | ||||||
|  |   </snmpd> | ||||||
|  |   <nat> | ||||||
|  |     <outbound> | ||||||
|  |       <mode>automatic</mode> | ||||||
|  |     </outbound> | ||||||
|  |   </nat> | ||||||
|  |   <filter> | ||||||
|  |     <rule uuid="f79eded0-3c11-4f57-9aaa-55d4888589fa"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>tcp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <network>wanip</network> | ||||||
|  |         <port>80</port> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518072.7612</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518072.7612</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="4a5e7b65-0d7f-4452-8a29-2ec61a47ec19"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>tcp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <network>wanip</network> | ||||||
|  |         <port>443</port> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518084.0639</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518084.0639</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="0465308d-8605-466c-bcb4-95eeb989251a"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>tcp/udp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <any>1</any> | ||||||
|  |         <port>22</port> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518114.2801</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518114.2801</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="2df05591-13e7-4d91-a1b8-d25e338ada5f"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <descr>Allow ping</descr> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>icmp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <network>(self)</network> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518356.7559</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518311.7033</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="f2ee612c-c290-4445-8045-df82a86db0e5"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <descr>Default allow LAN to any rule</descr> | ||||||
|  |       <interface>lan</interface> | ||||||
|  |       <source> | ||||||
|  |         <network>lan</network> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <any/> | ||||||
|  |       </destination> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="b21f808a-6a4a-4cd6-9a83-1660cc8ea58b"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <ipprotocol>inet6</ipprotocol> | ||||||
|  |       <descr>Default allow LAN IPv6 to any rule</descr> | ||||||
|  |       <interface>lan</interface> | ||||||
|  |       <source> | ||||||
|  |         <network>lan</network> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <any/> | ||||||
|  |       </destination> | ||||||
|  |     </rule> | ||||||
|  |   </filter> | ||||||
|  |   <rrd> | ||||||
|  |     <enable/> | ||||||
|  |   </rrd> | ||||||
|  |   <ntpd> | ||||||
|  |     <prefer>0.opnsense.pool.ntp.org</prefer> | ||||||
|  |   </ntpd> | ||||||
|  |   <widgets> | ||||||
|  |     <sequence>system_information-container:00000000-col3:show,services_status-container:00000001-col4:show,gateways-container:00000002-col4:show,interface_list-container:00000003-col4:show</sequence> | ||||||
|  |     <column_count>2</column_count> | ||||||
|  |   </widgets> | ||||||
|  |   <revision> | ||||||
|  |     <username>root@192.168.5.204</username> | ||||||
|  |     <time>1731534516.7156</time> | ||||||
|  |     <description>/interfaces.php made changes</description> | ||||||
|  |   </revision> | ||||||
|  |   <OPNsense> | ||||||
|  |     <DHCRelay version="1.0.1"/> | ||||||
|  |     <wireguard> | ||||||
|  |       <client version="1.0.0"> | ||||||
|  |         <clients/> | ||||||
|  |       </client> | ||||||
|  |       <general version="0.0.1"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |       </general> | ||||||
|  |       <server version="1.0.0"> | ||||||
|  |         <servers/> | ||||||
|  |       </server> | ||||||
|  |     </wireguard> | ||||||
|  |     <IPsec version="1.0.1"> | ||||||
|  |       <general> | ||||||
|  |         <enabled/> | ||||||
|  |       </general> | ||||||
|  |       <keyPairs/> | ||||||
|  |       <preSharedKeys/> | ||||||
|  |     </IPsec> | ||||||
|  |     <Swanctl version="1.0.0"> | ||||||
|  |       <Connections/> | ||||||
|  |       <locals/> | ||||||
|  |       <remotes/> | ||||||
|  |       <children/> | ||||||
|  |       <Pools/> | ||||||
|  |       <VTIs/> | ||||||
|  |       <SPDs/> | ||||||
|  |     </Swanctl> | ||||||
|  |     <OpenVPNExport version="0.0.1"> | ||||||
|  |       <servers/> | ||||||
|  |     </OpenVPNExport> | ||||||
|  |     <OpenVPN version="1.0.0"> | ||||||
|  |       <Overwrites/> | ||||||
|  |       <Instances/> | ||||||
|  |       <StaticKeys/> | ||||||
|  |     </OpenVPN> | ||||||
|  |     <captiveportal version="1.0.2"> | ||||||
|  |       <zones/> | ||||||
|  |       <templates/> | ||||||
|  |     </captiveportal> | ||||||
|  |     <cron version="1.0.4"> | ||||||
|  |       <jobs/> | ||||||
|  |     </cron> | ||||||
|  |     <Firewall> | ||||||
|  |       <Lvtemplate version="0.0.1"> | ||||||
|  |         <templates/> | ||||||
|  |       </Lvtemplate> | ||||||
|  |       <Alias version="1.0.1"> | ||||||
|  |         <geoip> | ||||||
|  |           <url/> | ||||||
|  |         </geoip> | ||||||
|  |         <aliases/> | ||||||
|  |       </Alias> | ||||||
|  |       <Category version="1.0.0"> | ||||||
|  |         <categories/> | ||||||
|  |       </Category> | ||||||
|  |       <Filter version="1.0.4"> | ||||||
|  |         <rules/> | ||||||
|  |         <snatrules/> | ||||||
|  |         <npt/> | ||||||
|  |         <onetoone/> | ||||||
|  |       </Filter> | ||||||
|  |     </Firewall> | ||||||
|  |     <Netflow version="1.0.1"> | ||||||
|  |       <capture> | ||||||
|  |         <interfaces/> | ||||||
|  |         <egress_only/> | ||||||
|  |         <version>v9</version> | ||||||
|  |         <targets/> | ||||||
|  |       </capture> | ||||||
|  |       <collect> | ||||||
|  |         <enable>0</enable> | ||||||
|  |       </collect> | ||||||
|  |       <activeTimeout>1800</activeTimeout> | ||||||
|  |       <inactiveTimeout>15</inactiveTimeout> | ||||||
|  |     </Netflow> | ||||||
|  |     <IDS version="1.0.9"> | ||||||
|  |       <rules/> | ||||||
|  |       <policies/> | ||||||
|  |       <userDefinedRules/> | ||||||
|  |       <files/> | ||||||
|  |       <fileTags/> | ||||||
|  |       <general> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <ips>0</ips> | ||||||
|  |         <promisc>0</promisc> | ||||||
|  |         <interfaces>wan</interfaces> | ||||||
|  |         <homenet>192.168.0.0/16,10.0.0.0/8,172.16.0.0/12</homenet> | ||||||
|  |         <defaultPacketSize/> | ||||||
|  |         <UpdateCron/> | ||||||
|  |         <AlertLogrotate>W0D23</AlertLogrotate> | ||||||
|  |         <AlertSaveLogs>4</AlertSaveLogs> | ||||||
|  |         <MPMAlgo/> | ||||||
|  |         <detect> | ||||||
|  |           <Profile/> | ||||||
|  |           <toclient_groups/> | ||||||
|  |           <toserver_groups/> | ||||||
|  |         </detect> | ||||||
|  |         <syslog>0</syslog> | ||||||
|  |         <syslog_eve>0</syslog_eve> | ||||||
|  |         <LogPayload>0</LogPayload> | ||||||
|  |         <verbosity/> | ||||||
|  |       </general> | ||||||
|  |     </IDS> | ||||||
|  |     <Interfaces> | ||||||
|  |       <loopbacks version="1.0.0"/> | ||||||
|  |       <neighbors version="1.0.0"/> | ||||||
|  |       <vxlans version="1.0.2"/> | ||||||
|  |     </Interfaces> | ||||||
|  |     <Kea> | ||||||
|  |       <ctrl_agent version="0.0.1"> | ||||||
|  |         <general> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |           <http_host>127.0.0.1</http_host> | ||||||
|  |           <http_port>8000</http_port> | ||||||
|  |         </general> | ||||||
|  |       </ctrl_agent> | ||||||
|  |       <dhcp4 version="1.0.0"> | ||||||
|  |         <general> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |           <interfaces/> | ||||||
|  |           <valid_lifetime>4000</valid_lifetime> | ||||||
|  |           <fwrules>1</fwrules> | ||||||
|  |         </general> | ||||||
|  |         <ha> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |           <this_server_name/> | ||||||
|  |         </ha> | ||||||
|  |         <subnets/> | ||||||
|  |         <reservations/> | ||||||
|  |         <ha_peers/> | ||||||
|  |       </dhcp4> | ||||||
|  |     </Kea> | ||||||
|  |     <monit version="1.0.13"> | ||||||
|  |       <general> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <interval>120</interval> | ||||||
|  |         <startdelay>120</startdelay> | ||||||
|  |         <mailserver>127.0.0.1</mailserver> | ||||||
|  |         <port>25</port> | ||||||
|  |         <username/> | ||||||
|  |         <password/> | ||||||
|  |         <ssl>0</ssl> | ||||||
|  |         <sslversion>auto</sslversion> | ||||||
|  |         <sslverify>1</sslverify> | ||||||
|  |         <logfile/> | ||||||
|  |         <statefile/> | ||||||
|  |         <eventqueuePath/> | ||||||
|  |         <eventqueueSlots/> | ||||||
|  |         <httpdEnabled>0</httpdEnabled> | ||||||
|  |         <httpdUsername>root</httpdUsername> | ||||||
|  |         <httpdPassword/> | ||||||
|  |         <httpdPort>2812</httpdPort> | ||||||
|  |         <httpdAllow/> | ||||||
|  |         <mmonitUrl/> | ||||||
|  |         <mmonitTimeout>5</mmonitTimeout> | ||||||
|  |         <mmonitRegisterCredentials>1</mmonitRegisterCredentials> | ||||||
|  |       </general> | ||||||
|  |       <alert uuid="15f1e9ca-5dd5-4b20-b595-b6b4f82245d0"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <recipient>root@localhost.local</recipient> | ||||||
|  |         <noton>0</noton> | ||||||
|  |         <events/> | ||||||
|  |         <format/> | ||||||
|  |         <reminder/> | ||||||
|  |         <description/> | ||||||
|  |       </alert> | ||||||
|  |       <service uuid="c1e99556-91f5-4dbf-81d7-7915a3213de9"> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <name>$HOST</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>system</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path/> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>91b4e409-211b-49d5-9fa3-dc9054106646,cbe9cb72-e8c2-4740-990c-abcc486b0654,c0708923-88de-4178-abdd-819737440ce0,e887125d-c5d2-45e6-b40d-2c400d5449d1</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <service uuid="7513f341-7d21-4f11-903f-30d07b3aa41e"> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <name>RootFs</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>filesystem</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path>/</path> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>cc3684f2-701e-4de4-883d-803e08cf47b6</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <service uuid="f99ada79-ba1a-4ee1-81f1-ef570e8e5ea9"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <name>carp_status_change</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>custom</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path>/usr/local/opnsense/scripts/OPNsense/Monit/carp_status</path> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>f2d734cb-2a0e-4375-9460-11bdd5b20503</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <service uuid="dca8a81f-d389-4baa-b477-8b348194fd25"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <name>gateway_alert</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>custom</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path>/usr/local/opnsense/scripts/OPNsense/Monit/gateway_alert</path> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>865105a2-cbea-4a01-9979-c67818da9d99</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <test uuid="ea6b821c-4f30-455b-bd5b-23a6f0c20554"> | ||||||
|  |         <name>Ping</name> | ||||||
|  |         <type>NetworkPing</type> | ||||||
|  |         <condition>failed ping</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="16186b38-0e13-4cc3-ad18-ccc3fcc91837"> | ||||||
|  |         <name>NetworkLink</name> | ||||||
|  |         <type>NetworkInterface</type> | ||||||
|  |         <condition>failed link</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="69117d4d-8c41-4712-97c0-87b4fa7c9837"> | ||||||
|  |         <name>NetworkSaturation</name> | ||||||
|  |         <type>NetworkInterface</type> | ||||||
|  |         <condition>saturation is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="91b4e409-211b-49d5-9fa3-dc9054106646"> | ||||||
|  |         <name>MemoryUsage</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>memory usage is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="cbe9cb72-e8c2-4740-990c-abcc486b0654"> | ||||||
|  |         <name>CPUUsage</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>cpu usage is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="c0708923-88de-4178-abdd-819737440ce0"> | ||||||
|  |         <name>LoadAvg1</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>loadavg (1min) is greater than 4</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="e887125d-c5d2-45e6-b40d-2c400d5449d1"> | ||||||
|  |         <name>LoadAvg5</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>loadavg (5min) is greater than 3</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="c34aab30-9194-4667-b516-004b9c90c1c0"> | ||||||
|  |         <name>LoadAvg15</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>loadavg (15min) is greater than 2</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="cc3684f2-701e-4de4-883d-803e08cf47b6"> | ||||||
|  |         <name>SpaceUsage</name> | ||||||
|  |         <type>SpaceUsage</type> | ||||||
|  |         <condition>space usage is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="f2d734cb-2a0e-4375-9460-11bdd5b20503"> | ||||||
|  |         <name>ChangedStatus</name> | ||||||
|  |         <type>ProgramStatus</type> | ||||||
|  |         <condition>changed status</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="865105a2-cbea-4a01-9979-c67818da9d99"> | ||||||
|  |         <name>NonZeroStatus</name> | ||||||
|  |         <type>ProgramStatus</type> | ||||||
|  |         <condition>status != 0</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |     </monit> | ||||||
|  |     <Gateways version="1.0.0"> | ||||||
|  |       <gateway_item uuid="a6ea102d-68bb-430f-af8b-269d52498fe1"> | ||||||
|  |         <disabled>0</disabled> | ||||||
|  |         <name>WAN_GW</name> | ||||||
|  |         <descr>Interface WAN Gateway</descr> | ||||||
|  |         <interface>wan</interface> | ||||||
|  |         <ipprotocol>inet</ipprotocol> | ||||||
|  |         <gateway>172.17.0.1</gateway> | ||||||
|  |         <defaultgw>1</defaultgw> | ||||||
|  |         <fargw>0</fargw> | ||||||
|  |         <monitor_disable>1</monitor_disable> | ||||||
|  |         <monitor_noroute/> | ||||||
|  |         <monitor/> | ||||||
|  |         <force_down/> | ||||||
|  |         <priority>255</priority> | ||||||
|  |         <weight>1</weight> | ||||||
|  |         <latencylow/> | ||||||
|  |         <latencyhigh/> | ||||||
|  |         <losslow/> | ||||||
|  |         <losshigh/> | ||||||
|  |         <interval/> | ||||||
|  |         <time_period/> | ||||||
|  |         <loss_interval/> | ||||||
|  |         <data_length/> | ||||||
|  |       </gateway_item> | ||||||
|  |     </Gateways> | ||||||
|  |     <Syslog version="1.0.2"> | ||||||
|  |       <general> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <loglocal>1</loglocal> | ||||||
|  |         <maxpreserve>31</maxpreserve> | ||||||
|  |         <maxfilesize/> | ||||||
|  |       </general> | ||||||
|  |       <destinations/> | ||||||
|  |     </Syslog> | ||||||
|  |     <TrafficShaper version="1.0.3"> | ||||||
|  |       <pipes/> | ||||||
|  |       <queues/> | ||||||
|  |       <rules/> | ||||||
|  |     </TrafficShaper> | ||||||
|  |     <unboundplus version="1.0.9"> | ||||||
|  |       <general> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <port>53</port> | ||||||
|  |         <stats/> | ||||||
|  |         <active_interface/> | ||||||
|  |         <dns64/> | ||||||
|  |         <dns64prefix/> | ||||||
|  |         <noarecords/> | ||||||
|  |         <regdhcp/> | ||||||
|  |         <regdhcpdomain/> | ||||||
|  |         <regdhcpstatic/> | ||||||
|  |         <noreglladdr6/> | ||||||
|  |         <noregrecords/> | ||||||
|  |         <txtsupport/> | ||||||
|  |         <cacheflush/> | ||||||
|  |         <local_zone_type>transparent</local_zone_type> | ||||||
|  |         <outgoing_interface/> | ||||||
|  |         <enable_wpad/> | ||||||
|  |       </general> | ||||||
|  |       <advanced> | ||||||
|  |         <hideidentity/> | ||||||
|  |         <hideversion/> | ||||||
|  |         <prefetch/> | ||||||
|  |         <prefetchkey/> | ||||||
|  |         <aggressivensec>1</aggressivensec> | ||||||
|  |         <serveexpired/> | ||||||
|  |         <serveexpiredreplyttl/> | ||||||
|  |         <serveexpiredttl/> | ||||||
|  |         <serveexpiredttlreset/> | ||||||
|  |         <serveexpiredclienttimeout/> | ||||||
|  |         <qnameminstrict/> | ||||||
|  |         <extendedstatistics/> | ||||||
|  |         <logqueries/> | ||||||
|  |         <logreplies/> | ||||||
|  |         <logtagqueryreply/> | ||||||
|  |         <logservfail/> | ||||||
|  |         <loglocalactions/> | ||||||
|  |         <logverbosity>1</logverbosity> | ||||||
|  |         <valloglevel>0</valloglevel> | ||||||
|  |         <privatedomain/> | ||||||
|  |         <privateaddress>0.0.0.0/8,10.0.0.0/8,100.64.0.0/10,169.254.0.0/16,172.16.0.0/12,192.0.2.0/24,192.168.0.0/16,198.18.0.0/15,198.51.100.0/24,203.0.113.0/24,233.252.0.0/24,::1/128,2001:db8::/32,fc00::/8,fd00::/8,fe80::/10</privateaddress> | ||||||
|  |         <insecuredomain/> | ||||||
|  |         <msgcachesize/> | ||||||
|  |         <rrsetcachesize/> | ||||||
|  |         <outgoingnumtcp/> | ||||||
|  |         <incomingnumtcp/> | ||||||
|  |         <numqueriesperthread/> | ||||||
|  |         <outgoingrange/> | ||||||
|  |         <jostletimeout/> | ||||||
|  |         <cachemaxttl/> | ||||||
|  |         <cachemaxnegativettl/> | ||||||
|  |         <cacheminttl/> | ||||||
|  |         <infrahostttl/> | ||||||
|  |         <infrakeepprobing/> | ||||||
|  |         <infracachenumhosts/> | ||||||
|  |         <unwantedreplythreshold/> | ||||||
|  |       </advanced> | ||||||
|  |       <acls> | ||||||
|  |         <default_action>allow</default_action> | ||||||
|  |       </acls> | ||||||
|  |       <dnsbl> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <safesearch/> | ||||||
|  |         <type/> | ||||||
|  |         <lists/> | ||||||
|  |         <whitelists/> | ||||||
|  |         <blocklists/> | ||||||
|  |         <wildcards/> | ||||||
|  |         <address/> | ||||||
|  |         <nxdomain/> | ||||||
|  |       </dnsbl> | ||||||
|  |       <forwarding> | ||||||
|  |         <enabled/> | ||||||
|  |       </forwarding> | ||||||
|  |       <dots/> | ||||||
|  |       <hosts/> | ||||||
|  |       <aliases/> | ||||||
|  |       <domains/> | ||||||
|  |     </unboundplus> | ||||||
|  |   </OPNsense> | ||||||
|  |   <hasync version="1.0.0"> | ||||||
|  |     <disablepreempt>0</disablepreempt> | ||||||
|  |     <disconnectppps>0</disconnectppps> | ||||||
|  |     <pfsyncenabled>0</pfsyncenabled> | ||||||
|  |     <pfsyncinterface>lan</pfsyncinterface> | ||||||
|  |     <pfsyncpeerip/> | ||||||
|  |     <pfsyncversion>1400</pfsyncversion> | ||||||
|  |     <synchronizetoip/> | ||||||
|  |     <username/> | ||||||
|  |     <password/> | ||||||
|  |     <syncitems/> | ||||||
|  |   </hasync> | ||||||
|  |   <openvpn/> | ||||||
|  |   <ifgroups version="1.0.0"/> | ||||||
|  |   <gifs version="1.0.0"> | ||||||
|  |     <gif/> | ||||||
|  |   </gifs> | ||||||
|  |   <gres version="1.0.0"> | ||||||
|  |     <gre/> | ||||||
|  |   </gres> | ||||||
|  |   <laggs version="1.0.0"> | ||||||
|  |     <lagg/> | ||||||
|  |   </laggs> | ||||||
|  |   <virtualip version="1.0.0"> | ||||||
|  |     <vip/> | ||||||
|  |   </virtualip> | ||||||
|  |   <vlans version="1.0.0"> | ||||||
|  |     <vlan/> | ||||||
|  |   </vlans> | ||||||
|  |   <staticroutes version="1.0.0"> | ||||||
|  |     <route/> | ||||||
|  |   </staticroutes> | ||||||
|  |   <bridges> | ||||||
|  |     <bridged/> | ||||||
|  |   </bridges> | ||||||
|  |   <ppps> | ||||||
|  |     <ppp/> | ||||||
|  |   </ppps> | ||||||
|  |   <wireless> | ||||||
|  |     <clone/> | ||||||
|  |   </wireless> | ||||||
|  |   <ca/> | ||||||
|  |   <dhcpdv6/> | ||||||
|  |   <cert uuid="547102e9-23ba-48b8-8af8-64be61049e96"> | ||||||
|  |     <refid>6734d13fa9e4a</refid> | ||||||
|  |     <descr>Web GUI TLS certificate</descr> | ||||||
|  |     <caref/> | ||||||
|  |     <crt>LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUhIakNDQlFhZ0F3SUJBZ0lVSUhVRkpwc253VGtzYWRrZmRDNUp1SDhqWnZNd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZa3hIVEFiQmdOVkJBTU1GRTlRVG5ObGJuTmxMbXh2WTJGc1pHOXRZV2x1TVFzd0NRWURWUVFHRXdKTwpUREVWTUJNR0ExVUVDQXdNV25WcFpDMUliMnhzWVc1a01SVXdFd1lEVlFRSERBeE5hV1JrWld4b1lYSnVhWE14CkxUQXJCZ05WQkFvTUpFOVFUbk5sYm5ObElITmxiR1l0YzJsbmJtVmtJSGRsWWlCalpYSjBhV1pwWTJGMFpUQWUKRncweU5ERXhNVE14TmpFNE1EbGFGdzB5TlRFeU1UVXhOakU0TURsYU1JR0pNUjB3R3dZRFZRUUREQlJQVUU1egpaVzV6WlM1c2IyTmhiR1J2YldGcGJqRUxNQWtHQTFVRUJoTUNUa3d4RlRBVEJnTlZCQWdNREZwMWFXUXRTRzlzCmJHRnVaREVWTUJNR0ExVUVCd3dNVFdsa1pHVnNhR0Z5Ym1sek1TMHdLd1lEVlFRS0RDUlBVRTV6Wlc1elpTQnoKWld4bUxYTnBaMjVsWkNCM1pXSWdZMlZ5ZEdsbWFXTmhkR1V3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQwpEd0F3Z2dJS0FvSUNBUURKU1FlZ1RYckp5dDVWYmk0Rk9IeHJrOXhxQ21FRU54V2pINVVwNDBFK3hjUzZQU1NyCkNEclc3ZDlYcVJkOEpEZENtdGtLRGlMYWNaUzJMUm1abnd6VnRzZGtBR2pOYm5OM1hSNmlFajdGL0JnbVBlcDEKU2pJWnBTZzNkOS9YeHFPQTNZQllzTS9uUk9vWHlmTHcycFJOLzhHVjN3MHoxbVFZUitMZWI3UTFuc1c3dTJ5NworVHc5STZGU0J4bkdaR3RyUFl5NkVBb0NMdm1GQnFCYWxkWTQ2ejdlWjlIRkZXaE8ybWpaUzVPdTE3ZVozVHBxCnBRTVB1T2JxV3FyaE0xdjVjdmJodU5kREhNZ3ZVVFVnQ0RNK2FkS3dIc0dNNGw5ZGtOQTgxdGlJcXpzN1BqcjEKUm0wMlVuUXRneW8zY3hPRXVsYk9nU0hsdGhTMmtUMXE2UmhyemYvRGRJSEhta1RROGtwWVloWGc0VmpMQVdpSQpQbm9ncnZsRUlWMERhQ3ZEMjZiRkRDbVkxc29FbDV1NGtYanJScDRXK29NUVRHeG80NzFMQnNBMlh1Si82ZFJBCkJMVzh4dXBFODhEYmlrWW51NVdQaUp6ZXh4UVIyNU1FQVd6TCtKK0lubFExbmpMVWwyN3R0c1VQQ1VjL3c0NXoKcHBERHYwZnU0Nnp1S3EzY0VWRitiREsrQWdlT0Q2SXNzUjVRRTdFNVdkWjYrNWl6ZHB4eWdUeGh0L1k1RlBkSApHQjlCbDFrejR4bHRhczlvbmZrSDFkVHk3dzFNck43Z1l5WjgvS0pMWW9EY2NBOVFuNGt6bGtPeFVUMENuS1ExCmtWNk90aFRsVFgzK2duaUpJK3RXWUQ5bTRldXNzYWN1anpyWDl5TTNZcEloMnZqODJ0NHpPNjIrNFFJREFRQUIKbzRJQmVqQ0NBWFl3Q1FZRFZSMFRCQUl3QURBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQmtBd05BWUpZSVpJQVliNApRZ0VOQkNjV0pVOVFUbk5sYm5ObElFZGxibVZ5WVhSbFpDQlRaWEoyWlhJZ1EyVnlkR2xtYVdOaGRHVXdIUVlEClZSME9CQllFRkJRZytucWI5QW9HSWtoTUxhNHFzWGRvY0JGcE1JR3pCZ05WSFNNRWdhc3dnYWloZ1kra2dZd3cKZ1lreEhUQWJCZ05WQkFNTUZFOVFUbk5sYm5ObExteHZZMkZzWkc5dFlXbHVNUXN3Q1FZRFZRUUdFd0pPVERFVgpNQk1HQTFVRUNBd01XblZwWkMxSWIyeHNZVzVrTVJVd0V3WURWUVFIREF4TmFXUmtaV3hvWVhKdWFYTXhMVEFyCkJnTlZCQW9NSkU5UVRuTmxibk5sSUhObGJHWXRjMmxuYm1Wa0lIZGxZaUJqWlhKMGFXWnBZMkYwWllJVUlIVUYKSnBzbndUa3NhZGtmZEM1SnVIOGpadk13SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQ0FJQwpNQXNHQTFVZER3UUVBd0lGb0RBZkJnTlZIUkVFR0RBV2doUlBVRTV6Wlc1elpTNXNiMk5oYkdSdmJXRnBiakFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQUZqNlQ1MmRIUklVMHJuZDE0d2dob2tjUkdrK0hIQloyTGlDRHpUeUwKNHdCeTJ1ZXJXQWdvYUZzeUlNQzhwWTBhWlc4TFlSd1BtRVB0OXlUS09ZZzF0NWtOUnk2RkF5akszeis5TGZTQwoxRlFpb0pma3FHRnhoc1IxV1R5RjBGNmJmM2tZRDZ4OWw1dEdqMXF3SndrekZWZWcvZGNtUVhvRTBmUDRqSFFvCmgxWXdiZ3pTa084TzRLUVhuWXVRM3g0bWdoZnBvR0hQM2xINlcybDJlWHpqSzllRjJtUG1ZS0p1M3JpSnkvL3gKRzhQWXBYNlNTN3RoVnNNeHF3cGJHbURXQXRuSnNrSmVsNDI1WUdOYlZ4YTNPOHE3RWxLNGFoNXpmai8wRnVwTgo3SnlqMWQyZjZFck14WlFnUi9EdmlUVnhISytRY1lBRXBqU2ZmZzBrRStpS1BlN0VYTVk1VU1aZUFTK1ZteG1LCjBPOWxaQXNpWUlEMzkwVjNTaDZxYjhoL2xMZ0V2NCtSNUw1VEpFaldYc0dQSUpGaHJNSFJWR1lhV3JIYWx3eHYKNjE5NFlpSXBEaUlHSVVSWGN1U3dNcndIQzN0bms2QVo2OW5CczVXT1JYM0NxOVhRRnVrVlA5eUMxQnRuSmFwbQpubUMzK3NtTTErRjkxUXlkVXJtbUxPNUVwUmtTMitBcmRTSklUR1NRNWt4L3VLNjhzV0QzVVdNNVRibUxrcWdOCkt6djZjemVCbzJiVExDT0JKUWJ4STFCckRPTUFMSDlCdXdUamVXdUVtWE9TWE1lTDFsejdhL2JZKzJxa1BSOVAKTE5IekE2QXZlVmxucDNaeFdqMjZFK3dwYnU5cHBaY0QzRGVHRnRnZzVJbUJ2ZDNWbjJ6UVc4a1ZMT1ZBdllSawptdWc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K</crt> | ||||||
|  |     <csr/> | ||||||
|  |     <prv>LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpSQUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1M0d2dna3FBZ0VBQW9JQ0FRREpTUWVnVFhySnl0NVYKYmk0Rk9IeHJrOXhxQ21FRU54V2pINVVwNDBFK3hjUzZQU1NyQ0RyVzdkOVhxUmQ4SkRkQ210a0tEaUxhY1pTMgpMUm1abnd6VnRzZGtBR2pOYm5OM1hSNmlFajdGL0JnbVBlcDFTaklacFNnM2Q5L1h4cU9BM1lCWXNNL25ST29YCnlmTHcycFJOLzhHVjN3MHoxbVFZUitMZWI3UTFuc1c3dTJ5NytUdzlJNkZTQnhuR1pHdHJQWXk2RUFvQ0x2bUYKQnFCYWxkWTQ2ejdlWjlIRkZXaE8ybWpaUzVPdTE3ZVozVHBxcFFNUHVPYnFXcXJoTTF2NWN2Ymh1TmRESE1ndgpVVFVnQ0RNK2FkS3dIc0dNNGw5ZGtOQTgxdGlJcXpzN1BqcjFSbTAyVW5RdGd5bzNjeE9FdWxiT2dTSGx0aFMyCmtUMXE2UmhyemYvRGRJSEhta1RROGtwWVloWGc0VmpMQVdpSVBub2dydmxFSVYwRGFDdkQyNmJGRENtWTFzb0UKbDV1NGtYanJScDRXK29NUVRHeG80NzFMQnNBMlh1Si82ZFJBQkxXOHh1cEU4OERiaWtZbnU1V1BpSnpleHhRUgoyNU1FQVd6TCtKK0lubFExbmpMVWwyN3R0c1VQQ1VjL3c0NXpwcEREdjBmdTQ2enVLcTNjRVZGK2JESytBZ2VPCkQ2SXNzUjVRRTdFNVdkWjYrNWl6ZHB4eWdUeGh0L1k1RlBkSEdCOUJsMWt6NHhsdGFzOW9uZmtIMWRUeTd3MU0Kck43Z1l5WjgvS0pMWW9EY2NBOVFuNGt6bGtPeFVUMENuS1Exa1Y2T3RoVGxUWDMrZ25pSkkrdFdZRDltNGV1cwpzYWN1anpyWDl5TTNZcEloMnZqODJ0NHpPNjIrNFFJREFRQUJBb0lDQUNPNnZpc1BIY3pzb1NjK2dkWkU1dGNNCnZkc240UDFIenVRd0VzRUcrVG1zanVWMVBZbExrbkE4OU1DQmdDejEyOFpMcU51ZlUwSDkxK1Uzbjd2MGJ1bVAKd3BpR2R4UUNOMlpZaGZ2RWE5YW1qMTNZYjBJbks3b0FKbUdrT254NW91UFl6YlBRblBNRE9WK0VKa2JwTWRxZgptOHdmOWg2OXYzSk03bUZJS0UrOVVZR252UjhuMkhETTNwR3FONEhQS1A4MkE0RXlvQ2d2a1BTelRxc052bU5ICnBOY0RURW5rNlNsWUhUVDNOSzJjVnBldUhMUzUrazlqNWI5elhUSlE5TkpVZlN6bnEvUmFpMUZVNDY1K0xpUjEKMGVPWDdnajFWUExOcGgwcWtQQy9ubW0vZStVMmZXUGZZb2FDcWkrQ0VwU2twQXlQZ1FZZTJsSG0rYVU4MzZ2UQpuaHZuL0p5ZHJDL1NyTUFZaXpOZFYyZjlHTkNwcE1SbUZyOS9saVJiNEFpSzRLSDRETGdSRUxHaDJLNzJuOFRLCkxUSVhIV3RacisyMWU4c0Mxbm5MSENnK21wMHBvSWJsbEtoYk9VTmVxR09yWm95NFBXdDZMQndFYzN0MG1wVEMKODhiSUpqMzFCQngzTGE1SUE5b0FNRi9lbHJYdFhhVnl4bm5yTHdjYzFNVWpCV20rZDVqbC9WOEdIcEJRd3pXYwpPNWdNSXlQNUIvdzBacUcyZjV1akZkOHo4dElmcEFRRTJSbDNxRUFYNU1NY1JQaFlTNDJqTWl4czc3TmtOVldQCkpqUVoxVDVXQTVKOUxEL2FKRkplQ2MvbjhpNldOQ3FzdEQ5OVNPTCsrTTBFQTlka2lLNWtOcXFZeXZuRG9SZVcKSW84eXhvVnpObURsWjBkSU9UUzlBb0lCQVFEb2tvMWxPS05FNlBWWmRRU3lmS0JOTEZNcEl1V1VVZmp0ODU4awpJTTB0TnNyS0d2N3NmYkt0dlMvOWgwMGluU2FyWTJ4amVETG91WEI5VzdKY1B1NjRoNHYwek1lbXRhdDRyTUJnClA5bkQ3MW00dERqS2ZrZDAza2tUbk4ySTBxYkwzeFVoTjNEQlJZTU9veDFMa2M4MFFFMHhSUEM1YmRJaXcwemEKTWdtK1dOZVY1VEZoSkpQZ2dVRVo5U1A2aWV1VEY0OW9wRGNWdGUwQ0I0WnFUaTRWb3YvZFVDWGpNK0djRnNWdgpPWTZYTE9KTmRldHdnUVNkd1hlSzB1WlBpWnVKTGlsTEg4OFVKYWNoQThDZW1SclMxRUtxWElwK2dkQWV4MnhVCmY5amRMMGF2SlJEY0xqWlhETXBvWlJpc0JoWVArZzY3VHZza3FscDh4M2p2STlWVkFvSUJBUURkajZrdWNLM0MKYXprMzlqYllvM3RFZ0R5L2VGNnBjWFlpK21Ba1ZNRk9vSWJ5cmNyN3BqSnRMNFMyMEFDRmpBUGFQT042dWVVWQpQQm92dC9QODB1V1c5cGZCK29mRmdadzRqc3hLWFY4eEJmOVdLWVZndFBsOHhIL1RJcERTMjhVTlowNDlhUW4vCjlCRzNac0lyenk3RzFLRTZPLzBMMnVmMnFyaUxxRFQyV3dsdFVsbWs2Ym5NeThkR0sra1JLcFhvSm1RTlNHRHoKOXd4blU2ZmZ1NDdDLzRYMHRIVk1MVFVneFh4djdqN3BpSzI4dzBuZ1N5S3ozV0IzWTJwaFVsZEJIdEprQko1RQpoRm8zMXJCVDU5enhkb2crYXh1bkh4S3EySGFHRkt0ZUZ6RGpkTTFpQzE3bWNtWXBzR2tuenA0cjRjZm5FYTFSCko4Wmo5ZVFQaEVOZEFvSUJBUUN3d2hsbXNkb2MySFVJVFZDSm13QjJSdGJaYitWT2lkS0lmdDBYcHpwcFA3aDIKVEhndEl3ZDIxayt2LzNJWGVaclhMWlJHTVNkNEN1QTgxa0ZEckt6Z1lGeDFiR0hkQ1R2T1ZuVkxjWnUvTjUxWQpMTmp3eFhMbmxyMnhnMG8zMytuWERyQlBjNFJsejcvZ2t3WUQxa2pGckkwK2dlZjI5a2w4RkRUSHJMb05DaGFuCm5PNmZweDRneGZ2Rmo3T05pZDhhQnhEK2RiaEw3dDIzNmlJMWp6K2xRQ0g0Z1I2YWhHYldxOVBZU2NWZWprVmMKbTkrWnZPVFdSU0RteUkwMExDQ2k3UXVEUmlTcmFrYVFaL3F3VHlxOHk0ZnpWS3dKby8yYU52VFZiK2xSaWNuTgorWHpMNnU5dno0L1NNZXZEYWtqQVVjdDZmbmVQa1UxK2dsZ2VZSHlWQW9JQkFRRFJtYW0wVEZhbFdXaHMvNWtOClEwTkhINFhZb1JmMGRta0xXQStCNzBoY2lOS0JYRlp0ME9GZGw1bVdsSm9adk1hY1BBUDd3MGJ1c1ZVWWxZN1YKTy9LRTZVM1I3WjlxQWw1Mnh1aU81Vnc3ZFhBRDVBM1EyZ1EzdTNFdG5VS2lwOVA0QlNYb1JLbDRJVDV0WVdJSgpyZHVUciszQ3VLT0FCcHh4Snpxa3JBRkdtZ01HRCtUTWRXd1hTU1NBeHVPYklNMW1MSU4wYVdlSEJNMFFKdnptClZIb1BFVXA1b0FwamdWVUVacTk4K0VjK0NOWkxmL2d3bndQNllsQnpRWEtQRlNXRWJwTWNtWjNjTmRWZmc5T1YKM1FDUTBkQzhNL21hRlhSRWVibE95TmtCanpEcHpVTExJUFNyVDhoRVlpWm95VGVyVGRJZVVBUEZoYnBTTUhtTApFRlhsQW9JQkFRQ0VUdVJQRHZvMC9tdDhyTzhLNENsamtuU0gxZ1FBSjFha3U3UXg3NUJUTDB6OWRNY2lMK1JLCng1R1lFTW1wcUtNb2FPbWc0WFVRMVRlQ2Vic1R0NjMyWXp6cmNCU0d1RzVnN1o0UUVublUzRXU5QklIMUVSL2gKSEk0NWowU0xNRUpObkNiTkpnRVNRRUFCbzN3cHhrRTdiRGlNdTVPOXVqMlFRVTlTTm94QkFmbVFXRDJJaU1BRQpWYzV3QTNZajBMdElSYkJmdzNBTE9uNlRSc2xucy9JMnd2Z1RCQW9sU3NZbEtEK0NRY3hDZldlNmZwU21aYmlCClBGUE9DY1ZQTXhGeXBhZWFJMkRXNWRPNFNoNGQ0ZlZma2F3ck9LN1N2QnFZb0Y5L2VndThzQS9ZdklaRVltQUQKd0ZIOGs1QjJ4WXdiNkVmNmFFQ29ZTitsNWtlWmhNWTgKLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=</prv> | ||||||
|  |   </cert> | ||||||
|  |   <cert uuid="cad18e13-92c5-48b6-9b44-ad2e5dcc799e"> | ||||||
|  |     <refid>6734d6c82dc59</refid> | ||||||
|  |     <descr>Web GUI TLS certificate</descr> | ||||||
|  |     <caref/> | ||||||
|  |     <crt>LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUhIakNDQlFhZ0F3SUJBZ0lVZkNETXpFclQ4dlVoenJaTVJta3JiT3dnSUdNd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZa3hIVEFiQmdOVkJBTU1GRTlRVG5ObGJuTmxMbXh2WTJGc1pHOXRZV2x1TVFzd0NRWURWUVFHRXdKTwpUREVWTUJNR0ExVUVDQXdNV25WcFpDMUliMnhzWVc1a01SVXdFd1lEVlFRSERBeE5hV1JrWld4b1lYSnVhWE14CkxUQXJCZ05WQkFvTUpFOVFUbk5sYm5ObElITmxiR1l0YzJsbmJtVmtJSGRsWWlCalpYSjBhV1pwWTJGMFpUQWUKRncweU5ERXhNVE14TmpReE5EVmFGdzB5TlRFeU1UVXhOalF4TkRWYU1JR0pNUjB3R3dZRFZRUUREQlJQVUU1egpaVzV6WlM1c2IyTmhiR1J2YldGcGJqRUxNQWtHQTFVRUJoTUNUa3d4RlRBVEJnTlZCQWdNREZwMWFXUXRTRzlzCmJHRnVaREVWTUJNR0ExVUVCd3dNVFdsa1pHVnNhR0Z5Ym1sek1TMHdLd1lEVlFRS0RDUlBVRTV6Wlc1elpTQnoKWld4bUxYTnBaMjVsWkNCM1pXSWdZMlZ5ZEdsbWFXTmhkR1V3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQwpEd0F3Z2dJS0FvSUNBUURMc0xEbjRta1R4RXJYdHdqTXoxencyeHJhNTZ5bTYrYzlRNEM3UjMyMzVuWjVPM1ovCnczL2tNV2Y5L25GbGpnMkFXWERJSmNXZjk0NFJFblFMdmlha2NNTHR1Qm1KTVRYZnVQWnhsSWE4Wlc0S0ZuT20KVFM0WXFCVzhHQkpJd0xtQ2kxb2RoWXhmUEQ2TFdEZnZYMm1tWEIrUFNxL0l4WEhOSjdxZVB4YzVuSzUyMW1uNQpuQ0FtZFBDY2JmdmdXdUM2TnhWbXpkeXpta1QvNnVqRUJFYTZ6RkQyUUtDN1N6a2ptZUNpd2VDQjc5NjZqeEV5ClFrVlFqYlQ5MFlyeENvdE8rbTJIQU5QZHNjT3FvNldXMEhmSlNpa2k4K2NDWHlzbGRFSzFZbmxueTNFWlVqTEwKVmplRS9XQVU0Q1BZUmhYVFVGVTIxZFV2azNvYUVpeldVdmhKc1FHYnh2aFRUQlN3aVliOUQ3Ymx1MWl4UzJxNwo3Mzk5VWdRN3FTNUFhOElHbXA4NUNoUUlBWUVjSTd6RGVWTGtrOGpkWkFCaTdGbDl0M05OQTU3WlVZVzErWE45CitUZ3ljMTlTbGoxVW1RdkRvekxCQzk5TVJpLzREQTIxRFpIODY3ekFYenFqZWUrckorQkZvNzVEQjlqd2tMTmUKUGVpemxRenRIWmpSU0tnaWdSNU9KSmtSVHIvNjduaTBtbzVITGNkU3hBSDFmdXdXS0hWS2RHQlQrNjhhYkUrZwprUSsrVDhMenVhK1FtakxOUVFqMVJCSFYzSzVQL3dvbXJKZG02d1ZLbm85RXlNait4azFwS05wb0F4UnR1WllmCkNEVVVQWjR1cEJtbzBLN3dGNHdtV3VXYSttVndlb1ZTcDRXMEhOWVJGU1pyWWxrc1AzdWViSHcva1FJREFRQUIKbzRJQmVqQ0NBWFl3Q1FZRFZSMFRCQUl3QURBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQmtBd05BWUpZSVpJQVliNApRZ0VOQkNjV0pVOVFUbk5sYm5ObElFZGxibVZ5WVhSbFpDQlRaWEoyWlhJZ1EyVnlkR2xtYVdOaGRHVXdIUVlEClZSME9CQllFRktidDd0QkRKN1daV1lMblQ5cEhTMklPdTg1TU1JR3pCZ05WSFNNRWdhc3dnYWloZ1kra2dZd3cKZ1lreEhUQWJCZ05WQkFNTUZFOVFUbk5sYm5ObExteHZZMkZzWkc5dFlXbHVNUXN3Q1FZRFZRUUdFd0pPVERFVgpNQk1HQTFVRUNBd01XblZwWkMxSWIyeHNZVzVrTVJVd0V3WURWUVFIREF4TmFXUmtaV3hvWVhKdWFYTXhMVEFyCkJnTlZCQW9NSkU5UVRuTmxibk5sSUhObGJHWXRjMmxuYm1Wa0lIZGxZaUJqWlhKMGFXWnBZMkYwWllJVWZDRE0KekVyVDh2VWh6clpNUm1rcmJPd2dJR013SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQ0FJQwpNQXNHQTFVZER3UUVBd0lGb0RBZkJnTlZIUkVFR0RBV2doUlBVRTV6Wlc1elpTNXNiMk5oYkdSdmJXRnBiakFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQWNQbmllQ29FSmRjV25CVHdqRmE3bjZqTFMrZ1pUYUk2ZjAzWktQMFYKQ0pSaDUxWTNwb2dpcnJYcVNHQ1VGTVNHbGpsQ21mU2VhdW9GWFYwanZLejhnMGZ1NU9kYlhjd2FrZFBZSXgydQpVT0dMbllTaEdCNlpoMmhpWWdSVGFpemJoTVliQitzQkV4QU1CdHZRZElSZ3dBWkRNWE9jY0MwZnJaMFhRRlRFCnQ3by82VGYvZEprdnB0cmRYWW1INnFUWlA2MGxyTnlabVloTjc1NEluOFZLRVVSRWNZamg1ejlJanA1NTE1cU0Kb0VrSGNKbTBDNkh2VStETG1ybFpFYkV4bnVOMFQzWTBNZ0hiVFVhU2Y1L2FKVmlIM0dOMnMzbG1ZM0VXTS9Vcwo3azFyc2JTa2orZzJvQXlTcjU0Nlc4RkdaMjliZFlOYk1EaTQ4aXVRQWlzRlQrTGZXN3Y3RVl3WGJ3NUhSVkpNCjV2MlhnenJwN2Yxa08zckEzeXUyS1VSSktHdjJ1ZXhNSythb1VOZXhRT3ludmZGUTBCemRHQ1dlcmVvZTZ3bDMKbHc4Z2dCWDI1VGIxbzR3d1UzNXdtUUIrMC9rbjB0SXoveVBhY2JzbDAwZ0dJNFhTbWpRQmF0MUZYRHFEME1JMgp4S0RqMXZ2dkNTVnRKc09ESG95eDhLc3ptbno5UVFoV0ZNeC9LTXp1clh0OWtsWFRJc0t3d2NXMytZQWtQMzNaClgvOGJnZS8zK2RibTdNN3BndmFBNVFlU3VTbkwzNjdLT1g1NlNZNGFZWHhkc1haVDc0ZGxVRU1jbG9NU0NIOG4KR25QWlpyWTNHdnZaU2ovQWdqT2lDNHNBL2JSSmh4cCtUQndlRFByR0pFUEJFVW9sZEZHVXdraFJXMVVuRlc2YwpyTGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K</crt> | ||||||
|  |     <csr/> | ||||||
|  |     <prv>LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1N3d2dna29BZ0VBQW9JQ0FRRExzTERuNG1rVHhFclgKdHdqTXoxencyeHJhNTZ5bTYrYzlRNEM3UjMyMzVuWjVPM1ovdzMva01XZjkvbkZsamcyQVdYRElKY1dmOTQ0UgpFblFMdmlha2NNTHR1Qm1KTVRYZnVQWnhsSWE4Wlc0S0ZuT21UUzRZcUJXOEdCSkl3TG1DaTFvZGhZeGZQRDZMCldEZnZYMm1tWEIrUFNxL0l4WEhOSjdxZVB4YzVuSzUyMW1uNW5DQW1kUENjYmZ2Z1d1QzZOeFZtemR5em1rVC8KNnVqRUJFYTZ6RkQyUUtDN1N6a2ptZUNpd2VDQjc5NjZqeEV5UWtWUWpiVDkwWXJ4Q290TyttMkhBTlBkc2NPcQpvNldXMEhmSlNpa2k4K2NDWHlzbGRFSzFZbmxueTNFWlVqTExWamVFL1dBVTRDUFlSaFhUVUZVMjFkVXZrM29hCkVpeldVdmhKc1FHYnh2aFRUQlN3aVliOUQ3Ymx1MWl4UzJxNzczOTlVZ1E3cVM1QWE4SUdtcDg1Q2hRSUFZRWMKSTd6RGVWTGtrOGpkWkFCaTdGbDl0M05OQTU3WlVZVzErWE45K1RneWMxOVNsajFVbVF2RG96TEJDOTlNUmkvNApEQTIxRFpIODY3ekFYenFqZWUrckorQkZvNzVEQjlqd2tMTmVQZWl6bFF6dEhaalJTS2dpZ1I1T0pKa1JUci82CjduaTBtbzVITGNkU3hBSDFmdXdXS0hWS2RHQlQrNjhhYkUrZ2tRKytUOEx6dWErUW1qTE5RUWoxUkJIVjNLNVAKL3dvbXJKZG02d1ZLbm85RXlNait4azFwS05wb0F4UnR1WllmQ0RVVVBaNHVwQm1vMEs3d0Y0d21XdVdhK21Wdwplb1ZTcDRXMEhOWVJGU1pyWWxrc1AzdWViSHcva1FJREFRQUJBb0lDQUFzc3hPL2IzSTd3a0hpWU9wdmQ3b2ZxClJXVm9HM0ZHOVBkSCtrcU1DQW9zVXlpZ2lnWkZhQUZSY3BhZFBJUnBVRFZQOHQrUUx2RHhTSEtJVkNTR3lLRHgKN01mVTkxV3ZCUGtpc1NhWEV2TklEMHJ2WTJYbXl4WWdOcDBNcHdnbHhxZXlWSDNWSTFmZ09zQXpWVkpGSmtzeAp0NnVKV2U2R1lwRnlVZ3MzZytNdHhPYVJLZHcvWkFZb0dVRkR5WE5NR1JNdVRYYkg2WWxTOStFZ2RxZTJZbGtDCk41amkvODUydUlwSytXZUVnbmd1ZkVZNDdpVVhQSzFJTVB0UjRURUxOb3hkTWVBYnZBUG9La2QwMWZOWnVaQ3EKQ0dxNS9kMEQ4cDZKNjlUK3M1RnR1R1UrdkxtcUg3NmtsZjVmTTZnOFpCc2xSNStNQ0xlay9DaHRBZGU2VXBQRApXQ2EwazU3dmdneUdQdGVlVXY2RVJBMEp6SjlJd2VHZGdVWHhNdW5LK3ZSNWYydWJKWFJoMVJpNTNFSTNvVUxYClFvWm9hOTY3VzNUajQ3UzR2RlQyK2dLb0g2OXlNckdVNVkwcjJrSTFXMVVhWEJ1aVVrMi94amdyWVdTblUzUUQKZkM3ZXllTlNlN3c4UW9MMVBEYXJwVXdaK2xGZ0w3NFVScldLQU12WVhxa3NTMHVtb0tTSWo4cjZMM0hVSUVaUgpZRzhBTU91dFhrQk5lMkNpTXRKM2NYUXNIOWloQU9QL3AvaE9BTTBGNkM3Ymt1Vm85d1pRdDVESWxRWUl4TlArClFRZ2doRnhBNTlTWmpwRk00QkN5L0hEOENJY3VuSURZOVNlbXNSYXdyUVY1eGk1akFScVdOYTdBSVMvVlArdUUKQkpmS0dDNFlZVmxqS1VLeEgxVUJBb0lCQVFEcnZOWXNrd3ZhQ2Z6MlcvbkIrRjNjVE1RbjM2RENSYnZwQ0s1dApldm96TjJGbjBJdWFnN2RrYzN2NTFxTVNEd0h1cVNkVTRHUHZMcm83alpJaFNEZ1AwLzBLWmc0VmxtZE5HbEovCk1lcXhmOGRkOFdTQjZiUksrK2FRcEhaeDd2SUFTWkE4eHkvZ3F2NGJpSmlqVDhUQ2lSeXdYSTQ0ZlRYM0xLZTIKVG1Uc29XNk9yQmErSWJRYjBpTEh4WE4rZ3JDM0cxWWxIUlNvTEpKUkU0eFVLMGsvM1JLNU16RjRIYUNZb1BWOQpDOFpQellMR253SE9ERU8zbHRtSGJvQUNFa0VrT2dFV3U4RFo2YlYrMXJBcVh6WnN0L3hNZnJ5KzlMRVdYQUwvCkRnOEdkall0YzdyUTFZd1BIY1h6cFo2clVIdXh2K0p6VEE1ZzNCS1p6aWhwNFdHaEFvSUJBUURkTXE3N0dRWGMKYW5hYlMxanlFT3VzNFp5ZlJ4cW10NEVFaHZjY0dRVVVrV0IrWk11bnpyaENxb3ZwQ1dhVU9zWVhuNG45Y3BQSAo3bm1mOUJHbFI4NVhCVHNLM2d4bE5NMUhjSGFTNXZSem9WQVBNd3o2VVV0ZFNLWXRLR0Q3Wkxmbm9ISXN1SlEzCnJ6WWIyTFhpVmx6MWlNNUVmT0VrL1J5UjBwMGtleXVwa0F0OXBRV0hzaURYb0pibDE2d1ZLc2NDNGUzNjdRRWsKcFdoeXcyS3A4bXdtOGxqQllxZWtHdUREeGVZSDMzMVlGa2FMUEJCT2xPQnlveFlOUDdBVVREUlV3KzB1T01jNwozb0N1VE9jWnAxVWMwQURBOXRTRVRINklWdlFEUXZlYzR6MWRTVGRmUEkxRzVUTCt4Mzlvam5OcGVoYng0bEwvCmRxTTBmcFlPL2ZmeEFvSUJBRmwzOU8wNzdjNlY1ZHoyY1djTnhVbThGT0p4UEVrZlFEOGtYVmNOeW5HdnZoY3gKamhwWmpUdmhuSmJvd0VFMVV1MXFZNVFTQ2J1WVIzUWN1ZTVKdzRVMlZwNGd0NDIzNUlMZHo1dVlyVk1xaE5jQgpxN3ltbnhlcVhRcGVjTm15NzBQdXA0QjV0SkVYTkpQc2xzbThsNWVoaERMbkhjOFFybStlRWhUZDBlNEJJcjJoClVJeGVyRVcyemg1MXNPeTkyeVhUaVRGU3hTbENxVkYrRXM5TEVtVGJtYVNTYWw4RkY1TjEyMVhYSnkvWWRwNjkKY0dqc1BMTXIzR2xMSmVnalYzZlJUK0o1NWFxT3lhUlhCTXRBRVo3WGdUampETzJJWHNGMnNHaHV4SU1XVUYrVgp3YnhLbi9xSXVUMU1pVmpKbGZpVE0vWEFVdUN1QlowOEloaDFRcUVDZ2dFQUZwdzJySzRMSGxPM21mb2l0bU9xClkzcVFVdXVtdXNIcEt6aE1qQSsycURxUC9YdDZJY1lNcWF2YkwwL3ByMTh1bm4yTlVsM2k0ejNxS3NKOUIwTUcKd1hoa1o2RDQ3V052VkUwWG9iNS80RTN0N0EvUTFNbDRoYW1HYXZsRXFJM01DcDRvN1k5VWZ6aW10RVA3bTQ0dQpaRjYranR1ZysvSHZlS3hwcWEvNWI1U3N5QVFWUTZDZW9Ndm1nTW9CNmd2OFdid1VZbURWakJSb1Q4clBEQVllCnJnQjV1QkxJaGdyRlROMnV2TUZJZzdlTE1ISk1UR3dGWVZKd1Q1eGgrRUV0M0RoR3gwSEFnOHNqcGkxd05md1gKeENFeTRvYVloSWw1S2FDUndyK1dwZS9JZHYrajdGVTVMN1QvK0hFV0FlOEZ0eE5td3dUYWJRaUllRFkwU29ZRgpVUUtDQVFFQXRiclZqbTFsaDQ1REhIWnVsem4xNllIQzJrMUYwWG9FZFVSQ3o0QTFsMHBEK3ljL2srdmJ0Qmg0Cm1RRDV1a3FicHFFZy9GNUhDZmdOaHlieHNNdVV6NzFaU24zN2dwczNDWUdiUyt4RkhjZTJBakNTbUlYQWIxQjgKR0Z2WnV4UlB5QXU0YVBvT1J3RzM3NVBOM0VNNk83bzdxbjlYeExTZWRIMHExM2U0YkhYYm4rc2xOa1RIM2xmcwpLVnBOUUhVSUNDSW5vQ0llV1dwdnAwQnFoYjlKclRsbXd2c25zOHpZVDNiY3F5QXZHZGRnNUs3Y0MwRVJaem9ECnFJTkI3S05FVjQ1NmF0eDZVT3VYUlpKREMvaHNJUTZNaVBveUJacHRsK1ZIMEtQbEFIWGExb0FXZmNuL0U3MFYKK0RaeVBiMWxkQUdpb1hqditGd2h5VzZlWEVrQlBnPT0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=</prv> | ||||||
|  |   </cert> | ||||||
|  |   <syslog/> | ||||||
|  | </opnsense> | ||||||
| @ -0,0 +1,987 @@ | |||||||
|  | <?xml version="1.0"?> | ||||||
|  | <opnsense> | ||||||
|  |   <theme>opnsense</theme> | ||||||
|  |   <sysctl> | ||||||
|  |     <item> | ||||||
|  |       <descr>Increase UFS read-ahead speeds to match the state of hard drives and NCQ.</descr> | ||||||
|  |       <tunable>vfs.read_max</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set the ephemeral port range to be lower.</descr> | ||||||
|  |       <tunable>net.inet.ip.portrange.first</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Drop packets to closed TCP ports without returning a RST</descr> | ||||||
|  |       <tunable>net.inet.tcp.blackhole</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Do not send ICMP port unreachable messages for closed UDP ports</descr> | ||||||
|  |       <tunable>net.inet.udp.blackhole</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Randomize the ID field in IP packets</descr> | ||||||
|  |       <tunable>net.inet.ip.random_id</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Source routing is another way for an attacker to try to reach non-routable addresses behind your box. | ||||||
|  |         It can also be used to probe for information about your internal networks. These functions come enabled | ||||||
|  |         as part of the standard FreeBSD core system.</descr> | ||||||
|  |       <tunable>net.inet.ip.sourceroute</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Source routing is another way for an attacker to try to reach non-routable addresses behind your box. | ||||||
|  |         It can also be used to probe for information about your internal networks. These functions come enabled | ||||||
|  |         as part of the standard FreeBSD core system.</descr> | ||||||
|  |       <tunable>net.inet.ip.accept_sourceroute</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>This option turns off the logging of redirect packets because there is no limit and this could fill | ||||||
|  |         up your logs consuming your whole hard drive.</descr> | ||||||
|  |       <tunable>net.inet.icmp.log_redirect</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)</descr> | ||||||
|  |       <tunable>net.inet.tcp.drop_synfin</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable sending IPv6 redirects</descr> | ||||||
|  |       <tunable>net.inet6.ip6.redirect</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable privacy settings for IPv6 (RFC 4941)</descr> | ||||||
|  |       <tunable>net.inet6.ip6.use_tempaddr</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Prefer privacy addresses and use them over the normal addresses</descr> | ||||||
|  |       <tunable>net.inet6.ip6.prefer_tempaddr</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Generate SYN cookies for outbound SYN-ACK packets</descr> | ||||||
|  |       <tunable>net.inet.tcp.syncookies</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum incoming/outgoing TCP datagram size (receive)</descr> | ||||||
|  |       <tunable>net.inet.tcp.recvspace</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum incoming/outgoing TCP datagram size (send)</descr> | ||||||
|  |       <tunable>net.inet.tcp.sendspace</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Do not delay ACK to try and piggyback it onto a data packet</descr> | ||||||
|  |       <tunable>net.inet.tcp.delayed_ack</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum outgoing UDP datagram size</descr> | ||||||
|  |       <tunable>net.inet.udp.maxdgram</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Handling of non-IP packets which are not passed to pfil (see if_bridge(4))</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_onlyip</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set to 1 to additionally filter on the physical interface for locally destined packets</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_local_phys</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set to 0 to disable filtering on the incoming and outgoing member interfaces.</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_member</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set to 1 to enable filtering on the bridge interface</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_bridge</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Allow unprivileged access to tap(4) device nodes</descr> | ||||||
|  |       <tunable>net.link.tap.user_open</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())</descr> | ||||||
|  |       <tunable>kern.randompid</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Disable CTRL+ALT+Delete reboot from keyboard.</descr> | ||||||
|  |       <tunable>hw.syscons.kbd_reboot</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable TCP extended debugging</descr> | ||||||
|  |       <tunable>net.inet.tcp.log_debug</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set ICMP Limits</descr> | ||||||
|  |       <tunable>net.inet.icmp.icmplim</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>TCP Offload Engine</descr> | ||||||
|  |       <tunable>net.inet.tcp.tso</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>UDP Checksums</descr> | ||||||
|  |       <tunable>net.inet.udp.checksum</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum socket buffer size</descr> | ||||||
|  |       <tunable>kern.ipc.maxsockbuf</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Page Table Isolation (Meltdown mitigation, requires reboot.)</descr> | ||||||
|  |       <tunable>vm.pmap.pti</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Disable Indirect Branch Restricted Speculation (Spectre V2 mitigation)</descr> | ||||||
|  |       <tunable>hw.ibrs_disable</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Hide processes running as other groups</descr> | ||||||
|  |       <tunable>security.bsd.see_other_gids</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Hide processes running as other users</descr> | ||||||
|  |       <tunable>security.bsd.see_other_uids</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable/disable sending of ICMP redirects in response to IP packets for which a better, | ||||||
|  |         and for the sender directly reachable, route and next hop is known.</descr> | ||||||
|  |       <tunable>net.inet.ip.redirect</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum outgoing UDP datagram size</descr> | ||||||
|  |       <tunable>net.local.dgram.maxdgram</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |   </sysctl> | ||||||
|  |   <system> | ||||||
|  |     <optimization>normal</optimization> | ||||||
|  |     <hostname>OPNsense</hostname> | ||||||
|  |     <domain>localdomain</domain> | ||||||
|  |     <dnsallowoverride>1</dnsallowoverride> | ||||||
|  |     <group> | ||||||
|  |       <name>admins</name> | ||||||
|  |       <description>System Administrators</description> | ||||||
|  |       <scope>system</scope> | ||||||
|  |       <gid>1999</gid> | ||||||
|  |       <member>0</member> | ||||||
|  |       <priv>page-all</priv> | ||||||
|  |     </group> | ||||||
|  |     <user> | ||||||
|  |       <name>root</name> | ||||||
|  |       <descr>System Administrator</descr> | ||||||
|  |       <scope>system</scope> | ||||||
|  |       <groupname>admins</groupname> | ||||||
|  |       <password>$2y$10$YRVoF4SgskIsrXOvOQjGieB9XqHPRra9R7d80B3BZdbY/j21TwBfS</password> | ||||||
|  |       <uid>0</uid> | ||||||
|  |     </user> | ||||||
|  |     <nextuid>2000</nextuid> | ||||||
|  |     <nextgid>2000</nextgid> | ||||||
|  |     <timezone>Etc/UTC</timezone> | ||||||
|  |     <timeservers>0.opnsense.pool.ntp.org 1.opnsense.pool.ntp.org 2.opnsense.pool.ntp.org 3.opnsense.pool.ntp.org</timeservers> | ||||||
|  |     <webgui> | ||||||
|  |       <protocol>https</protocol> | ||||||
|  |       <ssl-certref>6734d6c82dc59</ssl-certref> | ||||||
|  |       <port/> | ||||||
|  |       <ssl-ciphers/> | ||||||
|  |       <interfaces/> | ||||||
|  |       <compression/> | ||||||
|  |     </webgui> | ||||||
|  |     <disablenatreflection>yes</disablenatreflection> | ||||||
|  |     <usevirtualterminal>1</usevirtualterminal> | ||||||
|  |     <disableconsolemenu>1</disableconsolemenu> | ||||||
|  |     <disablevlanhwfilter>1</disablevlanhwfilter> | ||||||
|  |     <disablechecksumoffloading>1</disablechecksumoffloading> | ||||||
|  |     <disablesegmentationoffloading>1</disablesegmentationoffloading> | ||||||
|  |     <disablelargereceiveoffloading>1</disablelargereceiveoffloading> | ||||||
|  |     <ipv6allow>1</ipv6allow> | ||||||
|  |     <powerd_ac_mode>hadp</powerd_ac_mode> | ||||||
|  |     <powerd_battery_mode>hadp</powerd_battery_mode> | ||||||
|  |     <powerd_normal_mode>hadp</powerd_normal_mode> | ||||||
|  |     <bogons> | ||||||
|  |       <interval>monthly</interval> | ||||||
|  |     </bogons> | ||||||
|  |     <pf_share_forward>1</pf_share_forward> | ||||||
|  |     <lb_use_sticky>1</lb_use_sticky> | ||||||
|  |     <ssh> | ||||||
|  |       <group>admins</group> | ||||||
|  |       <noauto>1</noauto> | ||||||
|  |       <interfaces/> | ||||||
|  |       <kex/> | ||||||
|  |       <ciphers/> | ||||||
|  |       <macs/> | ||||||
|  |       <keys/> | ||||||
|  |       <keysig/> | ||||||
|  |       <enabled>enabled</enabled> | ||||||
|  |       <passwordauth>1</passwordauth> | ||||||
|  |       <permitrootlogin>1</permitrootlogin> | ||||||
|  |     </ssh> | ||||||
|  |     <rrdbackup>-1</rrdbackup> | ||||||
|  |     <netflowbackup>-1</netflowbackup> | ||||||
|  |     <firmware version="1.0.1"> | ||||||
|  |       <mirror/> | ||||||
|  |       <flavour/> | ||||||
|  |       <plugins/> | ||||||
|  |       <type/> | ||||||
|  |       <subscription/> | ||||||
|  |       <reboot/> | ||||||
|  |     </firmware> | ||||||
|  |     <dnsserver>192.168.5.1</dnsserver> | ||||||
|  |     <language>en_US</language> | ||||||
|  |     <serialspeed>115200</serialspeed> | ||||||
|  |     <primaryconsole>video</primaryconsole> | ||||||
|  |     <secondaryconsole>serial</secondaryconsole> | ||||||
|  |   </system> | ||||||
|  |   <interfaces> | ||||||
|  |     <lan> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <if>le1</if> | ||||||
|  |       <ipaddr>10.100.8.1</ipaddr> | ||||||
|  |       <subnet>24</subnet> | ||||||
|  |       <ipaddrv6>track6</ipaddrv6> | ||||||
|  |       <subnetv6>64</subnetv6> | ||||||
|  |       <media/> | ||||||
|  |       <mediaopt/> | ||||||
|  |       <track6-interface>wan</track6-interface> | ||||||
|  |       <track6-prefix-id>0</track6-prefix-id> | ||||||
|  |     </lan> | ||||||
|  |     <lo0> | ||||||
|  |       <internal_dynamic>1</internal_dynamic> | ||||||
|  |       <descr>Loopback</descr> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <if>lo0</if> | ||||||
|  |       <ipaddr>127.0.0.1</ipaddr> | ||||||
|  |       <ipaddrv6>::1</ipaddrv6> | ||||||
|  |       <subnet>8</subnet> | ||||||
|  |       <subnetv6>128</subnetv6> | ||||||
|  |       <type>none</type> | ||||||
|  |       <virtual>1</virtual> | ||||||
|  |     </lo0> | ||||||
|  |     <wan> | ||||||
|  |       <if>le0</if> | ||||||
|  |       <descr/> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <spoofmac/> | ||||||
|  |       <ipaddr>dhcp</ipaddr> | ||||||
|  |       <dhcphostname/> | ||||||
|  |       <alias-address/> | ||||||
|  |       <alias-subnet>32</alias-subnet> | ||||||
|  |       <dhcprejectfrom/> | ||||||
|  |       <adv_dhcp_pt_timeout/> | ||||||
|  |       <adv_dhcp_pt_retry/> | ||||||
|  |       <adv_dhcp_pt_select_timeout/> | ||||||
|  |       <adv_dhcp_pt_reboot/> | ||||||
|  |       <adv_dhcp_pt_backoff_cutoff/> | ||||||
|  |       <adv_dhcp_pt_initial_interval/> | ||||||
|  |       <adv_dhcp_pt_values>SavedCfg</adv_dhcp_pt_values> | ||||||
|  |       <adv_dhcp_send_options/> | ||||||
|  |       <adv_dhcp_request_options/> | ||||||
|  |       <adv_dhcp_required_options/> | ||||||
|  |       <adv_dhcp_option_modifiers/> | ||||||
|  |       <adv_dhcp_config_advanced/> | ||||||
|  |       <adv_dhcp_config_file_override/> | ||||||
|  |       <adv_dhcp_config_file_override_path/> | ||||||
|  |     </wan> | ||||||
|  |   </interfaces> | ||||||
|  |   <dhcpd> | ||||||
|  |     <lan> | ||||||
|  |       <enable/> | ||||||
|  |       <range> | ||||||
|  |         <from>10.100.8.10</from> | ||||||
|  |         <to>10.100.8.245</to> | ||||||
|  |       </range> | ||||||
|  |       <staticmap> | ||||||
|  |         <mac>d8:5e:d3:e7:2c:8c</mac> | ||||||
|  |         <ipaddr>10.100.8.15</ipaddr> | ||||||
|  |         <hostname>rtx4090</hostname> | ||||||
|  |         <winsserver/> | ||||||
|  |         <dnsserver/> | ||||||
|  |         <ntpserver/> | ||||||
|  |       </staticmap> | ||||||
|  |     </lan> | ||||||
|  |   </dhcpd> | ||||||
|  |   <snmpd> | ||||||
|  |     <syslocation/> | ||||||
|  |     <syscontact/> | ||||||
|  |     <rocommunity>public</rocommunity> | ||||||
|  |   </snmpd> | ||||||
|  |   <nat> | ||||||
|  |     <outbound> | ||||||
|  |       <mode>automatic</mode> | ||||||
|  |     </outbound> | ||||||
|  |   </nat> | ||||||
|  |   <filter> | ||||||
|  |     <rule uuid="f79eded0-3c11-4f57-9aaa-55d4888589fa"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>tcp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <network>wanip</network> | ||||||
|  |         <port>80</port> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518072.7612</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518072.7612</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="4a5e7b65-0d7f-4452-8a29-2ec61a47ec19"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>tcp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <network>wanip</network> | ||||||
|  |         <port>443</port> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518084.0639</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518084.0639</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="0465308d-8605-466c-bcb4-95eeb989251a"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>tcp/udp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <any>1</any> | ||||||
|  |         <port>22</port> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518114.2801</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518114.2801</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="2df05591-13e7-4d91-a1b8-d25e338ada5f"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <descr>Allow ping</descr> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>icmp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <network>(self)</network> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518356.7559</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518311.7033</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="f2ee612c-c290-4445-8045-df82a86db0e5"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <descr>Default allow LAN to any rule</descr> | ||||||
|  |       <interface>lan</interface> | ||||||
|  |       <source> | ||||||
|  |         <network>lan</network> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <any/> | ||||||
|  |       </destination> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="b21f808a-6a4a-4cd6-9a83-1660cc8ea58b"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <ipprotocol>inet6</ipprotocol> | ||||||
|  |       <descr>Default allow LAN IPv6 to any rule</descr> | ||||||
|  |       <interface>lan</interface> | ||||||
|  |       <source> | ||||||
|  |         <network>lan</network> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <any/> | ||||||
|  |       </destination> | ||||||
|  |     </rule> | ||||||
|  |   </filter> | ||||||
|  |   <rrd> | ||||||
|  |     <enable/> | ||||||
|  |   </rrd> | ||||||
|  |   <ntpd> | ||||||
|  |     <prefer>0.opnsense.pool.ntp.org</prefer> | ||||||
|  |   </ntpd> | ||||||
|  |   <widgets> | ||||||
|  |     <sequence>system_information-container:00000000-col3:show,services_status-container:00000001-col4:show,gateways-container:00000002-col4:show,interface_list-container:00000003-col4:show</sequence> | ||||||
|  |     <column_count>2</column_count> | ||||||
|  |   </widgets> | ||||||
|  |   <revision> | ||||||
|  |     <username>root@192.168.5.204</username> | ||||||
|  |     <time>1731534516.7156</time> | ||||||
|  |     <description>/interfaces.php made changes</description> | ||||||
|  |   </revision> | ||||||
|  |   <OPNsense> | ||||||
|  |     <DHCRelay version="1.0.1"/> | ||||||
|  |     <wireguard> | ||||||
|  |       <client version="1.0.0"> | ||||||
|  |         <clients/> | ||||||
|  |       </client> | ||||||
|  |       <general version="0.0.1"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |       </general> | ||||||
|  |       <server version="1.0.0"> | ||||||
|  |         <servers/> | ||||||
|  |       </server> | ||||||
|  |     </wireguard> | ||||||
|  |     <IPsec version="1.0.1"> | ||||||
|  |       <general> | ||||||
|  |         <enabled/> | ||||||
|  |       </general> | ||||||
|  |       <keyPairs/> | ||||||
|  |       <preSharedKeys/> | ||||||
|  |     </IPsec> | ||||||
|  |     <Swanctl version="1.0.0"> | ||||||
|  |       <Connections/> | ||||||
|  |       <locals/> | ||||||
|  |       <remotes/> | ||||||
|  |       <children/> | ||||||
|  |       <Pools/> | ||||||
|  |       <VTIs/> | ||||||
|  |       <SPDs/> | ||||||
|  |     </Swanctl> | ||||||
|  |     <OpenVPNExport version="0.0.1"> | ||||||
|  |       <servers/> | ||||||
|  |     </OpenVPNExport> | ||||||
|  |     <OpenVPN version="1.0.0"> | ||||||
|  |       <Overwrites/> | ||||||
|  |       <Instances/> | ||||||
|  |       <StaticKeys/> | ||||||
|  |     </OpenVPN> | ||||||
|  |     <captiveportal version="1.0.2"> | ||||||
|  |       <zones/> | ||||||
|  |       <templates/> | ||||||
|  |     </captiveportal> | ||||||
|  |     <cron version="1.0.4"> | ||||||
|  |       <jobs/> | ||||||
|  |     </cron> | ||||||
|  |     <Firewall> | ||||||
|  |       <Lvtemplate version="0.0.1"> | ||||||
|  |         <templates/> | ||||||
|  |       </Lvtemplate> | ||||||
|  |       <Alias version="1.0.1"> | ||||||
|  |         <geoip> | ||||||
|  |           <url/> | ||||||
|  |         </geoip> | ||||||
|  |         <aliases/> | ||||||
|  |       </Alias> | ||||||
|  |       <Category version="1.0.0"> | ||||||
|  |         <categories/> | ||||||
|  |       </Category> | ||||||
|  |       <Filter version="1.0.4"> | ||||||
|  |         <rules/> | ||||||
|  |         <snatrules/> | ||||||
|  |         <npt/> | ||||||
|  |         <onetoone/> | ||||||
|  |       </Filter> | ||||||
|  |     </Firewall> | ||||||
|  |     <Netflow version="1.0.1"> | ||||||
|  |       <capture> | ||||||
|  |         <interfaces/> | ||||||
|  |         <egress_only/> | ||||||
|  |         <version>v9</version> | ||||||
|  |         <targets/> | ||||||
|  |       </capture> | ||||||
|  |       <collect> | ||||||
|  |         <enable>0</enable> | ||||||
|  |       </collect> | ||||||
|  |       <activeTimeout>1800</activeTimeout> | ||||||
|  |       <inactiveTimeout>15</inactiveTimeout> | ||||||
|  |     </Netflow> | ||||||
|  |     <IDS version="1.0.9"> | ||||||
|  |       <rules/> | ||||||
|  |       <policies/> | ||||||
|  |       <userDefinedRules/> | ||||||
|  |       <files/> | ||||||
|  |       <fileTags/> | ||||||
|  |       <general> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <ips>0</ips> | ||||||
|  |         <promisc>0</promisc> | ||||||
|  |         <interfaces>wan</interfaces> | ||||||
|  |         <homenet>192.168.0.0/16,10.0.0.0/8,172.16.0.0/12</homenet> | ||||||
|  |         <defaultPacketSize/> | ||||||
|  |         <UpdateCron/> | ||||||
|  |         <AlertLogrotate>W0D23</AlertLogrotate> | ||||||
|  |         <AlertSaveLogs>4</AlertSaveLogs> | ||||||
|  |         <MPMAlgo/> | ||||||
|  |         <detect> | ||||||
|  |           <Profile/> | ||||||
|  |           <toclient_groups/> | ||||||
|  |           <toserver_groups/> | ||||||
|  |         </detect> | ||||||
|  |         <syslog>0</syslog> | ||||||
|  |         <syslog_eve>0</syslog_eve> | ||||||
|  |         <LogPayload>0</LogPayload> | ||||||
|  |         <verbosity/> | ||||||
|  |       </general> | ||||||
|  |     </IDS> | ||||||
|  |     <Interfaces> | ||||||
|  |       <loopbacks version="1.0.0"/> | ||||||
|  |       <neighbors version="1.0.0"/> | ||||||
|  |       <vxlans version="1.0.2"/> | ||||||
|  |     </Interfaces> | ||||||
|  |     <Kea> | ||||||
|  |       <ctrl_agent version="0.0.1"> | ||||||
|  |         <general> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |           <http_host>127.0.0.1</http_host> | ||||||
|  |           <http_port>8000</http_port> | ||||||
|  |         </general> | ||||||
|  |       </ctrl_agent> | ||||||
|  |       <dhcp4 version="1.0.0"> | ||||||
|  |         <general> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |           <interfaces/> | ||||||
|  |           <valid_lifetime>4000</valid_lifetime> | ||||||
|  |           <fwrules>1</fwrules> | ||||||
|  |         </general> | ||||||
|  |         <ha> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |           <this_server_name/> | ||||||
|  |         </ha> | ||||||
|  |         <subnets/> | ||||||
|  |         <reservations/> | ||||||
|  |         <ha_peers/> | ||||||
|  |       </dhcp4> | ||||||
|  |     </Kea> | ||||||
|  |     <monit version="1.0.13"> | ||||||
|  |       <general> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <interval>120</interval> | ||||||
|  |         <startdelay>120</startdelay> | ||||||
|  |         <mailserver>127.0.0.1</mailserver> | ||||||
|  |         <port>25</port> | ||||||
|  |         <username/> | ||||||
|  |         <password/> | ||||||
|  |         <ssl>0</ssl> | ||||||
|  |         <sslversion>auto</sslversion> | ||||||
|  |         <sslverify>1</sslverify> | ||||||
|  |         <logfile/> | ||||||
|  |         <statefile/> | ||||||
|  |         <eventqueuePath/> | ||||||
|  |         <eventqueueSlots/> | ||||||
|  |         <httpdEnabled>0</httpdEnabled> | ||||||
|  |         <httpdUsername>root</httpdUsername> | ||||||
|  |         <httpdPassword/> | ||||||
|  |         <httpdPort>2812</httpdPort> | ||||||
|  |         <httpdAllow/> | ||||||
|  |         <mmonitUrl/> | ||||||
|  |         <mmonitTimeout>5</mmonitTimeout> | ||||||
|  |         <mmonitRegisterCredentials>1</mmonitRegisterCredentials> | ||||||
|  |       </general> | ||||||
|  |       <alert uuid="15f1e9ca-5dd5-4b20-b595-b6b4f82245d0"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <recipient>root@localhost.local</recipient> | ||||||
|  |         <noton>0</noton> | ||||||
|  |         <events/> | ||||||
|  |         <format/> | ||||||
|  |         <reminder/> | ||||||
|  |         <description/> | ||||||
|  |       </alert> | ||||||
|  |       <service uuid="c1e99556-91f5-4dbf-81d7-7915a3213de9"> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <name>$HOST</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>system</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path/> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>91b4e409-211b-49d5-9fa3-dc9054106646,cbe9cb72-e8c2-4740-990c-abcc486b0654,c0708923-88de-4178-abdd-819737440ce0,e887125d-c5d2-45e6-b40d-2c400d5449d1</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <service uuid="7513f341-7d21-4f11-903f-30d07b3aa41e"> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <name>RootFs</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>filesystem</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path>/</path> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>cc3684f2-701e-4de4-883d-803e08cf47b6</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <service uuid="f99ada79-ba1a-4ee1-81f1-ef570e8e5ea9"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <name>carp_status_change</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>custom</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path>/usr/local/opnsense/scripts/OPNsense/Monit/carp_status</path> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>f2d734cb-2a0e-4375-9460-11bdd5b20503</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <service uuid="dca8a81f-d389-4baa-b477-8b348194fd25"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <name>gateway_alert</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>custom</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path>/usr/local/opnsense/scripts/OPNsense/Monit/gateway_alert</path> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>865105a2-cbea-4a01-9979-c67818da9d99</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <test uuid="ea6b821c-4f30-455b-bd5b-23a6f0c20554"> | ||||||
|  |         <name>Ping</name> | ||||||
|  |         <type>NetworkPing</type> | ||||||
|  |         <condition>failed ping</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="16186b38-0e13-4cc3-ad18-ccc3fcc91837"> | ||||||
|  |         <name>NetworkLink</name> | ||||||
|  |         <type>NetworkInterface</type> | ||||||
|  |         <condition>failed link</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="69117d4d-8c41-4712-97c0-87b4fa7c9837"> | ||||||
|  |         <name>NetworkSaturation</name> | ||||||
|  |         <type>NetworkInterface</type> | ||||||
|  |         <condition>saturation is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="91b4e409-211b-49d5-9fa3-dc9054106646"> | ||||||
|  |         <name>MemoryUsage</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>memory usage is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="cbe9cb72-e8c2-4740-990c-abcc486b0654"> | ||||||
|  |         <name>CPUUsage</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>cpu usage is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="c0708923-88de-4178-abdd-819737440ce0"> | ||||||
|  |         <name>LoadAvg1</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>loadavg (1min) is greater than 4</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="e887125d-c5d2-45e6-b40d-2c400d5449d1"> | ||||||
|  |         <name>LoadAvg5</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>loadavg (5min) is greater than 3</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="c34aab30-9194-4667-b516-004b9c90c1c0"> | ||||||
|  |         <name>LoadAvg15</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>loadavg (15min) is greater than 2</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="cc3684f2-701e-4de4-883d-803e08cf47b6"> | ||||||
|  |         <name>SpaceUsage</name> | ||||||
|  |         <type>SpaceUsage</type> | ||||||
|  |         <condition>space usage is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="f2d734cb-2a0e-4375-9460-11bdd5b20503"> | ||||||
|  |         <name>ChangedStatus</name> | ||||||
|  |         <type>ProgramStatus</type> | ||||||
|  |         <condition>changed status</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="865105a2-cbea-4a01-9979-c67818da9d99"> | ||||||
|  |         <name>NonZeroStatus</name> | ||||||
|  |         <type>ProgramStatus</type> | ||||||
|  |         <condition>status != 0</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |     </monit> | ||||||
|  |     <Gateways version="1.0.0"> | ||||||
|  |       <gateway_item uuid="a6ea102d-68bb-430f-af8b-269d52498fe1"> | ||||||
|  |         <disabled>0</disabled> | ||||||
|  |         <name>WAN_GW</name> | ||||||
|  |         <descr>Interface WAN Gateway</descr> | ||||||
|  |         <interface>wan</interface> | ||||||
|  |         <ipprotocol>inet</ipprotocol> | ||||||
|  |         <gateway>172.17.0.1</gateway> | ||||||
|  |         <defaultgw>1</defaultgw> | ||||||
|  |         <fargw>0</fargw> | ||||||
|  |         <monitor_disable>1</monitor_disable> | ||||||
|  |         <monitor_noroute/> | ||||||
|  |         <monitor/> | ||||||
|  |         <force_down/> | ||||||
|  |         <priority>255</priority> | ||||||
|  |         <weight>1</weight> | ||||||
|  |         <latencylow/> | ||||||
|  |         <latencyhigh/> | ||||||
|  |         <losslow/> | ||||||
|  |         <losshigh/> | ||||||
|  |         <interval/> | ||||||
|  |         <time_period/> | ||||||
|  |         <loss_interval/> | ||||||
|  |         <data_length/> | ||||||
|  |       </gateway_item> | ||||||
|  |     </Gateways> | ||||||
|  |     <Syslog version="1.0.2"> | ||||||
|  |       <general> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <loglocal>1</loglocal> | ||||||
|  |         <maxpreserve>31</maxpreserve> | ||||||
|  |         <maxfilesize/> | ||||||
|  |       </general> | ||||||
|  |       <destinations/> | ||||||
|  |     </Syslog> | ||||||
|  |     <TrafficShaper version="1.0.3"> | ||||||
|  |       <pipes/> | ||||||
|  |       <queues/> | ||||||
|  |       <rules/> | ||||||
|  |     </TrafficShaper> | ||||||
|  |     <unboundplus version="1.0.9"> | ||||||
|  |       <general> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <port>53</port> | ||||||
|  |         <stats/> | ||||||
|  |         <active_interface/> | ||||||
|  |         <dns64/> | ||||||
|  |         <dns64prefix/> | ||||||
|  |         <noarecords/> | ||||||
|  |         <regdhcp/> | ||||||
|  |         <regdhcpdomain/> | ||||||
|  |         <regdhcpstatic/> | ||||||
|  |         <noreglladdr6/> | ||||||
|  |         <noregrecords/> | ||||||
|  |         <txtsupport/> | ||||||
|  |         <cacheflush/> | ||||||
|  |         <local_zone_type>transparent</local_zone_type> | ||||||
|  |         <outgoing_interface/> | ||||||
|  |         <enable_wpad/> | ||||||
|  |       </general> | ||||||
|  |       <advanced> | ||||||
|  |         <hideidentity/> | ||||||
|  |         <hideversion/> | ||||||
|  |         <prefetch/> | ||||||
|  |         <prefetchkey/> | ||||||
|  |         <aggressivensec>1</aggressivensec> | ||||||
|  |         <serveexpired/> | ||||||
|  |         <serveexpiredreplyttl/> | ||||||
|  |         <serveexpiredttl/> | ||||||
|  |         <serveexpiredttlreset/> | ||||||
|  |         <serveexpiredclienttimeout/> | ||||||
|  |         <qnameminstrict/> | ||||||
|  |         <extendedstatistics/> | ||||||
|  |         <logqueries/> | ||||||
|  |         <logreplies/> | ||||||
|  |         <logtagqueryreply/> | ||||||
|  |         <logservfail/> | ||||||
|  |         <loglocalactions/> | ||||||
|  |         <logverbosity>1</logverbosity> | ||||||
|  |         <valloglevel>0</valloglevel> | ||||||
|  |         <privatedomain/> | ||||||
|  |         <privateaddress>0.0.0.0/8,10.0.0.0/8,100.64.0.0/10,169.254.0.0/16,172.16.0.0/12,192.0.2.0/24,192.168.0.0/16,198.18.0.0/15,198.51.100.0/24,203.0.113.0/24,233.252.0.0/24,::1/128,2001:db8::/32,fc00::/8,fd00::/8,fe80::/10</privateaddress> | ||||||
|  |         <insecuredomain/> | ||||||
|  |         <msgcachesize/> | ||||||
|  |         <rrsetcachesize/> | ||||||
|  |         <outgoingnumtcp/> | ||||||
|  |         <incomingnumtcp/> | ||||||
|  |         <numqueriesperthread/> | ||||||
|  |         <outgoingrange/> | ||||||
|  |         <jostletimeout/> | ||||||
|  |         <cachemaxttl/> | ||||||
|  |         <cachemaxnegativettl/> | ||||||
|  |         <cacheminttl/> | ||||||
|  |         <infrahostttl/> | ||||||
|  |         <infrakeepprobing/> | ||||||
|  |         <infracachenumhosts/> | ||||||
|  |         <unwantedreplythreshold/> | ||||||
|  |       </advanced> | ||||||
|  |       <acls> | ||||||
|  |         <default_action>allow</default_action> | ||||||
|  |       </acls> | ||||||
|  |       <dnsbl> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <safesearch/> | ||||||
|  |         <type/> | ||||||
|  |         <lists/> | ||||||
|  |         <whitelists/> | ||||||
|  |         <blocklists/> | ||||||
|  |         <wildcards/> | ||||||
|  |         <address/> | ||||||
|  |         <nxdomain/> | ||||||
|  |       </dnsbl> | ||||||
|  |       <forwarding> | ||||||
|  |         <enabled/> | ||||||
|  |       </forwarding> | ||||||
|  |       <dots/> | ||||||
|  |       <hosts/> | ||||||
|  |       <aliases/> | ||||||
|  |       <domains/> | ||||||
|  |     </unboundplus> | ||||||
|  |   </OPNsense> | ||||||
|  |   <hasync version="1.0.0"> | ||||||
|  |     <disablepreempt>0</disablepreempt> | ||||||
|  |     <disconnectppps>0</disconnectppps> | ||||||
|  |     <pfsyncenabled>0</pfsyncenabled> | ||||||
|  |     <pfsyncinterface>lan</pfsyncinterface> | ||||||
|  |     <pfsyncpeerip/> | ||||||
|  |     <pfsyncversion>1400</pfsyncversion> | ||||||
|  |     <synchronizetoip/> | ||||||
|  |     <username/> | ||||||
|  |     <password/> | ||||||
|  |     <syncitems/> | ||||||
|  |   </hasync> | ||||||
|  |   <openvpn/> | ||||||
|  |   <ifgroups version="1.0.0"/> | ||||||
|  |   <gifs version="1.0.0"> | ||||||
|  |     <gif/> | ||||||
|  |   </gifs> | ||||||
|  |   <gres version="1.0.0"> | ||||||
|  |     <gre/> | ||||||
|  |   </gres> | ||||||
|  |   <laggs version="1.0.0"> | ||||||
|  |     <lagg/> | ||||||
|  |   </laggs> | ||||||
|  |   <virtualip version="1.0.0"> | ||||||
|  |     <vip/> | ||||||
|  |   </virtualip> | ||||||
|  |   <vlans version="1.0.0"> | ||||||
|  |     <vlan/> | ||||||
|  |   </vlans> | ||||||
|  |   <staticroutes version="1.0.0"> | ||||||
|  |     <route/> | ||||||
|  |   </staticroutes> | ||||||
|  |   <bridges> | ||||||
|  |     <bridged/> | ||||||
|  |   </bridges> | ||||||
|  |   <ppps> | ||||||
|  |     <ppp/> | ||||||
|  |   </ppps> | ||||||
|  |   <wireless> | ||||||
|  |     <clone/> | ||||||
|  |   </wireless> | ||||||
|  |   <ca/> | ||||||
|  |   <dhcpdv6/> | ||||||
|  |   <cert uuid="547102e9-23ba-48b8-8af8-64be61049e96"> | ||||||
|  |     <refid>6734d13fa9e4a</refid> | ||||||
|  |     <descr>Web GUI TLS certificate</descr> | ||||||
|  |     <caref/> | ||||||
|  |     <crt>LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUhIakNDQlFhZ0F3SUJBZ0lVSUhVRkpwc253VGtzYWRrZmRDNUp1SDhqWnZNd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZa3hIVEFiQmdOVkJBTU1GRTlRVG5ObGJuTmxMbXh2WTJGc1pHOXRZV2x1TVFzd0NRWURWUVFHRXdKTwpUREVWTUJNR0ExVUVDQXdNV25WcFpDMUliMnhzWVc1a01SVXdFd1lEVlFRSERBeE5hV1JrWld4b1lYSnVhWE14CkxUQXJCZ05WQkFvTUpFOVFUbk5sYm5ObElITmxiR1l0YzJsbmJtVmtJSGRsWWlCalpYSjBhV1pwWTJGMFpUQWUKRncweU5ERXhNVE14TmpFNE1EbGFGdzB5TlRFeU1UVXhOakU0TURsYU1JR0pNUjB3R3dZRFZRUUREQlJQVUU1egpaVzV6WlM1c2IyTmhiR1J2YldGcGJqRUxNQWtHQTFVRUJoTUNUa3d4RlRBVEJnTlZCQWdNREZwMWFXUXRTRzlzCmJHRnVaREVWTUJNR0ExVUVCd3dNVFdsa1pHVnNhR0Z5Ym1sek1TMHdLd1lEVlFRS0RDUlBVRTV6Wlc1elpTQnoKWld4bUxYTnBaMjVsWkNCM1pXSWdZMlZ5ZEdsbWFXTmhkR1V3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQwpEd0F3Z2dJS0FvSUNBUURKU1FlZ1RYckp5dDVWYmk0Rk9IeHJrOXhxQ21FRU54V2pINVVwNDBFK3hjUzZQU1NyCkNEclc3ZDlYcVJkOEpEZENtdGtLRGlMYWNaUzJMUm1abnd6VnRzZGtBR2pOYm5OM1hSNmlFajdGL0JnbVBlcDEKU2pJWnBTZzNkOS9YeHFPQTNZQllzTS9uUk9vWHlmTHcycFJOLzhHVjN3MHoxbVFZUitMZWI3UTFuc1c3dTJ5NworVHc5STZGU0J4bkdaR3RyUFl5NkVBb0NMdm1GQnFCYWxkWTQ2ejdlWjlIRkZXaE8ybWpaUzVPdTE3ZVozVHBxCnBRTVB1T2JxV3FyaE0xdjVjdmJodU5kREhNZ3ZVVFVnQ0RNK2FkS3dIc0dNNGw5ZGtOQTgxdGlJcXpzN1BqcjEKUm0wMlVuUXRneW8zY3hPRXVsYk9nU0hsdGhTMmtUMXE2UmhyemYvRGRJSEhta1RROGtwWVloWGc0VmpMQVdpSQpQbm9ncnZsRUlWMERhQ3ZEMjZiRkRDbVkxc29FbDV1NGtYanJScDRXK29NUVRHeG80NzFMQnNBMlh1Si82ZFJBCkJMVzh4dXBFODhEYmlrWW51NVdQaUp6ZXh4UVIyNU1FQVd6TCtKK0lubFExbmpMVWwyN3R0c1VQQ1VjL3c0NXoKcHBERHYwZnU0Nnp1S3EzY0VWRitiREsrQWdlT0Q2SXNzUjVRRTdFNVdkWjYrNWl6ZHB4eWdUeGh0L1k1RlBkSApHQjlCbDFrejR4bHRhczlvbmZrSDFkVHk3dzFNck43Z1l5WjgvS0pMWW9EY2NBOVFuNGt6bGtPeFVUMENuS1ExCmtWNk90aFRsVFgzK2duaUpJK3RXWUQ5bTRldXNzYWN1anpyWDl5TTNZcEloMnZqODJ0NHpPNjIrNFFJREFRQUIKbzRJQmVqQ0NBWFl3Q1FZRFZSMFRCQUl3QURBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQmtBd05BWUpZSVpJQVliNApRZ0VOQkNjV0pVOVFUbk5sYm5ObElFZGxibVZ5WVhSbFpDQlRaWEoyWlhJZ1EyVnlkR2xtYVdOaGRHVXdIUVlEClZSME9CQllFRkJRZytucWI5QW9HSWtoTUxhNHFzWGRvY0JGcE1JR3pCZ05WSFNNRWdhc3dnYWloZ1kra2dZd3cKZ1lreEhUQWJCZ05WQkFNTUZFOVFUbk5sYm5ObExteHZZMkZzWkc5dFlXbHVNUXN3Q1FZRFZRUUdFd0pPVERFVgpNQk1HQTFVRUNBd01XblZwWkMxSWIyeHNZVzVrTVJVd0V3WURWUVFIREF4TmFXUmtaV3hvWVhKdWFYTXhMVEFyCkJnTlZCQW9NSkU5UVRuTmxibk5sSUhObGJHWXRjMmxuYm1Wa0lIZGxZaUJqWlhKMGFXWnBZMkYwWllJVUlIVUYKSnBzbndUa3NhZGtmZEM1SnVIOGpadk13SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQ0FJQwpNQXNHQTFVZER3UUVBd0lGb0RBZkJnTlZIUkVFR0RBV2doUlBVRTV6Wlc1elpTNXNiMk5oYkdSdmJXRnBiakFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQUZqNlQ1MmRIUklVMHJuZDE0d2dob2tjUkdrK0hIQloyTGlDRHpUeUwKNHdCeTJ1ZXJXQWdvYUZzeUlNQzhwWTBhWlc4TFlSd1BtRVB0OXlUS09ZZzF0NWtOUnk2RkF5akszeis5TGZTQwoxRlFpb0pma3FHRnhoc1IxV1R5RjBGNmJmM2tZRDZ4OWw1dEdqMXF3SndrekZWZWcvZGNtUVhvRTBmUDRqSFFvCmgxWXdiZ3pTa084TzRLUVhuWXVRM3g0bWdoZnBvR0hQM2xINlcybDJlWHpqSzllRjJtUG1ZS0p1M3JpSnkvL3gKRzhQWXBYNlNTN3RoVnNNeHF3cGJHbURXQXRuSnNrSmVsNDI1WUdOYlZ4YTNPOHE3RWxLNGFoNXpmai8wRnVwTgo3SnlqMWQyZjZFck14WlFnUi9EdmlUVnhISytRY1lBRXBqU2ZmZzBrRStpS1BlN0VYTVk1VU1aZUFTK1ZteG1LCjBPOWxaQXNpWUlEMzkwVjNTaDZxYjhoL2xMZ0V2NCtSNUw1VEpFaldYc0dQSUpGaHJNSFJWR1lhV3JIYWx3eHYKNjE5NFlpSXBEaUlHSVVSWGN1U3dNcndIQzN0bms2QVo2OW5CczVXT1JYM0NxOVhRRnVrVlA5eUMxQnRuSmFwbQpubUMzK3NtTTErRjkxUXlkVXJtbUxPNUVwUmtTMitBcmRTSklUR1NRNWt4L3VLNjhzV0QzVVdNNVRibUxrcWdOCkt6djZjemVCbzJiVExDT0JKUWJ4STFCckRPTUFMSDlCdXdUamVXdUVtWE9TWE1lTDFsejdhL2JZKzJxa1BSOVAKTE5IekE2QXZlVmxucDNaeFdqMjZFK3dwYnU5cHBaY0QzRGVHRnRnZzVJbUJ2ZDNWbjJ6UVc4a1ZMT1ZBdllSawptdWc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K</crt> | ||||||
|  |     <csr/> | ||||||
|  |     <prv>LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpSQUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1M0d2dna3FBZ0VBQW9JQ0FRREpTUWVnVFhySnl0NVYKYmk0Rk9IeHJrOXhxQ21FRU54V2pINVVwNDBFK3hjUzZQU1NyQ0RyVzdkOVhxUmQ4SkRkQ210a0tEaUxhY1pTMgpMUm1abnd6VnRzZGtBR2pOYm5OM1hSNmlFajdGL0JnbVBlcDFTaklacFNnM2Q5L1h4cU9BM1lCWXNNL25ST29YCnlmTHcycFJOLzhHVjN3MHoxbVFZUitMZWI3UTFuc1c3dTJ5NytUdzlJNkZTQnhuR1pHdHJQWXk2RUFvQ0x2bUYKQnFCYWxkWTQ2ejdlWjlIRkZXaE8ybWpaUzVPdTE3ZVozVHBxcFFNUHVPYnFXcXJoTTF2NWN2Ymh1TmRESE1ndgpVVFVnQ0RNK2FkS3dIc0dNNGw5ZGtOQTgxdGlJcXpzN1BqcjFSbTAyVW5RdGd5bzNjeE9FdWxiT2dTSGx0aFMyCmtUMXE2UmhyemYvRGRJSEhta1RROGtwWVloWGc0VmpMQVdpSVBub2dydmxFSVYwRGFDdkQyNmJGRENtWTFzb0UKbDV1NGtYanJScDRXK29NUVRHeG80NzFMQnNBMlh1Si82ZFJBQkxXOHh1cEU4OERiaWtZbnU1V1BpSnpleHhRUgoyNU1FQVd6TCtKK0lubFExbmpMVWwyN3R0c1VQQ1VjL3c0NXpwcEREdjBmdTQ2enVLcTNjRVZGK2JESytBZ2VPCkQ2SXNzUjVRRTdFNVdkWjYrNWl6ZHB4eWdUeGh0L1k1RlBkSEdCOUJsMWt6NHhsdGFzOW9uZmtIMWRUeTd3MU0Kck43Z1l5WjgvS0pMWW9EY2NBOVFuNGt6bGtPeFVUMENuS1Exa1Y2T3RoVGxUWDMrZ25pSkkrdFdZRDltNGV1cwpzYWN1anpyWDl5TTNZcEloMnZqODJ0NHpPNjIrNFFJREFRQUJBb0lDQUNPNnZpc1BIY3pzb1NjK2dkWkU1dGNNCnZkc240UDFIenVRd0VzRUcrVG1zanVWMVBZbExrbkE4OU1DQmdDejEyOFpMcU51ZlUwSDkxK1Uzbjd2MGJ1bVAKd3BpR2R4UUNOMlpZaGZ2RWE5YW1qMTNZYjBJbks3b0FKbUdrT254NW91UFl6YlBRblBNRE9WK0VKa2JwTWRxZgptOHdmOWg2OXYzSk03bUZJS0UrOVVZR252UjhuMkhETTNwR3FONEhQS1A4MkE0RXlvQ2d2a1BTelRxc052bU5ICnBOY0RURW5rNlNsWUhUVDNOSzJjVnBldUhMUzUrazlqNWI5elhUSlE5TkpVZlN6bnEvUmFpMUZVNDY1K0xpUjEKMGVPWDdnajFWUExOcGgwcWtQQy9ubW0vZStVMmZXUGZZb2FDcWkrQ0VwU2twQXlQZ1FZZTJsSG0rYVU4MzZ2UQpuaHZuL0p5ZHJDL1NyTUFZaXpOZFYyZjlHTkNwcE1SbUZyOS9saVJiNEFpSzRLSDRETGdSRUxHaDJLNzJuOFRLCkxUSVhIV3RacisyMWU4c0Mxbm5MSENnK21wMHBvSWJsbEtoYk9VTmVxR09yWm95NFBXdDZMQndFYzN0MG1wVEMKODhiSUpqMzFCQngzTGE1SUE5b0FNRi9lbHJYdFhhVnl4bm5yTHdjYzFNVWpCV20rZDVqbC9WOEdIcEJRd3pXYwpPNWdNSXlQNUIvdzBacUcyZjV1akZkOHo4dElmcEFRRTJSbDNxRUFYNU1NY1JQaFlTNDJqTWl4czc3TmtOVldQCkpqUVoxVDVXQTVKOUxEL2FKRkplQ2MvbjhpNldOQ3FzdEQ5OVNPTCsrTTBFQTlka2lLNWtOcXFZeXZuRG9SZVcKSW84eXhvVnpObURsWjBkSU9UUzlBb0lCQVFEb2tvMWxPS05FNlBWWmRRU3lmS0JOTEZNcEl1V1VVZmp0ODU4awpJTTB0TnNyS0d2N3NmYkt0dlMvOWgwMGluU2FyWTJ4amVETG91WEI5VzdKY1B1NjRoNHYwek1lbXRhdDRyTUJnClA5bkQ3MW00dERqS2ZrZDAza2tUbk4ySTBxYkwzeFVoTjNEQlJZTU9veDFMa2M4MFFFMHhSUEM1YmRJaXcwemEKTWdtK1dOZVY1VEZoSkpQZ2dVRVo5U1A2aWV1VEY0OW9wRGNWdGUwQ0I0WnFUaTRWb3YvZFVDWGpNK0djRnNWdgpPWTZYTE9KTmRldHdnUVNkd1hlSzB1WlBpWnVKTGlsTEg4OFVKYWNoQThDZW1SclMxRUtxWElwK2dkQWV4MnhVCmY5amRMMGF2SlJEY0xqWlhETXBvWlJpc0JoWVArZzY3VHZza3FscDh4M2p2STlWVkFvSUJBUURkajZrdWNLM0MKYXprMzlqYllvM3RFZ0R5L2VGNnBjWFlpK21Ba1ZNRk9vSWJ5cmNyN3BqSnRMNFMyMEFDRmpBUGFQT042dWVVWQpQQm92dC9QODB1V1c5cGZCK29mRmdadzRqc3hLWFY4eEJmOVdLWVZndFBsOHhIL1RJcERTMjhVTlowNDlhUW4vCjlCRzNac0lyenk3RzFLRTZPLzBMMnVmMnFyaUxxRFQyV3dsdFVsbWs2Ym5NeThkR0sra1JLcFhvSm1RTlNHRHoKOXd4blU2ZmZ1NDdDLzRYMHRIVk1MVFVneFh4djdqN3BpSzI4dzBuZ1N5S3ozV0IzWTJwaFVsZEJIdEprQko1RQpoRm8zMXJCVDU5enhkb2crYXh1bkh4S3EySGFHRkt0ZUZ6RGpkTTFpQzE3bWNtWXBzR2tuenA0cjRjZm5FYTFSCko4Wmo5ZVFQaEVOZEFvSUJBUUN3d2hsbXNkb2MySFVJVFZDSm13QjJSdGJaYitWT2lkS0lmdDBYcHpwcFA3aDIKVEhndEl3ZDIxayt2LzNJWGVaclhMWlJHTVNkNEN1QTgxa0ZEckt6Z1lGeDFiR0hkQ1R2T1ZuVkxjWnUvTjUxWQpMTmp3eFhMbmxyMnhnMG8zMytuWERyQlBjNFJsejcvZ2t3WUQxa2pGckkwK2dlZjI5a2w4RkRUSHJMb05DaGFuCm5PNmZweDRneGZ2Rmo3T05pZDhhQnhEK2RiaEw3dDIzNmlJMWp6K2xRQ0g0Z1I2YWhHYldxOVBZU2NWZWprVmMKbTkrWnZPVFdSU0RteUkwMExDQ2k3UXVEUmlTcmFrYVFaL3F3VHlxOHk0ZnpWS3dKby8yYU52VFZiK2xSaWNuTgorWHpMNnU5dno0L1NNZXZEYWtqQVVjdDZmbmVQa1UxK2dsZ2VZSHlWQW9JQkFRRFJtYW0wVEZhbFdXaHMvNWtOClEwTkhINFhZb1JmMGRta0xXQStCNzBoY2lOS0JYRlp0ME9GZGw1bVdsSm9adk1hY1BBUDd3MGJ1c1ZVWWxZN1YKTy9LRTZVM1I3WjlxQWw1Mnh1aU81Vnc3ZFhBRDVBM1EyZ1EzdTNFdG5VS2lwOVA0QlNYb1JLbDRJVDV0WVdJSgpyZHVUciszQ3VLT0FCcHh4Snpxa3JBRkdtZ01HRCtUTWRXd1hTU1NBeHVPYklNMW1MSU4wYVdlSEJNMFFKdnptClZIb1BFVXA1b0FwamdWVUVacTk4K0VjK0NOWkxmL2d3bndQNllsQnpRWEtQRlNXRWJwTWNtWjNjTmRWZmc5T1YKM1FDUTBkQzhNL21hRlhSRWVibE95TmtCanpEcHpVTExJUFNyVDhoRVlpWm95VGVyVGRJZVVBUEZoYnBTTUhtTApFRlhsQW9JQkFRQ0VUdVJQRHZvMC9tdDhyTzhLNENsamtuU0gxZ1FBSjFha3U3UXg3NUJUTDB6OWRNY2lMK1JLCng1R1lFTW1wcUtNb2FPbWc0WFVRMVRlQ2Vic1R0NjMyWXp6cmNCU0d1RzVnN1o0UUVublUzRXU5QklIMUVSL2gKSEk0NWowU0xNRUpObkNiTkpnRVNRRUFCbzN3cHhrRTdiRGlNdTVPOXVqMlFRVTlTTm94QkFmbVFXRDJJaU1BRQpWYzV3QTNZajBMdElSYkJmdzNBTE9uNlRSc2xucy9JMnd2Z1RCQW9sU3NZbEtEK0NRY3hDZldlNmZwU21aYmlCClBGUE9DY1ZQTXhGeXBhZWFJMkRXNWRPNFNoNGQ0ZlZma2F3ck9LN1N2QnFZb0Y5L2VndThzQS9ZdklaRVltQUQKd0ZIOGs1QjJ4WXdiNkVmNmFFQ29ZTitsNWtlWmhNWTgKLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=</prv> | ||||||
|  |   </cert> | ||||||
|  |   <cert uuid="cad18e13-92c5-48b6-9b44-ad2e5dcc799e"> | ||||||
|  |     <refid>6734d6c82dc59</refid> | ||||||
|  |     <descr>Web GUI TLS certificate</descr> | ||||||
|  |     <caref/> | ||||||
|  |     <crt>LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUhIakNDQlFhZ0F3SUJBZ0lVZkNETXpFclQ4dlVoenJaTVJta3JiT3dnSUdNd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZa3hIVEFiQmdOVkJBTU1GRTlRVG5ObGJuTmxMbXh2WTJGc1pHOXRZV2x1TVFzd0NRWURWUVFHRXdKTwpUREVWTUJNR0ExVUVDQXdNV25WcFpDMUliMnhzWVc1a01SVXdFd1lEVlFRSERBeE5hV1JrWld4b1lYSnVhWE14CkxUQXJCZ05WQkFvTUpFOVFUbk5sYm5ObElITmxiR1l0YzJsbmJtVmtJSGRsWWlCalpYSjBhV1pwWTJGMFpUQWUKRncweU5ERXhNVE14TmpReE5EVmFGdzB5TlRFeU1UVXhOalF4TkRWYU1JR0pNUjB3R3dZRFZRUUREQlJQVUU1egpaVzV6WlM1c2IyTmhiR1J2YldGcGJqRUxNQWtHQTFVRUJoTUNUa3d4RlRBVEJnTlZCQWdNREZwMWFXUXRTRzlzCmJHRnVaREVWTUJNR0ExVUVCd3dNVFdsa1pHVnNhR0Z5Ym1sek1TMHdLd1lEVlFRS0RDUlBVRTV6Wlc1elpTQnoKWld4bUxYTnBaMjVsWkNCM1pXSWdZMlZ5ZEdsbWFXTmhkR1V3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQwpEd0F3Z2dJS0FvSUNBUURMc0xEbjRta1R4RXJYdHdqTXoxencyeHJhNTZ5bTYrYzlRNEM3UjMyMzVuWjVPM1ovCnczL2tNV2Y5L25GbGpnMkFXWERJSmNXZjk0NFJFblFMdmlha2NNTHR1Qm1KTVRYZnVQWnhsSWE4Wlc0S0ZuT20KVFM0WXFCVzhHQkpJd0xtQ2kxb2RoWXhmUEQ2TFdEZnZYMm1tWEIrUFNxL0l4WEhOSjdxZVB4YzVuSzUyMW1uNQpuQ0FtZFBDY2JmdmdXdUM2TnhWbXpkeXpta1QvNnVqRUJFYTZ6RkQyUUtDN1N6a2ptZUNpd2VDQjc5NjZqeEV5ClFrVlFqYlQ5MFlyeENvdE8rbTJIQU5QZHNjT3FvNldXMEhmSlNpa2k4K2NDWHlzbGRFSzFZbmxueTNFWlVqTEwKVmplRS9XQVU0Q1BZUmhYVFVGVTIxZFV2azNvYUVpeldVdmhKc1FHYnh2aFRUQlN3aVliOUQ3Ymx1MWl4UzJxNwo3Mzk5VWdRN3FTNUFhOElHbXA4NUNoUUlBWUVjSTd6RGVWTGtrOGpkWkFCaTdGbDl0M05OQTU3WlVZVzErWE45CitUZ3ljMTlTbGoxVW1RdkRvekxCQzk5TVJpLzREQTIxRFpIODY3ekFYenFqZWUrckorQkZvNzVEQjlqd2tMTmUKUGVpemxRenRIWmpSU0tnaWdSNU9KSmtSVHIvNjduaTBtbzVITGNkU3hBSDFmdXdXS0hWS2RHQlQrNjhhYkUrZwprUSsrVDhMenVhK1FtakxOUVFqMVJCSFYzSzVQL3dvbXJKZG02d1ZLbm85RXlNait4azFwS05wb0F4UnR1WllmCkNEVVVQWjR1cEJtbzBLN3dGNHdtV3VXYSttVndlb1ZTcDRXMEhOWVJGU1pyWWxrc1AzdWViSHcva1FJREFRQUIKbzRJQmVqQ0NBWFl3Q1FZRFZSMFRCQUl3QURBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQmtBd05BWUpZSVpJQVliNApRZ0VOQkNjV0pVOVFUbk5sYm5ObElFZGxibVZ5WVhSbFpDQlRaWEoyWlhJZ1EyVnlkR2xtYVdOaGRHVXdIUVlEClZSME9CQllFRktidDd0QkRKN1daV1lMblQ5cEhTMklPdTg1TU1JR3pCZ05WSFNNRWdhc3dnYWloZ1kra2dZd3cKZ1lreEhUQWJCZ05WQkFNTUZFOVFUbk5sYm5ObExteHZZMkZzWkc5dFlXbHVNUXN3Q1FZRFZRUUdFd0pPVERFVgpNQk1HQTFVRUNBd01XblZwWkMxSWIyeHNZVzVrTVJVd0V3WURWUVFIREF4TmFXUmtaV3hvWVhKdWFYTXhMVEFyCkJnTlZCQW9NSkU5UVRuTmxibk5sSUhObGJHWXRjMmxuYm1Wa0lIZGxZaUJqWlhKMGFXWnBZMkYwWllJVWZDRE0KekVyVDh2VWh6clpNUm1rcmJPd2dJR013SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQ0FJQwpNQXNHQTFVZER3UUVBd0lGb0RBZkJnTlZIUkVFR0RBV2doUlBVRTV6Wlc1elpTNXNiMk5oYkdSdmJXRnBiakFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQWNQbmllQ29FSmRjV25CVHdqRmE3bjZqTFMrZ1pUYUk2ZjAzWktQMFYKQ0pSaDUxWTNwb2dpcnJYcVNHQ1VGTVNHbGpsQ21mU2VhdW9GWFYwanZLejhnMGZ1NU9kYlhjd2FrZFBZSXgydQpVT0dMbllTaEdCNlpoMmhpWWdSVGFpemJoTVliQitzQkV4QU1CdHZRZElSZ3dBWkRNWE9jY0MwZnJaMFhRRlRFCnQ3by82VGYvZEprdnB0cmRYWW1INnFUWlA2MGxyTnlabVloTjc1NEluOFZLRVVSRWNZamg1ejlJanA1NTE1cU0Kb0VrSGNKbTBDNkh2VStETG1ybFpFYkV4bnVOMFQzWTBNZ0hiVFVhU2Y1L2FKVmlIM0dOMnMzbG1ZM0VXTS9Vcwo3azFyc2JTa2orZzJvQXlTcjU0Nlc4RkdaMjliZFlOYk1EaTQ4aXVRQWlzRlQrTGZXN3Y3RVl3WGJ3NUhSVkpNCjV2MlhnenJwN2Yxa08zckEzeXUyS1VSSktHdjJ1ZXhNSythb1VOZXhRT3ludmZGUTBCemRHQ1dlcmVvZTZ3bDMKbHc4Z2dCWDI1VGIxbzR3d1UzNXdtUUIrMC9rbjB0SXoveVBhY2JzbDAwZ0dJNFhTbWpRQmF0MUZYRHFEME1JMgp4S0RqMXZ2dkNTVnRKc09ESG95eDhLc3ptbno5UVFoV0ZNeC9LTXp1clh0OWtsWFRJc0t3d2NXMytZQWtQMzNaClgvOGJnZS8zK2RibTdNN3BndmFBNVFlU3VTbkwzNjdLT1g1NlNZNGFZWHhkc1haVDc0ZGxVRU1jbG9NU0NIOG4KR25QWlpyWTNHdnZaU2ovQWdqT2lDNHNBL2JSSmh4cCtUQndlRFByR0pFUEJFVW9sZEZHVXdraFJXMVVuRlc2YwpyTGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K</crt> | ||||||
|  |     <csr/> | ||||||
|  |     <prv>LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1N3d2dna29BZ0VBQW9JQ0FRRExzTERuNG1rVHhFclgKdHdqTXoxencyeHJhNTZ5bTYrYzlRNEM3UjMyMzVuWjVPM1ovdzMva01XZjkvbkZsamcyQVdYRElKY1dmOTQ0UgpFblFMdmlha2NNTHR1Qm1KTVRYZnVQWnhsSWE4Wlc0S0ZuT21UUzRZcUJXOEdCSkl3TG1DaTFvZGhZeGZQRDZMCldEZnZYMm1tWEIrUFNxL0l4WEhOSjdxZVB4YzVuSzUyMW1uNW5DQW1kUENjYmZ2Z1d1QzZOeFZtemR5em1rVC8KNnVqRUJFYTZ6RkQyUUtDN1N6a2ptZUNpd2VDQjc5NjZqeEV5UWtWUWpiVDkwWXJ4Q290TyttMkhBTlBkc2NPcQpvNldXMEhmSlNpa2k4K2NDWHlzbGRFSzFZbmxueTNFWlVqTExWamVFL1dBVTRDUFlSaFhUVUZVMjFkVXZrM29hCkVpeldVdmhKc1FHYnh2aFRUQlN3aVliOUQ3Ymx1MWl4UzJxNzczOTlVZ1E3cVM1QWE4SUdtcDg1Q2hRSUFZRWMKSTd6RGVWTGtrOGpkWkFCaTdGbDl0M05OQTU3WlVZVzErWE45K1RneWMxOVNsajFVbVF2RG96TEJDOTlNUmkvNApEQTIxRFpIODY3ekFYenFqZWUrckorQkZvNzVEQjlqd2tMTmVQZWl6bFF6dEhaalJTS2dpZ1I1T0pKa1JUci82CjduaTBtbzVITGNkU3hBSDFmdXdXS0hWS2RHQlQrNjhhYkUrZ2tRKytUOEx6dWErUW1qTE5RUWoxUkJIVjNLNVAKL3dvbXJKZG02d1ZLbm85RXlNait4azFwS05wb0F4UnR1WllmQ0RVVVBaNHVwQm1vMEs3d0Y0d21XdVdhK21Wdwplb1ZTcDRXMEhOWVJGU1pyWWxrc1AzdWViSHcva1FJREFRQUJBb0lDQUFzc3hPL2IzSTd3a0hpWU9wdmQ3b2ZxClJXVm9HM0ZHOVBkSCtrcU1DQW9zVXlpZ2lnWkZhQUZSY3BhZFBJUnBVRFZQOHQrUUx2RHhTSEtJVkNTR3lLRHgKN01mVTkxV3ZCUGtpc1NhWEV2TklEMHJ2WTJYbXl4WWdOcDBNcHdnbHhxZXlWSDNWSTFmZ09zQXpWVkpGSmtzeAp0NnVKV2U2R1lwRnlVZ3MzZytNdHhPYVJLZHcvWkFZb0dVRkR5WE5NR1JNdVRYYkg2WWxTOStFZ2RxZTJZbGtDCk41amkvODUydUlwSytXZUVnbmd1ZkVZNDdpVVhQSzFJTVB0UjRURUxOb3hkTWVBYnZBUG9La2QwMWZOWnVaQ3EKQ0dxNS9kMEQ4cDZKNjlUK3M1RnR1R1UrdkxtcUg3NmtsZjVmTTZnOFpCc2xSNStNQ0xlay9DaHRBZGU2VXBQRApXQ2EwazU3dmdneUdQdGVlVXY2RVJBMEp6SjlJd2VHZGdVWHhNdW5LK3ZSNWYydWJKWFJoMVJpNTNFSTNvVUxYClFvWm9hOTY3VzNUajQ3UzR2RlQyK2dLb0g2OXlNckdVNVkwcjJrSTFXMVVhWEJ1aVVrMi94amdyWVdTblUzUUQKZkM3ZXllTlNlN3c4UW9MMVBEYXJwVXdaK2xGZ0w3NFVScldLQU12WVhxa3NTMHVtb0tTSWo4cjZMM0hVSUVaUgpZRzhBTU91dFhrQk5lMkNpTXRKM2NYUXNIOWloQU9QL3AvaE9BTTBGNkM3Ymt1Vm85d1pRdDVESWxRWUl4TlArClFRZ2doRnhBNTlTWmpwRk00QkN5L0hEOENJY3VuSURZOVNlbXNSYXdyUVY1eGk1akFScVdOYTdBSVMvVlArdUUKQkpmS0dDNFlZVmxqS1VLeEgxVUJBb0lCQVFEcnZOWXNrd3ZhQ2Z6MlcvbkIrRjNjVE1RbjM2RENSYnZwQ0s1dApldm96TjJGbjBJdWFnN2RrYzN2NTFxTVNEd0h1cVNkVTRHUHZMcm83alpJaFNEZ1AwLzBLWmc0VmxtZE5HbEovCk1lcXhmOGRkOFdTQjZiUksrK2FRcEhaeDd2SUFTWkE4eHkvZ3F2NGJpSmlqVDhUQ2lSeXdYSTQ0ZlRYM0xLZTIKVG1Uc29XNk9yQmErSWJRYjBpTEh4WE4rZ3JDM0cxWWxIUlNvTEpKUkU0eFVLMGsvM1JLNU16RjRIYUNZb1BWOQpDOFpQellMR253SE9ERU8zbHRtSGJvQUNFa0VrT2dFV3U4RFo2YlYrMXJBcVh6WnN0L3hNZnJ5KzlMRVdYQUwvCkRnOEdkall0YzdyUTFZd1BIY1h6cFo2clVIdXh2K0p6VEE1ZzNCS1p6aWhwNFdHaEFvSUJBUURkTXE3N0dRWGMKYW5hYlMxanlFT3VzNFp5ZlJ4cW10NEVFaHZjY0dRVVVrV0IrWk11bnpyaENxb3ZwQ1dhVU9zWVhuNG45Y3BQSAo3bm1mOUJHbFI4NVhCVHNLM2d4bE5NMUhjSGFTNXZSem9WQVBNd3o2VVV0ZFNLWXRLR0Q3Wkxmbm9ISXN1SlEzCnJ6WWIyTFhpVmx6MWlNNUVmT0VrL1J5UjBwMGtleXVwa0F0OXBRV0hzaURYb0pibDE2d1ZLc2NDNGUzNjdRRWsKcFdoeXcyS3A4bXdtOGxqQllxZWtHdUREeGVZSDMzMVlGa2FMUEJCT2xPQnlveFlOUDdBVVREUlV3KzB1T01jNwozb0N1VE9jWnAxVWMwQURBOXRTRVRINklWdlFEUXZlYzR6MWRTVGRmUEkxRzVUTCt4Mzlvam5OcGVoYng0bEwvCmRxTTBmcFlPL2ZmeEFvSUJBRmwzOU8wNzdjNlY1ZHoyY1djTnhVbThGT0p4UEVrZlFEOGtYVmNOeW5HdnZoY3gKamhwWmpUdmhuSmJvd0VFMVV1MXFZNVFTQ2J1WVIzUWN1ZTVKdzRVMlZwNGd0NDIzNUlMZHo1dVlyVk1xaE5jQgpxN3ltbnhlcVhRcGVjTm15NzBQdXA0QjV0SkVYTkpQc2xzbThsNWVoaERMbkhjOFFybStlRWhUZDBlNEJJcjJoClVJeGVyRVcyemg1MXNPeTkyeVhUaVRGU3hTbENxVkYrRXM5TEVtVGJtYVNTYWw4RkY1TjEyMVhYSnkvWWRwNjkKY0dqc1BMTXIzR2xMSmVnalYzZlJUK0o1NWFxT3lhUlhCTXRBRVo3WGdUampETzJJWHNGMnNHaHV4SU1XVUYrVgp3YnhLbi9xSXVUMU1pVmpKbGZpVE0vWEFVdUN1QlowOEloaDFRcUVDZ2dFQUZwdzJySzRMSGxPM21mb2l0bU9xClkzcVFVdXVtdXNIcEt6aE1qQSsycURxUC9YdDZJY1lNcWF2YkwwL3ByMTh1bm4yTlVsM2k0ejNxS3NKOUIwTUcKd1hoa1o2RDQ3V052VkUwWG9iNS80RTN0N0EvUTFNbDRoYW1HYXZsRXFJM01DcDRvN1k5VWZ6aW10RVA3bTQ0dQpaRjYranR1ZysvSHZlS3hwcWEvNWI1U3N5QVFWUTZDZW9Ndm1nTW9CNmd2OFdid1VZbURWakJSb1Q4clBEQVllCnJnQjV1QkxJaGdyRlROMnV2TUZJZzdlTE1ISk1UR3dGWVZKd1Q1eGgrRUV0M0RoR3gwSEFnOHNqcGkxd05md1gKeENFeTRvYVloSWw1S2FDUndyK1dwZS9JZHYrajdGVTVMN1QvK0hFV0FlOEZ0eE5td3dUYWJRaUllRFkwU29ZRgpVUUtDQVFFQXRiclZqbTFsaDQ1REhIWnVsem4xNllIQzJrMUYwWG9FZFVSQ3o0QTFsMHBEK3ljL2srdmJ0Qmg0Cm1RRDV1a3FicHFFZy9GNUhDZmdOaHlieHNNdVV6NzFaU24zN2dwczNDWUdiUyt4RkhjZTJBakNTbUlYQWIxQjgKR0Z2WnV4UlB5QXU0YVBvT1J3RzM3NVBOM0VNNk83bzdxbjlYeExTZWRIMHExM2U0YkhYYm4rc2xOa1RIM2xmcwpLVnBOUUhVSUNDSW5vQ0llV1dwdnAwQnFoYjlKclRsbXd2c25zOHpZVDNiY3F5QXZHZGRnNUs3Y0MwRVJaem9ECnFJTkI3S05FVjQ1NmF0eDZVT3VYUlpKREMvaHNJUTZNaVBveUJacHRsK1ZIMEtQbEFIWGExb0FXZmNuL0U3MFYKK0RaeVBiMWxkQUdpb1hqditGd2h5VzZlWEVrQlBnPT0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=</prv> | ||||||
|  |   </cert> | ||||||
|  |   <syslog/> | ||||||
|  | </opnsense> | ||||||
| @ -0,0 +1,994 @@ | |||||||
|  | <?xml version="1.0"?> | ||||||
|  | <opnsense> | ||||||
|  |   <theme>opnsense</theme> | ||||||
|  |   <sysctl> | ||||||
|  |     <item> | ||||||
|  |       <descr>Increase UFS read-ahead speeds to match the state of hard drives and NCQ.</descr> | ||||||
|  |       <tunable>vfs.read_max</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set the ephemeral port range to be lower.</descr> | ||||||
|  |       <tunable>net.inet.ip.portrange.first</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Drop packets to closed TCP ports without returning a RST</descr> | ||||||
|  |       <tunable>net.inet.tcp.blackhole</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Do not send ICMP port unreachable messages for closed UDP ports</descr> | ||||||
|  |       <tunable>net.inet.udp.blackhole</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Randomize the ID field in IP packets</descr> | ||||||
|  |       <tunable>net.inet.ip.random_id</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr> | ||||||
|  |         Source routing is another way for an attacker to try to reach non-routable addresses behind your box. | ||||||
|  |         It can also be used to probe for information about your internal networks. These functions come enabled | ||||||
|  |         as part of the standard FreeBSD core system. | ||||||
|  |       </descr> | ||||||
|  |       <tunable>net.inet.ip.sourceroute</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr> | ||||||
|  |         Source routing is another way for an attacker to try to reach non-routable addresses behind your box. | ||||||
|  |         It can also be used to probe for information about your internal networks. These functions come enabled | ||||||
|  |         as part of the standard FreeBSD core system. | ||||||
|  |       </descr> | ||||||
|  |       <tunable>net.inet.ip.accept_sourceroute</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr> | ||||||
|  |         This option turns off the logging of redirect packets because there is no limit and this could fill | ||||||
|  |         up your logs consuming your whole hard drive. | ||||||
|  |       </descr> | ||||||
|  |       <tunable>net.inet.icmp.log_redirect</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)</descr> | ||||||
|  |       <tunable>net.inet.tcp.drop_synfin</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable sending IPv6 redirects</descr> | ||||||
|  |       <tunable>net.inet6.ip6.redirect</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable privacy settings for IPv6 (RFC 4941)</descr> | ||||||
|  |       <tunable>net.inet6.ip6.use_tempaddr</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Prefer privacy addresses and use them over the normal addresses</descr> | ||||||
|  |       <tunable>net.inet6.ip6.prefer_tempaddr</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Generate SYN cookies for outbound SYN-ACK packets</descr> | ||||||
|  |       <tunable>net.inet.tcp.syncookies</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum incoming/outgoing TCP datagram size (receive)</descr> | ||||||
|  |       <tunable>net.inet.tcp.recvspace</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum incoming/outgoing TCP datagram size (send)</descr> | ||||||
|  |       <tunable>net.inet.tcp.sendspace</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Do not delay ACK to try and piggyback it onto a data packet</descr> | ||||||
|  |       <tunable>net.inet.tcp.delayed_ack</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum outgoing UDP datagram size</descr> | ||||||
|  |       <tunable>net.inet.udp.maxdgram</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Handling of non-IP packets which are not passed to pfil (see if_bridge(4))</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_onlyip</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set to 1 to additionally filter on the physical interface for locally destined packets</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_local_phys</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set to 0 to disable filtering on the incoming and outgoing member interfaces.</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_member</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set to 1 to enable filtering on the bridge interface</descr> | ||||||
|  |       <tunable>net.link.bridge.pfil_bridge</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Allow unprivileged access to tap(4) device nodes</descr> | ||||||
|  |       <tunable>net.link.tap.user_open</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())</descr> | ||||||
|  |       <tunable>kern.randompid</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Disable CTRL+ALT+Delete reboot from keyboard.</descr> | ||||||
|  |       <tunable>hw.syscons.kbd_reboot</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable TCP extended debugging</descr> | ||||||
|  |       <tunable>net.inet.tcp.log_debug</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Set ICMP Limits</descr> | ||||||
|  |       <tunable>net.inet.icmp.icmplim</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>TCP Offload Engine</descr> | ||||||
|  |       <tunable>net.inet.tcp.tso</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>UDP Checksums</descr> | ||||||
|  |       <tunable>net.inet.udp.checksum</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum socket buffer size</descr> | ||||||
|  |       <tunable>kern.ipc.maxsockbuf</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Page Table Isolation (Meltdown mitigation, requires reboot.)</descr> | ||||||
|  |       <tunable>vm.pmap.pti</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Disable Indirect Branch Restricted Speculation (Spectre V2 mitigation)</descr> | ||||||
|  |       <tunable>hw.ibrs_disable</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Hide processes running as other groups</descr> | ||||||
|  |       <tunable>security.bsd.see_other_gids</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Hide processes running as other users</descr> | ||||||
|  |       <tunable>security.bsd.see_other_uids</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Enable/disable sending of ICMP redirects in response to IP packets for which a better, | ||||||
|  |         and for the sender directly reachable, route and next hop is known. | ||||||
|  |       </descr> | ||||||
|  |       <tunable>net.inet.ip.redirect</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |       <descr>Maximum outgoing UDP datagram size</descr> | ||||||
|  |       <tunable>net.local.dgram.maxdgram</tunable> | ||||||
|  |       <value>default</value> | ||||||
|  |     </item> | ||||||
|  |   </sysctl> | ||||||
|  |   <system> | ||||||
|  |     <optimization>normal</optimization> | ||||||
|  |     <hostname>OPNsense</hostname> | ||||||
|  |     <domain>localdomain</domain> | ||||||
|  |     <dnsallowoverride>1</dnsallowoverride> | ||||||
|  |     <group> | ||||||
|  |       <name>admins</name> | ||||||
|  |       <description>System Administrators</description> | ||||||
|  |       <scope>system</scope> | ||||||
|  |       <gid>1999</gid> | ||||||
|  |       <member>0</member> | ||||||
|  |       <priv>page-all</priv> | ||||||
|  |     </group> | ||||||
|  |     <user> | ||||||
|  |       <name>root</name> | ||||||
|  |       <descr>System Administrator</descr> | ||||||
|  |       <scope>system</scope> | ||||||
|  |       <groupname>admins</groupname> | ||||||
|  |       <password>$2y$10$YRVoF4SgskIsrXOvOQjGieB9XqHPRra9R7d80B3BZdbY/j21TwBfS</password> | ||||||
|  |       <uid>0</uid> | ||||||
|  |     </user> | ||||||
|  |     <nextuid>2000</nextuid> | ||||||
|  |     <nextgid>2000</nextgid> | ||||||
|  |     <timezone>Etc/UTC</timezone> | ||||||
|  |     <timeservers>0.opnsense.pool.ntp.org 1.opnsense.pool.ntp.org 2.opnsense.pool.ntp.org 3.opnsense.pool.ntp.org</timeservers> | ||||||
|  |     <webgui> | ||||||
|  |       <protocol>https</protocol> | ||||||
|  |       <ssl-certref>6734d6c82dc59</ssl-certref> | ||||||
|  |       <port/> | ||||||
|  |       <ssl-ciphers/> | ||||||
|  |       <interfaces/> | ||||||
|  |       <compression/> | ||||||
|  |     </webgui> | ||||||
|  |     <disablenatreflection>yes</disablenatreflection> | ||||||
|  |     <usevirtualterminal>1</usevirtualterminal> | ||||||
|  |     <disableconsolemenu>1</disableconsolemenu> | ||||||
|  |     <disablevlanhwfilter>1</disablevlanhwfilter> | ||||||
|  |     <disablechecksumoffloading>1</disablechecksumoffloading> | ||||||
|  |     <disablesegmentationoffloading>1</disablesegmentationoffloading> | ||||||
|  |     <disablelargereceiveoffloading>1</disablelargereceiveoffloading> | ||||||
|  |     <ipv6allow>1</ipv6allow> | ||||||
|  |     <powerd_ac_mode>hadp</powerd_ac_mode> | ||||||
|  |     <powerd_battery_mode>hadp</powerd_battery_mode> | ||||||
|  |     <powerd_normal_mode>hadp</powerd_normal_mode> | ||||||
|  |     <bogons> | ||||||
|  |       <interval>monthly</interval> | ||||||
|  |     </bogons> | ||||||
|  |     <pf_share_forward>1</pf_share_forward> | ||||||
|  |     <lb_use_sticky>1</lb_use_sticky> | ||||||
|  |     <ssh> | ||||||
|  |       <group>admins</group> | ||||||
|  |       <noauto>1</noauto> | ||||||
|  |       <interfaces/> | ||||||
|  |       <kex/> | ||||||
|  |       <ciphers/> | ||||||
|  |       <macs/> | ||||||
|  |       <keys/> | ||||||
|  |       <keysig/> | ||||||
|  |       <enabled>enabled</enabled> | ||||||
|  |       <passwordauth>1</passwordauth> | ||||||
|  |       <permitrootlogin>1</permitrootlogin> | ||||||
|  |     </ssh> | ||||||
|  |     <rrdbackup>-1</rrdbackup> | ||||||
|  |     <netflowbackup>-1</netflowbackup> | ||||||
|  |     <firmware version="1.0.1"> | ||||||
|  |       <mirror/> | ||||||
|  |       <flavour/> | ||||||
|  |       <plugins/> | ||||||
|  |       <type/> | ||||||
|  |       <subscription/> | ||||||
|  |       <reboot/> | ||||||
|  |     </firmware> | ||||||
|  |     <dnsserver>192.168.5.1</dnsserver> | ||||||
|  |     <language>en_US</language> | ||||||
|  |     <serialspeed>115200</serialspeed> | ||||||
|  |     <primaryconsole>video</primaryconsole> | ||||||
|  |     <secondaryconsole>serial</secondaryconsole> | ||||||
|  |   </system> | ||||||
|  |   <interfaces> | ||||||
|  |     <lan> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <if>le1</if> | ||||||
|  |       <ipaddr>10.100.8.1</ipaddr> | ||||||
|  |       <subnet>24</subnet> | ||||||
|  |       <ipaddrv6>track6</ipaddrv6> | ||||||
|  |       <subnetv6>64</subnetv6> | ||||||
|  |       <media/> | ||||||
|  |       <mediaopt/> | ||||||
|  |       <track6-interface>wan</track6-interface> | ||||||
|  |       <track6-prefix-id>0</track6-prefix-id> | ||||||
|  |     </lan> | ||||||
|  |     <lo0> | ||||||
|  |       <internal_dynamic>1</internal_dynamic> | ||||||
|  |       <descr>Loopback</descr> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <if>lo0</if> | ||||||
|  |       <ipaddr>127.0.0.1</ipaddr> | ||||||
|  |       <ipaddrv6>::1</ipaddrv6> | ||||||
|  |       <subnet>8</subnet> | ||||||
|  |       <subnetv6>128</subnetv6> | ||||||
|  |       <type>none</type> | ||||||
|  |       <virtual>1</virtual> | ||||||
|  |     </lo0> | ||||||
|  |     <wan> | ||||||
|  |       <if>le0</if> | ||||||
|  |       <descr/> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <spoofmac/> | ||||||
|  |       <ipaddr>dhcp</ipaddr> | ||||||
|  |       <dhcphostname/> | ||||||
|  |       <alias-address/> | ||||||
|  |       <alias-subnet>32</alias-subnet> | ||||||
|  |       <dhcprejectfrom/> | ||||||
|  |       <adv_dhcp_pt_timeout/> | ||||||
|  |       <adv_dhcp_pt_retry/> | ||||||
|  |       <adv_dhcp_pt_select_timeout/> | ||||||
|  |       <adv_dhcp_pt_reboot/> | ||||||
|  |       <adv_dhcp_pt_backoff_cutoff/> | ||||||
|  |       <adv_dhcp_pt_initial_interval/> | ||||||
|  |       <adv_dhcp_pt_values>SavedCfg</adv_dhcp_pt_values> | ||||||
|  |       <adv_dhcp_send_options/> | ||||||
|  |       <adv_dhcp_request_options/> | ||||||
|  |       <adv_dhcp_required_options/> | ||||||
|  |       <adv_dhcp_option_modifiers/> | ||||||
|  |       <adv_dhcp_config_advanced/> | ||||||
|  |       <adv_dhcp_config_file_override/> | ||||||
|  |       <adv_dhcp_config_file_override_path/> | ||||||
|  |     </wan> | ||||||
|  |   </interfaces> | ||||||
|  |   <dhcpd> | ||||||
|  |     <lan> | ||||||
|  |       <enable/> | ||||||
|  |       <range> | ||||||
|  |         <from>10.100.8.10</from> | ||||||
|  |         <to>10.100.8.245</to> | ||||||
|  |       </range> | ||||||
|  |       <staticmap> | ||||||
|  |         <mac>d8:5e:d3:e7:2c:8c</mac> | ||||||
|  |         <ipaddr>10.100.8.15</ipaddr> | ||||||
|  |         <hostname>rtx4090</hostname> | ||||||
|  |         <winsserver/> | ||||||
|  |         <dnsserver/> | ||||||
|  |         <ntpserver/> | ||||||
|  |       </staticmap> | ||||||
|  |     </lan> | ||||||
|  |   </dhcpd> | ||||||
|  |   <snmpd> | ||||||
|  |     <syslocation/> | ||||||
|  |     <syscontact/> | ||||||
|  |     <rocommunity>public</rocommunity> | ||||||
|  |   </snmpd> | ||||||
|  |   <nat> | ||||||
|  |     <outbound> | ||||||
|  |       <mode>automatic</mode> | ||||||
|  |     </outbound> | ||||||
|  |   </nat> | ||||||
|  |   <filter> | ||||||
|  |     <rule uuid="f79eded0-3c11-4f57-9aaa-55d4888589fa"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>tcp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <network>wanip</network> | ||||||
|  |         <port>80</port> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518072.7612</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518072.7612</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="4a5e7b65-0d7f-4452-8a29-2ec61a47ec19"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>tcp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <network>wanip</network> | ||||||
|  |         <port>443</port> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518084.0639</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518084.0639</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="0465308d-8605-466c-bcb4-95eeb989251a"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>tcp/udp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <any>1</any> | ||||||
|  |         <port>22</port> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518114.2801</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518114.2801</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="2df05591-13e7-4d91-a1b8-d25e338ada5f"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <descr>Allow ping</descr> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <protocol>icmp</protocol> | ||||||
|  |       <source> | ||||||
|  |         <any>1</any> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <network>(self)</network> | ||||||
|  |       </destination> | ||||||
|  |       <updated> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518356.7559</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </updated> | ||||||
|  |       <created> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <time>1731518311.7033</time> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |       </created> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="f2ee612c-c290-4445-8045-df82a86db0e5"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <descr>Default allow LAN to any rule</descr> | ||||||
|  |       <interface>lan</interface> | ||||||
|  |       <source> | ||||||
|  |         <network>lan</network> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <any/> | ||||||
|  |       </destination> | ||||||
|  |     </rule> | ||||||
|  |     <rule uuid="b21f808a-6a4a-4cd6-9a83-1660cc8ea58b"> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <ipprotocol>inet6</ipprotocol> | ||||||
|  |       <descr>Default allow LAN IPv6 to any rule</descr> | ||||||
|  |       <interface>lan</interface> | ||||||
|  |       <source> | ||||||
|  |         <network>lan</network> | ||||||
|  |       </source> | ||||||
|  |       <destination> | ||||||
|  |         <any/> | ||||||
|  |       </destination> | ||||||
|  |     </rule> | ||||||
|  |   </filter> | ||||||
|  |   <rrd> | ||||||
|  |     <enable/> | ||||||
|  |   </rrd> | ||||||
|  |   <ntpd> | ||||||
|  |     <prefer>0.opnsense.pool.ntp.org</prefer> | ||||||
|  |   </ntpd> | ||||||
|  |   <widgets> | ||||||
|  |     <sequence>system_information-container:00000000-col3:show,services_status-container:00000001-col4:show,gateways-container:00000002-col4:show,interface_list-container:00000003-col4:show</sequence> | ||||||
|  |     <column_count>2</column_count> | ||||||
|  |   </widgets> | ||||||
|  |   <revision> | ||||||
|  |     <username>root@192.168.5.204</username> | ||||||
|  |     <time>1731534516.7156</time> | ||||||
|  |     <description>/interfaces.php made changes</description> | ||||||
|  |   </revision> | ||||||
|  |   <OPNsense> | ||||||
|  |     <DHCRelay version="1.0.1"/> | ||||||
|  |     <wireguard> | ||||||
|  |       <client version="1.0.0"> | ||||||
|  |         <clients/> | ||||||
|  |       </client> | ||||||
|  |       <general version="0.0.1"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |       </general> | ||||||
|  |       <server version="1.0.0"> | ||||||
|  |         <servers/> | ||||||
|  |       </server> | ||||||
|  |     </wireguard> | ||||||
|  |     <IPsec version="1.0.1"> | ||||||
|  |       <general> | ||||||
|  |         <enabled/> | ||||||
|  |       </general> | ||||||
|  |       <keyPairs/> | ||||||
|  |       <preSharedKeys/> | ||||||
|  |     </IPsec> | ||||||
|  |     <Swanctl version="1.0.0"> | ||||||
|  |       <Connections/> | ||||||
|  |       <locals/> | ||||||
|  |       <remotes/> | ||||||
|  |       <children/> | ||||||
|  |       <Pools/> | ||||||
|  |       <VTIs/> | ||||||
|  |       <SPDs/> | ||||||
|  |     </Swanctl> | ||||||
|  |     <OpenVPNExport version="0.0.1"> | ||||||
|  |       <servers/> | ||||||
|  |     </OpenVPNExport> | ||||||
|  |     <OpenVPN version="1.0.0"> | ||||||
|  |       <Overwrites/> | ||||||
|  |       <Instances/> | ||||||
|  |       <StaticKeys/> | ||||||
|  |     </OpenVPN> | ||||||
|  |     <captiveportal version="1.0.2"> | ||||||
|  |       <zones/> | ||||||
|  |       <templates/> | ||||||
|  |     </captiveportal> | ||||||
|  |     <cron version="1.0.4"> | ||||||
|  |       <jobs/> | ||||||
|  |     </cron> | ||||||
|  |     <Firewall> | ||||||
|  |       <Lvtemplate version="0.0.1"> | ||||||
|  |         <templates/> | ||||||
|  |       </Lvtemplate> | ||||||
|  |       <Alias version="1.0.1"> | ||||||
|  |         <geoip> | ||||||
|  |           <url/> | ||||||
|  |         </geoip> | ||||||
|  |         <aliases/> | ||||||
|  |       </Alias> | ||||||
|  |       <Category version="1.0.0"> | ||||||
|  |         <categories/> | ||||||
|  |       </Category> | ||||||
|  |       <Filter version="1.0.4"> | ||||||
|  |         <rules/> | ||||||
|  |         <snatrules/> | ||||||
|  |         <npt/> | ||||||
|  |         <onetoone/> | ||||||
|  |       </Filter> | ||||||
|  |     </Firewall> | ||||||
|  |     <Netflow version="1.0.1"> | ||||||
|  |       <capture> | ||||||
|  |         <interfaces/> | ||||||
|  |         <egress_only/> | ||||||
|  |         <version>v9</version> | ||||||
|  |         <targets/> | ||||||
|  |       </capture> | ||||||
|  |       <collect> | ||||||
|  |         <enable>0</enable> | ||||||
|  |       </collect> | ||||||
|  |       <activeTimeout>1800</activeTimeout> | ||||||
|  |       <inactiveTimeout>15</inactiveTimeout> | ||||||
|  |     </Netflow> | ||||||
|  |     <IDS version="1.0.9"> | ||||||
|  |       <rules/> | ||||||
|  |       <policies/> | ||||||
|  |       <userDefinedRules/> | ||||||
|  |       <files/> | ||||||
|  |       <fileTags/> | ||||||
|  |       <general> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <ips>0</ips> | ||||||
|  |         <promisc>0</promisc> | ||||||
|  |         <interfaces>wan</interfaces> | ||||||
|  |         <homenet>192.168.0.0/16,10.0.0.0/8,172.16.0.0/12</homenet> | ||||||
|  |         <defaultPacketSize/> | ||||||
|  |         <UpdateCron/> | ||||||
|  |         <AlertLogrotate>W0D23</AlertLogrotate> | ||||||
|  |         <AlertSaveLogs>4</AlertSaveLogs> | ||||||
|  |         <MPMAlgo/> | ||||||
|  |         <detect> | ||||||
|  |           <Profile/> | ||||||
|  |           <toclient_groups/> | ||||||
|  |           <toserver_groups/> | ||||||
|  |         </detect> | ||||||
|  |         <syslog>0</syslog> | ||||||
|  |         <syslog_eve>0</syslog_eve> | ||||||
|  |         <LogPayload>0</LogPayload> | ||||||
|  |         <verbosity/> | ||||||
|  |       </general> | ||||||
|  |     </IDS> | ||||||
|  |     <Interfaces> | ||||||
|  |       <loopbacks version="1.0.0"/> | ||||||
|  |       <neighbors version="1.0.0"/> | ||||||
|  |       <vxlans version="1.0.2"/> | ||||||
|  |     </Interfaces> | ||||||
|  |     <Kea> | ||||||
|  |       <ctrl_agent version="0.0.1"> | ||||||
|  |         <general> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |           <http_host>127.0.0.1</http_host> | ||||||
|  |           <http_port>8000</http_port> | ||||||
|  |         </general> | ||||||
|  |       </ctrl_agent> | ||||||
|  |       <dhcp4 version="1.0.0"> | ||||||
|  |         <general> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |           <interfaces/> | ||||||
|  |           <valid_lifetime>4000</valid_lifetime> | ||||||
|  |           <fwrules>1</fwrules> | ||||||
|  |         </general> | ||||||
|  |         <ha> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |           <this_server_name/> | ||||||
|  |         </ha> | ||||||
|  |         <subnets/> | ||||||
|  |         <reservations/> | ||||||
|  |         <ha_peers/> | ||||||
|  |       </dhcp4> | ||||||
|  |     </Kea> | ||||||
|  |     <monit version="1.0.13"> | ||||||
|  |       <general> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <interval>120</interval> | ||||||
|  |         <startdelay>120</startdelay> | ||||||
|  |         <mailserver>127.0.0.1</mailserver> | ||||||
|  |         <port>25</port> | ||||||
|  |         <username/> | ||||||
|  |         <password/> | ||||||
|  |         <ssl>0</ssl> | ||||||
|  |         <sslversion>auto</sslversion> | ||||||
|  |         <sslverify>1</sslverify> | ||||||
|  |         <logfile/> | ||||||
|  |         <statefile/> | ||||||
|  |         <eventqueuePath/> | ||||||
|  |         <eventqueueSlots/> | ||||||
|  |         <httpdEnabled>0</httpdEnabled> | ||||||
|  |         <httpdUsername>root</httpdUsername> | ||||||
|  |         <httpdPassword/> | ||||||
|  |         <httpdPort>2812</httpdPort> | ||||||
|  |         <httpdAllow/> | ||||||
|  |         <mmonitUrl/> | ||||||
|  |         <mmonitTimeout>5</mmonitTimeout> | ||||||
|  |         <mmonitRegisterCredentials>1</mmonitRegisterCredentials> | ||||||
|  |       </general> | ||||||
|  |       <alert uuid="15f1e9ca-5dd5-4b20-b595-b6b4f82245d0"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <recipient>root@localhost.local</recipient> | ||||||
|  |         <noton>0</noton> | ||||||
|  |         <events/> | ||||||
|  |         <format/> | ||||||
|  |         <reminder/> | ||||||
|  |         <description/> | ||||||
|  |       </alert> | ||||||
|  |       <service uuid="c1e99556-91f5-4dbf-81d7-7915a3213de9"> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <name>$HOST</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>system</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path/> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>91b4e409-211b-49d5-9fa3-dc9054106646,cbe9cb72-e8c2-4740-990c-abcc486b0654,c0708923-88de-4178-abdd-819737440ce0,e887125d-c5d2-45e6-b40d-2c400d5449d1</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <service uuid="7513f341-7d21-4f11-903f-30d07b3aa41e"> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <name>RootFs</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>filesystem</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path>/</path> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>cc3684f2-701e-4de4-883d-803e08cf47b6</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <service uuid="f99ada79-ba1a-4ee1-81f1-ef570e8e5ea9"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <name>carp_status_change</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>custom</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path>/usr/local/opnsense/scripts/OPNsense/Monit/carp_status</path> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>f2d734cb-2a0e-4375-9460-11bdd5b20503</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <service uuid="dca8a81f-d389-4baa-b477-8b348194fd25"> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <name>gateway_alert</name> | ||||||
|  |         <description/> | ||||||
|  |         <type>custom</type> | ||||||
|  |         <pidfile/> | ||||||
|  |         <match/> | ||||||
|  |         <path>/usr/local/opnsense/scripts/OPNsense/Monit/gateway_alert</path> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <address/> | ||||||
|  |         <interface/> | ||||||
|  |         <start/> | ||||||
|  |         <stop/> | ||||||
|  |         <tests>865105a2-cbea-4a01-9979-c67818da9d99</tests> | ||||||
|  |         <depends/> | ||||||
|  |         <polltime/> | ||||||
|  |       </service> | ||||||
|  |       <test uuid="ea6b821c-4f30-455b-bd5b-23a6f0c20554"> | ||||||
|  |         <name>Ping</name> | ||||||
|  |         <type>NetworkPing</type> | ||||||
|  |         <condition>failed ping</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="16186b38-0e13-4cc3-ad18-ccc3fcc91837"> | ||||||
|  |         <name>NetworkLink</name> | ||||||
|  |         <type>NetworkInterface</type> | ||||||
|  |         <condition>failed link</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="69117d4d-8c41-4712-97c0-87b4fa7c9837"> | ||||||
|  |         <name>NetworkSaturation</name> | ||||||
|  |         <type>NetworkInterface</type> | ||||||
|  |         <condition>saturation is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="91b4e409-211b-49d5-9fa3-dc9054106646"> | ||||||
|  |         <name>MemoryUsage</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>memory usage is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="cbe9cb72-e8c2-4740-990c-abcc486b0654"> | ||||||
|  |         <name>CPUUsage</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>cpu usage is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="c0708923-88de-4178-abdd-819737440ce0"> | ||||||
|  |         <name>LoadAvg1</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>loadavg (1min) is greater than 4</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="e887125d-c5d2-45e6-b40d-2c400d5449d1"> | ||||||
|  |         <name>LoadAvg5</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>loadavg (5min) is greater than 3</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="c34aab30-9194-4667-b516-004b9c90c1c0"> | ||||||
|  |         <name>LoadAvg15</name> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <condition>loadavg (15min) is greater than 2</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="cc3684f2-701e-4de4-883d-803e08cf47b6"> | ||||||
|  |         <name>SpaceUsage</name> | ||||||
|  |         <type>SpaceUsage</type> | ||||||
|  |         <condition>space usage is greater than 75%</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="f2d734cb-2a0e-4375-9460-11bdd5b20503"> | ||||||
|  |         <name>ChangedStatus</name> | ||||||
|  |         <type>ProgramStatus</type> | ||||||
|  |         <condition>changed status</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |       <test uuid="865105a2-cbea-4a01-9979-c67818da9d99"> | ||||||
|  |         <name>NonZeroStatus</name> | ||||||
|  |         <type>ProgramStatus</type> | ||||||
|  |         <condition>status != 0</condition> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <path/> | ||||||
|  |       </test> | ||||||
|  |     </monit> | ||||||
|  |     <Gateways version="1.0.0"> | ||||||
|  |       <gateway_item uuid="a6ea102d-68bb-430f-af8b-269d52498fe1"> | ||||||
|  |         <disabled>0</disabled> | ||||||
|  |         <name>WAN_GW</name> | ||||||
|  |         <descr>Interface WAN Gateway</descr> | ||||||
|  |         <interface>wan</interface> | ||||||
|  |         <ipprotocol>inet</ipprotocol> | ||||||
|  |         <gateway>172.17.0.1</gateway> | ||||||
|  |         <defaultgw>1</defaultgw> | ||||||
|  |         <fargw>0</fargw> | ||||||
|  |         <monitor_disable>1</monitor_disable> | ||||||
|  |         <monitor_noroute/> | ||||||
|  |         <monitor/> | ||||||
|  |         <force_down/> | ||||||
|  |         <priority>255</priority> | ||||||
|  |         <weight>1</weight> | ||||||
|  |         <latencylow/> | ||||||
|  |         <latencyhigh/> | ||||||
|  |         <losslow/> | ||||||
|  |         <losshigh/> | ||||||
|  |         <interval/> | ||||||
|  |         <time_period/> | ||||||
|  |         <loss_interval/> | ||||||
|  |         <data_length/> | ||||||
|  |       </gateway_item> | ||||||
|  |     </Gateways> | ||||||
|  |     <Syslog version="1.0.2"> | ||||||
|  |       <general> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <loglocal>1</loglocal> | ||||||
|  |         <maxpreserve>31</maxpreserve> | ||||||
|  |         <maxfilesize/> | ||||||
|  |       </general> | ||||||
|  |       <destinations/> | ||||||
|  |     </Syslog> | ||||||
|  |     <TrafficShaper version="1.0.3"> | ||||||
|  |       <pipes/> | ||||||
|  |       <queues/> | ||||||
|  |       <rules/> | ||||||
|  |     </TrafficShaper> | ||||||
|  |     <unboundplus version="1.0.9"> | ||||||
|  |       <general> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <port>53</port> | ||||||
|  |         <stats/> | ||||||
|  |         <active_interface/> | ||||||
|  |         <dns64/> | ||||||
|  |         <dns64prefix/> | ||||||
|  |         <noarecords/> | ||||||
|  |         <regdhcp/> | ||||||
|  |         <regdhcpdomain/> | ||||||
|  |         <regdhcpstatic/> | ||||||
|  |         <noreglladdr6/> | ||||||
|  |         <noregrecords/> | ||||||
|  |         <txtsupport/> | ||||||
|  |         <cacheflush/> | ||||||
|  |         <local_zone_type>transparent</local_zone_type> | ||||||
|  |         <outgoing_interface/> | ||||||
|  |         <enable_wpad/> | ||||||
|  |       </general> | ||||||
|  |       <advanced> | ||||||
|  |         <hideidentity/> | ||||||
|  |         <hideversion/> | ||||||
|  |         <prefetch/> | ||||||
|  |         <prefetchkey/> | ||||||
|  |         <aggressivensec>1</aggressivensec> | ||||||
|  |         <serveexpired/> | ||||||
|  |         <serveexpiredreplyttl/> | ||||||
|  |         <serveexpiredttl/> | ||||||
|  |         <serveexpiredttlreset/> | ||||||
|  |         <serveexpiredclienttimeout/> | ||||||
|  |         <qnameminstrict/> | ||||||
|  |         <extendedstatistics/> | ||||||
|  |         <logqueries/> | ||||||
|  |         <logreplies/> | ||||||
|  |         <logtagqueryreply/> | ||||||
|  |         <logservfail/> | ||||||
|  |         <loglocalactions/> | ||||||
|  |         <logverbosity>1</logverbosity> | ||||||
|  |         <valloglevel>0</valloglevel> | ||||||
|  |         <privatedomain/> | ||||||
|  |         <privateaddress>0.0.0.0/8,10.0.0.0/8,100.64.0.0/10,169.254.0.0/16,172.16.0.0/12,192.0.2.0/24,192.168.0.0/16,198.18.0.0/15,198.51.100.0/24,203.0.113.0/24,233.252.0.0/24,::1/128,2001:db8::/32,fc00::/8,fd00::/8,fe80::/10</privateaddress> | ||||||
|  |         <insecuredomain/> | ||||||
|  |         <msgcachesize/> | ||||||
|  |         <rrsetcachesize/> | ||||||
|  |         <outgoingnumtcp/> | ||||||
|  |         <incomingnumtcp/> | ||||||
|  |         <numqueriesperthread/> | ||||||
|  |         <outgoingrange/> | ||||||
|  |         <jostletimeout/> | ||||||
|  |         <cachemaxttl/> | ||||||
|  |         <cachemaxnegativettl/> | ||||||
|  |         <cacheminttl/> | ||||||
|  |         <infrahostttl/> | ||||||
|  |         <infrakeepprobing/> | ||||||
|  |         <infracachenumhosts/> | ||||||
|  |         <unwantedreplythreshold/> | ||||||
|  |       </advanced> | ||||||
|  |       <acls> | ||||||
|  |         <default_action>allow</default_action> | ||||||
|  |       </acls> | ||||||
|  |       <dnsbl> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <safesearch/> | ||||||
|  |         <type/> | ||||||
|  |         <lists/> | ||||||
|  |         <whitelists/> | ||||||
|  |         <blocklists/> | ||||||
|  |         <wildcards/> | ||||||
|  |         <address/> | ||||||
|  |         <nxdomain/> | ||||||
|  |       </dnsbl> | ||||||
|  |       <forwarding> | ||||||
|  |         <enabled/> | ||||||
|  |       </forwarding> | ||||||
|  |       <dots/> | ||||||
|  |       <hosts/> | ||||||
|  |       <aliases/> | ||||||
|  |       <domains/> | ||||||
|  |     </unboundplus> | ||||||
|  |   </OPNsense> | ||||||
|  |   <hasync version="1.0.0"> | ||||||
|  |     <disablepreempt>0</disablepreempt> | ||||||
|  |     <disconnectppps>0</disconnectppps> | ||||||
|  |     <pfsyncenabled>0</pfsyncenabled> | ||||||
|  |     <pfsyncinterface>lan</pfsyncinterface> | ||||||
|  |     <pfsyncpeerip/> | ||||||
|  |     <pfsyncversion>1400</pfsyncversion> | ||||||
|  |     <synchronizetoip/> | ||||||
|  |     <username/> | ||||||
|  |     <password/> | ||||||
|  |     <syncitems/> | ||||||
|  |   </hasync> | ||||||
|  |   <openvpn/> | ||||||
|  |   <ifgroups version="1.0.0"/> | ||||||
|  |   <gifs version="1.0.0"> | ||||||
|  |     <gif/> | ||||||
|  |   </gifs> | ||||||
|  |   <gres version="1.0.0"> | ||||||
|  |     <gre/> | ||||||
|  |   </gres> | ||||||
|  |   <laggs version="1.0.0"> | ||||||
|  |     <lagg/> | ||||||
|  |   </laggs> | ||||||
|  |   <virtualip version="1.0.0"> | ||||||
|  |     <vip/> | ||||||
|  |   </virtualip> | ||||||
|  |   <vlans version="1.0.0"> | ||||||
|  |     <vlan/> | ||||||
|  |   </vlans> | ||||||
|  |   <staticroutes version="1.0.0"> | ||||||
|  |     <route/> | ||||||
|  |   </staticroutes> | ||||||
|  |   <bridges> | ||||||
|  |     <bridged/> | ||||||
|  |   </bridges> | ||||||
|  |   <ppps> | ||||||
|  |     <ppp/> | ||||||
|  |   </ppps> | ||||||
|  |   <wireless> | ||||||
|  |     <clone/> | ||||||
|  |   </wireless> | ||||||
|  |   <ca/> | ||||||
|  |   <dhcpdv6/> | ||||||
|  |   <cert uuid="547102e9-23ba-48b8-8af8-64be61049e96"> | ||||||
|  |     <refid>6734d13fa9e4a</refid> | ||||||
|  |     <descr>Web GUI TLS certificate</descr> | ||||||
|  |     <caref/> | ||||||
|  |     <crt>LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUhIakNDQlFhZ0F3SUJBZ0lVSUhVRkpwc253VGtzYWRrZmRDNUp1SDhqWnZNd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZa3hIVEFiQmdOVkJBTU1GRTlRVG5ObGJuTmxMbXh2WTJGc1pHOXRZV2x1TVFzd0NRWURWUVFHRXdKTwpUREVWTUJNR0ExVUVDQXdNV25WcFpDMUliMnhzWVc1a01SVXdFd1lEVlFRSERBeE5hV1JrWld4b1lYSnVhWE14CkxUQXJCZ05WQkFvTUpFOVFUbk5sYm5ObElITmxiR1l0YzJsbmJtVmtJSGRsWWlCalpYSjBhV1pwWTJGMFpUQWUKRncweU5ERXhNVE14TmpFNE1EbGFGdzB5TlRFeU1UVXhOakU0TURsYU1JR0pNUjB3R3dZRFZRUUREQlJQVUU1egpaVzV6WlM1c2IyTmhiR1J2YldGcGJqRUxNQWtHQTFVRUJoTUNUa3d4RlRBVEJnTlZCQWdNREZwMWFXUXRTRzlzCmJHRnVaREVWTUJNR0ExVUVCd3dNVFdsa1pHVnNhR0Z5Ym1sek1TMHdLd1lEVlFRS0RDUlBVRTV6Wlc1elpTQnoKWld4bUxYTnBaMjVsWkNCM1pXSWdZMlZ5ZEdsbWFXTmhkR1V3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQwpEd0F3Z2dJS0FvSUNBUURKU1FlZ1RYckp5dDVWYmk0Rk9IeHJrOXhxQ21FRU54V2pINVVwNDBFK3hjUzZQU1NyCkNEclc3ZDlYcVJkOEpEZENtdGtLRGlMYWNaUzJMUm1abnd6VnRzZGtBR2pOYm5OM1hSNmlFajdGL0JnbVBlcDEKU2pJWnBTZzNkOS9YeHFPQTNZQllzTS9uUk9vWHlmTHcycFJOLzhHVjN3MHoxbVFZUitMZWI3UTFuc1c3dTJ5NworVHc5STZGU0J4bkdaR3RyUFl5NkVBb0NMdm1GQnFCYWxkWTQ2ejdlWjlIRkZXaE8ybWpaUzVPdTE3ZVozVHBxCnBRTVB1T2JxV3FyaE0xdjVjdmJodU5kREhNZ3ZVVFVnQ0RNK2FkS3dIc0dNNGw5ZGtOQTgxdGlJcXpzN1BqcjEKUm0wMlVuUXRneW8zY3hPRXVsYk9nU0hsdGhTMmtUMXE2UmhyemYvRGRJSEhta1RROGtwWVloWGc0VmpMQVdpSQpQbm9ncnZsRUlWMERhQ3ZEMjZiRkRDbVkxc29FbDV1NGtYanJScDRXK29NUVRHeG80NzFMQnNBMlh1Si82ZFJBCkJMVzh4dXBFODhEYmlrWW51NVdQaUp6ZXh4UVIyNU1FQVd6TCtKK0lubFExbmpMVWwyN3R0c1VQQ1VjL3c0NXoKcHBERHYwZnU0Nnp1S3EzY0VWRitiREsrQWdlT0Q2SXNzUjVRRTdFNVdkWjYrNWl6ZHB4eWdUeGh0L1k1RlBkSApHQjlCbDFrejR4bHRhczlvbmZrSDFkVHk3dzFNck43Z1l5WjgvS0pMWW9EY2NBOVFuNGt6bGtPeFVUMENuS1ExCmtWNk90aFRsVFgzK2duaUpJK3RXWUQ5bTRldXNzYWN1anpyWDl5TTNZcEloMnZqODJ0NHpPNjIrNFFJREFRQUIKbzRJQmVqQ0NBWFl3Q1FZRFZSMFRCQUl3QURBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQmtBd05BWUpZSVpJQVliNApRZ0VOQkNjV0pVOVFUbk5sYm5ObElFZGxibVZ5WVhSbFpDQlRaWEoyWlhJZ1EyVnlkR2xtYVdOaGRHVXdIUVlEClZSME9CQllFRkJRZytucWI5QW9HSWtoTUxhNHFzWGRvY0JGcE1JR3pCZ05WSFNNRWdhc3dnYWloZ1kra2dZd3cKZ1lreEhUQWJCZ05WQkFNTUZFOVFUbk5sYm5ObExteHZZMkZzWkc5dFlXbHVNUXN3Q1FZRFZRUUdFd0pPVERFVgpNQk1HQTFVRUNBd01XblZwWkMxSWIyeHNZVzVrTVJVd0V3WURWUVFIREF4TmFXUmtaV3hvWVhKdWFYTXhMVEFyCkJnTlZCQW9NSkU5UVRuTmxibk5sSUhObGJHWXRjMmxuYm1Wa0lIZGxZaUJqWlhKMGFXWnBZMkYwWllJVUlIVUYKSnBzbndUa3NhZGtmZEM1SnVIOGpadk13SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQ0FJQwpNQXNHQTFVZER3UUVBd0lGb0RBZkJnTlZIUkVFR0RBV2doUlBVRTV6Wlc1elpTNXNiMk5oYkdSdmJXRnBiakFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQUZqNlQ1MmRIUklVMHJuZDE0d2dob2tjUkdrK0hIQloyTGlDRHpUeUwKNHdCeTJ1ZXJXQWdvYUZzeUlNQzhwWTBhWlc4TFlSd1BtRVB0OXlUS09ZZzF0NWtOUnk2RkF5akszeis5TGZTQwoxRlFpb0pma3FHRnhoc1IxV1R5RjBGNmJmM2tZRDZ4OWw1dEdqMXF3SndrekZWZWcvZGNtUVhvRTBmUDRqSFFvCmgxWXdiZ3pTa084TzRLUVhuWXVRM3g0bWdoZnBvR0hQM2xINlcybDJlWHpqSzllRjJtUG1ZS0p1M3JpSnkvL3gKRzhQWXBYNlNTN3RoVnNNeHF3cGJHbURXQXRuSnNrSmVsNDI1WUdOYlZ4YTNPOHE3RWxLNGFoNXpmai8wRnVwTgo3SnlqMWQyZjZFck14WlFnUi9EdmlUVnhISytRY1lBRXBqU2ZmZzBrRStpS1BlN0VYTVk1VU1aZUFTK1ZteG1LCjBPOWxaQXNpWUlEMzkwVjNTaDZxYjhoL2xMZ0V2NCtSNUw1VEpFaldYc0dQSUpGaHJNSFJWR1lhV3JIYWx3eHYKNjE5NFlpSXBEaUlHSVVSWGN1U3dNcndIQzN0bms2QVo2OW5CczVXT1JYM0NxOVhRRnVrVlA5eUMxQnRuSmFwbQpubUMzK3NtTTErRjkxUXlkVXJtbUxPNUVwUmtTMitBcmRTSklUR1NRNWt4L3VLNjhzV0QzVVdNNVRibUxrcWdOCkt6djZjemVCbzJiVExDT0JKUWJ4STFCckRPTUFMSDlCdXdUamVXdUVtWE9TWE1lTDFsejdhL2JZKzJxa1BSOVAKTE5IekE2QXZlVmxucDNaeFdqMjZFK3dwYnU5cHBaY0QzRGVHRnRnZzVJbUJ2ZDNWbjJ6UVc4a1ZMT1ZBdllSawptdWc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K</crt> | ||||||
|  |     <csr/> | ||||||
|  |     <prv>LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpSQUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1M0d2dna3FBZ0VBQW9JQ0FRREpTUWVnVFhySnl0NVYKYmk0Rk9IeHJrOXhxQ21FRU54V2pINVVwNDBFK3hjUzZQU1NyQ0RyVzdkOVhxUmQ4SkRkQ210a0tEaUxhY1pTMgpMUm1abnd6VnRzZGtBR2pOYm5OM1hSNmlFajdGL0JnbVBlcDFTaklacFNnM2Q5L1h4cU9BM1lCWXNNL25ST29YCnlmTHcycFJOLzhHVjN3MHoxbVFZUitMZWI3UTFuc1c3dTJ5NytUdzlJNkZTQnhuR1pHdHJQWXk2RUFvQ0x2bUYKQnFCYWxkWTQ2ejdlWjlIRkZXaE8ybWpaUzVPdTE3ZVozVHBxcFFNUHVPYnFXcXJoTTF2NWN2Ymh1TmRESE1ndgpVVFVnQ0RNK2FkS3dIc0dNNGw5ZGtOQTgxdGlJcXpzN1BqcjFSbTAyVW5RdGd5bzNjeE9FdWxiT2dTSGx0aFMyCmtUMXE2UmhyemYvRGRJSEhta1RROGtwWVloWGc0VmpMQVdpSVBub2dydmxFSVYwRGFDdkQyNmJGRENtWTFzb0UKbDV1NGtYanJScDRXK29NUVRHeG80NzFMQnNBMlh1Si82ZFJBQkxXOHh1cEU4OERiaWtZbnU1V1BpSnpleHhRUgoyNU1FQVd6TCtKK0lubFExbmpMVWwyN3R0c1VQQ1VjL3c0NXpwcEREdjBmdTQ2enVLcTNjRVZGK2JESytBZ2VPCkQ2SXNzUjVRRTdFNVdkWjYrNWl6ZHB4eWdUeGh0L1k1RlBkSEdCOUJsMWt6NHhsdGFzOW9uZmtIMWRUeTd3MU0Kck43Z1l5WjgvS0pMWW9EY2NBOVFuNGt6bGtPeFVUMENuS1Exa1Y2T3RoVGxUWDMrZ25pSkkrdFdZRDltNGV1cwpzYWN1anpyWDl5TTNZcEloMnZqODJ0NHpPNjIrNFFJREFRQUJBb0lDQUNPNnZpc1BIY3pzb1NjK2dkWkU1dGNNCnZkc240UDFIenVRd0VzRUcrVG1zanVWMVBZbExrbkE4OU1DQmdDejEyOFpMcU51ZlUwSDkxK1Uzbjd2MGJ1bVAKd3BpR2R4UUNOMlpZaGZ2RWE5YW1qMTNZYjBJbks3b0FKbUdrT254NW91UFl6YlBRblBNRE9WK0VKa2JwTWRxZgptOHdmOWg2OXYzSk03bUZJS0UrOVVZR252UjhuMkhETTNwR3FONEhQS1A4MkE0RXlvQ2d2a1BTelRxc052bU5ICnBOY0RURW5rNlNsWUhUVDNOSzJjVnBldUhMUzUrazlqNWI5elhUSlE5TkpVZlN6bnEvUmFpMUZVNDY1K0xpUjEKMGVPWDdnajFWUExOcGgwcWtQQy9ubW0vZStVMmZXUGZZb2FDcWkrQ0VwU2twQXlQZ1FZZTJsSG0rYVU4MzZ2UQpuaHZuL0p5ZHJDL1NyTUFZaXpOZFYyZjlHTkNwcE1SbUZyOS9saVJiNEFpSzRLSDRETGdSRUxHaDJLNzJuOFRLCkxUSVhIV3RacisyMWU4c0Mxbm5MSENnK21wMHBvSWJsbEtoYk9VTmVxR09yWm95NFBXdDZMQndFYzN0MG1wVEMKODhiSUpqMzFCQngzTGE1SUE5b0FNRi9lbHJYdFhhVnl4bm5yTHdjYzFNVWpCV20rZDVqbC9WOEdIcEJRd3pXYwpPNWdNSXlQNUIvdzBacUcyZjV1akZkOHo4dElmcEFRRTJSbDNxRUFYNU1NY1JQaFlTNDJqTWl4czc3TmtOVldQCkpqUVoxVDVXQTVKOUxEL2FKRkplQ2MvbjhpNldOQ3FzdEQ5OVNPTCsrTTBFQTlka2lLNWtOcXFZeXZuRG9SZVcKSW84eXhvVnpObURsWjBkSU9UUzlBb0lCQVFEb2tvMWxPS05FNlBWWmRRU3lmS0JOTEZNcEl1V1VVZmp0ODU4awpJTTB0TnNyS0d2N3NmYkt0dlMvOWgwMGluU2FyWTJ4amVETG91WEI5VzdKY1B1NjRoNHYwek1lbXRhdDRyTUJnClA5bkQ3MW00dERqS2ZrZDAza2tUbk4ySTBxYkwzeFVoTjNEQlJZTU9veDFMa2M4MFFFMHhSUEM1YmRJaXcwemEKTWdtK1dOZVY1VEZoSkpQZ2dVRVo5U1A2aWV1VEY0OW9wRGNWdGUwQ0I0WnFUaTRWb3YvZFVDWGpNK0djRnNWdgpPWTZYTE9KTmRldHdnUVNkd1hlSzB1WlBpWnVKTGlsTEg4OFVKYWNoQThDZW1SclMxRUtxWElwK2dkQWV4MnhVCmY5amRMMGF2SlJEY0xqWlhETXBvWlJpc0JoWVArZzY3VHZza3FscDh4M2p2STlWVkFvSUJBUURkajZrdWNLM0MKYXprMzlqYllvM3RFZ0R5L2VGNnBjWFlpK21Ba1ZNRk9vSWJ5cmNyN3BqSnRMNFMyMEFDRmpBUGFQT042dWVVWQpQQm92dC9QODB1V1c5cGZCK29mRmdadzRqc3hLWFY4eEJmOVdLWVZndFBsOHhIL1RJcERTMjhVTlowNDlhUW4vCjlCRzNac0lyenk3RzFLRTZPLzBMMnVmMnFyaUxxRFQyV3dsdFVsbWs2Ym5NeThkR0sra1JLcFhvSm1RTlNHRHoKOXd4blU2ZmZ1NDdDLzRYMHRIVk1MVFVneFh4djdqN3BpSzI4dzBuZ1N5S3ozV0IzWTJwaFVsZEJIdEprQko1RQpoRm8zMXJCVDU5enhkb2crYXh1bkh4S3EySGFHRkt0ZUZ6RGpkTTFpQzE3bWNtWXBzR2tuenA0cjRjZm5FYTFSCko4Wmo5ZVFQaEVOZEFvSUJBUUN3d2hsbXNkb2MySFVJVFZDSm13QjJSdGJaYitWT2lkS0lmdDBYcHpwcFA3aDIKVEhndEl3ZDIxayt2LzNJWGVaclhMWlJHTVNkNEN1QTgxa0ZEckt6Z1lGeDFiR0hkQ1R2T1ZuVkxjWnUvTjUxWQpMTmp3eFhMbmxyMnhnMG8zMytuWERyQlBjNFJsejcvZ2t3WUQxa2pGckkwK2dlZjI5a2w4RkRUSHJMb05DaGFuCm5PNmZweDRneGZ2Rmo3T05pZDhhQnhEK2RiaEw3dDIzNmlJMWp6K2xRQ0g0Z1I2YWhHYldxOVBZU2NWZWprVmMKbTkrWnZPVFdSU0RteUkwMExDQ2k3UXVEUmlTcmFrYVFaL3F3VHlxOHk0ZnpWS3dKby8yYU52VFZiK2xSaWNuTgorWHpMNnU5dno0L1NNZXZEYWtqQVVjdDZmbmVQa1UxK2dsZ2VZSHlWQW9JQkFRRFJtYW0wVEZhbFdXaHMvNWtOClEwTkhINFhZb1JmMGRta0xXQStCNzBoY2lOS0JYRlp0ME9GZGw1bVdsSm9adk1hY1BBUDd3MGJ1c1ZVWWxZN1YKTy9LRTZVM1I3WjlxQWw1Mnh1aU81Vnc3ZFhBRDVBM1EyZ1EzdTNFdG5VS2lwOVA0QlNYb1JLbDRJVDV0WVdJSgpyZHVUciszQ3VLT0FCcHh4Snpxa3JBRkdtZ01HRCtUTWRXd1hTU1NBeHVPYklNMW1MSU4wYVdlSEJNMFFKdnptClZIb1BFVXA1b0FwamdWVUVacTk4K0VjK0NOWkxmL2d3bndQNllsQnpRWEtQRlNXRWJwTWNtWjNjTmRWZmc5T1YKM1FDUTBkQzhNL21hRlhSRWVibE95TmtCanpEcHpVTExJUFNyVDhoRVlpWm95VGVyVGRJZVVBUEZoYnBTTUhtTApFRlhsQW9JQkFRQ0VUdVJQRHZvMC9tdDhyTzhLNENsamtuU0gxZ1FBSjFha3U3UXg3NUJUTDB6OWRNY2lMK1JLCng1R1lFTW1wcUtNb2FPbWc0WFVRMVRlQ2Vic1R0NjMyWXp6cmNCU0d1RzVnN1o0UUVublUzRXU5QklIMUVSL2gKSEk0NWowU0xNRUpObkNiTkpnRVNRRUFCbzN3cHhrRTdiRGlNdTVPOXVqMlFRVTlTTm94QkFmbVFXRDJJaU1BRQpWYzV3QTNZajBMdElSYkJmdzNBTE9uNlRSc2xucy9JMnd2Z1RCQW9sU3NZbEtEK0NRY3hDZldlNmZwU21aYmlCClBGUE9DY1ZQTXhGeXBhZWFJMkRXNWRPNFNoNGQ0ZlZma2F3ck9LN1N2QnFZb0Y5L2VndThzQS9ZdklaRVltQUQKd0ZIOGs1QjJ4WXdiNkVmNmFFQ29ZTitsNWtlWmhNWTgKLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=</prv> | ||||||
|  |   </cert> | ||||||
|  |   <cert uuid="cad18e13-92c5-48b6-9b44-ad2e5dcc799e"> | ||||||
|  |     <refid>6734d6c82dc59</refid> | ||||||
|  |     <descr>Web GUI TLS certificate</descr> | ||||||
|  |     <caref/> | ||||||
|  |     <crt>LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUhIakNDQlFhZ0F3SUJBZ0lVZkNETXpFclQ4dlVoenJaTVJta3JiT3dnSUdNd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZa3hIVEFiQmdOVkJBTU1GRTlRVG5ObGJuTmxMbXh2WTJGc1pHOXRZV2x1TVFzd0NRWURWUVFHRXdKTwpUREVWTUJNR0ExVUVDQXdNV25WcFpDMUliMnhzWVc1a01SVXdFd1lEVlFRSERBeE5hV1JrWld4b1lYSnVhWE14CkxUQXJCZ05WQkFvTUpFOVFUbk5sYm5ObElITmxiR1l0YzJsbmJtVmtJSGRsWWlCalpYSjBhV1pwWTJGMFpUQWUKRncweU5ERXhNVE14TmpReE5EVmFGdzB5TlRFeU1UVXhOalF4TkRWYU1JR0pNUjB3R3dZRFZRUUREQlJQVUU1egpaVzV6WlM1c2IyTmhiR1J2YldGcGJqRUxNQWtHQTFVRUJoTUNUa3d4RlRBVEJnTlZCQWdNREZwMWFXUXRTRzlzCmJHRnVaREVWTUJNR0ExVUVCd3dNVFdsa1pHVnNhR0Z5Ym1sek1TMHdLd1lEVlFRS0RDUlBVRTV6Wlc1elpTQnoKWld4bUxYTnBaMjVsWkNCM1pXSWdZMlZ5ZEdsbWFXTmhkR1V3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQwpEd0F3Z2dJS0FvSUNBUURMc0xEbjRta1R4RXJYdHdqTXoxencyeHJhNTZ5bTYrYzlRNEM3UjMyMzVuWjVPM1ovCnczL2tNV2Y5L25GbGpnMkFXWERJSmNXZjk0NFJFblFMdmlha2NNTHR1Qm1KTVRYZnVQWnhsSWE4Wlc0S0ZuT20KVFM0WXFCVzhHQkpJd0xtQ2kxb2RoWXhmUEQ2TFdEZnZYMm1tWEIrUFNxL0l4WEhOSjdxZVB4YzVuSzUyMW1uNQpuQ0FtZFBDY2JmdmdXdUM2TnhWbXpkeXpta1QvNnVqRUJFYTZ6RkQyUUtDN1N6a2ptZUNpd2VDQjc5NjZqeEV5ClFrVlFqYlQ5MFlyeENvdE8rbTJIQU5QZHNjT3FvNldXMEhmSlNpa2k4K2NDWHlzbGRFSzFZbmxueTNFWlVqTEwKVmplRS9XQVU0Q1BZUmhYVFVGVTIxZFV2azNvYUVpeldVdmhKc1FHYnh2aFRUQlN3aVliOUQ3Ymx1MWl4UzJxNwo3Mzk5VWdRN3FTNUFhOElHbXA4NUNoUUlBWUVjSTd6RGVWTGtrOGpkWkFCaTdGbDl0M05OQTU3WlVZVzErWE45CitUZ3ljMTlTbGoxVW1RdkRvekxCQzk5TVJpLzREQTIxRFpIODY3ekFYenFqZWUrckorQkZvNzVEQjlqd2tMTmUKUGVpemxRenRIWmpSU0tnaWdSNU9KSmtSVHIvNjduaTBtbzVITGNkU3hBSDFmdXdXS0hWS2RHQlQrNjhhYkUrZwprUSsrVDhMenVhK1FtakxOUVFqMVJCSFYzSzVQL3dvbXJKZG02d1ZLbm85RXlNait4azFwS05wb0F4UnR1WllmCkNEVVVQWjR1cEJtbzBLN3dGNHdtV3VXYSttVndlb1ZTcDRXMEhOWVJGU1pyWWxrc1AzdWViSHcva1FJREFRQUIKbzRJQmVqQ0NBWFl3Q1FZRFZSMFRCQUl3QURBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQmtBd05BWUpZSVpJQVliNApRZ0VOQkNjV0pVOVFUbk5sYm5ObElFZGxibVZ5WVhSbFpDQlRaWEoyWlhJZ1EyVnlkR2xtYVdOaGRHVXdIUVlEClZSME9CQllFRktidDd0QkRKN1daV1lMblQ5cEhTMklPdTg1TU1JR3pCZ05WSFNNRWdhc3dnYWloZ1kra2dZd3cKZ1lreEhUQWJCZ05WQkFNTUZFOVFUbk5sYm5ObExteHZZMkZzWkc5dFlXbHVNUXN3Q1FZRFZRUUdFd0pPVERFVgpNQk1HQTFVRUNBd01XblZwWkMxSWIyeHNZVzVrTVJVd0V3WURWUVFIREF4TmFXUmtaV3hvWVhKdWFYTXhMVEFyCkJnTlZCQW9NSkU5UVRuTmxibk5sSUhObGJHWXRjMmxuYm1Wa0lIZGxZaUJqWlhKMGFXWnBZMkYwWllJVWZDRE0KekVyVDh2VWh6clpNUm1rcmJPd2dJR013SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQ0FJQwpNQXNHQTFVZER3UUVBd0lGb0RBZkJnTlZIUkVFR0RBV2doUlBVRTV6Wlc1elpTNXNiMk5oYkdSdmJXRnBiakFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQWNQbmllQ29FSmRjV25CVHdqRmE3bjZqTFMrZ1pUYUk2ZjAzWktQMFYKQ0pSaDUxWTNwb2dpcnJYcVNHQ1VGTVNHbGpsQ21mU2VhdW9GWFYwanZLejhnMGZ1NU9kYlhjd2FrZFBZSXgydQpVT0dMbllTaEdCNlpoMmhpWWdSVGFpemJoTVliQitzQkV4QU1CdHZRZElSZ3dBWkRNWE9jY0MwZnJaMFhRRlRFCnQ3by82VGYvZEprdnB0cmRYWW1INnFUWlA2MGxyTnlabVloTjc1NEluOFZLRVVSRWNZamg1ejlJanA1NTE1cU0Kb0VrSGNKbTBDNkh2VStETG1ybFpFYkV4bnVOMFQzWTBNZ0hiVFVhU2Y1L2FKVmlIM0dOMnMzbG1ZM0VXTS9Vcwo3azFyc2JTa2orZzJvQXlTcjU0Nlc4RkdaMjliZFlOYk1EaTQ4aXVRQWlzRlQrTGZXN3Y3RVl3WGJ3NUhSVkpNCjV2MlhnenJwN2Yxa08zckEzeXUyS1VSSktHdjJ1ZXhNSythb1VOZXhRT3ludmZGUTBCemRHQ1dlcmVvZTZ3bDMKbHc4Z2dCWDI1VGIxbzR3d1UzNXdtUUIrMC9rbjB0SXoveVBhY2JzbDAwZ0dJNFhTbWpRQmF0MUZYRHFEME1JMgp4S0RqMXZ2dkNTVnRKc09ESG95eDhLc3ptbno5UVFoV0ZNeC9LTXp1clh0OWtsWFRJc0t3d2NXMytZQWtQMzNaClgvOGJnZS8zK2RibTdNN3BndmFBNVFlU3VTbkwzNjdLT1g1NlNZNGFZWHhkc1haVDc0ZGxVRU1jbG9NU0NIOG4KR25QWlpyWTNHdnZaU2ovQWdqT2lDNHNBL2JSSmh4cCtUQndlRFByR0pFUEJFVW9sZEZHVXdraFJXMVVuRlc2YwpyTGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K</crt> | ||||||
|  |     <csr/> | ||||||
|  |     <prv>LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1N3d2dna29BZ0VBQW9JQ0FRRExzTERuNG1rVHhFclgKdHdqTXoxencyeHJhNTZ5bTYrYzlRNEM3UjMyMzVuWjVPM1ovdzMva01XZjkvbkZsamcyQVdYRElKY1dmOTQ0UgpFblFMdmlha2NNTHR1Qm1KTVRYZnVQWnhsSWE4Wlc0S0ZuT21UUzRZcUJXOEdCSkl3TG1DaTFvZGhZeGZQRDZMCldEZnZYMm1tWEIrUFNxL0l4WEhOSjdxZVB4YzVuSzUyMW1uNW5DQW1kUENjYmZ2Z1d1QzZOeFZtemR5em1rVC8KNnVqRUJFYTZ6RkQyUUtDN1N6a2ptZUNpd2VDQjc5NjZqeEV5UWtWUWpiVDkwWXJ4Q290TyttMkhBTlBkc2NPcQpvNldXMEhmSlNpa2k4K2NDWHlzbGRFSzFZbmxueTNFWlVqTExWamVFL1dBVTRDUFlSaFhUVUZVMjFkVXZrM29hCkVpeldVdmhKc1FHYnh2aFRUQlN3aVliOUQ3Ymx1MWl4UzJxNzczOTlVZ1E3cVM1QWE4SUdtcDg1Q2hRSUFZRWMKSTd6RGVWTGtrOGpkWkFCaTdGbDl0M05OQTU3WlVZVzErWE45K1RneWMxOVNsajFVbVF2RG96TEJDOTlNUmkvNApEQTIxRFpIODY3ekFYenFqZWUrckorQkZvNzVEQjlqd2tMTmVQZWl6bFF6dEhaalJTS2dpZ1I1T0pKa1JUci82CjduaTBtbzVITGNkU3hBSDFmdXdXS0hWS2RHQlQrNjhhYkUrZ2tRKytUOEx6dWErUW1qTE5RUWoxUkJIVjNLNVAKL3dvbXJKZG02d1ZLbm85RXlNait4azFwS05wb0F4UnR1WllmQ0RVVVBaNHVwQm1vMEs3d0Y0d21XdVdhK21Wdwplb1ZTcDRXMEhOWVJGU1pyWWxrc1AzdWViSHcva1FJREFRQUJBb0lDQUFzc3hPL2IzSTd3a0hpWU9wdmQ3b2ZxClJXVm9HM0ZHOVBkSCtrcU1DQW9zVXlpZ2lnWkZhQUZSY3BhZFBJUnBVRFZQOHQrUUx2RHhTSEtJVkNTR3lLRHgKN01mVTkxV3ZCUGtpc1NhWEV2TklEMHJ2WTJYbXl4WWdOcDBNcHdnbHhxZXlWSDNWSTFmZ09zQXpWVkpGSmtzeAp0NnVKV2U2R1lwRnlVZ3MzZytNdHhPYVJLZHcvWkFZb0dVRkR5WE5NR1JNdVRYYkg2WWxTOStFZ2RxZTJZbGtDCk41amkvODUydUlwSytXZUVnbmd1ZkVZNDdpVVhQSzFJTVB0UjRURUxOb3hkTWVBYnZBUG9La2QwMWZOWnVaQ3EKQ0dxNS9kMEQ4cDZKNjlUK3M1RnR1R1UrdkxtcUg3NmtsZjVmTTZnOFpCc2xSNStNQ0xlay9DaHRBZGU2VXBQRApXQ2EwazU3dmdneUdQdGVlVXY2RVJBMEp6SjlJd2VHZGdVWHhNdW5LK3ZSNWYydWJKWFJoMVJpNTNFSTNvVUxYClFvWm9hOTY3VzNUajQ3UzR2RlQyK2dLb0g2OXlNckdVNVkwcjJrSTFXMVVhWEJ1aVVrMi94amdyWVdTblUzUUQKZkM3ZXllTlNlN3c4UW9MMVBEYXJwVXdaK2xGZ0w3NFVScldLQU12WVhxa3NTMHVtb0tTSWo4cjZMM0hVSUVaUgpZRzhBTU91dFhrQk5lMkNpTXRKM2NYUXNIOWloQU9QL3AvaE9BTTBGNkM3Ymt1Vm85d1pRdDVESWxRWUl4TlArClFRZ2doRnhBNTlTWmpwRk00QkN5L0hEOENJY3VuSURZOVNlbXNSYXdyUVY1eGk1akFScVdOYTdBSVMvVlArdUUKQkpmS0dDNFlZVmxqS1VLeEgxVUJBb0lCQVFEcnZOWXNrd3ZhQ2Z6MlcvbkIrRjNjVE1RbjM2RENSYnZwQ0s1dApldm96TjJGbjBJdWFnN2RrYzN2NTFxTVNEd0h1cVNkVTRHUHZMcm83alpJaFNEZ1AwLzBLWmc0VmxtZE5HbEovCk1lcXhmOGRkOFdTQjZiUksrK2FRcEhaeDd2SUFTWkE4eHkvZ3F2NGJpSmlqVDhUQ2lSeXdYSTQ0ZlRYM0xLZTIKVG1Uc29XNk9yQmErSWJRYjBpTEh4WE4rZ3JDM0cxWWxIUlNvTEpKUkU0eFVLMGsvM1JLNU16RjRIYUNZb1BWOQpDOFpQellMR253SE9ERU8zbHRtSGJvQUNFa0VrT2dFV3U4RFo2YlYrMXJBcVh6WnN0L3hNZnJ5KzlMRVdYQUwvCkRnOEdkall0YzdyUTFZd1BIY1h6cFo2clVIdXh2K0p6VEE1ZzNCS1p6aWhwNFdHaEFvSUJBUURkTXE3N0dRWGMKYW5hYlMxanlFT3VzNFp5ZlJ4cW10NEVFaHZjY0dRVVVrV0IrWk11bnpyaENxb3ZwQ1dhVU9zWVhuNG45Y3BQSAo3bm1mOUJHbFI4NVhCVHNLM2d4bE5NMUhjSGFTNXZSem9WQVBNd3o2VVV0ZFNLWXRLR0Q3Wkxmbm9ISXN1SlEzCnJ6WWIyTFhpVmx6MWlNNUVmT0VrL1J5UjBwMGtleXVwa0F0OXBRV0hzaURYb0pibDE2d1ZLc2NDNGUzNjdRRWsKcFdoeXcyS3A4bXdtOGxqQllxZWtHdUREeGVZSDMzMVlGa2FMUEJCT2xPQnlveFlOUDdBVVREUlV3KzB1T01jNwozb0N1VE9jWnAxVWMwQURBOXRTRVRINklWdlFEUXZlYzR6MWRTVGRmUEkxRzVUTCt4Mzlvam5OcGVoYng0bEwvCmRxTTBmcFlPL2ZmeEFvSUJBRmwzOU8wNzdjNlY1ZHoyY1djTnhVbThGT0p4UEVrZlFEOGtYVmNOeW5HdnZoY3gKamhwWmpUdmhuSmJvd0VFMVV1MXFZNVFTQ2J1WVIzUWN1ZTVKdzRVMlZwNGd0NDIzNUlMZHo1dVlyVk1xaE5jQgpxN3ltbnhlcVhRcGVjTm15NzBQdXA0QjV0SkVYTkpQc2xzbThsNWVoaERMbkhjOFFybStlRWhUZDBlNEJJcjJoClVJeGVyRVcyemg1MXNPeTkyeVhUaVRGU3hTbENxVkYrRXM5TEVtVGJtYVNTYWw4RkY1TjEyMVhYSnkvWWRwNjkKY0dqc1BMTXIzR2xMSmVnalYzZlJUK0o1NWFxT3lhUlhCTXRBRVo3WGdUampETzJJWHNGMnNHaHV4SU1XVUYrVgp3YnhLbi9xSXVUMU1pVmpKbGZpVE0vWEFVdUN1QlowOEloaDFRcUVDZ2dFQUZwdzJySzRMSGxPM21mb2l0bU9xClkzcVFVdXVtdXNIcEt6aE1qQSsycURxUC9YdDZJY1lNcWF2YkwwL3ByMTh1bm4yTlVsM2k0ejNxS3NKOUIwTUcKd1hoa1o2RDQ3V052VkUwWG9iNS80RTN0N0EvUTFNbDRoYW1HYXZsRXFJM01DcDRvN1k5VWZ6aW10RVA3bTQ0dQpaRjYranR1ZysvSHZlS3hwcWEvNWI1U3N5QVFWUTZDZW9Ndm1nTW9CNmd2OFdid1VZbURWakJSb1Q4clBEQVllCnJnQjV1QkxJaGdyRlROMnV2TUZJZzdlTE1ISk1UR3dGWVZKd1Q1eGgrRUV0M0RoR3gwSEFnOHNqcGkxd05md1gKeENFeTRvYVloSWw1S2FDUndyK1dwZS9JZHYrajdGVTVMN1QvK0hFV0FlOEZ0eE5td3dUYWJRaUllRFkwU29ZRgpVUUtDQVFFQXRiclZqbTFsaDQ1REhIWnVsem4xNllIQzJrMUYwWG9FZFVSQ3o0QTFsMHBEK3ljL2srdmJ0Qmg0Cm1RRDV1a3FicHFFZy9GNUhDZmdOaHlieHNNdVV6NzFaU24zN2dwczNDWUdiUyt4RkhjZTJBakNTbUlYQWIxQjgKR0Z2WnV4UlB5QXU0YVBvT1J3RzM3NVBOM0VNNk83bzdxbjlYeExTZWRIMHExM2U0YkhYYm4rc2xOa1RIM2xmcwpLVnBOUUhVSUNDSW5vQ0llV1dwdnAwQnFoYjlKclRsbXd2c25zOHpZVDNiY3F5QXZHZGRnNUs3Y0MwRVJaem9ECnFJTkI3S05FVjQ1NmF0eDZVT3VYUlpKREMvaHNJUTZNaVBveUJacHRsK1ZIMEtQbEFIWGExb0FXZmNuL0U3MFYKK0RaeVBiMWxkQUdpb1hqditGd2h5VzZlWEVrQlBnPT0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=</prv> | ||||||
|  |   </cert> | ||||||
|  |   <syslog/> | ||||||
|  | </opnsense> | ||||||
| @ -0,0 +1,987 @@ | |||||||
|  |       </acls> | ||||||
|  |       <acls> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <action>alert</action> | ||||||
|  |         <active_interface/> | ||||||
|  |       <activeTimeout>1800</activeTimeout> | ||||||
|  |         <address/> | ||||||
|  |         <address/> | ||||||
|  |         <address/> | ||||||
|  |         <address/> | ||||||
|  |         <address/> | ||||||
|  |       </advanced> | ||||||
|  |       <advanced> | ||||||
|  |       <adv_dhcp_config_advanced/> | ||||||
|  |       <adv_dhcp_config_file_override/> | ||||||
|  |       <adv_dhcp_config_file_override_path/> | ||||||
|  |       <adv_dhcp_option_modifiers/> | ||||||
|  |       <adv_dhcp_pt_backoff_cutoff/> | ||||||
|  |       <adv_dhcp_pt_initial_interval/> | ||||||
|  |       <adv_dhcp_pt_reboot/> | ||||||
|  |       <adv_dhcp_pt_retry/> | ||||||
|  |       <adv_dhcp_pt_select_timeout/> | ||||||
|  |       <adv_dhcp_pt_timeout/> | ||||||
|  |       <adv_dhcp_pt_values>SavedCfg</adv_dhcp_pt_values> | ||||||
|  |       <adv_dhcp_request_options/> | ||||||
|  |       <adv_dhcp_required_options/> | ||||||
|  |       <adv_dhcp_send_options/> | ||||||
|  |         <aggressivensec>1</aggressivensec> | ||||||
|  |       </alert> | ||||||
|  |         <AlertLogrotate>W0D23</AlertLogrotate> | ||||||
|  |         <AlertSaveLogs>4</AlertSaveLogs> | ||||||
|  |       <alert uuid="15f1e9ca-5dd5-4b20-b595-b6b4f82245d0"> | ||||||
|  |       </Alias> | ||||||
|  |       <alias-address/> | ||||||
|  |         <aliases/> | ||||||
|  |       <aliases/> | ||||||
|  |       <alias-subnet>32</alias-subnet> | ||||||
|  |       <Alias version="1.0.1"> | ||||||
|  |         and for the sender directly reachable, route and next hop is known.</descr> | ||||||
|  |         <any/> | ||||||
|  |         <any/> | ||||||
|  |         <any>1</any> | ||||||
|  |         <any>1</any> | ||||||
|  |         <any>1</any> | ||||||
|  |         <any>1</any> | ||||||
|  |         <any>1</any> | ||||||
|  |         as part of the standard FreeBSD core system.</descr> | ||||||
|  |         as part of the standard FreeBSD core system.</descr> | ||||||
|  |         <blocklists/> | ||||||
|  |     </bogons> | ||||||
|  |     <bogons> | ||||||
|  |     <bridged/> | ||||||
|  |   </bridges> | ||||||
|  |   <bridges> | ||||||
|  |   <ca/> | ||||||
|  |         <cacheflush/> | ||||||
|  |         <cachemaxnegativettl/> | ||||||
|  |         <cachemaxttl/> | ||||||
|  |         <cacheminttl/> | ||||||
|  |     </captiveportal> | ||||||
|  |     <captiveportal version="1.0.2"> | ||||||
|  |       </capture> | ||||||
|  |       <capture> | ||||||
|  |     <caref/> | ||||||
|  |     <caref/> | ||||||
|  |         <categories/> | ||||||
|  |       </Category> | ||||||
|  |       <Category version="1.0.0"> | ||||||
|  |   </cert> | ||||||
|  |   </cert> | ||||||
|  |   <cert uuid="547102e9-23ba-48b8-8af8-64be61049e96"> | ||||||
|  |   <cert uuid="cad18e13-92c5-48b6-9b44-ad2e5dcc799e"> | ||||||
|  |       <children/> | ||||||
|  |       <ciphers/> | ||||||
|  |       </client> | ||||||
|  |         <clients/> | ||||||
|  |       <client version="1.0.0"> | ||||||
|  |     <clone/> | ||||||
|  |       </collect> | ||||||
|  |       <collect> | ||||||
|  |     <column_count>2</column_count> | ||||||
|  |       <compression/> | ||||||
|  |         <condition>changed status</condition> | ||||||
|  |         <condition>cpu usage is greater than 75%</condition> | ||||||
|  |         <condition>failed link</condition> | ||||||
|  |         <condition>failed ping</condition> | ||||||
|  |         <condition>loadavg (15min) is greater than 2</condition> | ||||||
|  |         <condition>loadavg (1min) is greater than 4</condition> | ||||||
|  |         <condition>loadavg (5min) is greater than 3</condition> | ||||||
|  |         <condition>memory usage is greater than 75%</condition> | ||||||
|  |         <condition>saturation is greater than 75%</condition> | ||||||
|  |         <condition>space usage is greater than 75%</condition> | ||||||
|  |         <condition>status != 0</condition> | ||||||
|  |       <Connections/> | ||||||
|  |       </created> | ||||||
|  |       </created> | ||||||
|  |       </created> | ||||||
|  |       </created> | ||||||
|  |       <created> | ||||||
|  |       <created> | ||||||
|  |       <created> | ||||||
|  |       <created> | ||||||
|  |     </cron> | ||||||
|  |     <cron version="1.0.4"> | ||||||
|  |     <crt>LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUhIakNDQlFhZ0F3SUJBZ0lVSUhVRkpwc253VGtzYWRrZmRDNUp1SDhqWnZNd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZa3hIVEFiQmdOVkJBTU1GRTlRVG5ObGJuTmxMbXh2WTJGc1pHOXRZV2x1TVFzd0NRWURWUVFHRXdKTwpUREVWTUJNR0ExVUVDQXdNV25WcFpDMUliMnhzWVc1a01SVXdFd1lEVlFRSERBeE5hV1JrWld4b1lYSnVhWE14CkxUQXJCZ05WQkFvTUpFOVFUbk5sYm5ObElITmxiR1l0YzJsbmJtVmtJSGRsWWlCalpYSjBhV1pwWTJGMFpUQWUKRncweU5ERXhNVE14TmpFNE1EbGFGdzB5TlRFeU1UVXhOakU0TURsYU1JR0pNUjB3R3dZRFZRUUREQlJQVUU1egpaVzV6WlM1c2IyTmhiR1J2YldGcGJqRUxNQWtHQTFVRUJoTUNUa3d4RlRBVEJnTlZCQWdNREZwMWFXUXRTRzlzCmJHRnVaREVWTUJNR0ExVUVCd3dNVFdsa1pHVnNhR0Z5Ym1sek1TMHdLd1lEVlFRS0RDUlBVRTV6Wlc1elpTQnoKWld4bUxYTnBaMjVsWkNCM1pXSWdZMlZ5ZEdsbWFXTmhkR1V3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQwpEd0F3Z2dJS0FvSUNBUURKU1FlZ1RYckp5dDVWYmk0Rk9IeHJrOXhxQ21FRU54V2pINVVwNDBFK3hjUzZQU1NyCkNEclc3ZDlYcVJkOEpEZENtdGtLRGlMYWNaUzJMUm1abnd6VnRzZGtBR2pOYm5OM1hSNmlFajdGL0JnbVBlcDEKU2pJWnBTZzNkOS9YeHFPQTNZQllzTS9uUk9vWHlmTHcycFJOLzhHVjN3MHoxbVFZUitMZWI3UTFuc1c3dTJ5NworVHc5STZGU0J4bkdaR3RyUFl5NkVBb0NMdm1GQnFCYWxkWTQ2ejdlWjlIRkZXaE8ybWpaUzVPdTE3ZVozVHBxCnBRTVB1T2JxV3FyaE0xdjVjdmJodU5kREhNZ3ZVVFVnQ0RNK2FkS3dIc0dNNGw5ZGtOQTgxdGlJcXpzN1BqcjEKUm0wMlVuUXRneW8zY3hPRXVsYk9nU0hsdGhTMmtUMXE2UmhyemYvRGRJSEhta1RROGtwWVloWGc0VmpMQVdpSQpQbm9ncnZsRUlWMERhQ3ZEMjZiRkRDbVkxc29FbDV1NGtYanJScDRXK29NUVRHeG80NzFMQnNBMlh1Si82ZFJBCkJMVzh4dXBFODhEYmlrWW51NVdQaUp6ZXh4UVIyNU1FQVd6TCtKK0lubFExbmpMVWwyN3R0c1VQQ1VjL3c0NXoKcHBERHYwZnU0Nnp1S3EzY0VWRitiREsrQWdlT0Q2SXNzUjVRRTdFNVdkWjYrNWl6ZHB4eWdUeGh0L1k1RlBkSApHQjlCbDFrejR4bHRhczlvbmZrSDFkVHk3dzFNck43Z1l5WjgvS0pMWW9EY2NBOVFuNGt6bGtPeFVUMENuS1ExCmtWNk90aFRsVFgzK2duaUpJK3RXWUQ5bTRldXNzYWN1anpyWDl5TTNZcEloMnZqODJ0NHpPNjIrNFFJREFRQUIKbzRJQmVqQ0NBWFl3Q1FZRFZSMFRCQUl3QURBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQmtBd05BWUpZSVpJQVliNApRZ0VOQkNjV0pVOVFUbk5sYm5ObElFZGxibVZ5WVhSbFpDQlRaWEoyWlhJZ1EyVnlkR2xtYVdOaGRHVXdIUVlEClZSME9CQllFRkJRZytucWI5QW9HSWtoTUxhNHFzWGRvY0JGcE1JR3pCZ05WSFNNRWdhc3dnYWloZ1kra2dZd3cKZ1lreEhUQWJCZ05WQkFNTUZFOVFUbk5sYm5ObExteHZZMkZzWkc5dFlXbHVNUXN3Q1FZRFZRUUdFd0pPVERFVgpNQk1HQTFVRUNBd01XblZwWkMxSWIyeHNZVzVrTVJVd0V3WURWUVFIREF4TmFXUmtaV3hvWVhKdWFYTXhMVEFyCkJnTlZCQW9NSkU5UVRuTmxibk5sSUhObGJHWXRjMmxuYm1Wa0lIZGxZaUJqWlhKMGFXWnBZMkYwWllJVUlIVUYKSnBzbndUa3NhZGtmZEM1SnVIOGpadk13SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQ0FJQwpNQXNHQTFVZER3UUVBd0lGb0RBZkJnTlZIUkVFR0RBV2doUlBVRTV6Wlc1elpTNXNiMk5oYkdSdmJXRnBiakFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQUZqNlQ1MmRIUklVMHJuZDE0d2dob2tjUkdrK0hIQloyTGlDRHpUeUwKNHdCeTJ1ZXJXQWdvYUZzeUlNQzhwWTBhWlc4TFlSd1BtRVB0OXlUS09ZZzF0NWtOUnk2RkF5akszeis5TGZTQwoxRlFpb0pma3FHRnhoc1IxV1R5RjBGNmJmM2tZRDZ4OWw1dEdqMXF3SndrekZWZWcvZGNtUVhvRTBmUDRqSFFvCmgxWXdiZ3pTa084TzRLUVhuWXVRM3g0bWdoZnBvR0hQM2xINlcybDJlWHpqSzllRjJtUG1ZS0p1M3JpSnkvL3gKRzhQWXBYNlNTN3RoVnNNeHF3cGJHbURXQXRuSnNrSmVsNDI1WUdOYlZ4YTNPOHE3RWxLNGFoNXpmai8wRnVwTgo3SnlqMWQyZjZFck14WlFnUi9EdmlUVnhISytRY1lBRXBqU2ZmZzBrRStpS1BlN0VYTVk1VU1aZUFTK1ZteG1LCjBPOWxaQXNpWUlEMzkwVjNTaDZxYjhoL2xMZ0V2NCtSNUw1VEpFaldYc0dQSUpGaHJNSFJWR1lhV3JIYWx3eHYKNjE5NFlpSXBEaUlHSVVSWGN1U3dNcndIQzN0bms2QVo2OW5CczVXT1JYM0NxOVhRRnVrVlA5eUMxQnRuSmFwbQpubUMzK3NtTTErRjkxUXlkVXJtbUxPNUVwUmtTMitBcmRTSklUR1NRNWt4L3VLNjhzV0QzVVdNNVRibUxrcWdOCkt6djZjemVCbzJiVExDT0JKUWJ4STFCckRPTUFMSDlCdXdUamVXdUVtWE9TWE1lTDFsejdhL2JZKzJxa1BSOVAKTE5IekE2QXZlVmxucDNaeFdqMjZFK3dwYnU5cHBaY0QzRGVHRnRnZzVJbUJ2ZDNWbjJ6UVc4a1ZMT1ZBdllSawptdWc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K</crt> | ||||||
|  |     <crt>LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUhIakNDQlFhZ0F3SUJBZ0lVZkNETXpFclQ4dlVoenJaTVJta3JiT3dnSUdNd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZa3hIVEFiQmdOVkJBTU1GRTlRVG5ObGJuTmxMbXh2WTJGc1pHOXRZV2x1TVFzd0NRWURWUVFHRXdKTwpUREVWTUJNR0ExVUVDQXdNV25WcFpDMUliMnhzWVc1a01SVXdFd1lEVlFRSERBeE5hV1JrWld4b1lYSnVhWE14CkxUQXJCZ05WQkFvTUpFOVFUbk5sYm5ObElITmxiR1l0YzJsbmJtVmtJSGRsWWlCalpYSjBhV1pwWTJGMFpUQWUKRncweU5ERXhNVE14TmpReE5EVmFGdzB5TlRFeU1UVXhOalF4TkRWYU1JR0pNUjB3R3dZRFZRUUREQlJQVUU1egpaVzV6WlM1c2IyTmhiR1J2YldGcGJqRUxNQWtHQTFVRUJoTUNUa3d4RlRBVEJnTlZCQWdNREZwMWFXUXRTRzlzCmJHRnVaREVWTUJNR0ExVUVCd3dNVFdsa1pHVnNhR0Z5Ym1sek1TMHdLd1lEVlFRS0RDUlBVRTV6Wlc1elpTQnoKWld4bUxYTnBaMjVsWkNCM1pXSWdZMlZ5ZEdsbWFXTmhkR1V3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQwpEd0F3Z2dJS0FvSUNBUURMc0xEbjRta1R4RXJYdHdqTXoxencyeHJhNTZ5bTYrYzlRNEM3UjMyMzVuWjVPM1ovCnczL2tNV2Y5L25GbGpnMkFXWERJSmNXZjk0NFJFblFMdmlha2NNTHR1Qm1KTVRYZnVQWnhsSWE4Wlc0S0ZuT20KVFM0WXFCVzhHQkpJd0xtQ2kxb2RoWXhmUEQ2TFdEZnZYMm1tWEIrUFNxL0l4WEhOSjdxZVB4YzVuSzUyMW1uNQpuQ0FtZFBDY2JmdmdXdUM2TnhWbXpkeXpta1QvNnVqRUJFYTZ6RkQyUUtDN1N6a2ptZUNpd2VDQjc5NjZqeEV5ClFrVlFqYlQ5MFlyeENvdE8rbTJIQU5QZHNjT3FvNldXMEhmSlNpa2k4K2NDWHlzbGRFSzFZbmxueTNFWlVqTEwKVmplRS9XQVU0Q1BZUmhYVFVGVTIxZFV2azNvYUVpeldVdmhKc1FHYnh2aFRUQlN3aVliOUQ3Ymx1MWl4UzJxNwo3Mzk5VWdRN3FTNUFhOElHbXA4NUNoUUlBWUVjSTd6RGVWTGtrOGpkWkFCaTdGbDl0M05OQTU3WlVZVzErWE45CitUZ3ljMTlTbGoxVW1RdkRvekxCQzk5TVJpLzREQTIxRFpIODY3ekFYenFqZWUrckorQkZvNzVEQjlqd2tMTmUKUGVpemxRenRIWmpSU0tnaWdSNU9KSmtSVHIvNjduaTBtbzVITGNkU3hBSDFmdXdXS0hWS2RHQlQrNjhhYkUrZwprUSsrVDhMenVhK1FtakxOUVFqMVJCSFYzSzVQL3dvbXJKZG02d1ZLbm85RXlNait4azFwS05wb0F4UnR1WllmCkNEVVVQWjR1cEJtbzBLN3dGNHdtV3VXYSttVndlb1ZTcDRXMEhOWVJGU1pyWWxrc1AzdWViSHcva1FJREFRQUIKbzRJQmVqQ0NBWFl3Q1FZRFZSMFRCQUl3QURBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQmtBd05BWUpZSVpJQVliNApRZ0VOQkNjV0pVOVFUbk5sYm5ObElFZGxibVZ5WVhSbFpDQlRaWEoyWlhJZ1EyVnlkR2xtYVdOaGRHVXdIUVlEClZSME9CQllFRktidDd0QkRKN1daV1lMblQ5cEhTMklPdTg1TU1JR3pCZ05WSFNNRWdhc3dnYWloZ1kra2dZd3cKZ1lreEhUQWJCZ05WQkFNTUZFOVFUbk5sYm5ObExteHZZMkZzWkc5dFlXbHVNUXN3Q1FZRFZRUUdFd0pPVERFVgpNQk1HQTFVRUNBd01XblZwWkMxSWIyeHNZVzVrTVJVd0V3WURWUVFIREF4TmFXUmtaV3hvWVhKdWFYTXhMVEFyCkJnTlZCQW9NSkU5UVRuTmxibk5sSUhObGJHWXRjMmxuYm1Wa0lIZGxZaUJqWlhKMGFXWnBZMkYwWllJVWZDRE0KekVyVDh2VWh6clpNUm1rcmJPd2dJR013SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQ0FJQwpNQXNHQTFVZER3UUVBd0lGb0RBZkJnTlZIUkVFR0RBV2doUlBVRTV6Wlc1elpTNXNiMk5oYkdSdmJXRnBiakFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQWNQbmllQ29FSmRjV25CVHdqRmE3bjZqTFMrZ1pUYUk2ZjAzWktQMFYKQ0pSaDUxWTNwb2dpcnJYcVNHQ1VGTVNHbGpsQ21mU2VhdW9GWFYwanZLejhnMGZ1NU9kYlhjd2FrZFBZSXgydQpVT0dMbllTaEdCNlpoMmhpWWdSVGFpemJoTVliQitzQkV4QU1CdHZRZElSZ3dBWkRNWE9jY0MwZnJaMFhRRlRFCnQ3by82VGYvZEprdnB0cmRYWW1INnFUWlA2MGxyTnlabVloTjc1NEluOFZLRVVSRWNZamg1ejlJanA1NTE1cU0Kb0VrSGNKbTBDNkh2VStETG1ybFpFYkV4bnVOMFQzWTBNZ0hiVFVhU2Y1L2FKVmlIM0dOMnMzbG1ZM0VXTS9Vcwo3azFyc2JTa2orZzJvQXlTcjU0Nlc4RkdaMjliZFlOYk1EaTQ4aXVRQWlzRlQrTGZXN3Y3RVl3WGJ3NUhSVkpNCjV2MlhnenJwN2Yxa08zckEzeXUyS1VSSktHdjJ1ZXhNSythb1VOZXhRT3ludmZGUTBCemRHQ1dlcmVvZTZ3bDMKbHc4Z2dCWDI1VGIxbzR3d1UzNXdtUUIrMC9rbjB0SXoveVBhY2JzbDAwZ0dJNFhTbWpRQmF0MUZYRHFEME1JMgp4S0RqMXZ2dkNTVnRKc09ESG95eDhLc3ptbno5UVFoV0ZNeC9LTXp1clh0OWtsWFRJc0t3d2NXMytZQWtQMzNaClgvOGJnZS8zK2RibTdNN3BndmFBNVFlU3VTbkwzNjdLT1g1NlNZNGFZWHhkc1haVDc0ZGxVRU1jbG9NU0NIOG4KR25QWlpyWTNHdnZaU2ovQWdqT2lDNHNBL2JSSmh4cCtUQndlRFByR0pFUEJFVW9sZEZHVXdraFJXMVVuRlc2YwpyTGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K</crt> | ||||||
|  |     <csr/> | ||||||
|  |     <csr/> | ||||||
|  |       </ctrl_agent> | ||||||
|  |       <ctrl_agent version="0.0.1"> | ||||||
|  |         <data_length/> | ||||||
|  |         <default_action>allow</default_action> | ||||||
|  |         <defaultgw>1</defaultgw> | ||||||
|  |         <defaultPacketSize/> | ||||||
|  |         <depends/> | ||||||
|  |         <depends/> | ||||||
|  |         <depends/> | ||||||
|  |         <depends/> | ||||||
|  |       <descr/> | ||||||
|  |       <descr>Allow ping</descr> | ||||||
|  |       <descr>Allow unprivileged access to tap(4) device nodes</descr> | ||||||
|  |       <descr>Default allow LAN IPv6 to any rule</descr> | ||||||
|  |       <descr>Default allow LAN to any rule</descr> | ||||||
|  |       <descr>Disable CTRL+ALT+Delete reboot from keyboard.</descr> | ||||||
|  |       <descr>Disable Indirect Branch Restricted Speculation (Spectre V2 mitigation)</descr> | ||||||
|  |       <descr>Do not delay ACK to try and piggyback it onto a data packet</descr> | ||||||
|  |       <descr>Do not send ICMP port unreachable messages for closed UDP ports</descr> | ||||||
|  |       <descr>Drop packets to closed TCP ports without returning a RST</descr> | ||||||
|  |       <descr>Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)</descr> | ||||||
|  |       <descr>Enable/disable sending of ICMP redirects in response to IP packets for which a better, | ||||||
|  |       <descr>Enable privacy settings for IPv6 (RFC 4941)</descr> | ||||||
|  |       <descr>Enable sending IPv6 redirects</descr> | ||||||
|  |       <descr>Enable TCP extended debugging</descr> | ||||||
|  |       <descr>Generate SYN cookies for outbound SYN-ACK packets</descr> | ||||||
|  |       <descr>Handling of non-IP packets which are not passed to pfil (see if_bridge(4))</descr> | ||||||
|  |       <descr>Hide processes running as other groups</descr> | ||||||
|  |       <descr>Hide processes running as other users</descr> | ||||||
|  |       <descr>Increase UFS read-ahead speeds to match the state of hard drives and NCQ.</descr> | ||||||
|  |         <descr>Interface WAN Gateway</descr> | ||||||
|  |         <description/> | ||||||
|  |         <description/> | ||||||
|  |         <description/> | ||||||
|  |         <description/> | ||||||
|  |         <description/> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |         <description>/firewall_rules_edit.php made changes</description> | ||||||
|  |     <description>/interfaces.php made changes</description> | ||||||
|  |       <description>System Administrators</description> | ||||||
|  |       <descr>Loopback</descr> | ||||||
|  |       <descr>Maximum incoming/outgoing TCP datagram size (receive)</descr> | ||||||
|  |       <descr>Maximum incoming/outgoing TCP datagram size (send)</descr> | ||||||
|  |       <descr>Maximum outgoing UDP datagram size</descr> | ||||||
|  |       <descr>Maximum outgoing UDP datagram size</descr> | ||||||
|  |       <descr>Maximum socket buffer size</descr> | ||||||
|  |       <descr>Page Table Isolation (Meltdown mitigation, requires reboot.)</descr> | ||||||
|  |       <descr>Prefer privacy addresses and use them over the normal addresses</descr> | ||||||
|  |       <descr>Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())</descr> | ||||||
|  |       <descr>Randomize the ID field in IP packets</descr> | ||||||
|  |       <descr>Set ICMP Limits</descr> | ||||||
|  |       <descr>Set the ephemeral port range to be lower.</descr> | ||||||
|  |       <descr>Set to 0 to disable filtering on the incoming and outgoing member interfaces.</descr> | ||||||
|  |       <descr>Set to 1 to additionally filter on the physical interface for locally destined packets</descr> | ||||||
|  |       <descr>Set to 1 to enable filtering on the bridge interface</descr> | ||||||
|  |       <descr>Source routing is another way for an attacker to try to reach non-routable addresses behind your box. | ||||||
|  |       <descr>Source routing is another way for an attacker to try to reach non-routable addresses behind your box. | ||||||
|  |       <descr>System Administrator</descr> | ||||||
|  |       <descr>TCP Offload Engine</descr> | ||||||
|  |       <descr>This option turns off the logging of redirect packets because there is no limit and this could fill | ||||||
|  |       <descr>UDP Checksums</descr> | ||||||
|  |     <descr>Web GUI TLS certificate</descr> | ||||||
|  |     <descr>Web GUI TLS certificate</descr> | ||||||
|  |       </destination> | ||||||
|  |       </destination> | ||||||
|  |       </destination> | ||||||
|  |       </destination> | ||||||
|  |       </destination> | ||||||
|  |       </destination> | ||||||
|  |       <destination> | ||||||
|  |       <destination> | ||||||
|  |       <destination> | ||||||
|  |       <destination> | ||||||
|  |       <destination> | ||||||
|  |       <destination> | ||||||
|  |       <destinations/> | ||||||
|  |         </detect> | ||||||
|  |         <detect> | ||||||
|  |       </dhcp4> | ||||||
|  |       <dhcp4 version="1.0.0"> | ||||||
|  |   </dhcpd> | ||||||
|  |   <dhcpd> | ||||||
|  |   <dhcpdv6/> | ||||||
|  |       <dhcphostname/> | ||||||
|  |       <dhcprejectfrom/> | ||||||
|  |     <DHCRelay version="1.0.1"/> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <direction>in</direction> | ||||||
|  |       <direction>in</direction> | ||||||
|  |     <disablechecksumoffloading>1</disablechecksumoffloading> | ||||||
|  |     <disableconsolemenu>1</disableconsolemenu> | ||||||
|  |         <disabled>0</disabled> | ||||||
|  |     <disablelargereceiveoffloading>1</disablelargereceiveoffloading> | ||||||
|  |     <disablenatreflection>yes</disablenatreflection> | ||||||
|  |     <disablepreempt>0</disablepreempt> | ||||||
|  |     <disablesegmentationoffloading>1</disablesegmentationoffloading> | ||||||
|  |     <disablevlanhwfilter>1</disablevlanhwfilter> | ||||||
|  |     <disconnectppps>0</disconnectppps> | ||||||
|  |         <dns64/> | ||||||
|  |         <dns64prefix/> | ||||||
|  |     <dnsallowoverride>1</dnsallowoverride> | ||||||
|  |       </dnsbl> | ||||||
|  |       <dnsbl> | ||||||
|  |         <dnsserver/> | ||||||
|  |     <dnsserver>192.168.5.1</dnsserver> | ||||||
|  |     <domain>localdomain</domain> | ||||||
|  |       <domains/> | ||||||
|  |       <dots/> | ||||||
|  |         <egress_only/> | ||||||
|  |       <enable/> | ||||||
|  |     <enable/> | ||||||
|  |         <enable>0</enable> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <enable>1</enable> | ||||||
|  |       <enable>1</enable> | ||||||
|  |         <enabled/> | ||||||
|  |         <enabled/> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |           <enabled>0</enabled> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <enabled>0</enabled> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |         <enabled>1</enabled> | ||||||
|  |       <enabled>enabled</enabled> | ||||||
|  |         <enable_wpad/> | ||||||
|  |         <eventqueuePath/> | ||||||
|  |         <eventqueueSlots/> | ||||||
|  |         <events/> | ||||||
|  |         <extendedstatistics/> | ||||||
|  |         <fargw>0</fargw> | ||||||
|  |       <files/> | ||||||
|  |       <fileTags/> | ||||||
|  |   </filter> | ||||||
|  |   <filter> | ||||||
|  |       </Filter> | ||||||
|  |       <Filter version="1.0.4"> | ||||||
|  |     </Firewall> | ||||||
|  |     <Firewall> | ||||||
|  |     </firmware> | ||||||
|  |     <firmware version="1.0.1"> | ||||||
|  |       <flavour/> | ||||||
|  |         <force_down/> | ||||||
|  |         <format/> | ||||||
|  |       </forwarding> | ||||||
|  |       <forwarding> | ||||||
|  |         <from>10.100.8.10</from> | ||||||
|  |           <fwrules>1</fwrules> | ||||||
|  |         <gateway>172.17.0.1</gateway> | ||||||
|  |       </gateway_item> | ||||||
|  |       <gateway_item uuid="a6ea102d-68bb-430f-af8b-269d52498fe1"> | ||||||
|  |     </Gateways> | ||||||
|  |     <Gateways version="1.0.0"> | ||||||
|  |         </general> | ||||||
|  |         </general> | ||||||
|  |         <general> | ||||||
|  |         <general> | ||||||
|  |       </general> | ||||||
|  |       </general> | ||||||
|  |       </general> | ||||||
|  |       </general> | ||||||
|  |       </general> | ||||||
|  |       </general> | ||||||
|  |       <general> | ||||||
|  |       <general> | ||||||
|  |       <general> | ||||||
|  |       <general> | ||||||
|  |       <general> | ||||||
|  |       <general version="0.0.1"> | ||||||
|  |         </geoip> | ||||||
|  |         <geoip> | ||||||
|  |       <gid>1999</gid> | ||||||
|  |     <gif/> | ||||||
|  |   </gifs> | ||||||
|  |   <gifs version="1.0.0"> | ||||||
|  |     <gre/> | ||||||
|  |   </gres> | ||||||
|  |   <gres version="1.0.0"> | ||||||
|  |     </group> | ||||||
|  |     <group> | ||||||
|  |       <group>admins</group> | ||||||
|  |       <groupname>admins</groupname> | ||||||
|  |         </ha> | ||||||
|  |         <ha> | ||||||
|  |         <ha_peers/> | ||||||
|  |   </hasync> | ||||||
|  |   <hasync version="1.0.0"> | ||||||
|  |         <hideidentity/> | ||||||
|  |         <hideversion/> | ||||||
|  |         <homenet>192.168.0.0/16,10.0.0.0/8,172.16.0.0/12</homenet> | ||||||
|  |     <hostname>OPNsense</hostname> | ||||||
|  |         <hostname>rtx4090</hostname> | ||||||
|  |       <hosts/> | ||||||
|  |         <httpdAllow/> | ||||||
|  |         <httpdEnabled>0</httpdEnabled> | ||||||
|  |         <httpdPassword/> | ||||||
|  |         <httpdPort>2812</httpdPort> | ||||||
|  |         <httpdUsername>root</httpdUsername> | ||||||
|  |           <http_host>127.0.0.1</http_host> | ||||||
|  |           <http_port>8000</http_port> | ||||||
|  |     </IDS> | ||||||
|  |     <IDS version="1.0.9"> | ||||||
|  |   <ifgroups version="1.0.0"/> | ||||||
|  |       <if>le0</if> | ||||||
|  |       <if>le1</if> | ||||||
|  |       <if>lo0</if> | ||||||
|  |       <inactiveTimeout>15</inactiveTimeout> | ||||||
|  |         <incomingnumtcp/> | ||||||
|  |         <infracachenumhosts/> | ||||||
|  |         <infrahostttl/> | ||||||
|  |         <infrakeepprobing/> | ||||||
|  |         <insecuredomain/> | ||||||
|  |       <Instances/> | ||||||
|  |         <interface/> | ||||||
|  |         <interface/> | ||||||
|  |         <interface/> | ||||||
|  |         <interface/> | ||||||
|  |       <interface>lan</interface> | ||||||
|  |       <interface>lan</interface> | ||||||
|  |           <interfaces/> | ||||||
|  |         <interfaces/> | ||||||
|  |       <interfaces/> | ||||||
|  |       <interfaces/> | ||||||
|  |   </interfaces> | ||||||
|  |   <interfaces> | ||||||
|  |     </Interfaces> | ||||||
|  |     <Interfaces> | ||||||
|  |         <interfaces>wan</interfaces> | ||||||
|  |         <interface>wan</interface> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <interface>wan</interface> | ||||||
|  |       <internal_dynamic>1</internal_dynamic> | ||||||
|  |         <interval/> | ||||||
|  |         <interval>120</interval> | ||||||
|  |       <interval>monthly</interval> | ||||||
|  |         <ipaddr>10.100.8.15</ipaddr> | ||||||
|  |       <ipaddr>10.100.8.1</ipaddr> | ||||||
|  |       <ipaddr>127.0.0.1</ipaddr> | ||||||
|  |       <ipaddr>dhcp</ipaddr> | ||||||
|  |       <ipaddrv6>::1</ipaddrv6> | ||||||
|  |       <ipaddrv6>track6</ipaddrv6> | ||||||
|  |       <ipprotocol>inet6</ipprotocol> | ||||||
|  |         <ipprotocol>inet</ipprotocol> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |       <ipprotocol>inet</ipprotocol> | ||||||
|  |         <ips>0</ips> | ||||||
|  |     </IPsec> | ||||||
|  |     <IPsec version="1.0.1"> | ||||||
|  |     <ipv6allow>1</ipv6allow> | ||||||
|  |         It can also be used to probe for information about your internal networks. These functions come enabled | ||||||
|  |         It can also be used to probe for information about your internal networks. These functions come enabled | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     </item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |     <item> | ||||||
|  |       <jobs/> | ||||||
|  |         <jostletimeout/> | ||||||
|  |     </Kea> | ||||||
|  |     <Kea> | ||||||
|  |       <kex/> | ||||||
|  |       <keyPairs/> | ||||||
|  |       <keys/> | ||||||
|  |       <keysig/> | ||||||
|  |     <lagg/> | ||||||
|  |   </laggs> | ||||||
|  |   <laggs version="1.0.0"> | ||||||
|  |     </lan> | ||||||
|  |     </lan> | ||||||
|  |     <lan> | ||||||
|  |     <lan> | ||||||
|  |     <language>en_US</language> | ||||||
|  |         <latencyhigh/> | ||||||
|  |         <latencylow/> | ||||||
|  |     <lb_use_sticky>1</lb_use_sticky> | ||||||
|  |         <lists/> | ||||||
|  |     </lo0> | ||||||
|  |     <lo0> | ||||||
|  |       <locals/> | ||||||
|  |         <local_zone_type>transparent</local_zone_type> | ||||||
|  |         <logfile/> | ||||||
|  |         <loglocal>1</loglocal> | ||||||
|  |         <loglocalactions/> | ||||||
|  |         <LogPayload>0</LogPayload> | ||||||
|  |         <logqueries/> | ||||||
|  |         <logreplies/> | ||||||
|  |         <logservfail/> | ||||||
|  |         <logtagqueryreply/> | ||||||
|  |         <logverbosity>1</logverbosity> | ||||||
|  |       <loopbacks version="1.0.0"/> | ||||||
|  |         <losshigh/> | ||||||
|  |         <loss_interval/> | ||||||
|  |         <losslow/> | ||||||
|  |       </Lvtemplate> | ||||||
|  |       <Lvtemplate version="0.0.1"> | ||||||
|  |         <mac>d8:5e:d3:e7:2c:8c</mac> | ||||||
|  |       <macs/> | ||||||
|  |         <mailserver>127.0.0.1</mailserver> | ||||||
|  |         <match/> | ||||||
|  |         <match/> | ||||||
|  |         <match/> | ||||||
|  |         <match/> | ||||||
|  |         <maxfilesize/> | ||||||
|  |         <maxpreserve>31</maxpreserve> | ||||||
|  |       <media/> | ||||||
|  |       <mediaopt/> | ||||||
|  |       <member>0</member> | ||||||
|  |       <mirror/> | ||||||
|  |         <mmonitRegisterCredentials>1</mmonitRegisterCredentials> | ||||||
|  |         <mmonitTimeout>5</mmonitTimeout> | ||||||
|  |         <mmonitUrl/> | ||||||
|  |       <mode>automatic</mode> | ||||||
|  |     </monit> | ||||||
|  |         <monitor/> | ||||||
|  |         <monitor_disable>1</monitor_disable> | ||||||
|  |         <monitor_noroute/> | ||||||
|  |     <monit version="1.0.13"> | ||||||
|  |         <MPMAlgo/> | ||||||
|  |         <msgcachesize/> | ||||||
|  |         <name>$HOST</name> | ||||||
|  |       <name>admins</name> | ||||||
|  |         <name>carp_status_change</name> | ||||||
|  |         <name>ChangedStatus</name> | ||||||
|  |         <name>CPUUsage</name> | ||||||
|  |         <name>gateway_alert</name> | ||||||
|  |         <name>LoadAvg15</name> | ||||||
|  |         <name>LoadAvg1</name> | ||||||
|  |         <name>LoadAvg5</name> | ||||||
|  |         <name>MemoryUsage</name> | ||||||
|  |         <name>NetworkLink</name> | ||||||
|  |         <name>NetworkSaturation</name> | ||||||
|  |         <name>NonZeroStatus</name> | ||||||
|  |         <name>Ping</name> | ||||||
|  |         <name>RootFs</name> | ||||||
|  |       <name>root</name> | ||||||
|  |         <name>SpaceUsage</name> | ||||||
|  |         <name>WAN_GW</name> | ||||||
|  |   </nat> | ||||||
|  |   <nat> | ||||||
|  |       <neighbors version="1.0.0"/> | ||||||
|  |     </Netflow> | ||||||
|  |     <netflowbackup>-1</netflowbackup> | ||||||
|  |     <Netflow version="1.0.1"> | ||||||
|  |         <network>lan</network> | ||||||
|  |         <network>lan</network> | ||||||
|  |         <network>(self)</network> | ||||||
|  |         <network>wanip</network> | ||||||
|  |         <network>wanip</network> | ||||||
|  |     <nextgid>2000</nextgid> | ||||||
|  |     <nextuid>2000</nextuid> | ||||||
|  |         <noarecords/> | ||||||
|  |       <noauto>1</noauto> | ||||||
|  |         <noreglladdr6/> | ||||||
|  |         <noregrecords/> | ||||||
|  |         <noton>0</noton> | ||||||
|  |         <npt/> | ||||||
|  |   </ntpd> | ||||||
|  |   <ntpd> | ||||||
|  |         <ntpserver/> | ||||||
|  |         <numqueriesperthread/> | ||||||
|  |         <nxdomain/> | ||||||
|  |         <onetoone/> | ||||||
|  |   <openvpn/> | ||||||
|  |     </OpenVPN> | ||||||
|  |     </OpenVPNExport> | ||||||
|  |     <OpenVPNExport version="0.0.1"> | ||||||
|  |     <OpenVPN version="1.0.0"> | ||||||
|  | </opnsense> | ||||||
|  | <opnsense> | ||||||
|  |   </OPNsense> | ||||||
|  |   <OPNsense> | ||||||
|  |     <optimization>normal</optimization> | ||||||
|  |     </outbound> | ||||||
|  |     <outbound> | ||||||
|  |         <outgoing_interface/> | ||||||
|  |         <outgoingnumtcp/> | ||||||
|  |         <outgoingrange/> | ||||||
|  |       <Overwrites/> | ||||||
|  |         <password/> | ||||||
|  |     <password/> | ||||||
|  |       <password>$2y$10$YRVoF4SgskIsrXOvOQjGieB9XqHPRra9R7d80B3BZdbY/j21TwBfS</password> | ||||||
|  |       <passwordauth>1</passwordauth> | ||||||
|  |         <path/> | ||||||
|  |         <path/> | ||||||
|  |         <path/> | ||||||
|  |         <path/> | ||||||
|  |         <path/> | ||||||
|  |         <path/> | ||||||
|  |         <path/> | ||||||
|  |         <path/> | ||||||
|  |         <path/> | ||||||
|  |         <path/> | ||||||
|  |         <path/> | ||||||
|  |         <path/> | ||||||
|  |         <path>/</path> | ||||||
|  |         <path>/usr/local/opnsense/scripts/OPNsense/Monit/carp_status</path> | ||||||
|  |         <path>/usr/local/opnsense/scripts/OPNsense/Monit/gateway_alert</path> | ||||||
|  |       <permitrootlogin>1</permitrootlogin> | ||||||
|  |     <pf_share_forward>1</pf_share_forward> | ||||||
|  |     <pfsyncenabled>0</pfsyncenabled> | ||||||
|  |     <pfsyncinterface>lan</pfsyncinterface> | ||||||
|  |     <pfsyncpeerip/> | ||||||
|  |     <pfsyncversion>1400</pfsyncversion> | ||||||
|  |         <pidfile/> | ||||||
|  |         <pidfile/> | ||||||
|  |         <pidfile/> | ||||||
|  |         <pidfile/> | ||||||
|  |       <pipes/> | ||||||
|  |       <plugins/> | ||||||
|  |       <policies/> | ||||||
|  |         <polltime/> | ||||||
|  |         <polltime/> | ||||||
|  |         <polltime/> | ||||||
|  |         <polltime/> | ||||||
|  |       <Pools/> | ||||||
|  |       <port/> | ||||||
|  |         <port>22</port> | ||||||
|  |         <port>25</port> | ||||||
|  |         <port>443</port> | ||||||
|  |         <port>53</port> | ||||||
|  |         <port>80</port> | ||||||
|  |     <powerd_ac_mode>hadp</powerd_ac_mode> | ||||||
|  |     <powerd_battery_mode>hadp</powerd_battery_mode> | ||||||
|  |     <powerd_normal_mode>hadp</powerd_normal_mode> | ||||||
|  |     <ppp/> | ||||||
|  |   </ppps> | ||||||
|  |   <ppps> | ||||||
|  |     <prefer>0.opnsense.pool.ntp.org</prefer> | ||||||
|  |         <prefetch/> | ||||||
|  |         <prefetchkey/> | ||||||
|  |       <preSharedKeys/> | ||||||
|  |     <primaryconsole>video</primaryconsole> | ||||||
|  |         <priority>255</priority> | ||||||
|  |         <privateaddress>0.0.0.0/8,10.0.0.0/8,100.64.0.0/10,169.254.0.0/16,172.16.0.0/12,192.0.2.0/24,192.168.0.0/16,198.18.0.0/15,198.51.100.0/24,203.0.113.0/24,233.252.0.0/24,::1/128,2001:db8::/32,fc00::/8,fd00::/8,fe80::/10</privateaddress> | ||||||
|  |         <privatedomain/> | ||||||
|  |       <priv>page-all</priv> | ||||||
|  |           <Profile/> | ||||||
|  |         <promisc>0</promisc> | ||||||
|  |       <protocol>https</protocol> | ||||||
|  |       <protocol>icmp</protocol> | ||||||
|  |       <protocol>tcp</protocol> | ||||||
|  |       <protocol>tcp</protocol> | ||||||
|  |       <protocol>tcp/udp</protocol> | ||||||
|  |     <prv>LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1N3d2dna29BZ0VBQW9JQ0FRRExzTERuNG1rVHhFclgKdHdqTXoxencyeHJhNTZ5bTYrYzlRNEM3UjMyMzVuWjVPM1ovdzMva01XZjkvbkZsamcyQVdYRElKY1dmOTQ0UgpFblFMdmlha2NNTHR1Qm1KTVRYZnVQWnhsSWE4Wlc0S0ZuT21UUzRZcUJXOEdCSkl3TG1DaTFvZGhZeGZQRDZMCldEZnZYMm1tWEIrUFNxL0l4WEhOSjdxZVB4YzVuSzUyMW1uNW5DQW1kUENjYmZ2Z1d1QzZOeFZtemR5em1rVC8KNnVqRUJFYTZ6RkQyUUtDN1N6a2ptZUNpd2VDQjc5NjZqeEV5UWtWUWpiVDkwWXJ4Q290TyttMkhBTlBkc2NPcQpvNldXMEhmSlNpa2k4K2NDWHlzbGRFSzFZbmxueTNFWlVqTExWamVFL1dBVTRDUFlSaFhUVUZVMjFkVXZrM29hCkVpeldVdmhKc1FHYnh2aFRUQlN3aVliOUQ3Ymx1MWl4UzJxNzczOTlVZ1E3cVM1QWE4SUdtcDg1Q2hRSUFZRWMKSTd6RGVWTGtrOGpkWkFCaTdGbDl0M05OQTU3WlVZVzErWE45K1RneWMxOVNsajFVbVF2RG96TEJDOTlNUmkvNApEQTIxRFpIODY3ekFYenFqZWUrckorQkZvNzVEQjlqd2tMTmVQZWl6bFF6dEhaalJTS2dpZ1I1T0pKa1JUci82CjduaTBtbzVITGNkU3hBSDFmdXdXS0hWS2RHQlQrNjhhYkUrZ2tRKytUOEx6dWErUW1qTE5RUWoxUkJIVjNLNVAKL3dvbXJKZG02d1ZLbm85RXlNait4azFwS05wb0F4UnR1WllmQ0RVVVBaNHVwQm1vMEs3d0Y0d21XdVdhK21Wdwplb1ZTcDRXMEhOWVJGU1pyWWxrc1AzdWViSHcva1FJREFRQUJBb0lDQUFzc3hPL2IzSTd3a0hpWU9wdmQ3b2ZxClJXVm9HM0ZHOVBkSCtrcU1DQW9zVXlpZ2lnWkZhQUZSY3BhZFBJUnBVRFZQOHQrUUx2RHhTSEtJVkNTR3lLRHgKN01mVTkxV3ZCUGtpc1NhWEV2TklEMHJ2WTJYbXl4WWdOcDBNcHdnbHhxZXlWSDNWSTFmZ09zQXpWVkpGSmtzeAp0NnVKV2U2R1lwRnlVZ3MzZytNdHhPYVJLZHcvWkFZb0dVRkR5WE5NR1JNdVRYYkg2WWxTOStFZ2RxZTJZbGtDCk41amkvODUydUlwSytXZUVnbmd1ZkVZNDdpVVhQSzFJTVB0UjRURUxOb3hkTWVBYnZBUG9La2QwMWZOWnVaQ3EKQ0dxNS9kMEQ4cDZKNjlUK3M1RnR1R1UrdkxtcUg3NmtsZjVmTTZnOFpCc2xSNStNQ0xlay9DaHRBZGU2VXBQRApXQ2EwazU3dmdneUdQdGVlVXY2RVJBMEp6SjlJd2VHZGdVWHhNdW5LK3ZSNWYydWJKWFJoMVJpNTNFSTNvVUxYClFvWm9hOTY3VzNUajQ3UzR2RlQyK2dLb0g2OXlNckdVNVkwcjJrSTFXMVVhWEJ1aVVrMi94amdyWVdTblUzUUQKZkM3ZXllTlNlN3c4UW9MMVBEYXJwVXdaK2xGZ0w3NFVScldLQU12WVhxa3NTMHVtb0tTSWo4cjZMM0hVSUVaUgpZRzhBTU91dFhrQk5lMkNpTXRKM2NYUXNIOWloQU9QL3AvaE9BTTBGNkM3Ymt1Vm85d1pRdDVESWxRWUl4TlArClFRZ2doRnhBNTlTWmpwRk00QkN5L0hEOENJY3VuSURZOVNlbXNSYXdyUVY1eGk1akFScVdOYTdBSVMvVlArdUUKQkpmS0dDNFlZVmxqS1VLeEgxVUJBb0lCQVFEcnZOWXNrd3ZhQ2Z6MlcvbkIrRjNjVE1RbjM2RENSYnZwQ0s1dApldm96TjJGbjBJdWFnN2RrYzN2NTFxTVNEd0h1cVNkVTRHUHZMcm83alpJaFNEZ1AwLzBLWmc0VmxtZE5HbEovCk1lcXhmOGRkOFdTQjZiUksrK2FRcEhaeDd2SUFTWkE4eHkvZ3F2NGJpSmlqVDhUQ2lSeXdYSTQ0ZlRYM0xLZTIKVG1Uc29XNk9yQmErSWJRYjBpTEh4WE4rZ3JDM0cxWWxIUlNvTEpKUkU0eFVLMGsvM1JLNU16RjRIYUNZb1BWOQpDOFpQellMR253SE9ERU8zbHRtSGJvQUNFa0VrT2dFV3U4RFo2YlYrMXJBcVh6WnN0L3hNZnJ5KzlMRVdYQUwvCkRnOEdkall0YzdyUTFZd1BIY1h6cFo2clVIdXh2K0p6VEE1ZzNCS1p6aWhwNFdHaEFvSUJBUURkTXE3N0dRWGMKYW5hYlMxanlFT3VzNFp5ZlJ4cW10NEVFaHZjY0dRVVVrV0IrWk11bnpyaENxb3ZwQ1dhVU9zWVhuNG45Y3BQSAo3bm1mOUJHbFI4NVhCVHNLM2d4bE5NMUhjSGFTNXZSem9WQVBNd3o2VVV0ZFNLWXRLR0Q3Wkxmbm9ISXN1SlEzCnJ6WWIyTFhpVmx6MWlNNUVmT0VrL1J5UjBwMGtleXVwa0F0OXBRV0hzaURYb0pibDE2d1ZLc2NDNGUzNjdRRWsKcFdoeXcyS3A4bXdtOGxqQllxZWtHdUREeGVZSDMzMVlGa2FMUEJCT2xPQnlveFlOUDdBVVREUlV3KzB1T01jNwozb0N1VE9jWnAxVWMwQURBOXRTRVRINklWdlFEUXZlYzR6MWRTVGRmUEkxRzVUTCt4Mzlvam5OcGVoYng0bEwvCmRxTTBmcFlPL2ZmeEFvSUJBRmwzOU8wNzdjNlY1ZHoyY1djTnhVbThGT0p4UEVrZlFEOGtYVmNOeW5HdnZoY3gKamhwWmpUdmhuSmJvd0VFMVV1MXFZNVFTQ2J1WVIzUWN1ZTVKdzRVMlZwNGd0NDIzNUlMZHo1dVlyVk1xaE5jQgpxN3ltbnhlcVhRcGVjTm15NzBQdXA0QjV0SkVYTkpQc2xzbThsNWVoaERMbkhjOFFybStlRWhUZDBlNEJJcjJoClVJeGVyRVcyemg1MXNPeTkyeVhUaVRGU3hTbENxVkYrRXM5TEVtVGJtYVNTYWw4RkY1TjEyMVhYSnkvWWRwNjkKY0dqc1BMTXIzR2xMSmVnalYzZlJUK0o1NWFxT3lhUlhCTXRBRVo3WGdUampETzJJWHNGMnNHaHV4SU1XVUYrVgp3YnhLbi9xSXVUMU1pVmpKbGZpVE0vWEFVdUN1QlowOEloaDFRcUVDZ2dFQUZwdzJySzRMSGxPM21mb2l0bU9xClkzcVFVdXVtdXNIcEt6aE1qQSsycURxUC9YdDZJY1lNcWF2YkwwL3ByMTh1bm4yTlVsM2k0ejNxS3NKOUIwTUcKd1hoa1o2RDQ3V052VkUwWG9iNS80RTN0N0EvUTFNbDRoYW1HYXZsRXFJM01DcDRvN1k5VWZ6aW10RVA3bTQ0dQpaRjYranR1ZysvSHZlS3hwcWEvNWI1U3N5QVFWUTZDZW9Ndm1nTW9CNmd2OFdid1VZbURWakJSb1Q4clBEQVllCnJnQjV1QkxJaGdyRlROMnV2TUZJZzdlTE1ISk1UR3dGWVZKd1Q1eGgrRUV0M0RoR3gwSEFnOHNqcGkxd05md1gKeENFeTRvYVloSWw1S2FDUndyK1dwZS9JZHYrajdGVTVMN1QvK0hFV0FlOEZ0eE5td3dUYWJRaUllRFkwU29ZRgpVUUtDQVFFQXRiclZqbTFsaDQ1REhIWnVsem4xNllIQzJrMUYwWG9FZFVSQ3o0QTFsMHBEK3ljL2srdmJ0Qmg0Cm1RRDV1a3FicHFFZy9GNUhDZmdOaHlieHNNdVV6NzFaU24zN2dwczNDWUdiUyt4RkhjZTJBakNTbUlYQWIxQjgKR0Z2WnV4UlB5QXU0YVBvT1J3RzM3NVBOM0VNNk83bzdxbjlYeExTZWRIMHExM2U0YkhYYm4rc2xOa1RIM2xmcwpLVnBOUUhVSUNDSW5vQ0llV1dwdnAwQnFoYjlKclRsbXd2c25zOHpZVDNiY3F5QXZHZGRnNUs3Y0MwRVJaem9ECnFJTkI3S05FVjQ1NmF0eDZVT3VYUlpKREMvaHNJUTZNaVBveUJacHRsK1ZIMEtQbEFIWGExb0FXZmNuL0U3MFYKK0RaeVBiMWxkQUdpb1hqditGd2h5VzZlWEVrQlBnPT0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=</prv> | ||||||
|  |     <prv>LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpSQUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1M0d2dna3FBZ0VBQW9JQ0FRREpTUWVnVFhySnl0NVYKYmk0Rk9IeHJrOXhxQ21FRU54V2pINVVwNDBFK3hjUzZQU1NyQ0RyVzdkOVhxUmQ4SkRkQ210a0tEaUxhY1pTMgpMUm1abnd6VnRzZGtBR2pOYm5OM1hSNmlFajdGL0JnbVBlcDFTaklacFNnM2Q5L1h4cU9BM1lCWXNNL25ST29YCnlmTHcycFJOLzhHVjN3MHoxbVFZUitMZWI3UTFuc1c3dTJ5NytUdzlJNkZTQnhuR1pHdHJQWXk2RUFvQ0x2bUYKQnFCYWxkWTQ2ejdlWjlIRkZXaE8ybWpaUzVPdTE3ZVozVHBxcFFNUHVPYnFXcXJoTTF2NWN2Ymh1TmRESE1ndgpVVFVnQ0RNK2FkS3dIc0dNNGw5ZGtOQTgxdGlJcXpzN1BqcjFSbTAyVW5RdGd5bzNjeE9FdWxiT2dTSGx0aFMyCmtUMXE2UmhyemYvRGRJSEhta1RROGtwWVloWGc0VmpMQVdpSVBub2dydmxFSVYwRGFDdkQyNmJGRENtWTFzb0UKbDV1NGtYanJScDRXK29NUVRHeG80NzFMQnNBMlh1Si82ZFJBQkxXOHh1cEU4OERiaWtZbnU1V1BpSnpleHhRUgoyNU1FQVd6TCtKK0lubFExbmpMVWwyN3R0c1VQQ1VjL3c0NXpwcEREdjBmdTQ2enVLcTNjRVZGK2JESytBZ2VPCkQ2SXNzUjVRRTdFNVdkWjYrNWl6ZHB4eWdUeGh0L1k1RlBkSEdCOUJsMWt6NHhsdGFzOW9uZmtIMWRUeTd3MU0Kck43Z1l5WjgvS0pMWW9EY2NBOVFuNGt6bGtPeFVUMENuS1Exa1Y2T3RoVGxUWDMrZ25pSkkrdFdZRDltNGV1cwpzYWN1anpyWDl5TTNZcEloMnZqODJ0NHpPNjIrNFFJREFRQUJBb0lDQUNPNnZpc1BIY3pzb1NjK2dkWkU1dGNNCnZkc240UDFIenVRd0VzRUcrVG1zanVWMVBZbExrbkE4OU1DQmdDejEyOFpMcU51ZlUwSDkxK1Uzbjd2MGJ1bVAKd3BpR2R4UUNOMlpZaGZ2RWE5YW1qMTNZYjBJbks3b0FKbUdrT254NW91UFl6YlBRblBNRE9WK0VKa2JwTWRxZgptOHdmOWg2OXYzSk03bUZJS0UrOVVZR252UjhuMkhETTNwR3FONEhQS1A4MkE0RXlvQ2d2a1BTelRxc052bU5ICnBOY0RURW5rNlNsWUhUVDNOSzJjVnBldUhMUzUrazlqNWI5elhUSlE5TkpVZlN6bnEvUmFpMUZVNDY1K0xpUjEKMGVPWDdnajFWUExOcGgwcWtQQy9ubW0vZStVMmZXUGZZb2FDcWkrQ0VwU2twQXlQZ1FZZTJsSG0rYVU4MzZ2UQpuaHZuL0p5ZHJDL1NyTUFZaXpOZFYyZjlHTkNwcE1SbUZyOS9saVJiNEFpSzRLSDRETGdSRUxHaDJLNzJuOFRLCkxUSVhIV3RacisyMWU4c0Mxbm5MSENnK21wMHBvSWJsbEtoYk9VTmVxR09yWm95NFBXdDZMQndFYzN0MG1wVEMKODhiSUpqMzFCQngzTGE1SUE5b0FNRi9lbHJYdFhhVnl4bm5yTHdjYzFNVWpCV20rZDVqbC9WOEdIcEJRd3pXYwpPNWdNSXlQNUIvdzBacUcyZjV1akZkOHo4dElmcEFRRTJSbDNxRUFYNU1NY1JQaFlTNDJqTWl4czc3TmtOVldQCkpqUVoxVDVXQTVKOUxEL2FKRkplQ2MvbjhpNldOQ3FzdEQ5OVNPTCsrTTBFQTlka2lLNWtOcXFZeXZuRG9SZVcKSW84eXhvVnpObURsWjBkSU9UUzlBb0lCQVFEb2tvMWxPS05FNlBWWmRRU3lmS0JOTEZNcEl1V1VVZmp0ODU4awpJTTB0TnNyS0d2N3NmYkt0dlMvOWgwMGluU2FyWTJ4amVETG91WEI5VzdKY1B1NjRoNHYwek1lbXRhdDRyTUJnClA5bkQ3MW00dERqS2ZrZDAza2tUbk4ySTBxYkwzeFVoTjNEQlJZTU9veDFMa2M4MFFFMHhSUEM1YmRJaXcwemEKTWdtK1dOZVY1VEZoSkpQZ2dVRVo5U1A2aWV1VEY0OW9wRGNWdGUwQ0I0WnFUaTRWb3YvZFVDWGpNK0djRnNWdgpPWTZYTE9KTmRldHdnUVNkd1hlSzB1WlBpWnVKTGlsTEg4OFVKYWNoQThDZW1SclMxRUtxWElwK2dkQWV4MnhVCmY5amRMMGF2SlJEY0xqWlhETXBvWlJpc0JoWVArZzY3VHZza3FscDh4M2p2STlWVkFvSUJBUURkajZrdWNLM0MKYXprMzlqYllvM3RFZ0R5L2VGNnBjWFlpK21Ba1ZNRk9vSWJ5cmNyN3BqSnRMNFMyMEFDRmpBUGFQT042dWVVWQpQQm92dC9QODB1V1c5cGZCK29mRmdadzRqc3hLWFY4eEJmOVdLWVZndFBsOHhIL1RJcERTMjhVTlowNDlhUW4vCjlCRzNac0lyenk3RzFLRTZPLzBMMnVmMnFyaUxxRFQyV3dsdFVsbWs2Ym5NeThkR0sra1JLcFhvSm1RTlNHRHoKOXd4blU2ZmZ1NDdDLzRYMHRIVk1MVFVneFh4djdqN3BpSzI4dzBuZ1N5S3ozV0IzWTJwaFVsZEJIdEprQko1RQpoRm8zMXJCVDU5enhkb2crYXh1bkh4S3EySGFHRkt0ZUZ6RGpkTTFpQzE3bWNtWXBzR2tuenA0cjRjZm5FYTFSCko4Wmo5ZVFQaEVOZEFvSUJBUUN3d2hsbXNkb2MySFVJVFZDSm13QjJSdGJaYitWT2lkS0lmdDBYcHpwcFA3aDIKVEhndEl3ZDIxayt2LzNJWGVaclhMWlJHTVNkNEN1QTgxa0ZEckt6Z1lGeDFiR0hkQ1R2T1ZuVkxjWnUvTjUxWQpMTmp3eFhMbmxyMnhnMG8zMytuWERyQlBjNFJsejcvZ2t3WUQxa2pGckkwK2dlZjI5a2w4RkRUSHJMb05DaGFuCm5PNmZweDRneGZ2Rmo3T05pZDhhQnhEK2RiaEw3dDIzNmlJMWp6K2xRQ0g0Z1I2YWhHYldxOVBZU2NWZWprVmMKbTkrWnZPVFdSU0RteUkwMExDQ2k3UXVEUmlTcmFrYVFaL3F3VHlxOHk0ZnpWS3dKby8yYU52VFZiK2xSaWNuTgorWHpMNnU5dno0L1NNZXZEYWtqQVVjdDZmbmVQa1UxK2dsZ2VZSHlWQW9JQkFRRFJtYW0wVEZhbFdXaHMvNWtOClEwTkhINFhZb1JmMGRta0xXQStCNzBoY2lOS0JYRlp0ME9GZGw1bVdsSm9adk1hY1BBUDd3MGJ1c1ZVWWxZN1YKTy9LRTZVM1I3WjlxQWw1Mnh1aU81Vnc3ZFhBRDVBM1EyZ1EzdTNFdG5VS2lwOVA0QlNYb1JLbDRJVDV0WVdJSgpyZHVUciszQ3VLT0FCcHh4Snpxa3JBRkdtZ01HRCtUTWRXd1hTU1NBeHVPYklNMW1MSU4wYVdlSEJNMFFKdnptClZIb1BFVXA1b0FwamdWVUVacTk4K0VjK0NOWkxmL2d3bndQNllsQnpRWEtQRlNXRWJwTWNtWjNjTmRWZmc5T1YKM1FDUTBkQzhNL21hRlhSRWVibE95TmtCanpEcHpVTExJUFNyVDhoRVlpWm95VGVyVGRJZVVBUEZoYnBTTUhtTApFRlhsQW9JQkFRQ0VUdVJQRHZvMC9tdDhyTzhLNENsamtuU0gxZ1FBSjFha3U3UXg3NUJUTDB6OWRNY2lMK1JLCng1R1lFTW1wcUtNb2FPbWc0WFVRMVRlQ2Vic1R0NjMyWXp6cmNCU0d1RzVnN1o0UUVublUzRXU5QklIMUVSL2gKSEk0NWowU0xNRUpObkNiTkpnRVNRRUFCbzN3cHhrRTdiRGlNdTVPOXVqMlFRVTlTTm94QkFmbVFXRDJJaU1BRQpWYzV3QTNZajBMdElSYkJmdzNBTE9uNlRSc2xucy9JMnd2Z1RCQW9sU3NZbEtEK0NRY3hDZldlNmZwU21aYmlCClBGUE9DY1ZQTXhGeXBhZWFJMkRXNWRPNFNoNGQ0ZlZma2F3ck9LN1N2QnFZb0Y5L2VndThzQS9ZdklaRVltQUQKd0ZIOGs1QjJ4WXdiNkVmNmFFQ29ZTitsNWtlWmhNWTgKLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=</prv> | ||||||
|  |         <qnameminstrict/> | ||||||
|  |       <queues/> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       <quick>1</quick> | ||||||
|  |       </range> | ||||||
|  |       <range> | ||||||
|  |       <reboot/> | ||||||
|  |         <recipient>root@localhost.local</recipient> | ||||||
|  |     <refid>6734d13fa9e4a</refid> | ||||||
|  |     <refid>6734d6c82dc59</refid> | ||||||
|  |         <regdhcp/> | ||||||
|  |         <regdhcpdomain/> | ||||||
|  |         <regdhcpstatic/> | ||||||
|  |         <reminder/> | ||||||
|  |       <remotes/> | ||||||
|  |         <reservations/> | ||||||
|  |   </revision> | ||||||
|  |   <revision> | ||||||
|  |     <rocommunity>public</rocommunity> | ||||||
|  |     <route/> | ||||||
|  |   </rrd> | ||||||
|  |   <rrd> | ||||||
|  |     <rrdbackup>-1</rrdbackup> | ||||||
|  |         <rrsetcachesize/> | ||||||
|  |     </rule> | ||||||
|  |     </rule> | ||||||
|  |     </rule> | ||||||
|  |     </rule> | ||||||
|  |     </rule> | ||||||
|  |     </rule> | ||||||
|  |         <rules/> | ||||||
|  |       <rules/> | ||||||
|  |       <rules/> | ||||||
|  |     <rule uuid="0465308d-8605-466c-bcb4-95eeb989251a"> | ||||||
|  |     <rule uuid="2df05591-13e7-4d91-a1b8-d25e338ada5f"> | ||||||
|  |     <rule uuid="4a5e7b65-0d7f-4452-8a29-2ec61a47ec19"> | ||||||
|  |     <rule uuid="b21f808a-6a4a-4cd6-9a83-1660cc8ea58b"> | ||||||
|  |     <rule uuid="f2ee612c-c290-4445-8045-df82a86db0e5"> | ||||||
|  |     <rule uuid="f79eded0-3c11-4f57-9aaa-55d4888589fa"> | ||||||
|  |         <safesearch/> | ||||||
|  |       <scope>system</scope> | ||||||
|  |       <scope>system</scope> | ||||||
|  |     <secondaryconsole>serial</secondaryconsole> | ||||||
|  |     <sequence>system_information-container:00000000-col3:show,services_status-container:00000001-col4:show,gateways-container:00000002-col4:show,interface_list-container:00000003-col4:show</sequence> | ||||||
|  |     <serialspeed>115200</serialspeed> | ||||||
|  |         <serveexpired/> | ||||||
|  |         <serveexpiredclienttimeout/> | ||||||
|  |         <serveexpiredreplyttl/> | ||||||
|  |         <serveexpiredttl/> | ||||||
|  |         <serveexpiredttlreset/> | ||||||
|  |       </server> | ||||||
|  |         <servers/> | ||||||
|  |       <servers/> | ||||||
|  |       <server version="1.0.0"> | ||||||
|  |       </service> | ||||||
|  |       </service> | ||||||
|  |       </service> | ||||||
|  |       </service> | ||||||
|  |       <service uuid="7513f341-7d21-4f11-903f-30d07b3aa41e"> | ||||||
|  |       <service uuid="c1e99556-91f5-4dbf-81d7-7915a3213de9"> | ||||||
|  |       <service uuid="dca8a81f-d389-4baa-b477-8b348194fd25"> | ||||||
|  |       <service uuid="f99ada79-ba1a-4ee1-81f1-ef570e8e5ea9"> | ||||||
|  |         <snatrules/> | ||||||
|  |   </snmpd> | ||||||
|  |   <snmpd> | ||||||
|  |       </source> | ||||||
|  |       </source> | ||||||
|  |       </source> | ||||||
|  |       </source> | ||||||
|  |       </source> | ||||||
|  |       </source> | ||||||
|  |       <source> | ||||||
|  |       <source> | ||||||
|  |       <source> | ||||||
|  |       <source> | ||||||
|  |       <source> | ||||||
|  |       <source> | ||||||
|  |       <SPDs/> | ||||||
|  |       <spoofmac/> | ||||||
|  |     </ssh> | ||||||
|  |     <ssh> | ||||||
|  |         <ssl>0</ssl> | ||||||
|  |       <ssl-certref>6734d6c82dc59</ssl-certref> | ||||||
|  |       <ssl-ciphers/> | ||||||
|  |         <sslverify>1</sslverify> | ||||||
|  |         <sslversion>auto</sslversion> | ||||||
|  |         <start/> | ||||||
|  |         <start/> | ||||||
|  |         <start/> | ||||||
|  |         <start/> | ||||||
|  |         <startdelay>120</startdelay> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <starttimeout>30</starttimeout> | ||||||
|  |         <statefile/> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <statetype>keep state</statetype> | ||||||
|  |       <StaticKeys/> | ||||||
|  |       </staticmap> | ||||||
|  |       <staticmap> | ||||||
|  |   </staticroutes> | ||||||
|  |   <staticroutes version="1.0.0"> | ||||||
|  |         <stats/> | ||||||
|  |         <stop/> | ||||||
|  |         <stop/> | ||||||
|  |         <stop/> | ||||||
|  |         <stop/> | ||||||
|  |       <subnet>24</subnet> | ||||||
|  |       <subnet>8</subnet> | ||||||
|  |         <subnets/> | ||||||
|  |       <subnetv6>128</subnetv6> | ||||||
|  |       <subnetv6>64</subnetv6> | ||||||
|  |       <subscription/> | ||||||
|  |     </Swanctl> | ||||||
|  |     <Swanctl version="1.0.0"> | ||||||
|  |     <synchronizetoip/> | ||||||
|  |     <syncitems/> | ||||||
|  |     <syscontact/> | ||||||
|  |   </sysctl> | ||||||
|  |   <sysctl> | ||||||
|  |     <syslocation/> | ||||||
|  |   <syslog/> | ||||||
|  |     </Syslog> | ||||||
|  |         <syslog>0</syslog> | ||||||
|  |         <syslog_eve>0</syslog_eve> | ||||||
|  |     <Syslog version="1.0.2"> | ||||||
|  |   </system> | ||||||
|  |   <system> | ||||||
|  |         <targets/> | ||||||
|  |         <templates/> | ||||||
|  |       <templates/> | ||||||
|  |       </test> | ||||||
|  |       </test> | ||||||
|  |       </test> | ||||||
|  |       </test> | ||||||
|  |       </test> | ||||||
|  |       </test> | ||||||
|  |       </test> | ||||||
|  |       </test> | ||||||
|  |       </test> | ||||||
|  |       </test> | ||||||
|  |       </test> | ||||||
|  |         <tests>865105a2-cbea-4a01-9979-c67818da9d99</tests> | ||||||
|  |         <tests>91b4e409-211b-49d5-9fa3-dc9054106646,cbe9cb72-e8c2-4740-990c-abcc486b0654,c0708923-88de-4178-abdd-819737440ce0,e887125d-c5d2-45e6-b40d-2c400d5449d1</tests> | ||||||
|  |         <tests>cc3684f2-701e-4de4-883d-803e08cf47b6</tests> | ||||||
|  |         <tests>f2d734cb-2a0e-4375-9460-11bdd5b20503</tests> | ||||||
|  |       <test uuid="16186b38-0e13-4cc3-ad18-ccc3fcc91837"> | ||||||
|  |       <test uuid="69117d4d-8c41-4712-97c0-87b4fa7c9837"> | ||||||
|  |       <test uuid="865105a2-cbea-4a01-9979-c67818da9d99"> | ||||||
|  |       <test uuid="91b4e409-211b-49d5-9fa3-dc9054106646"> | ||||||
|  |       <test uuid="c0708923-88de-4178-abdd-819737440ce0"> | ||||||
|  |       <test uuid="c34aab30-9194-4667-b516-004b9c90c1c0"> | ||||||
|  |       <test uuid="cbe9cb72-e8c2-4740-990c-abcc486b0654"> | ||||||
|  |       <test uuid="cc3684f2-701e-4de4-883d-803e08cf47b6"> | ||||||
|  |       <test uuid="e887125d-c5d2-45e6-b40d-2c400d5449d1"> | ||||||
|  |       <test uuid="ea6b821c-4f30-455b-bd5b-23a6f0c20554"> | ||||||
|  |       <test uuid="f2d734cb-2a0e-4375-9460-11bdd5b20503"> | ||||||
|  |   <theme>opnsense</theme> | ||||||
|  |           <this_server_name/> | ||||||
|  |         <time>1731518072.7612</time> | ||||||
|  |         <time>1731518072.7612</time> | ||||||
|  |         <time>1731518084.0639</time> | ||||||
|  |         <time>1731518084.0639</time> | ||||||
|  |         <time>1731518114.2801</time> | ||||||
|  |         <time>1731518114.2801</time> | ||||||
|  |         <time>1731518311.7033</time> | ||||||
|  |         <time>1731518356.7559</time> | ||||||
|  |     <time>1731534516.7156</time> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <timeout>300</timeout> | ||||||
|  |         <time_period/> | ||||||
|  |     <timeservers>0.opnsense.pool.ntp.org 1.opnsense.pool.ntp.org 2.opnsense.pool.ntp.org 3.opnsense.pool.ntp.org</timeservers> | ||||||
|  |     <timezone>Etc/UTC</timezone> | ||||||
|  |         <to>10.100.8.245</to> | ||||||
|  |           <toclient_groups/> | ||||||
|  |           <toserver_groups/> | ||||||
|  |       <track6-interface>wan</track6-interface> | ||||||
|  |       <track6-prefix-id>0</track6-prefix-id> | ||||||
|  |     </TrafficShaper> | ||||||
|  |     <TrafficShaper version="1.0.3"> | ||||||
|  |       <tunable>hw.ibrs_disable</tunable> | ||||||
|  |       <tunable>hw.syscons.kbd_reboot</tunable> | ||||||
|  |       <tunable>kern.ipc.maxsockbuf</tunable> | ||||||
|  |       <tunable>kern.randompid</tunable> | ||||||
|  |       <tunable>net.inet6.ip6.prefer_tempaddr</tunable> | ||||||
|  |       <tunable>net.inet6.ip6.redirect</tunable> | ||||||
|  |       <tunable>net.inet6.ip6.use_tempaddr</tunable> | ||||||
|  |       <tunable>net.inet.icmp.icmplim</tunable> | ||||||
|  |       <tunable>net.inet.icmp.log_redirect</tunable> | ||||||
|  |       <tunable>net.inet.ip.accept_sourceroute</tunable> | ||||||
|  |       <tunable>net.inet.ip.portrange.first</tunable> | ||||||
|  |       <tunable>net.inet.ip.random_id</tunable> | ||||||
|  |       <tunable>net.inet.ip.redirect</tunable> | ||||||
|  |       <tunable>net.inet.ip.sourceroute</tunable> | ||||||
|  |       <tunable>net.inet.tcp.blackhole</tunable> | ||||||
|  |       <tunable>net.inet.tcp.delayed_ack</tunable> | ||||||
|  |       <tunable>net.inet.tcp.drop_synfin</tunable> | ||||||
|  |       <tunable>net.inet.tcp.log_debug</tunable> | ||||||
|  |       <tunable>net.inet.tcp.recvspace</tunable> | ||||||
|  |       <tunable>net.inet.tcp.sendspace</tunable> | ||||||
|  |       <tunable>net.inet.tcp.syncookies</tunable> | ||||||
|  |       <tunable>net.inet.tcp.tso</tunable> | ||||||
|  |       <tunable>net.inet.udp.blackhole</tunable> | ||||||
|  |       <tunable>net.inet.udp.checksum</tunable> | ||||||
|  |       <tunable>net.inet.udp.maxdgram</tunable> | ||||||
|  |       <tunable>net.link.bridge.pfil_bridge</tunable> | ||||||
|  |       <tunable>net.link.bridge.pfil_local_phys</tunable> | ||||||
|  |       <tunable>net.link.bridge.pfil_member</tunable> | ||||||
|  |       <tunable>net.link.bridge.pfil_onlyip</tunable> | ||||||
|  |       <tunable>net.link.tap.user_open</tunable> | ||||||
|  |       <tunable>net.local.dgram.maxdgram</tunable> | ||||||
|  |       <tunable>security.bsd.see_other_gids</tunable> | ||||||
|  |       <tunable>security.bsd.see_other_uids</tunable> | ||||||
|  |       <tunable>vfs.read_max</tunable> | ||||||
|  |       <tunable>vm.pmap.pti</tunable> | ||||||
|  |         <txtsupport/> | ||||||
|  |         <type/> | ||||||
|  |       <type/> | ||||||
|  |         <type>custom</type> | ||||||
|  |         <type>custom</type> | ||||||
|  |         <type>filesystem</type> | ||||||
|  |         <type>NetworkInterface</type> | ||||||
|  |         <type>NetworkInterface</type> | ||||||
|  |         <type>NetworkPing</type> | ||||||
|  |       <type>none</type> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <type>pass</type> | ||||||
|  |       <type>pass</type> | ||||||
|  |         <type>ProgramStatus</type> | ||||||
|  |         <type>ProgramStatus</type> | ||||||
|  |         <type>SpaceUsage</type> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <type>SystemResource</type> | ||||||
|  |         <type>system</type> | ||||||
|  |       <uid>0</uid> | ||||||
|  |     </unboundplus> | ||||||
|  |     <unboundplus version="1.0.9"> | ||||||
|  |         <unwantedreplythreshold/> | ||||||
|  |         <UpdateCron/> | ||||||
|  |       </updated> | ||||||
|  |       </updated> | ||||||
|  |       </updated> | ||||||
|  |       </updated> | ||||||
|  |       <updated> | ||||||
|  |       <updated> | ||||||
|  |       <updated> | ||||||
|  |       <updated> | ||||||
|  |         up your logs consuming your whole hard drive.</descr> | ||||||
|  |           <url/> | ||||||
|  |     </user> | ||||||
|  |     <user> | ||||||
|  |       <userDefinedRules/> | ||||||
|  |         <username/> | ||||||
|  |     <username/> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |         <username>root@192.168.5.204</username> | ||||||
|  |     <username>root@192.168.5.204</username> | ||||||
|  |     <usevirtualterminal>1</usevirtualterminal> | ||||||
|  |           <valid_lifetime>4000</valid_lifetime> | ||||||
|  |         <valloglevel>0</valloglevel> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |       <value>default</value> | ||||||
|  |         <verbosity/> | ||||||
|  |         <version>v9</version> | ||||||
|  |     <vip/> | ||||||
|  |       <virtual>1</virtual> | ||||||
|  |   </virtualip> | ||||||
|  |   <virtualip version="1.0.0"> | ||||||
|  |     <vlan/> | ||||||
|  |   </vlans> | ||||||
|  |   <vlans version="1.0.0"> | ||||||
|  |       <VTIs/> | ||||||
|  |       <vxlans version="1.0.2"/> | ||||||
|  |     </wan> | ||||||
|  |     <wan> | ||||||
|  |     </webgui> | ||||||
|  |     <webgui> | ||||||
|  |         <weight>1</weight> | ||||||
|  |         <whitelists/> | ||||||
|  |   </widgets> | ||||||
|  |   <widgets> | ||||||
|  |         <wildcards/> | ||||||
|  |         <winsserver/> | ||||||
|  |     </wireguard> | ||||||
|  |     <wireguard> | ||||||
|  |   </wireless> | ||||||
|  |   <wireless> | ||||||
|  | <?xml version="1.0"?> | ||||||
|  |       <zones/> | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user