mirror of
https://github.com/Security-Onion-Solutions/securityonion.git
synced 2026-01-23 16:33:29 +01:00
Compare commits
1488 Commits
dev
...
2.4.0-2023
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b2a2dc5aea | ||
|
|
72078848d3 | ||
|
|
af4acd5597 | ||
|
|
de902ebd02 | ||
|
|
6099a04e41 | ||
|
|
44c696a495 | ||
|
|
16606c1aaa | ||
|
|
4efe22efb3 | ||
|
|
591129b98c | ||
|
|
60d770411a | ||
|
|
5f49a120de | ||
|
|
64446f585c | ||
|
|
ed8f944638 | ||
|
|
74840264d7 | ||
|
|
492fe1fc85 | ||
|
|
e77e645a36 | ||
|
|
636505ef98 | ||
|
|
942182e826 | ||
|
|
303fec6302 | ||
|
|
9411f5ca79 | ||
|
|
d494381e9d | ||
|
|
e1bda5acfd | ||
|
|
138b312705 | ||
|
|
82efce0b31 | ||
|
|
1ab253b8c3 | ||
|
|
a1394b9102 | ||
|
|
b3b030958c | ||
|
|
ebdd74a420 | ||
|
|
d886265211 | ||
|
|
adbc9df222 | ||
|
|
1ad65f6326 | ||
|
|
46d9e0b804 | ||
|
|
f854d92cab | ||
|
|
22e8e3be28 | ||
|
|
4352825ceb | ||
|
|
e2290d8a8e | ||
|
|
c68235c169 | ||
|
|
a38aa903ac | ||
|
|
fc0b9fa47c | ||
|
|
32e92d10ad | ||
|
|
7030f35561 | ||
|
|
934b8894e2 | ||
|
|
100d9f14e9 | ||
|
|
34cd823cd4 | ||
|
|
a86da24bde | ||
|
|
fcb6f3eaf1 | ||
|
|
6cc510d51b | ||
|
|
2b1576249a | ||
|
|
2dd48c6f0b | ||
|
|
d22a5b2eb3 | ||
|
|
8b626d2c67 | ||
|
|
0d87a5d739 | ||
|
|
6c3c5730c5 | ||
|
|
2cb6f0f1e6 | ||
|
|
42cc419e00 | ||
|
|
7752529b42 | ||
|
|
7f395c4c1e | ||
|
|
94ae7469e3 | ||
|
|
2a288c7e4a | ||
|
|
1602551295 | ||
|
|
72d01b13ed | ||
|
|
f34bb40025 | ||
|
|
8246293983 | ||
|
|
80043d154a | ||
|
|
aa66a6471a | ||
|
|
1a6d887b5f | ||
|
|
3fed3b3f3e | ||
|
|
cb2fdae368 | ||
|
|
d9e1a54479 | ||
|
|
afe4d75d91 | ||
|
|
7ced7488c7 | ||
|
|
5be5466efe | ||
|
|
b2c2e1574f | ||
|
|
a9dc7a14cb | ||
|
|
627b243cac | ||
|
|
462b2b23b9 | ||
|
|
aa9d44ab09 | ||
|
|
890e1897af | ||
|
|
0be57e686e | ||
|
|
16bc63233f | ||
|
|
e38b0313c7 | ||
|
|
c6f6f306a7 | ||
|
|
bad905f54c | ||
|
|
90159f4bcd | ||
|
|
0f66645a89 | ||
|
|
0a9a064648 | ||
|
|
d6bc20a2b8 | ||
|
|
886bcda38c | ||
|
|
3b671efa8e | ||
|
|
0a096712cb | ||
|
|
c977f38a58 | ||
|
|
8f4076ccd6 | ||
|
|
3756c93518 | ||
|
|
b68cf85392 | ||
|
|
e52087b742 | ||
|
|
02aa8662f7 | ||
|
|
f8d5acd37d | ||
|
|
b3ea4194dd | ||
|
|
84360aa9bf | ||
|
|
c64987e756 | ||
|
|
c8e93f0388 | ||
|
|
3fba27a0d4 | ||
|
|
28f5dcd43b | ||
|
|
eaaa028999 | ||
|
|
f8e59478f4 | ||
|
|
d2bc5e4af2 | ||
|
|
4f995c1c7e | ||
|
|
bc2a84c631 | ||
|
|
6d87620c6a | ||
|
|
68380d7ecb | ||
|
|
5a2ef21ce4 | ||
|
|
fdaf8e8c68 | ||
|
|
00b1ecb7d9 | ||
|
|
007e2baf41 | ||
|
|
5fc297b8c1 | ||
|
|
07f303205a | ||
|
|
aeb6d47637 | ||
|
|
a247d1cc50 | ||
|
|
30fc74ac09 | ||
|
|
cd6bf0fe78 | ||
|
|
d87060b56e | ||
|
|
1526a7de11 | ||
|
|
d89310e479 | ||
|
|
bd17121834 | ||
|
|
ca363053e6 | ||
|
|
a0eea10a1d | ||
|
|
efd5f7b8a2 | ||
|
|
05b1a445d3 | ||
|
|
cdb714f331 | ||
|
|
9ca9b9d4da | ||
|
|
a3d38dd2e7 | ||
|
|
41554e8311 | ||
|
|
444988f287 | ||
|
|
02c79463e1 | ||
|
|
64904406b6 | ||
|
|
1f23e4aafe | ||
|
|
bc7261acfe | ||
|
|
01d470a426 | ||
|
|
f810f9cbf0 | ||
|
|
507142cde4 | ||
|
|
331d4833b1 | ||
|
|
2e6fa1eff0 | ||
|
|
0fff3a5a11 | ||
|
|
eb61b0c98f | ||
|
|
252afa8499 | ||
|
|
a6e34ae1d7 | ||
|
|
df036206a8 | ||
|
|
27fdad4a25 | ||
|
|
0bb2fd7d45 | ||
|
|
bb3480cd76 | ||
|
|
22c3a4d398 | ||
|
|
8c2a43c073 | ||
|
|
fe13f90394 | ||
|
|
903ad530fe | ||
|
|
9a43cd71e0 | ||
|
|
c43194665e | ||
|
|
a22af96403 | ||
|
|
03393a95d9 | ||
|
|
325e767587 | ||
|
|
1771a3123f | ||
|
|
823dde2856 | ||
|
|
6b8b7df3c2 | ||
|
|
da1c501cf7 | ||
|
|
604db7534c | ||
|
|
43712182a0 | ||
|
|
9487dbffdf | ||
|
|
cdbbc8e64c | ||
|
|
1a70a6eb30 | ||
|
|
da3fa31439 | ||
|
|
542eb19cdc | ||
|
|
c89bae7319 | ||
|
|
3073b752bd | ||
|
|
d23c09a2ee | ||
|
|
b59466139a | ||
|
|
cbf7b66729 | ||
|
|
5b9ff06a85 | ||
|
|
792732a8cf | ||
|
|
536391bb3b | ||
|
|
caa08e9cf0 | ||
|
|
460f84d80f | ||
|
|
d7b0ed93c9 | ||
|
|
4944365341 | ||
|
|
8a9bc8aefa | ||
|
|
c5b16494d7 | ||
|
|
b9c4e647c4 | ||
|
|
8f5daa785b | ||
|
|
9893fce105 | ||
|
|
91da3fd797 | ||
|
|
924d598a8a | ||
|
|
c7099280da | ||
|
|
bd1eb9c7df | ||
|
|
dd4461daf4 | ||
|
|
a9b8877268 | ||
|
|
7950f692a8 | ||
|
|
0dfbbfcf8e | ||
|
|
2056ce37c6 | ||
|
|
e88d459ef4 | ||
|
|
d12367ed75 | ||
|
|
ef4882198a | ||
|
|
2b65c1498d | ||
|
|
957467eae0 | ||
|
|
849e82e39f | ||
|
|
6e3194486c | ||
|
|
336cf3ccf8 | ||
|
|
d78128dbf4 | ||
|
|
a96473554d | ||
|
|
53e93f01c6 | ||
|
|
d0955b3e91 | ||
|
|
ad2616900c | ||
|
|
3ab3e4712c | ||
|
|
49df376bcc | ||
|
|
f288d0dd61 | ||
|
|
3156b1ed0c | ||
|
|
c355e6eaf0 | ||
|
|
d4f5209e39 | ||
|
|
afcd1155bf | ||
|
|
28dc490775 | ||
|
|
02d013c0cc | ||
|
|
b56baf900c | ||
|
|
49a9affe2a | ||
|
|
0d30c14561 | ||
|
|
fbefe229c1 | ||
|
|
a36a6d5659 | ||
|
|
b809b22566 | ||
|
|
f9b8c78d74 | ||
|
|
7cf4e6b03b | ||
|
|
5f7256c826 | ||
|
|
b38d5df684 | ||
|
|
4e0390963b | ||
|
|
8eba3426be | ||
|
|
7c39938e14 | ||
|
|
123275ca35 | ||
|
|
766e6a7974 | ||
|
|
f0d4c16b2b | ||
|
|
412e5c0402 | ||
|
|
fbac23c28d | ||
|
|
ebc943fcab | ||
|
|
486de12ca5 | ||
|
|
f4112b30c0 | ||
|
|
bab40de58d | ||
|
|
785f100132 | ||
|
|
8ade7b85fc | ||
|
|
c2701f1835 | ||
|
|
d5bb223235 | ||
|
|
bb711a2a15 | ||
|
|
efc5832499 | ||
|
|
8d395dc465 | ||
|
|
9d4e1cc149 | ||
|
|
f7be4ba31c | ||
|
|
126add7ddd | ||
|
|
b3a2680847 | ||
|
|
1774d16d9a | ||
|
|
e105e56fac | ||
|
|
58343e39fa | ||
|
|
a844819261 | ||
|
|
16d9478196 | ||
|
|
5804409fcf | ||
|
|
5301f442f9 | ||
|
|
ed8a23cedc | ||
|
|
0ee870a199 | ||
|
|
23b344bf14 | ||
|
|
2fe8668f1b | ||
|
|
73abf8dbfd | ||
|
|
894a20b3ad | ||
|
|
ecc300197d | ||
|
|
b1f201ca87 | ||
|
|
a4409b2979 | ||
|
|
b6ce9f489a | ||
|
|
1493806040 | ||
|
|
a5c89bfaa1 | ||
|
|
b9e3024521 | ||
|
|
d75866caec | ||
|
|
61879a8d33 | ||
|
|
0f456e6ecd | ||
|
|
7ad34ee8d7 | ||
|
|
2d7ce41a70 | ||
|
|
a738c7c36d | ||
|
|
6f82cf3807 | ||
|
|
a3e05d782e | ||
|
|
e93c052d34 | ||
|
|
fd2312a2ac | ||
|
|
4f3cb2eb3d | ||
|
|
8c79d7e40d | ||
|
|
f50639d2d2 | ||
|
|
26c9813276 | ||
|
|
88d98af243 | ||
|
|
d636546871 | ||
|
|
f0b7a75ae8 | ||
|
|
073054b447 | ||
|
|
df94e830c5 | ||
|
|
2767d4bee3 | ||
|
|
14aa9ac5c9 | ||
|
|
deda0fa279 | ||
|
|
086b3bf528 | ||
|
|
66bb829505 | ||
|
|
b641dc37b6 | ||
|
|
f77068f73f | ||
|
|
691080de88 | ||
|
|
1998c66073 | ||
|
|
1945659369 | ||
|
|
3eb839bd21 | ||
|
|
a6db2d4502 | ||
|
|
0f9803120e | ||
|
|
b6d55bedc8 | ||
|
|
8fae826a3a | ||
|
|
1e31966d8d | ||
|
|
a2bda07820 | ||
|
|
19ab2a5a46 | ||
|
|
9db6df0f14 | ||
|
|
f0db5cf657 | ||
|
|
4a2e75dd8c | ||
|
|
a45763f9a2 | ||
|
|
e24296d536 | ||
|
|
9940a36722 | ||
|
|
adb925b4d6 | ||
|
|
e3f9b5297a | ||
|
|
fd2068be88 | ||
|
|
e6167dc34a | ||
|
|
26dbaeb7ac | ||
|
|
2b0ea8eb8b | ||
|
|
196a6ce984 | ||
|
|
06d1f0f913 | ||
|
|
204f423051 | ||
|
|
af284b9aae | ||
|
|
41bc1cd36f | ||
|
|
2091806f1f | ||
|
|
704365c6eb | ||
|
|
a79c380e2b | ||
|
|
a5c2c0fb20 | ||
|
|
c4e1ec781e | ||
|
|
13182fcda2 | ||
|
|
134caa7f58 | ||
|
|
8772dcaa10 | ||
|
|
205e344034 | ||
|
|
749c299ed2 | ||
|
|
96467f0bd8 | ||
|
|
052e0dea2e | ||
|
|
d456f681f1 | ||
|
|
8f20e2bcb9 | ||
|
|
9c3cc17153 | ||
|
|
d5df1a106a | ||
|
|
ff495cb20e | ||
|
|
34f5dbeba0 | ||
|
|
c00d671098 | ||
|
|
cbcd3c9dd9 | ||
|
|
8632606a24 | ||
|
|
1692970789 | ||
|
|
8d33f01936 | ||
|
|
aa7b05d639 | ||
|
|
9967e91825 | ||
|
|
fb5aad34e0 | ||
|
|
44ed48033c | ||
|
|
068d383442 | ||
|
|
b4015ac73e | ||
|
|
f7176f9989 | ||
|
|
dd8f6a460b | ||
|
|
d12ea041bf | ||
|
|
6b486d9604 | ||
|
|
fa5b9799f5 | ||
|
|
d502d95dba | ||
|
|
29c68c1273 | ||
|
|
3e2e68fbd0 | ||
|
|
aed41404fc | ||
|
|
2b683b09e1 | ||
|
|
afccd3f820 | ||
|
|
a25acb4558 | ||
|
|
a0eb505db0 | ||
|
|
99105c7563 | ||
|
|
316db85584 | ||
|
|
d3c5d0569a | ||
|
|
57a02396de | ||
|
|
29cf95d6eb | ||
|
|
39361c2ab0 | ||
|
|
1289500e03 | ||
|
|
663af7935b | ||
|
|
cd56d3a799 | ||
|
|
bf512d56ec | ||
|
|
b206b23fe1 | ||
|
|
6141906b76 | ||
|
|
8f46e4aa30 | ||
|
|
4222b09970 | ||
|
|
b62a0c5d5c | ||
|
|
7067f9cd9c | ||
|
|
265447801e | ||
|
|
52f0ccf00d | ||
|
|
2ebd9b3598 | ||
|
|
4896452245 | ||
|
|
9441d47c6a | ||
|
|
148b0b1c4c | ||
|
|
399e4de73c | ||
|
|
96b1fb4782 | ||
|
|
7f2d263046 | ||
|
|
3fed04a532 | ||
|
|
95f254dc63 | ||
|
|
dc2fed5b04 | ||
|
|
6927e28def | ||
|
|
4db404b6f5 | ||
|
|
7b30064d86 | ||
|
|
0ec0983d7b | ||
|
|
ee311de9c8 | ||
|
|
7987cde668 | ||
|
|
8e83407974 | ||
|
|
ecf70847fd | ||
|
|
0d0a61bd4a | ||
|
|
5bc1dc9567 | ||
|
|
45434b06a4 | ||
|
|
6e59cc3409 | ||
|
|
417fff924d | ||
|
|
1c1e613351 | ||
|
|
bf8e6c64d6 | ||
|
|
68708accde | ||
|
|
59c700ad10 | ||
|
|
c6a46d1eb3 | ||
|
|
c20a7e6cf9 | ||
|
|
3deb619737 | ||
|
|
7c64dad95b | ||
|
|
6dd09fb2c5 | ||
|
|
b8966aa33a | ||
|
|
76011c96d6 | ||
|
|
c3784fe548 | ||
|
|
db3a46b6a1 | ||
|
|
d0bb7dc475 | ||
|
|
53b58d532a | ||
|
|
327855b0af | ||
|
|
56ccf5c504 | ||
|
|
7b6db5d95a | ||
|
|
8645cd0c3b | ||
|
|
cc654fda9f | ||
|
|
f2b0d67d8b | ||
|
|
de499ead0c | ||
|
|
a3bda9b322 | ||
|
|
3a2ec8e8bf | ||
|
|
b62cc32b1a | ||
|
|
bc054a15d3 | ||
|
|
c4a5470454 | ||
|
|
b402b84d11 | ||
|
|
f34e144629 | ||
|
|
6cfa16c251 | ||
|
|
173b15b46e | ||
|
|
653062b7c9 | ||
|
|
2b6685c887 | ||
|
|
f00c7169ce | ||
|
|
5fff06602a | ||
|
|
4bafb40894 | ||
|
|
03cd67431d | ||
|
|
160ed46d96 | ||
|
|
6fd68351ec | ||
|
|
49549c3d61 | ||
|
|
9d4e4830dd | ||
|
|
b53aa08eeb | ||
|
|
c6266e9f91 | ||
|
|
c6cbb4857d | ||
|
|
bcf1fe8dad | ||
|
|
12398bdf24 | ||
|
|
ba5b125952 | ||
|
|
e3e8d30161 | ||
|
|
4bb49ad617 | ||
|
|
e7f35673e0 | ||
|
|
ba9c52db37 | ||
|
|
43c177727c | ||
|
|
c6919a09da | ||
|
|
d8e85cbc28 | ||
|
|
0a7ad4d211 | ||
|
|
54fc07b5b8 | ||
|
|
8b680693f4 | ||
|
|
353b77cd59 | ||
|
|
eef81fdd1b | ||
|
|
ef3abe158c | ||
|
|
dfa5503e41 | ||
|
|
405060674c | ||
|
|
1f37af0e57 | ||
|
|
59b1af15db | ||
|
|
79041d091e | ||
|
|
e4de89c960 | ||
|
|
dcbf5a2fa6 | ||
|
|
6e9d1f7c2c | ||
|
|
5e94a2cd74 | ||
|
|
b7ad4e0570 | ||
|
|
967440f49f | ||
|
|
790b3c5635 | ||
|
|
01edb5dc00 | ||
|
|
c43ccb7ed2 | ||
|
|
a9b3594b35 | ||
|
|
8746f55834 | ||
|
|
577e3c27fe | ||
|
|
2cddcc8b8d | ||
|
|
4c2142b181 | ||
|
|
4dcdea58d7 | ||
|
|
0f51e7bb98 | ||
|
|
1fa526cd0e | ||
|
|
4741038a41 | ||
|
|
89bd9163fb | ||
|
|
b2d85b843f | ||
|
|
d15158e77a | ||
|
|
0890129c69 | ||
|
|
e3ca0345a8 | ||
|
|
1fa8294ee6 | ||
|
|
689ba5f341 | ||
|
|
40d3269db3 | ||
|
|
7b3acd53a1 | ||
|
|
47af14c265 | ||
|
|
34d19e308f | ||
|
|
e5c26032c4 | ||
|
|
4f0af9ac6b | ||
|
|
0056b8f703 | ||
|
|
39009ce938 | ||
|
|
7dee2686ac | ||
|
|
cd27ae89cc | ||
|
|
21ca8a9c50 | ||
|
|
acda03ce40 | ||
|
|
f2f318982e | ||
|
|
1255c60317 | ||
|
|
994eabae1b | ||
|
|
82119b0247 | ||
|
|
1d0e09bdf7 | ||
|
|
7564a82b52 | ||
|
|
c9118699a9 | ||
|
|
d17cf89c68 | ||
|
|
7b7461ef01 | ||
|
|
e77813a173 | ||
|
|
0eec8b22a2 | ||
|
|
0e50d36da6 | ||
|
|
067b6bacd1 | ||
|
|
84c5d2fee9 | ||
|
|
ee7f299e6d | ||
|
|
bb6fc8da19 | ||
|
|
364799dcc5 | ||
|
|
b744dc0641 | ||
|
|
613793ad9b | ||
|
|
28eee48a7c | ||
|
|
849e53e1eb | ||
|
|
131d9b5898 | ||
|
|
8a00521092 | ||
|
|
32823ef640 | ||
|
|
b319b50fa1 | ||
|
|
1d6c03feb1 | ||
|
|
91d24d36f9 | ||
|
|
3e31bda285 | ||
|
|
1de3871ee9 | ||
|
|
03849b0659 | ||
|
|
b38f4ca766 | ||
|
|
8027055086 | ||
|
|
8ff0cf21cd | ||
|
|
d6d01f8542 | ||
|
|
c43e69ad93 | ||
|
|
abbc92a58d | ||
|
|
713e9ee215 | ||
|
|
22eaeb1462 | ||
|
|
2fddcc1e99 | ||
|
|
67c8f6ba69 | ||
|
|
44e60f1e57 | ||
|
|
51674b3a5b | ||
|
|
4c42671a21 | ||
|
|
a1ac1785d3 | ||
|
|
3b9bdecab8 | ||
|
|
ea0c3db8e1 | ||
|
|
3d34a49e44 | ||
|
|
19f49dde75 | ||
|
|
d6fb0598df | ||
|
|
31daeef30d | ||
|
|
342b9619b0 | ||
|
|
fb7ebcac7e | ||
|
|
291bdc0d82 | ||
|
|
cd38ecb300 | ||
|
|
22a18d8855 | ||
|
|
e8a1e164aa | ||
|
|
e0e094cd95 | ||
|
|
a37f0fd0c0 | ||
|
|
6e45f1b6e1 | ||
|
|
df9ef9ffc7 | ||
|
|
bee5a1e9e8 | ||
|
|
3e808a70fa | ||
|
|
bc082dff99 | ||
|
|
33787d345b | ||
|
|
9eae31e488 | ||
|
|
395cbf330a | ||
|
|
5fba3c5872 | ||
|
|
3ba64f7545 | ||
|
|
eb7b6e78b9 | ||
|
|
d242050627 | ||
|
|
3dfa7959b3 | ||
|
|
2101ca60e9 | ||
|
|
33668105a5 | ||
|
|
d2dd68eb44 | ||
|
|
77749adc8f | ||
|
|
6ec086e24a | ||
|
|
6f1438148f | ||
|
|
12bede5e77 | ||
|
|
056bcd0121 | ||
|
|
8cbafb52d8 | ||
|
|
16e1e297a0 | ||
|
|
98bea0322e | ||
|
|
74eed31eec | ||
|
|
aa411e2682 | ||
|
|
cbf2bd1373 | ||
|
|
0ba193c7a4 | ||
|
|
e09a86dc30 | ||
|
|
8dc7a9da9e | ||
|
|
acffc5ee07 | ||
|
|
a44d83d69b | ||
|
|
bde828cd4f | ||
|
|
0436f885b8 | ||
|
|
5472f53c9f | ||
|
|
0156784687 | ||
|
|
cc100e50cd | ||
|
|
b1eb16d3a2 | ||
|
|
8240e5b20d | ||
|
|
a13baf7bb8 | ||
|
|
b160d0add5 | ||
|
|
209f732176 | ||
|
|
68fac4488e | ||
|
|
fa9e62a816 | ||
|
|
e47f64bd04 | ||
|
|
6d2f379ba5 | ||
|
|
f49627cec1 | ||
|
|
5ab3d1e8f1 | ||
|
|
6b251a2596 | ||
|
|
5468aa82b0 | ||
|
|
2772b03dca | ||
|
|
716ec7f936 | ||
|
|
83aad48e3a | ||
|
|
86ca51ff99 | ||
|
|
a27fc5c768 | ||
|
|
d5b5a36f28 | ||
|
|
75d73e4620 | ||
|
|
2fed977692 | ||
|
|
f2d3298f14 | ||
|
|
27b1f1bd07 | ||
|
|
e4271043c6 | ||
|
|
b3123f7895 | ||
|
|
282d0f88db | ||
|
|
25a6eba166 | ||
|
|
a8d2631d75 | ||
|
|
881c8337a3 | ||
|
|
b381c5424e | ||
|
|
a9919e7547 | ||
|
|
f1db1bc273 | ||
|
|
7d68ef0e8b | ||
|
|
43ffcb1d63 | ||
|
|
8051fc70eb | ||
|
|
a9a119f1ab | ||
|
|
6a803dfe35 | ||
|
|
1fb6cf7bfe | ||
|
|
1d2f491084 | ||
|
|
aafbdf6afc | ||
|
|
2456aac311 | ||
|
|
08750154b4 | ||
|
|
9e146184d6 | ||
|
|
c57d390bac | ||
|
|
211b87e7ae | ||
|
|
6ee66a34bc | ||
|
|
6785e0ec9e | ||
|
|
c73cd78f08 | ||
|
|
790aa6b684 | ||
|
|
5c58cda872 | ||
|
|
b7a5937dc1 | ||
|
|
31f591a098 | ||
|
|
c3717dae67 | ||
|
|
498301b111 | ||
|
|
704d99e757 | ||
|
|
9243b01cbb | ||
|
|
c9f18891b2 | ||
|
|
86a925e1c7 | ||
|
|
31d7e05c45 | ||
|
|
838beabae5 | ||
|
|
3f99e3402e | ||
|
|
c46b5e734b | ||
|
|
1b3f50a463 | ||
|
|
1414b75e01 | ||
|
|
506baa854d | ||
|
|
4868bd8f5e | ||
|
|
c9f458e1e2 | ||
|
|
7bf9d77962 | ||
|
|
d1460ae01f | ||
|
|
161881efbb | ||
|
|
d5f8ea8661 | ||
|
|
53d6823ba7 | ||
|
|
5a223981ca | ||
|
|
177ddc1183 | ||
|
|
20f7a77886 | ||
|
|
b89e7efeea | ||
|
|
3f9764d22d | ||
|
|
a048034f16 | ||
|
|
7b1f867ac3 | ||
|
|
4b9c92c53d | ||
|
|
38ead7cb82 | ||
|
|
44d149b1c3 | ||
|
|
1e5377c78a | ||
|
|
b23575d85e | ||
|
|
b0709e93fa | ||
|
|
fd7d51a59b | ||
|
|
0dc5e7e714 | ||
|
|
62b96c3698 | ||
|
|
ec2e923530 | ||
|
|
2bffd9b473 | ||
|
|
cfc232eafa | ||
|
|
6d3f57d648 | ||
|
|
50895ee304 | ||
|
|
7e0e5071d9 | ||
|
|
2da30f42d4 | ||
|
|
7b4d8a47f0 | ||
|
|
095ca29aca | ||
|
|
f19cf75311 | ||
|
|
ee98e0684e | ||
|
|
b797e356b4 | ||
|
|
88107fe0df | ||
|
|
51692ac66c | ||
|
|
40c6b380df | ||
|
|
d342f3c4b8 | ||
|
|
a503632f30 | ||
|
|
d1ec7c8ace | ||
|
|
5da1b03d9b | ||
|
|
5a016312f6 | ||
|
|
90a224793e | ||
|
|
22fbb953ea | ||
|
|
d421aa82a2 | ||
|
|
1039e77550 | ||
|
|
f077b5c96d | ||
|
|
f811223ba7 | ||
|
|
d3cb57bba2 | ||
|
|
a1fa4e3ef2 | ||
|
|
1ab8c712e4 | ||
|
|
a613d960b9 | ||
|
|
9541214073 | ||
|
|
56478da0b2 | ||
|
|
c3384d8381 | ||
|
|
1e4f9c9f26 | ||
|
|
fea4a1b33d | ||
|
|
ece63b72e2 | ||
|
|
46aa7ebdf3 | ||
|
|
9c83b775ee | ||
|
|
739c174898 | ||
|
|
4044706cd9 | ||
|
|
79fb5dc525 | ||
|
|
59177288ef | ||
|
|
85b5d1b317 | ||
|
|
6b7a8e1fcd | ||
|
|
027c83b5ea | ||
|
|
4369d2385b | ||
|
|
c5260e4787 | ||
|
|
35835edf96 | ||
|
|
8c4e00cfbd | ||
|
|
7d3f6121eb | ||
|
|
05c7999df3 | ||
|
|
05a6d702b0 | ||
|
|
8ce96942c1 | ||
|
|
e83e54936e | ||
|
|
90f3e33cc6 | ||
|
|
7a499c9051 | ||
|
|
1eafb8d62a | ||
|
|
d501b0fac9 | ||
|
|
1bf088e976 | ||
|
|
1fed3cf474 | ||
|
|
e0f8315d27 | ||
|
|
dbfe176b45 | ||
|
|
2842178396 | ||
|
|
aa858bab45 | ||
|
|
1723f58c04 | ||
|
|
ca80548bf0 | ||
|
|
3e5127810d | ||
|
|
73a4dae28e | ||
|
|
3efca0010a | ||
|
|
3653df4d5f | ||
|
|
6033e9a0de | ||
|
|
7cba5626b7 | ||
|
|
a69b0951d3 | ||
|
|
654d869e3e | ||
|
|
d163d834d4 | ||
|
|
be6b42494c | ||
|
|
fb8d8ea972 | ||
|
|
9416552338 | ||
|
|
6c8b17d4d1 | ||
|
|
8c5a060a80 | ||
|
|
66f9a06458 | ||
|
|
0e437f84e7 | ||
|
|
ea01e68846 | ||
|
|
add71cbdee | ||
|
|
60d476457a | ||
|
|
80f65fcd62 | ||
|
|
66924b63a7 | ||
|
|
bdaed849ea | ||
|
|
0d45c1583e | ||
|
|
81e07997f0 | ||
|
|
4923fb1c35 | ||
|
|
8fa8b89d9c | ||
|
|
bab010a109 | ||
|
|
c07821a612 | ||
|
|
acad7acc4a | ||
|
|
b36f1bc79e | ||
|
|
4391c22335 | ||
|
|
39d1f07fab | ||
|
|
35e0a78cad | ||
|
|
b3e0183e39 | ||
|
|
708ba13721 | ||
|
|
eee433e8c4 | ||
|
|
cd57ff9820 | ||
|
|
6d1e6fc358 | ||
|
|
0531d369aa | ||
|
|
55911ef649 | ||
|
|
355953427c | ||
|
|
52b620b137 | ||
|
|
33e2affb1d | ||
|
|
c3b83f1fc8 | ||
|
|
5062dd2873 | ||
|
|
2e886d0c55 | ||
|
|
5d86edeed4 | ||
|
|
caf0ea6b53 | ||
|
|
a146f1134e | ||
|
|
7cecc910d5 | ||
|
|
668fe10fc0 | ||
|
|
76fff1b1e0 | ||
|
|
5993d06896 | ||
|
|
64af393f40 | ||
|
|
c15db73561 | ||
|
|
554754421c | ||
|
|
322efa304a | ||
|
|
9995d06626 | ||
|
|
ab3a7abcc7 | ||
|
|
f039ecb5ce | ||
|
|
38962520ac | ||
|
|
0151830c85 | ||
|
|
85978180c2 | ||
|
|
d3b8fbaafc | ||
|
|
745387a756 | ||
|
|
39d808cb8f | ||
|
|
ab8f41ecb5 | ||
|
|
d2e623747d | ||
|
|
3e9bddcd11 | ||
|
|
302bf28b6c | ||
|
|
5058210bbb | ||
|
|
ac157432de | ||
|
|
ec5c565cec | ||
|
|
dbbcea0009 | ||
|
|
c313b19b50 | ||
|
|
73ae48d28e | ||
|
|
0e1e9ff343 | ||
|
|
c3a5a02010 | ||
|
|
c1dfb9f935 | ||
|
|
54e554eb3b | ||
|
|
10e82c5f1c | ||
|
|
d4c6834cd0 | ||
|
|
4aacc6d1db | ||
|
|
cb1822a62d | ||
|
|
f10238da42 | ||
|
|
2e53476a06 | ||
|
|
275aead5b9 | ||
|
|
e52b54720a | ||
|
|
5afad52b3f | ||
|
|
9bc08661c5 | ||
|
|
48a3f4e261 | ||
|
|
723362e685 | ||
|
|
7ba4bdd87b | ||
|
|
831300b540 | ||
|
|
4c1fc4c679 | ||
|
|
5754365c6d | ||
|
|
761fbd0edf | ||
|
|
08d7b24fb4 | ||
|
|
df89445ab5 | ||
|
|
203e612452 | ||
|
|
2c3bd6e3fd | ||
|
|
c35a3e122f | ||
|
|
c8ff2c7a06 | ||
|
|
3c91d842f5 | ||
|
|
4e5d1d587e | ||
|
|
8d797ad9df | ||
|
|
a89976779d | ||
|
|
058b4013aa | ||
|
|
136867c96a | ||
|
|
1b946ced7f | ||
|
|
75ffd1f56b | ||
|
|
f335e7e477 | ||
|
|
5be074bbea | ||
|
|
24876eecd9 | ||
|
|
3f0ded0638 | ||
|
|
cd77e71d8d | ||
|
|
78f851e6c2 | ||
|
|
b02ba7edf7 | ||
|
|
90882ce1db | ||
|
|
a924d48408 | ||
|
|
308228620a | ||
|
|
4620cd5edf | ||
|
|
2df4755fef | ||
|
|
cf02b8e191 | ||
|
|
a077645bb4 | ||
|
|
b6f37f8499 | ||
|
|
f1d31a0c41 | ||
|
|
e95034886e | ||
|
|
9352854fe4 | ||
|
|
75e16963c8 | ||
|
|
dfd5947051 | ||
|
|
b4908e2bb9 | ||
|
|
ba13ad7151 | ||
|
|
38634fde17 | ||
|
|
8b6006e9c3 | ||
|
|
3fd210463e | ||
|
|
f99279ca24 | ||
|
|
69415a0d8d | ||
|
|
506556f0d2 | ||
|
|
d7b2c88201 | ||
|
|
4519c533a2 | ||
|
|
8d35e0120e | ||
|
|
6d6fa4c1e3 | ||
|
|
accc293c8a | ||
|
|
3a367d69f4 | ||
|
|
a4f1f75306 | ||
|
|
5a5c565fae | ||
|
|
0889d49025 | ||
|
|
3d1ce4ef10 | ||
|
|
33a1aea729 | ||
|
|
8e63909edf | ||
|
|
ab9edd4e6b | ||
|
|
aa7690864a | ||
|
|
e1d0f99a14 | ||
|
|
38e23a0110 | ||
|
|
3768c0fee2 | ||
|
|
8c6a2ce83a | ||
|
|
9428949c79 | ||
|
|
90061e2683 | ||
|
|
c3917a373c | ||
|
|
318aac880e | ||
|
|
16b882a10e | ||
|
|
eaa705ee3e | ||
|
|
2edc3cac11 | ||
|
|
13e5fa7544 | ||
|
|
a2d0de7e49 | ||
|
|
f7150d423c | ||
|
|
73a9c3bb38 | ||
|
|
03f682dbec | ||
|
|
c0c2d28d19 | ||
|
|
1371c4d01f | ||
|
|
388e0a08ae | ||
|
|
6487e6e1f0 | ||
|
|
d4c54ce161 | ||
|
|
894434715b | ||
|
|
86fc0e11b0 | ||
|
|
69811b4d74 | ||
|
|
316d2cd9a5 | ||
|
|
cd55be2f83 | ||
|
|
9d8951ceb8 | ||
|
|
7168c4f91a | ||
|
|
aea91cc776 | ||
|
|
74af54a200 | ||
|
|
6a4718ec0f | ||
|
|
30419e5b2b | ||
|
|
ce0b920195 | ||
|
|
e5d38255fa | ||
|
|
b901efc90d | ||
|
|
6d07ab0c40 | ||
|
|
c20f8c230b | ||
|
|
cf884c68a7 | ||
|
|
0494efaea0 | ||
|
|
149038d08e | ||
|
|
fde65db021 | ||
|
|
61bfeb82d9 | ||
|
|
56f326d123 | ||
|
|
d7b47814dc | ||
|
|
d9343d8450 | ||
|
|
42157ff2b1 | ||
|
|
df1b564d17 | ||
|
|
73f2789c95 | ||
|
|
3c00d67879 | ||
|
|
a28f804f7f | ||
|
|
042693895a | ||
|
|
01d6b2b1f1 | ||
|
|
c220c322ef | ||
|
|
fd1be0ab2c | ||
|
|
4c90c1af12 | ||
|
|
c25a828dd2 | ||
|
|
0fa6ca3880 | ||
|
|
1b42965a6d | ||
|
|
fa7488effb | ||
|
|
93a8b76070 | ||
|
|
490e97b49f | ||
|
|
4384b83b65 | ||
|
|
9c4d441b4d | ||
|
|
b9e51fc7cf | ||
|
|
93056e802f | ||
|
|
3f4ad8b983 | ||
|
|
b37697e95d | ||
|
|
676aec7576 | ||
|
|
b5cc5a023d | ||
|
|
5badfb9cf5 | ||
|
|
7853d972b6 | ||
|
|
8a0991afd0 | ||
|
|
f84ceca03e | ||
|
|
6b3149f4e9 | ||
|
|
175f413beb | ||
|
|
121d07733f | ||
|
|
e55086230d | ||
|
|
d37a4b14ca | ||
|
|
fd27044471 | ||
|
|
ed87b08fc1 | ||
|
|
5d732872d6 | ||
|
|
28e8c54443 | ||
|
|
6a73410be9 | ||
|
|
52c4553ea6 | ||
|
|
9885f418fa | ||
|
|
c79457b41d | ||
|
|
6352b3fd53 | ||
|
|
61c976f8a6 | ||
|
|
07df9ad0e0 | ||
|
|
ca3c99ac99 | ||
|
|
6eedae601f | ||
|
|
d58579d916 | ||
|
|
09b012ad4e | ||
|
|
0072cc42db | ||
|
|
0f84f419b2 | ||
|
|
3ab8a0be60 | ||
|
|
eae05e83e6 | ||
|
|
117d230b9d | ||
|
|
5422c5b3e2 | ||
|
|
d3a8bdff52 | ||
|
|
f94eb243e4 | ||
|
|
3dd4e31f49 | ||
|
|
2004184b72 | ||
|
|
ed8bf884eb | ||
|
|
e1d200e6ce | ||
|
|
72f71ba695 | ||
|
|
be75062612 | ||
|
|
da8e098655 | ||
|
|
cb16bd36fb | ||
|
|
cf7d8076e9 | ||
|
|
cd664b2d39 | ||
|
|
7f07a94a98 | ||
|
|
8a0f94f8df | ||
|
|
66ad10cf77 | ||
|
|
de2427cabe | ||
|
|
187ca4c453 | ||
|
|
c4ea39d1ba | ||
|
|
c2e10a4359 | ||
|
|
90093395b6 | ||
|
|
565ca4e94f | ||
|
|
69c7bb11c6 | ||
|
|
9477f29432 | ||
|
|
5c00ab7b7f | ||
|
|
07a4919cd3 | ||
|
|
7cfb688890 | ||
|
|
cf53242cf8 | ||
|
|
c01486b009 | ||
|
|
8af9dddd2e | ||
|
|
0bbc68edae | ||
|
|
ef3def156d | ||
|
|
71e0d7c499 | ||
|
|
9f72cfa1fc | ||
|
|
fde33de030 | ||
|
|
d1f554723a | ||
|
|
e849783a86 | ||
|
|
2240283457 | ||
|
|
def0c85349 | ||
|
|
31832ae150 | ||
|
|
7ce0924382 | ||
|
|
73304e049c | ||
|
|
a626acced0 | ||
|
|
6443e702a5 | ||
|
|
88410bc8f8 | ||
|
|
168cd00e1b | ||
|
|
1b5c1fecd4 | ||
|
|
b048eec3c0 | ||
|
|
f44eee134a | ||
|
|
c741fe6b4d | ||
|
|
be5775e4a0 | ||
|
|
499b5d95f2 | ||
|
|
14af1d36cb | ||
|
|
fd13c7ccc0 | ||
|
|
7e102949a6 | ||
|
|
f083b3867b | ||
|
|
55444288bc | ||
|
|
f83545c556 | ||
|
|
117a3d486a | ||
|
|
7f324bc47e | ||
|
|
a6bc5b108f | ||
|
|
090f8309c2 | ||
|
|
b95a83b016 | ||
|
|
b05839bb93 | ||
|
|
356904f751 | ||
|
|
f9cc7888f4 | ||
|
|
6b77843e52 | ||
|
|
13faf63770 | ||
|
|
6d89d58c50 | ||
|
|
4b6b42f9b9 | ||
|
|
b801997709 | ||
|
|
a38e312df4 | ||
|
|
bde899e7cb | ||
|
|
d2bc1a5523 | ||
|
|
68efd817e0 | ||
|
|
fe180d5657 | ||
|
|
9994d47a43 | ||
|
|
6e1e6e15e8 | ||
|
|
febb781428 | ||
|
|
061f0b0595 | ||
|
|
5a0fe6050b | ||
|
|
778ee4b00f | ||
|
|
5f59ae52d5 | ||
|
|
05b9a067fd | ||
|
|
ed9aa5b73f | ||
|
|
7f7e5474ed | ||
|
|
0ffef75d7b | ||
|
|
c572848ece | ||
|
|
7cd5d625d1 | ||
|
|
4497037442 | ||
|
|
c14c8c1306 | ||
|
|
638a3568b0 | ||
|
|
d97e13b473 | ||
|
|
a3b505971b | ||
|
|
98af16055c | ||
|
|
8db49feb32 | ||
|
|
9ffde8bff5 | ||
|
|
19f043cfe2 | ||
|
|
54e4749ddf | ||
|
|
d246aa6a80 | ||
|
|
75825617da | ||
|
|
edd993fd82 | ||
|
|
813e59aa61 | ||
|
|
48d191b656 | ||
|
|
a371c89f38 | ||
|
|
1c242fb7f3 | ||
|
|
c0afcca87a | ||
|
|
591616fe5b | ||
|
|
efc8621524 | ||
|
|
6016b0e38a | ||
|
|
e41361e127 | ||
|
|
a40e10da83 | ||
|
|
3378f58300 | ||
|
|
a2d3b95e92 | ||
|
|
5c50fdb74c | ||
|
|
f1135342a9 | ||
|
|
a2da8e5e08 | ||
|
|
632464335f | ||
|
|
f77db78219 | ||
|
|
2f4ce91678 | ||
|
|
154dff98de | ||
|
|
a15ca3cc49 | ||
|
|
a6ad7fa3ac | ||
|
|
40f5bb25ef | ||
|
|
7420c31411 | ||
|
|
00cb0f5abb | ||
|
|
bf31b593ed | ||
|
|
4870b4b91f | ||
|
|
1a678064dc | ||
|
|
c389944e5c | ||
|
|
de19a4dc53 | ||
|
|
d97de9fd0d | ||
|
|
bf5df1ac51 | ||
|
|
225c33e5c9 | ||
|
|
4187363451 | ||
|
|
f3fc52dd2c | ||
|
|
2030f08b54 | ||
|
|
55f22af758 | ||
|
|
35fab05bdd | ||
|
|
d7b370e31b | ||
|
|
c6ebe5c8dd | ||
|
|
8af0334c3c | ||
|
|
6525e0f201 | ||
|
|
a95c2a690a | ||
|
|
6347532dd8 | ||
|
|
8b0ea7104f | ||
|
|
0ede5a7313 | ||
|
|
409b8c276e | ||
|
|
803d2d4d75 | ||
|
|
0267ece4bf | ||
|
|
d148febc99 | ||
|
|
8c5197c2ea | ||
|
|
8197017b6c | ||
|
|
8b5c79fb39 | ||
|
|
71eaa715b6 | ||
|
|
c880be8d45 | ||
|
|
3af271a13c | ||
|
|
998870ac87 | ||
|
|
b089a58243 | ||
|
|
09b7af2998 | ||
|
|
deba743ef0 | ||
|
|
04b4030eb6 | ||
|
|
7ede0c3c76 | ||
|
|
f6151b3895 | ||
|
|
fd6bea92da | ||
|
|
1c23d91a3b | ||
|
|
78b496a689 | ||
|
|
95f7cb6bcd | ||
|
|
eed3746ebc | ||
|
|
6a17f201a2 | ||
|
|
078213ddb3 | ||
|
|
dd09ce7aab | ||
|
|
b526532ab6 | ||
|
|
2c5038aa9c | ||
|
|
d65fde9536 | ||
|
|
8437592bb5 | ||
|
|
bee1b06f76 | ||
|
|
985e1728d7 | ||
|
|
46bdd1acad | ||
|
|
0fdec03fa9 | ||
|
|
30a23a4cd0 | ||
|
|
fe62744c05 | ||
|
|
5708f3595e | ||
|
|
e519548557 | ||
|
|
981371c72f | ||
|
|
16d24d4bc9 | ||
|
|
53b4f01921 | ||
|
|
851e44e5fa | ||
|
|
7f7f2c15d0 | ||
|
|
004fa8167e | ||
|
|
6bd4860f19 | ||
|
|
42b03ca6df | ||
|
|
556ddc2ee4 | ||
|
|
8e175b2d3f | ||
|
|
e032a9f449 | ||
|
|
2066efcabf | ||
|
|
37c98c14cd | ||
|
|
aa7dd47b00 | ||
|
|
ea8d9362ae | ||
|
|
80201f1465 | ||
|
|
0ad1a1a262 | ||
|
|
1b13e454f8 | ||
|
|
97a6b3c2f3 | ||
|
|
97f42dcce5 | ||
|
|
a0b579019f | ||
|
|
4e5eb1cbb8 | ||
|
|
fee5a7bea9 | ||
|
|
d698238ed1 | ||
|
|
e3f4a58989 | ||
|
|
d26be44df1 | ||
|
|
3e2be096be | ||
|
|
2b9322b823 | ||
|
|
02f1d24ea6 | ||
|
|
975c7fabcc | ||
|
|
5e32e333c4 | ||
|
|
c7eccfd0c5 | ||
|
|
a7872234ab | ||
|
|
4b059ce7fb | ||
|
|
75b058c37f | ||
|
|
f9c77900ae | ||
|
|
81f79c3a02 | ||
|
|
3100efc954 | ||
|
|
4eebd855ac | ||
|
|
abee5afd7b | ||
|
|
06d3681cec | ||
|
|
49dace66de | ||
|
|
0fd5fee868 | ||
|
|
c77fcc74c1 | ||
|
|
2995ae32bd | ||
|
|
e35c77be62 | ||
|
|
46dd4c2749 | ||
|
|
f0ddfecd42 | ||
|
|
7f2c5bc757 | ||
|
|
e1ea3c2031 | ||
|
|
85339d7cb1 | ||
|
|
8a537204d6 | ||
|
|
1685e0e6db | ||
|
|
0137004344 | ||
|
|
530c497800 | ||
|
|
0eafed32a4 | ||
|
|
097c05b114 | ||
|
|
0ade4d7847 | ||
|
|
b622940f3f | ||
|
|
555bd678fb | ||
|
|
27a9edbef7 | ||
|
|
75aa121b2d | ||
|
|
bc57a74ac8 | ||
|
|
aadce055d1 | ||
|
|
678d5c5c9c | ||
|
|
29285b8fb1 | ||
|
|
d1ee3a7d04 | ||
|
|
9fffe1b5fa | ||
|
|
8c88285365 | ||
|
|
df18f8f886 | ||
|
|
0815b607e6 | ||
|
|
120fdef173 | ||
|
|
da8d09713f | ||
|
|
3eb4adc5c3 | ||
|
|
512c044d80 | ||
|
|
d4fb78fe3b | ||
|
|
509c32482f | ||
|
|
a1aae627a2 | ||
|
|
e72eae2e8a | ||
|
|
fad0e0a145 | ||
|
|
cb2e46f275 | ||
|
|
b38804840d | ||
|
|
80919827c6 | ||
|
|
0367365225 | ||
|
|
30afc88322 | ||
|
|
ea7979cfdd | ||
|
|
79785fc053 | ||
|
|
22e8c7ef3e | ||
|
|
2abfcdc042 | ||
|
|
fdffac83e1 | ||
|
|
17cbe38c25 | ||
|
|
74ccf333e0 | ||
|
|
44be7b4969 | ||
|
|
03ea714dc1 | ||
|
|
f7e614f358 | ||
|
|
d28a9ecec2 | ||
|
|
4c2ac9dd93 | ||
|
|
9095bc2205 | ||
|
|
0a885221e8 | ||
|
|
32034078fa | ||
|
|
aa8ce074f7 | ||
|
|
04a0be8247 | ||
|
|
e3e6e7b4e8 | ||
|
|
21f8b3b61c | ||
|
|
ae6fbab45d | ||
|
|
f4508aa534 | ||
|
|
61f3479d92 | ||
|
|
9bdb364122 | ||
|
|
f2b09c84d4 | ||
|
|
7d965b5cda | ||
|
|
b4add5ebb3 | ||
|
|
d7585e1b3d | ||
|
|
4a68a5e054 | ||
|
|
98ae6149dc | ||
|
|
e717579113 | ||
|
|
8a26b3fa04 | ||
|
|
724d5d952a | ||
|
|
b6a1040090 | ||
|
|
f3056c7057 | ||
|
|
4b1031efa4 | ||
|
|
9542a5ada2 | ||
|
|
0a8aae8180 | ||
|
|
12e940f809 | ||
|
|
d02c6808a4 | ||
|
|
1c9069690f | ||
|
|
0eb6388ea3 | ||
|
|
6649ffd8b5 | ||
|
|
70c95c7c7b | ||
|
|
bc1921bd0e | ||
|
|
eba82553a1 | ||
|
|
384478836a | ||
|
|
f14a8f3d01 | ||
|
|
943b98f091 | ||
|
|
f9e9e4ce1d | ||
|
|
ae5eea6e3a | ||
|
|
5e151a9fed | ||
|
|
958d2494a8 | ||
|
|
2a51ecb1ac | ||
|
|
d5debd9b6b | ||
|
|
f02db7a815 | ||
|
|
58ab91ea84 | ||
|
|
9a6fe3e8de | ||
|
|
2c0d90bea4 | ||
|
|
c50a1608af | ||
|
|
6212a288e4 | ||
|
|
e6c0c2ce19 | ||
|
|
1a90eeb1b1 | ||
|
|
5a9b3f6821 | ||
|
|
62f5ee04a4 | ||
|
|
52b58ad6ae | ||
|
|
9a75d939b4 | ||
|
|
3286d55ef2 | ||
|
|
c49c7348ff | ||
|
|
7d6e847f86 | ||
|
|
73d45bd9fc | ||
|
|
383714ec06 | ||
|
|
4357f013f0 | ||
|
|
2e4f122e57 | ||
|
|
b93c38759b | ||
|
|
8e99e02787 | ||
|
|
1c00344327 | ||
|
|
0351ef4ff5 | ||
|
|
845d2e33bd | ||
|
|
4cb955fe8d | ||
|
|
99f54acef1 | ||
|
|
bdfde669f3 | ||
|
|
798b39ec09 | ||
|
|
8528645c2c | ||
|
|
f8c1571a91 | ||
|
|
30a469ea63 | ||
|
|
0c1f9eaa37 | ||
|
|
90ed4fd4cb | ||
|
|
1c671b47d7 | ||
|
|
ee59822097 | ||
|
|
74a8bd17ea | ||
|
|
c60afba450 | ||
|
|
8049f9b9e4 | ||
|
|
8a5a58c647 | ||
|
|
547abb0fe1 | ||
|
|
be4c15877a | ||
|
|
0a40bfcb88 | ||
|
|
b7b92c73a3 | ||
|
|
334a0d7b1c | ||
|
|
39c7c8cf80 | ||
|
|
926a1e0189 | ||
|
|
ce3ea456b6 | ||
|
|
d1a8b88eb9 | ||
|
|
e3cd8a9c6a | ||
|
|
43f89adbd4 | ||
|
|
a4dc63f3a4 | ||
|
|
6945596eee | ||
|
|
bf14612258 | ||
|
|
0d32cc38d6 | ||
|
|
d36f2f642f | ||
|
|
deb19d24b8 | ||
|
|
d1eb7ef849 | ||
|
|
064b64f68a | ||
|
|
de047cea8e | ||
|
|
810d89eb6c | ||
|
|
8e8223b767 | ||
|
|
b38f0fa996 | ||
|
|
d12ff79af0 | ||
|
|
8c5cba58aa | ||
|
|
8144588534 | ||
|
|
d2fc712400 | ||
|
|
21c7f940d7 | ||
|
|
df1a64b5e0 | ||
|
|
a32ff6f403 | ||
|
|
bc2aced20d | ||
|
|
0c7ee56ee3 | ||
|
|
74d991da45 | ||
|
|
4a28841a7c | ||
|
|
85e74485e7 | ||
|
|
ec187e9d85 | ||
|
|
6e052a3063 | ||
|
|
440861998c | ||
|
|
a01fadd067 | ||
|
|
7ec66d1cd1 | ||
|
|
ea7c8e1fd9 | ||
|
|
94f47a847d | ||
|
|
17239ac6e4 | ||
|
|
030f4d228a | ||
|
|
f555846544 | ||
|
|
a168aa8b81 | ||
|
|
181e94a69d | ||
|
|
2de2b0eb23 | ||
|
|
07263e03cb | ||
|
|
c8a9fc2f26 | ||
|
|
9ca2e6e871 | ||
|
|
905068f7bf | ||
|
|
2254512a2a | ||
|
|
0df7d0249a | ||
|
|
3708c9b4d9 | ||
|
|
9f99939bda | ||
|
|
e700a43a40 | ||
|
|
8b9fdef25c | ||
|
|
3de4e56db9 | ||
|
|
a3d9b1d83b | ||
|
|
f2ff8ca4e2 | ||
|
|
9df2aaacb0 | ||
|
|
8a7b194f2b | ||
|
|
57c303b9ca | ||
|
|
f8c6b82ed9 | ||
|
|
037d5d1c46 | ||
|
|
aa17837936 | ||
|
|
16f2059f17 | ||
|
|
e2eaefab6e | ||
|
|
c6421275f7 | ||
|
|
9a08decadb | ||
|
|
cc08e5a42c | ||
|
|
1f3b170213 | ||
|
|
74ef6c0ed0 | ||
|
|
09a1032f77 | ||
|
|
921d644a0b | ||
|
|
54f7cefa28 | ||
|
|
b5fb7596b0 | ||
|
|
7dd65909f2 | ||
|
|
0f2e9764ab | ||
|
|
deaecad8fd | ||
|
|
5ccc103083 | ||
|
|
5bb001281b | ||
|
|
ce59a8a225 | ||
|
|
8c12b26847 | ||
|
|
9c9509594a | ||
|
|
cfb3893c2b | ||
|
|
b7bbe7d69f | ||
|
|
193c3fc4cd | ||
|
|
6ab9cc6d53 | ||
|
|
3785b97d95 | ||
|
|
c25b981c50 | ||
|
|
86d60e444d | ||
|
|
d9ae646ef2 | ||
|
|
b39a5061ca | ||
|
|
eeffded248 | ||
|
|
f00aafdfb2 | ||
|
|
e8af315e40 | ||
|
|
df6ba5cbe9 | ||
|
|
e3e0e4c6ed | ||
|
|
39ed582a72 | ||
|
|
40131daeed | ||
|
|
5b65fdcc1c | ||
|
|
6d1bc78f7b | ||
|
|
6adcb4c968 | ||
|
|
3c50072690 | ||
|
|
ce688cfb91 | ||
|
|
f7f5d414c4 | ||
|
|
2fb1f14d09 | ||
|
|
de456a402c | ||
|
|
dfd505dfaa | ||
|
|
b76bf0a6e0 | ||
|
|
c9dd2beaaa | ||
|
|
2bd9dd80e2 | ||
|
|
dcb7b49dbe | ||
|
|
a965301b2e |
2
.github/.gitleaks.toml
vendored
2
.github/.gitleaks.toml
vendored
@@ -536,7 +536,7 @@ secretGroup = 4
|
|||||||
|
|
||||||
[allowlist]
|
[allowlist]
|
||||||
description = "global allow lists"
|
description = "global allow lists"
|
||||||
regexes = ['''219-09-9999''', '''078-05-1120''', '''(9[0-9]{2}|666)-\d{2}-\d{4}''']
|
regexes = ['''219-09-9999''', '''078-05-1120''', '''(9[0-9]{2}|666)-\d{2}-\d{4}''', '''RPM-GPG-KEY.*''']
|
||||||
paths = [
|
paths = [
|
||||||
'''gitleaks.toml''',
|
'''gitleaks.toml''',
|
||||||
'''(.*?)(jpg|gif|doc|pdf|bin|svg|socket)$''',
|
'''(.*?)(jpg|gif|doc|pdf|bin|svg|socket)$''',
|
||||||
|
|||||||
190
.github/DISCUSSION_TEMPLATE/2-4.yml
vendored
190
.github/DISCUSSION_TEMPLATE/2-4.yml
vendored
@@ -1,190 +0,0 @@
|
|||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
⚠️ This category is solely for conversations related to Security Onion 2.4 ⚠️
|
|
||||||
|
|
||||||
If your organization needs more immediate, enterprise grade professional support, with one-on-one virtual meetings and screensharing, contact us via our website: https://securityonion.com/support
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Version
|
|
||||||
description: Which version of Security Onion 2.4.x are you asking about?
|
|
||||||
options:
|
|
||||||
-
|
|
||||||
- 2.4 Pre-release (Beta, Release Candidate)
|
|
||||||
- 2.4.10
|
|
||||||
- 2.4.20
|
|
||||||
- 2.4.30
|
|
||||||
- 2.4.40
|
|
||||||
- 2.4.50
|
|
||||||
- 2.4.60
|
|
||||||
- 2.4.70
|
|
||||||
- 2.4.80
|
|
||||||
- 2.4.90
|
|
||||||
- 2.4.100
|
|
||||||
- Other (please provide detail below)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Installation Method
|
|
||||||
description: How did you install Security Onion?
|
|
||||||
options:
|
|
||||||
-
|
|
||||||
- Security Onion ISO image
|
|
||||||
- Network installation on Red Hat derivative like Oracle, Rocky, Alma, etc.
|
|
||||||
- Network installation on Ubuntu
|
|
||||||
- Network installation on Debian
|
|
||||||
- Other (please provide detail below)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Description
|
|
||||||
description: >
|
|
||||||
Is this discussion about installation, configuration, upgrading, or other?
|
|
||||||
options:
|
|
||||||
-
|
|
||||||
- installation
|
|
||||||
- configuration
|
|
||||||
- upgrading
|
|
||||||
- other (please provide detail below)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Installation Type
|
|
||||||
description: >
|
|
||||||
When you installed, did you choose Import, Eval, Standalone, Distributed, or something else?
|
|
||||||
options:
|
|
||||||
-
|
|
||||||
- Import
|
|
||||||
- Eval
|
|
||||||
- Standalone
|
|
||||||
- Distributed
|
|
||||||
- other (please provide detail below)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Location
|
|
||||||
description: >
|
|
||||||
Is this deployment in the cloud, on-prem with Internet access, or airgap?
|
|
||||||
options:
|
|
||||||
-
|
|
||||||
- cloud
|
|
||||||
- on-prem with Internet access
|
|
||||||
- airgap
|
|
||||||
- other (please provide detail below)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Hardware Specs
|
|
||||||
description: >
|
|
||||||
Does your hardware meet or exceed the minimum requirements for your installation type as shown at https://docs.securityonion.net/en/2.4/hardware.html?
|
|
||||||
options:
|
|
||||||
-
|
|
||||||
- Meets minimum requirements
|
|
||||||
- Exceeds minimum requirements
|
|
||||||
- Does not meet minimum requirements
|
|
||||||
- other (please provide detail below)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
attributes:
|
|
||||||
label: CPU
|
|
||||||
description: How many CPU cores do you have?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
attributes:
|
|
||||||
label: RAM
|
|
||||||
description: How much RAM do you have?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
attributes:
|
|
||||||
label: Storage for /
|
|
||||||
description: How much storage do you have for the / partition?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
attributes:
|
|
||||||
label: Storage for /nsm
|
|
||||||
description: How much storage do you have for the /nsm partition?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Network Traffic Collection
|
|
||||||
description: >
|
|
||||||
Are you collecting network traffic from a tap or span port?
|
|
||||||
options:
|
|
||||||
-
|
|
||||||
- tap
|
|
||||||
- span port
|
|
||||||
- other (please provide detail below)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Network Traffic Speeds
|
|
||||||
description: >
|
|
||||||
How much network traffic are you monitoring?
|
|
||||||
options:
|
|
||||||
-
|
|
||||||
- Less than 1Gbps
|
|
||||||
- 1Gbps to 10Gbps
|
|
||||||
- more than 10Gbps
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Status
|
|
||||||
description: >
|
|
||||||
Does SOC Grid show all services on all nodes as running OK?
|
|
||||||
options:
|
|
||||||
-
|
|
||||||
- Yes, all services on all nodes are running OK
|
|
||||||
- No, one or more services are failed (please provide detail below)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Salt Status
|
|
||||||
description: >
|
|
||||||
Do you get any failures when you run "sudo salt-call state.highstate"?
|
|
||||||
options:
|
|
||||||
-
|
|
||||||
- Yes, there are salt failures (please provide detail below)
|
|
||||||
- No, there are no failures
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Logs
|
|
||||||
description: >
|
|
||||||
Are there any additional clues in /opt/so/log/?
|
|
||||||
options:
|
|
||||||
-
|
|
||||||
- Yes, there are additional clues in /opt/so/log/ (please provide detail below)
|
|
||||||
- No, there are no additional clues
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Detail
|
|
||||||
description: Please read our discussion guidelines at https://github.com/Security-Onion-Solutions/securityonion/discussions/1720 and then provide detailed information to help us help you.
|
|
||||||
placeholder: |-
|
|
||||||
STOP! Before typing, please read our discussion guidelines at https://github.com/Security-Onion-Solutions/securityonion/discussions/1720 in their entirety!
|
|
||||||
|
|
||||||
If your organization needs more immediate, enterprise grade professional support, with one-on-one virtual meetings and screensharing, contact us via our website: https://securityonion.com/support
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: checkboxes
|
|
||||||
attributes:
|
|
||||||
label: Guidelines
|
|
||||||
options:
|
|
||||||
- label: I have read the discussion guidelines at https://github.com/Security-Onion-Solutions/securityonion/discussions/1720 and assert that I have followed the guidelines.
|
|
||||||
required: true
|
|
||||||
32
.github/workflows/close-threads.yml
vendored
32
.github/workflows/close-threads.yml
vendored
@@ -1,32 +0,0 @@
|
|||||||
name: 'Close Threads'
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '50 1 * * *'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
discussions: write
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: lock-threads
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
close-threads:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
steps:
|
|
||||||
- uses: actions/stale@v5
|
|
||||||
with:
|
|
||||||
days-before-issue-stale: -1
|
|
||||||
days-before-issue-close: 60
|
|
||||||
stale-issue-message: "This issue is stale because it has been inactive for an extended period. Stale issues convey that the issue, while important to someone, is not critical enough for the author, or other community members to work on, sponsor, or otherwise shepherd the issue through to a resolution."
|
|
||||||
close-issue-message: "This issue was closed because it has been stale for an extended period. It will be automatically locked in 30 days, after which no further commenting will be available."
|
|
||||||
days-before-pr-stale: 45
|
|
||||||
days-before-pr-close: 60
|
|
||||||
stale-pr-message: "This PR is stale because it has been inactive for an extended period. The longer a PR remains stale the more out of date with the main branch it becomes."
|
|
||||||
close-pr-message: "This PR was closed because it has been stale for an extended period. It will be automatically locked in 30 days. If there is still a commitment to finishing this PR re-open it before it is locked."
|
|
||||||
25
.github/workflows/lock-threads.yml
vendored
25
.github/workflows/lock-threads.yml
vendored
@@ -1,25 +0,0 @@
|
|||||||
name: 'Lock Threads'
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '50 2 * * *'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
discussions: write
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: lock-threads
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lock-threads:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: jertel/lock-threads@main
|
|
||||||
with:
|
|
||||||
include-discussion-currently-open: true
|
|
||||||
discussion-inactive-days: 90
|
|
||||||
issue-inactive-days: 30
|
|
||||||
pr-inactive-days: 30
|
|
||||||
8
.github/workflows/pythontest.yml
vendored
8
.github/workflows/pythontest.yml
vendored
@@ -1,6 +1,12 @@
|
|||||||
name: python-test
|
name: python-test
|
||||||
|
|
||||||
on: [push, pull_request]
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- "salt/sensoroni/files/analyzers/**"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- "salt/sensoroni/files/analyzers/**"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|||||||
30
README.md
30
README.md
@@ -1,20 +1,6 @@
|
|||||||
## Security Onion 2.3
|
## Security Onion 2.4
|
||||||
|
|
||||||
Security Onion 2.3 is here!
|
Security Onion 2.4 is here!
|
||||||
|
|
||||||
## End Of Life Warning
|
|
||||||
|
|
||||||
Security Onion 2.3 reaches End Of Life (EOL) on April 6, 2024:
|
|
||||||
|
|
||||||
https://blog.securityonion.net/2023/10/6-month-eol-notice-for-security-onion-23.html
|
|
||||||
|
|
||||||
For new installations, please see the 2.4 branch of this repo:
|
|
||||||
|
|
||||||
https://github.com/Security-Onion-Solutions/securityonion/tree/2.4/main
|
|
||||||
|
|
||||||
If you have an existing 2.3 installation and would like to migrate to 2.4, please see:
|
|
||||||
|
|
||||||
https://docs.securityonion.net/en/2.4/appendix.html
|
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||
@@ -32,24 +18,24 @@ Cases
|
|||||||
|
|
||||||
### Release Notes
|
### Release Notes
|
||||||
|
|
||||||
https://docs.securityonion.net/en/2.3/release-notes.html
|
https://docs.securityonion.net/en/2.4/release-notes.html
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
|
|
||||||
https://docs.securityonion.net/en/2.3/hardware.html
|
https://docs.securityonion.net/en/2.4/hardware.html
|
||||||
|
|
||||||
### Download
|
### Download
|
||||||
|
|
||||||
https://docs.securityonion.net/en/2.3/download.html
|
https://docs.securityonion.net/en/2.4/download.html
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
https://docs.securityonion.net/en/2.3/installation.html
|
https://docs.securityonion.net/en/2.4/installation.html
|
||||||
|
|
||||||
### FAQ
|
### FAQ
|
||||||
|
|
||||||
https://docs.securityonion.net/en/2.3/faq.html
|
https://docs.securityonion.net/en/2.4/faq.html
|
||||||
|
|
||||||
### Feedback
|
### Feedback
|
||||||
|
|
||||||
https://docs.securityonion.net/en/2.3/community-support.html
|
https://docs.securityonion.net/en/2.4/community-support.html
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| ------- | ------------------ |
|
| ------- | ------------------ |
|
||||||
| 2.x.x | :white_check_mark: |
|
| 2.4.x | :white_check_mark: |
|
||||||
|
| 2.3.x | :white_check_mark: |
|
||||||
| 16.04.x | :x: |
|
| 16.04.x | :x: |
|
||||||
|
|
||||||
Security Onion 16.04 has reached End Of Life and is no longer supported.
|
Security Onion 16.04 has reached End Of Life and is no longer supported.
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
### 2.3.300-20240401 ISO image built on 2024/04/01
|
### 2.3.120-20220425 ISO image built on 2022/04/25
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Download and Verify
|
### Download and Verify
|
||||||
|
|
||||||
2.3.300-20240401 ISO image:
|
2.3.120-20220425 ISO image:
|
||||||
https://download.securityonion.net/file/securityonion/securityonion-2.3.300-20240401.iso
|
https://download.securityonion.net/file/securityonion/securityonion-2.3.120-20220425.iso
|
||||||
|
|
||||||
MD5: 5CBDA8012D773C5EC362D21C4EA3B7FB
|
MD5: C99729E452B064C471BEF04532F28556
|
||||||
SHA1: 7A34FAA0E11F09F529FF38EC3239211CD87CB1A7
|
SHA1: 60BF07D5347C24568C7B793BFA9792E98479CFBF
|
||||||
SHA256: 123066DAFBF6F2AA0E1924296CFEFE1213002D7760E8797AB74F1FC1D683C6D7
|
SHA256: CD17D0D7CABE21D45FA45E1CF91C5F24EB9608C79FF88480134E5592AFDD696E
|
||||||
|
|
||||||
Signature for ISO image:
|
Signature for ISO image:
|
||||||
https://github.com/Security-Onion-Solutions/securityonion/raw/master/sigs/securityonion-2.3.300-20240401.iso.sig
|
https://github.com/Security-Onion-Solutions/securityonion/raw/master/sigs/securityonion-2.3.120-20220425.iso.sig
|
||||||
|
|
||||||
Signing key:
|
Signing key:
|
||||||
https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/master/KEYS
|
https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/master/KEYS
|
||||||
@@ -26,22 +26,22 @@ wget https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/ma
|
|||||||
|
|
||||||
Download the signature file for the ISO:
|
Download the signature file for the ISO:
|
||||||
```
|
```
|
||||||
wget https://github.com/Security-Onion-Solutions/securityonion/raw/master/sigs/securityonion-2.3.300-20240401.iso.sig
|
wget https://github.com/Security-Onion-Solutions/securityonion/raw/master/sigs/securityonion-2.3.120-20220425.iso.sig
|
||||||
```
|
```
|
||||||
|
|
||||||
Download the ISO image:
|
Download the ISO image:
|
||||||
```
|
```
|
||||||
wget https://download.securityonion.net/file/securityonion/securityonion-2.3.300-20240401.iso
|
wget https://download.securityonion.net/file/securityonion/securityonion-2.3.120-20220425.iso
|
||||||
```
|
```
|
||||||
|
|
||||||
Verify the downloaded ISO image using the signature file:
|
Verify the downloaded ISO image using the signature file:
|
||||||
```
|
```
|
||||||
gpg --verify securityonion-2.3.300-20240401.iso.sig securityonion-2.3.300-20240401.iso
|
gpg --verify securityonion-2.3.120-20220425.iso.sig securityonion-2.3.120-20220425.iso
|
||||||
```
|
```
|
||||||
|
|
||||||
The output should show "Good signature" and the Primary key fingerprint should match what's shown below:
|
The output should show "Good signature" and the Primary key fingerprint should match what's shown below:
|
||||||
```
|
```
|
||||||
gpg: Signature made Wed 27 Mar 2024 05:09:33 PM EDT using RSA key ID FE507013
|
gpg: Signature made Mon 25 Apr 2022 08:20:40 AM EDT using RSA key ID FE507013
|
||||||
gpg: Good signature from "Security Onion Solutions, LLC <info@securityonionsolutions.com>"
|
gpg: Good signature from "Security Onion Solutions, LLC <info@securityonionsolutions.com>"
|
||||||
gpg: WARNING: This key is not certified with a trusted signature!
|
gpg: WARNING: This key is not certified with a trusted signature!
|
||||||
gpg: There is no indication that the signature belongs to the owner.
|
gpg: There is no indication that the signature belongs to the owner.
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{% import_yaml 'firewall/portgroups.yaml' as default_portgroups %}
|
{% import_yaml 'firewall/ports/ports.yaml' as default_portgroups %}
|
||||||
{% set default_portgroups = default_portgroups.firewall.aliases.ports %}
|
{% set default_portgroups = default_portgroups.firewall.ports %}
|
||||||
{% import_yaml 'firewall/portgroups.local.yaml' as local_portgroups %}
|
{% import_yaml 'firewall/ports/ports.local.yaml' as local_portgroups %}
|
||||||
{% if local_portgroups.firewall.aliases.ports %}
|
{% if local_portgroups.firewall.ports %}
|
||||||
{% set local_portgroups = local_portgroups.firewall.aliases.ports %}
|
{% set local_portgroups = local_portgroups.firewall.ports %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% set local_portgroups = {} %}
|
{% set local_portgroups = {} %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1,82 +0,0 @@
|
|||||||
firewall:
|
|
||||||
hostgroups:
|
|
||||||
analyst:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
beats_endpoint:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
beats_endpoint_ssl:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
elasticsearch_rest:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
endgame:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
fleet:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
heavy_node:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
idh:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
manager:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
minion:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
node:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
osquery_endpoint:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
receiver:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
search_node:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
sensor:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
strelka_frontend:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
syslog:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
wazuh_agent:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
wazuh_api:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
wazuh_authd:
|
|
||||||
ips:
|
|
||||||
delete:
|
|
||||||
insert:
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
firewall:
|
|
||||||
aliases:
|
|
||||||
ports:
|
|
||||||
2
files/firewall/ports/ports.local.yaml
Normal file
2
files/firewall/ports/ports.local.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
firewall:
|
||||||
|
ports:
|
||||||
@@ -64,8 +64,4 @@ peer:
|
|||||||
.*:
|
.*:
|
||||||
- x509.sign_remote_certificate
|
- x509.sign_remote_certificate
|
||||||
|
|
||||||
reactor:
|
|
||||||
- 'so/fleet':
|
|
||||||
- salt://reactor/fleet.sls
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -45,12 +45,10 @@ echo " rootfs: $ROOTFS" >> $local_salt_dir/pillar/data/$TYPE.sls
|
|||||||
echo " nsmfs: $NSM" >> $local_salt_dir/pillar/data/$TYPE.sls
|
echo " nsmfs: $NSM" >> $local_salt_dir/pillar/data/$TYPE.sls
|
||||||
if [ $TYPE == 'sensorstab' ]; then
|
if [ $TYPE == 'sensorstab' ]; then
|
||||||
echo " monint: bond0" >> $local_salt_dir/pillar/data/$TYPE.sls
|
echo " monint: bond0" >> $local_salt_dir/pillar/data/$TYPE.sls
|
||||||
salt-call state.apply grafana queue=True
|
|
||||||
fi
|
fi
|
||||||
if [ $TYPE == 'evaltab' ] || [ $TYPE == 'standalonetab' ]; then
|
if [ $TYPE == 'evaltab' ] || [ $TYPE == 'standalonetab' ]; then
|
||||||
echo " monint: bond0" >> $local_salt_dir/pillar/data/$TYPE.sls
|
echo " monint: bond0" >> $local_salt_dir/pillar/data/$TYPE.sls
|
||||||
if [ ! $10 ]; then
|
if [ ! $10 ]; then
|
||||||
salt-call state.apply grafana queue=True
|
|
||||||
salt-call state.apply utility queue=True
|
salt-call state.apply utility queue=True
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ logstash:
|
|||||||
port_bindings:
|
port_bindings:
|
||||||
- 0.0.0.0:3765:3765
|
- 0.0.0.0:3765:3765
|
||||||
- 0.0.0.0:5044:5044
|
- 0.0.0.0:5044:5044
|
||||||
|
- 0.0.0.0:5055:5055
|
||||||
- 0.0.0.0:5644:5644
|
- 0.0.0.0:5644:5644
|
||||||
- 0.0.0.0:6050:6050
|
- 0.0.0.0:6050:6050
|
||||||
- 0.0.0.0:6051:6051
|
- 0.0.0.0:6051:6051
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ logstash:
|
|||||||
pipelines:
|
pipelines:
|
||||||
manager:
|
manager:
|
||||||
config:
|
config:
|
||||||
- so/0009_input_beats.conf
|
|
||||||
- so/0010_input_hhbeats.conf
|
|
||||||
- so/0011_input_endgame.conf
|
- so/0011_input_endgame.conf
|
||||||
|
- so/0012_input_elastic_agent.conf
|
||||||
- so/9999_output_redis.conf.jinja
|
- so/9999_output_redis.conf.jinja
|
||||||
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
{% set cached_grains = salt.saltutil.runner('cache.grains', tgt='*') %}
|
{% set cached_grains = salt.saltutil.runner('cache.grains', tgt='*') %}
|
||||||
{% for minionid, ip in salt.saltutil.runner(
|
{% for minionid, ip in salt.saltutil.runner(
|
||||||
'mine.get',
|
'mine.get',
|
||||||
tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-node or G@role:so-heavynode or G@role:so-receiver or G@role:so-helix',
|
tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-searchnode or G@role:so-heavynode or G@role:so-receiver or G@role:so-helix ',
|
||||||
fun='network.ip_addrs',
|
fun='network.ip_addrs',
|
||||||
tgt_type='compound') | dictsort()
|
tgt_type='compound') | dictsort()
|
||||||
%}
|
%}
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ logstash:
|
|||||||
pipelines:
|
pipelines:
|
||||||
receiver:
|
receiver:
|
||||||
config:
|
config:
|
||||||
- so/0009_input_beats.conf
|
|
||||||
- so/0010_input_hhbeats.conf
|
|
||||||
- so/0011_input_endgame.conf
|
- so/0011_input_endgame.conf
|
||||||
|
- so/0012_input_elastic_agent.conf
|
||||||
- so/9999_output_redis.conf.jinja
|
- so/9999_output_redis.conf.jinja
|
||||||
|
|
||||||
@@ -3,16 +3,5 @@ logstash:
|
|||||||
search:
|
search:
|
||||||
config:
|
config:
|
||||||
- so/0900_input_redis.conf.jinja
|
- so/0900_input_redis.conf.jinja
|
||||||
- so/9000_output_zeek.conf.jinja
|
- so/9805_output_elastic_agent.conf.jinja
|
||||||
- so/9002_output_import.conf.jinja
|
|
||||||
- so/9034_output_syslog.conf.jinja
|
|
||||||
- so/9050_output_filebeatmodules.conf.jinja
|
|
||||||
- so/9100_output_osquery.conf.jinja
|
|
||||||
- so/9400_output_suricata.conf.jinja
|
|
||||||
- so/9500_output_beats.conf.jinja
|
|
||||||
- so/9600_output_ossec.conf.jinja
|
|
||||||
- so/9700_output_strelka.conf.jinja
|
|
||||||
- so/9800_output_logscan.conf.jinja
|
|
||||||
- so/9801_output_rita.conf.jinja
|
|
||||||
- so/9802_output_kratos.conf.jinja
|
|
||||||
- so/9900_output_endgame.conf.jinja
|
- so/9900_output_endgame.conf.jinja
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
{% set node_types = {} %}
|
{% set node_types = {} %}
|
||||||
{% set manage_alived = salt.saltutil.runner('manage.alived', show_ip=True) %}
|
{% set manage_alived = salt.saltutil.runner('manage.alived', show_ip=True) %}
|
||||||
{% set manager = grains.master %}
|
|
||||||
{% set manager_type = manager.split('_')|last %}
|
|
||||||
{% for minionid, ip in salt.saltutil.runner('mine.get', tgt='*', fun='network.ip_addrs', tgt_type='glob') | dictsort() %}
|
{% for minionid, ip in salt.saltutil.runner('mine.get', tgt='*', fun='network.ip_addrs', tgt_type='glob') | dictsort() %}
|
||||||
{% set hostname = minionid.split('_')[0] %}
|
{% set hostname = minionid.split('_')[0] %}
|
||||||
{% set node_type = minionid.split('_')[1] %}
|
{% set node_type = minionid.split('_')[1] %}
|
||||||
@@ -24,10 +22,10 @@
|
|||||||
|
|
||||||
node_data:
|
node_data:
|
||||||
{% for node_type, host_values in node_types.items() %}
|
{% for node_type, host_values in node_types.items() %}
|
||||||
{{node_type}}:
|
|
||||||
{% for hostname, details in host_values.items() %}
|
{% for hostname, details in host_values.items() %}
|
||||||
{{hostname}}:
|
{{hostname}}:
|
||||||
ip: {{details.ip}}
|
ip: {{details.ip}}
|
||||||
alive: {{ details.alive }}
|
alive: {{ details.alive }}
|
||||||
|
role: {{node_type}}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
169
pillar/top.sls
169
pillar/top.sls
@@ -1,30 +1,47 @@
|
|||||||
base:
|
base:
|
||||||
'*':
|
'*':
|
||||||
- patch.needs_restarting
|
- patch.needs_restarting
|
||||||
|
- ntp.soc_ntp
|
||||||
|
- ntp.adv_ntp
|
||||||
- logrotate
|
- logrotate
|
||||||
|
- docker.soc_docker
|
||||||
|
- docker.adv_docker
|
||||||
|
- sensoroni.soc_sensoroni
|
||||||
|
- sensoroni.adv_sensoroni
|
||||||
|
- telegraf.soc_telegraf
|
||||||
|
- telegraf.adv_telegraf
|
||||||
|
- influxdb.token
|
||||||
|
- node_data.ips
|
||||||
|
|
||||||
'* and not *_eval and not *_import':
|
'* and not *_eval and not *_import':
|
||||||
- logstash.nodes
|
- logstash.nodes
|
||||||
|
|
||||||
'*_eval or *_helixsensor or *_heavynode or *_sensor or *_standalone or *_import':
|
'*_eval or *_heavynode or *_sensor or *_standalone or *_import':
|
||||||
- match: compound
|
- match: compound
|
||||||
- zeek
|
- zeek
|
||||||
|
- bpf.soc_bpf
|
||||||
|
- bpf.adv_bpf
|
||||||
|
|
||||||
'*_managersearch or *_heavynode':
|
'*_managersearch or *_heavynode':
|
||||||
- match: compound
|
- match: compound
|
||||||
- logstash
|
- logstash
|
||||||
- logstash.manager
|
- logstash.manager
|
||||||
- logstash.search
|
- logstash.search
|
||||||
|
- logstash.soc_logstash
|
||||||
|
- logstash.adv_logstash
|
||||||
- elasticsearch.index_templates
|
- elasticsearch.index_templates
|
||||||
|
- elasticsearch.soc_elasticsearch
|
||||||
|
- elasticsearch.adv_elasticsearch
|
||||||
|
|
||||||
'*_manager':
|
'*_manager':
|
||||||
- logstash
|
- logstash
|
||||||
- logstash.manager
|
- logstash.manager
|
||||||
|
- logstash.soc_logstash
|
||||||
|
- logstash.adv_logstash
|
||||||
- elasticsearch.index_templates
|
- elasticsearch.index_templates
|
||||||
|
|
||||||
'*_manager or *_managersearch':
|
'*_manager or *_managersearch':
|
||||||
- match: compound
|
- match: compound
|
||||||
- data.*
|
|
||||||
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
||||||
- elasticsearch.auth
|
- elasticsearch.auth
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -32,18 +49,37 @@ base:
|
|||||||
- kibana.secrets
|
- kibana.secrets
|
||||||
{% endif %}
|
{% endif %}
|
||||||
- secrets
|
- secrets
|
||||||
- global
|
- soc_global
|
||||||
|
- adv_global
|
||||||
|
- manager.soc_manager
|
||||||
|
- manager.adv_manager
|
||||||
|
- idstools.soc_idstools
|
||||||
|
- idstools.adv_idstools
|
||||||
|
- soc.soc_soc
|
||||||
|
- soc.adv_soc
|
||||||
|
- kratos.soc_kratos
|
||||||
|
- kratos.adv_kratos
|
||||||
|
- redis.soc_redis
|
||||||
|
- redis.adv_redis
|
||||||
|
- influxdb.soc_influxdb
|
||||||
|
- influxdb.adv_influxdb
|
||||||
|
- elasticsearch.soc_elasticsearch
|
||||||
|
- elasticsearch.adv_elasticsearch
|
||||||
|
- backup.soc_backup
|
||||||
|
- backup.adv_backup
|
||||||
|
- firewall.soc_firewall
|
||||||
|
- firewall.adv_firewall
|
||||||
- minions.{{ grains.id }}
|
- minions.{{ grains.id }}
|
||||||
|
- minions.adv_{{ grains.id }}
|
||||||
|
|
||||||
'*_sensor':
|
'*_sensor':
|
||||||
- zeeklogs
|
|
||||||
- healthcheck.sensor
|
- healthcheck.sensor
|
||||||
- global
|
- soc_global
|
||||||
|
- adv_global
|
||||||
- minions.{{ grains.id }}
|
- minions.{{ grains.id }}
|
||||||
|
- minions.adv_{{ grains.id }}
|
||||||
|
|
||||||
'*_eval':
|
'*_eval':
|
||||||
- data.*
|
|
||||||
- zeeklogs
|
|
||||||
- secrets
|
- secrets
|
||||||
- healthcheck.eval
|
- healthcheck.eval
|
||||||
- elasticsearch.index_templates
|
- elasticsearch.index_templates
|
||||||
@@ -53,13 +89,34 @@ base:
|
|||||||
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %}
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %}
|
||||||
- kibana.secrets
|
- kibana.secrets
|
||||||
{% endif %}
|
{% endif %}
|
||||||
- global
|
- soc_global
|
||||||
|
- kratos.soc_kratos
|
||||||
|
- elasticsearch.soc_elasticsearch
|
||||||
|
- elasticsearch.adv_elasticsearch
|
||||||
|
- manager.soc_manager
|
||||||
|
- manager.adv_manager
|
||||||
|
- idstools.soc_idstools
|
||||||
|
- idstools.adv_idstools
|
||||||
|
- soc.soc_soc
|
||||||
|
- kratos.soc_kratos
|
||||||
|
- kratos.adv_kratos
|
||||||
|
- redis.soc_redis
|
||||||
|
- redis.adv_redis
|
||||||
|
- influxdb.soc_influxdb
|
||||||
|
- influxdb.adv_influxdb
|
||||||
|
- backup.soc_backup
|
||||||
|
- backup.adv_backup
|
||||||
|
- firewall.soc_firewall
|
||||||
|
- firewall.adv_firewall
|
||||||
- minions.{{ grains.id }}
|
- minions.{{ grains.id }}
|
||||||
|
- minions.adv_{{ grains.id }}
|
||||||
|
|
||||||
'*_standalone':
|
'*_standalone':
|
||||||
- logstash
|
- logstash
|
||||||
- logstash.manager
|
- logstash.manager
|
||||||
- logstash.search
|
- logstash.search
|
||||||
|
- logstash.soc_logstash
|
||||||
|
- logstash.adv_logstash
|
||||||
- elasticsearch.index_templates
|
- elasticsearch.index_templates
|
||||||
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
||||||
- elasticsearch.auth
|
- elasticsearch.auth
|
||||||
@@ -67,60 +124,77 @@ base:
|
|||||||
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %}
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %}
|
||||||
- kibana.secrets
|
- kibana.secrets
|
||||||
{% endif %}
|
{% endif %}
|
||||||
- data.*
|
|
||||||
- zeeklogs
|
|
||||||
- secrets
|
- secrets
|
||||||
- healthcheck.standalone
|
- healthcheck.standalone
|
||||||
- global
|
- soc_global
|
||||||
- minions.{{ grains.id }}
|
- idstools.soc_idstools
|
||||||
|
- idstools.adv_idstools
|
||||||
'*_node':
|
- kratos.soc_kratos
|
||||||
- global
|
- kratos.adv_kratos
|
||||||
|
- redis.soc_redis
|
||||||
|
- redis.adv_redis
|
||||||
|
- influxdb.soc_influxdb
|
||||||
|
- influxdb.adv_influxdb
|
||||||
|
- elasticsearch.soc_elasticsearch
|
||||||
|
- elasticsearch.adv_elasticsearch
|
||||||
|
- manager.soc_manager
|
||||||
|
- manager.adv_manager
|
||||||
|
- soc.soc_soc
|
||||||
|
- backup.soc_backup
|
||||||
|
- backup.adv_backup
|
||||||
|
- firewall.soc_firewall
|
||||||
|
- firewall.adv_firewall
|
||||||
- minions.{{ grains.id }}
|
- minions.{{ grains.id }}
|
||||||
|
- minions.adv_{{ grains.id }}
|
||||||
|
|
||||||
'*_heavynode':
|
'*_heavynode':
|
||||||
- zeeklogs
|
|
||||||
- elasticsearch.auth
|
- elasticsearch.auth
|
||||||
- global
|
- soc_global
|
||||||
- minions.{{ grains.id }}
|
- redis.soc_redis
|
||||||
|
|
||||||
'*_helixsensor':
|
|
||||||
- fireeye
|
|
||||||
- zeeklogs
|
|
||||||
- logstash
|
|
||||||
- logstash.helix
|
|
||||||
- global
|
|
||||||
- minions.{{ grains.id }}
|
|
||||||
|
|
||||||
'*_fleet':
|
|
||||||
- data.*
|
|
||||||
- secrets
|
|
||||||
- global
|
|
||||||
- minions.{{ grains.id }}
|
- minions.{{ grains.id }}
|
||||||
|
- minions.adv_{{ grains.id }}
|
||||||
|
|
||||||
'*_idh':
|
'*_idh':
|
||||||
- data.*
|
- soc_global
|
||||||
- global
|
- adv_global
|
||||||
|
- idh.soc_idh
|
||||||
|
- idh.adv_idh
|
||||||
- minions.{{ grains.id }}
|
- minions.{{ grains.id }}
|
||||||
|
- minions.adv_{{ grains.id }}
|
||||||
|
|
||||||
'*_searchnode':
|
'*_searchnode':
|
||||||
- logstash
|
- logstash
|
||||||
- logstash.search
|
- logstash.search
|
||||||
|
- logstash.soc_logstash
|
||||||
|
- logstash.adv_logstash
|
||||||
- elasticsearch.index_templates
|
- elasticsearch.index_templates
|
||||||
|
- elasticsearch.soc_elasticsearch
|
||||||
|
- elasticsearch.adv_elasticsearch
|
||||||
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
||||||
- elasticsearch.auth
|
- elasticsearch.auth
|
||||||
- global
|
{% endif %}
|
||||||
|
- redis.soc_redis
|
||||||
|
- soc_global
|
||||||
|
- adv_global
|
||||||
- minions.{{ grains.id }}
|
- minions.{{ grains.id }}
|
||||||
- data.nodestab
|
- minions.adv_{{ grains.id }}
|
||||||
|
|
||||||
'*_receiver':
|
'*_receiver':
|
||||||
- logstash
|
- logstash
|
||||||
- logstash.receiver
|
- logstash.receiver
|
||||||
|
- logstash.soc_logstash
|
||||||
|
- logstash.adv_logstash
|
||||||
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
||||||
- elasticsearch.auth
|
- elasticsearch.auth
|
||||||
- global
|
{% endif %}
|
||||||
|
- redis.soc_redis
|
||||||
|
- redis.adv_redis
|
||||||
|
- soc_global
|
||||||
|
- adv_global
|
||||||
- minions.{{ grains.id }}
|
- minions.{{ grains.id }}
|
||||||
|
- minions.adv_{{ grains.id }}
|
||||||
|
|
||||||
'*_import':
|
'*_import':
|
||||||
- zeeklogs
|
|
||||||
- secrets
|
- secrets
|
||||||
- elasticsearch.index_templates
|
- elasticsearch.index_templates
|
||||||
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
||||||
@@ -129,8 +203,27 @@ base:
|
|||||||
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %}
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %}
|
||||||
- kibana.secrets
|
- kibana.secrets
|
||||||
{% endif %}
|
{% endif %}
|
||||||
- global
|
- kratos.soc_kratos
|
||||||
|
- elasticsearch.soc_elasticsearch
|
||||||
|
- elasticsearch.adv_elasticsearch
|
||||||
|
- manager.soc_manager
|
||||||
|
- manager.adv_manager
|
||||||
|
- soc.soc_soc
|
||||||
|
- soc_global
|
||||||
|
- adv_global
|
||||||
|
- backup.soc_backup
|
||||||
|
- backup.adv_backup
|
||||||
|
- kratos.soc_kratos
|
||||||
|
- kratos.adv_kratos
|
||||||
|
- redis.soc_redis
|
||||||
|
- redis.adv_redis
|
||||||
|
- influxdb.soc_influxdb
|
||||||
|
- influxdb.adv_influxdb
|
||||||
|
- firewall.soc_firewall
|
||||||
|
- firewall.adv_firewall
|
||||||
- minions.{{ grains.id }}
|
- minions.{{ grains.id }}
|
||||||
|
- minions.adv_{{ grains.id }}
|
||||||
|
|
||||||
'*_workstation':
|
'*_workstation':
|
||||||
- minions.{{ grains.id }}
|
- minions.{{ grains.id }}
|
||||||
|
- minions.adv_{{ grains.id }}
|
||||||
|
|||||||
@@ -1,70 +1 @@
|
|||||||
zeek:
|
zeek:
|
||||||
zeekctl:
|
|
||||||
MailTo: root@localhost
|
|
||||||
MailConnectionSummary: 1
|
|
||||||
MinDiskSpace: 5
|
|
||||||
MailHostUpDown: 1
|
|
||||||
LogRotationInterval: 3600
|
|
||||||
LogExpireInterval: 0
|
|
||||||
StatsLogEnable: 1
|
|
||||||
StatsLogExpireInterval: 0
|
|
||||||
StatusCmdShowAll: 0
|
|
||||||
CrashExpireInterval: 0
|
|
||||||
SitePolicyScripts: local.zeek
|
|
||||||
LogDir: /nsm/zeek/logs
|
|
||||||
SpoolDir: /nsm/zeek/spool
|
|
||||||
CfgDir: /opt/zeek/etc
|
|
||||||
CompressLogs: 1
|
|
||||||
ZeekPort: 27760
|
|
||||||
local:
|
|
||||||
'@load':
|
|
||||||
- misc/loaded-scripts
|
|
||||||
- tuning/defaults
|
|
||||||
- misc/capture-loss
|
|
||||||
- misc/stats
|
|
||||||
- frameworks/software/vulnerable
|
|
||||||
- frameworks/software/version-changes
|
|
||||||
- protocols/ftp/software
|
|
||||||
- protocols/smtp/software
|
|
||||||
- protocols/ssh/software
|
|
||||||
- protocols/http/software
|
|
||||||
- protocols/dns/detect-external-names
|
|
||||||
- protocols/ftp/detect
|
|
||||||
- protocols/conn/known-hosts
|
|
||||||
- protocols/conn/known-services
|
|
||||||
- protocols/ssl/known-certs
|
|
||||||
- protocols/ssl/validate-certs
|
|
||||||
- protocols/ssl/log-hostcerts-only
|
|
||||||
- protocols/ssh/geo-data
|
|
||||||
- protocols/ssh/detect-bruteforcing
|
|
||||||
- protocols/ssh/interesting-hostnames
|
|
||||||
- protocols/http/detect-sqli
|
|
||||||
- frameworks/files/hash-all-files
|
|
||||||
- frameworks/files/detect-MHR
|
|
||||||
- policy/frameworks/notice/extend-email/hostnames
|
|
||||||
- policy/frameworks/notice/community-id
|
|
||||||
- policy/protocols/conn/community-id-logging
|
|
||||||
- ja3
|
|
||||||
- hassh
|
|
||||||
- intel
|
|
||||||
- cve-2020-0601
|
|
||||||
- securityonion/bpfconf
|
|
||||||
- securityonion/file-extraction
|
|
||||||
- oui-logging
|
|
||||||
- icsnpp-modbus
|
|
||||||
- icsnpp-dnp3
|
|
||||||
- icsnpp-bacnet
|
|
||||||
- icsnpp-ethercat
|
|
||||||
- icsnpp-enip
|
|
||||||
- icsnpp-opcua-binary
|
|
||||||
- icsnpp-bsap
|
|
||||||
- icsnpp-s7comm
|
|
||||||
- zeek-plugin-tds
|
|
||||||
- zeek-plugin-profinet
|
|
||||||
- zeek-spicy-wireguard
|
|
||||||
- zeek-spicy-stun
|
|
||||||
'@load-sigs':
|
|
||||||
- frameworks/signatures/detect-windows-shells
|
|
||||||
redef:
|
|
||||||
- LogAscii::use_json = T;
|
|
||||||
- CaptureLoss::watch_interval = 5 mins;
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ def check():
|
|||||||
if path.exists('/var/run/reboot-required'):
|
if path.exists('/var/run/reboot-required'):
|
||||||
retval = 'True'
|
retval = 'True'
|
||||||
|
|
||||||
elif os == 'CentOS':
|
elif os == 'Rocky':
|
||||||
cmd = 'needs-restarting -r > /dev/null 2>&1'
|
cmd = 'needs-restarting -r > /dev/null 2>&1'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import logging
|
|||||||
def status():
|
def status():
|
||||||
return __salt__['cmd.run']('/usr/sbin/so-status')
|
return __salt__['cmd.run']('/usr/sbin/so-status')
|
||||||
|
|
||||||
|
def version():
|
||||||
|
return __salt__['cp.get_file_str']('/etc/soversion')
|
||||||
|
|
||||||
def mysql_conn(retry):
|
def mysql_conn(retry):
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
|
||||||
{% set ZEEKVER = salt['pillar.get']('global:mdengine', '') %}
|
{% set ZEEKVER = salt['pillar.get']('global:mdengine', '') %}
|
||||||
{% set WAZUH = salt['pillar.get']('global:wazuh', '0') %}
|
|
||||||
{% set PLAYBOOK = salt['pillar.get']('manager:playbook', '0') %}
|
{% set PLAYBOOK = salt['pillar.get']('manager:playbook', '0') %}
|
||||||
{% set FREQSERVER = salt['pillar.get']('manager:freq', '0') %}
|
|
||||||
{% set DOMAINSTATS = salt['pillar.get']('manager:domainstats', '0') %}
|
|
||||||
{% set FLEETMANAGER = salt['pillar.get']('global:fleet_manager', False) %}
|
|
||||||
{% set FLEETNODE = salt['pillar.get']('global:fleet_node', False) %}
|
|
||||||
{% set ELASTALERT = salt['pillar.get']('elastalert:enabled', True) %}
|
{% set ELASTALERT = salt['pillar.get']('elastalert:enabled', True) %}
|
||||||
{% set ELASTICSEARCH = salt['pillar.get']('elasticsearch:enabled', True) %}
|
{% set ELASTICSEARCH = salt['pillar.get']('elasticsearch:enabled', True) %}
|
||||||
{% set FILEBEAT = salt['pillar.get']('filebeat:enabled', True) %}
|
|
||||||
{% set KIBANA = salt['pillar.get']('kibana:enabled', True) %}
|
{% set KIBANA = salt['pillar.get']('kibana:enabled', True) %}
|
||||||
{% set LOGSTASH = salt['pillar.get']('logstash:enabled', True) %}
|
{% set LOGSTASH = salt['pillar.get']('logstash:enabled', True) %}
|
||||||
{% set CURATOR = salt['pillar.get']('curator:enabled', True) %}
|
{% set CURATOR = salt['pillar.get']('curator:enabled', True) %}
|
||||||
@@ -32,9 +32,9 @@
|
|||||||
'nginx',
|
'nginx',
|
||||||
'telegraf',
|
'telegraf',
|
||||||
'influxdb',
|
'influxdb',
|
||||||
'grafana',
|
|
||||||
'soc',
|
'soc',
|
||||||
'kratos',
|
'kratos',
|
||||||
|
'elasticfleet',
|
||||||
'firewall',
|
'firewall',
|
||||||
'idstools',
|
'idstools',
|
||||||
'suricata.manager',
|
'suricata.manager',
|
||||||
@@ -45,8 +45,7 @@
|
|||||||
'schedule',
|
'schedule',
|
||||||
'soctopus',
|
'soctopus',
|
||||||
'tcpreplay',
|
'tcpreplay',
|
||||||
'docker_clean',
|
'docker_clean'
|
||||||
'learn'
|
|
||||||
],
|
],
|
||||||
'so-heavynode': [
|
'so-heavynode': [
|
||||||
'ssl',
|
'ssl',
|
||||||
@@ -77,25 +76,10 @@
|
|||||||
'tcpreplay',
|
'tcpreplay',
|
||||||
'docker_clean'
|
'docker_clean'
|
||||||
],
|
],
|
||||||
'so-fleet': [
|
|
||||||
'ssl',
|
|
||||||
'nginx',
|
|
||||||
'telegraf',
|
|
||||||
'firewall',
|
|
||||||
'mysql',
|
|
||||||
'redis',
|
|
||||||
'fleet',
|
|
||||||
'fleet.install_package',
|
|
||||||
'filebeat',
|
|
||||||
'schedule',
|
|
||||||
'docker_clean'
|
|
||||||
],
|
|
||||||
'so-idh': [
|
'so-idh': [
|
||||||
'ssl',
|
'ssl',
|
||||||
'telegraf',
|
'telegraf',
|
||||||
'firewall',
|
'firewall',
|
||||||
'fleet.install_package',
|
|
||||||
'filebeat',
|
|
||||||
'idh',
|
'idh',
|
||||||
'schedule',
|
'schedule',
|
||||||
'docker_clean'
|
'docker_clean'
|
||||||
@@ -109,6 +93,8 @@
|
|||||||
'nginx',
|
'nginx',
|
||||||
'soc',
|
'soc',
|
||||||
'kratos',
|
'kratos',
|
||||||
|
'influxdb',
|
||||||
|
'telegraf',
|
||||||
'firewall',
|
'firewall',
|
||||||
'idstools',
|
'idstools',
|
||||||
'suricata.manager',
|
'suricata.manager',
|
||||||
@@ -119,7 +105,7 @@
|
|||||||
'schedule',
|
'schedule',
|
||||||
'tcpreplay',
|
'tcpreplay',
|
||||||
'docker_clean',
|
'docker_clean',
|
||||||
'learn'
|
'elasticfleet'
|
||||||
],
|
],
|
||||||
'so-manager': [
|
'so-manager': [
|
||||||
'salt.master',
|
'salt.master',
|
||||||
@@ -130,17 +116,16 @@
|
|||||||
'nginx',
|
'nginx',
|
||||||
'telegraf',
|
'telegraf',
|
||||||
'influxdb',
|
'influxdb',
|
||||||
'grafana',
|
|
||||||
'soc',
|
'soc',
|
||||||
'kratos',
|
'kratos',
|
||||||
|
'elasticfleet',
|
||||||
'firewall',
|
'firewall',
|
||||||
'idstools',
|
'idstools',
|
||||||
'suricata.manager',
|
'suricata.manager',
|
||||||
'utility',
|
'utility',
|
||||||
'schedule',
|
'schedule',
|
||||||
'soctopus',
|
'soctopus',
|
||||||
'docker_clean',
|
'docker_clean'
|
||||||
'learn'
|
|
||||||
],
|
],
|
||||||
'so-managersearch': [
|
'so-managersearch': [
|
||||||
'salt.master',
|
'salt.master',
|
||||||
@@ -150,9 +135,9 @@
|
|||||||
'nginx',
|
'nginx',
|
||||||
'telegraf',
|
'telegraf',
|
||||||
'influxdb',
|
'influxdb',
|
||||||
'grafana',
|
|
||||||
'soc',
|
'soc',
|
||||||
'kratos',
|
'kratos',
|
||||||
|
'elasticfleet',
|
||||||
'firewall',
|
'firewall',
|
||||||
'manager',
|
'manager',
|
||||||
'idstools',
|
'idstools',
|
||||||
@@ -160,10 +145,9 @@
|
|||||||
'utility',
|
'utility',
|
||||||
'schedule',
|
'schedule',
|
||||||
'soctopus',
|
'soctopus',
|
||||||
'docker_clean',
|
'docker_clean'
|
||||||
'learn'
|
|
||||||
],
|
],
|
||||||
'so-node': [
|
'so-searchnode': [
|
||||||
'ssl',
|
'ssl',
|
||||||
'nginx',
|
'nginx',
|
||||||
'telegraf',
|
'telegraf',
|
||||||
@@ -180,9 +164,9 @@
|
|||||||
'nginx',
|
'nginx',
|
||||||
'telegraf',
|
'telegraf',
|
||||||
'influxdb',
|
'influxdb',
|
||||||
'grafana',
|
|
||||||
'soc',
|
'soc',
|
||||||
'kratos',
|
'kratos',
|
||||||
|
'elasticfleet',
|
||||||
'firewall',
|
'firewall',
|
||||||
'idstools',
|
'idstools',
|
||||||
'suricata.manager',
|
'suricata.manager',
|
||||||
@@ -193,8 +177,7 @@
|
|||||||
'schedule',
|
'schedule',
|
||||||
'soctopus',
|
'soctopus',
|
||||||
'tcpreplay',
|
'tcpreplay',
|
||||||
'docker_clean',
|
'docker_clean'
|
||||||
'learn'
|
|
||||||
],
|
],
|
||||||
'so-sensor': [
|
'so-sensor': [
|
||||||
'ssl',
|
'ssl',
|
||||||
@@ -204,8 +187,6 @@
|
|||||||
'pcap',
|
'pcap',
|
||||||
'suricata',
|
'suricata',
|
||||||
'healthcheck',
|
'healthcheck',
|
||||||
'wazuh',
|
|
||||||
'filebeat',
|
|
||||||
'schedule',
|
'schedule',
|
||||||
'tcpreplay',
|
'tcpreplay',
|
||||||
'docker_clean'
|
'docker_clean'
|
||||||
@@ -221,26 +202,10 @@
|
|||||||
],
|
],
|
||||||
}, grain='role') %}
|
}, grain='role') %}
|
||||||
|
|
||||||
{% if FILEBEAT and grains.role in ['so-helixsensor', 'so-eval', 'so-manager', 'so-standalone', 'so-node', 'so-managersearch', 'so-heavynode', 'so-import', 'so-receiver'] %}
|
{% if (PLAYBOOK != 0) and grains.role in ['so-eval', 'so-manager', 'so-managersearch', 'so-standalone'] %}
|
||||||
{% do allowed_states.append('filebeat') %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if ((FLEETMANAGER or FLEETNODE) or PLAYBOOK != 0) and grains.role in ['so-eval', 'so-manager', 'so-managersearch', 'so-standalone'] %}
|
|
||||||
{% do allowed_states.append('mysql') %}
|
{% do allowed_states.append('mysql') %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if (FLEETMANAGER or FLEETNODE) and grains.role in ['so-sensor', 'so-eval', 'so-manager', 'so-standalone', 'so-node', 'so-managersearch', 'so-heavynode', 'so-receiver'] %}
|
|
||||||
{% do allowed_states.append('fleet.install_package') %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if (FLEETMANAGER or FLEETNODE) and grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch', 'so-heavynode'] %}
|
|
||||||
{% do allowed_states.append('fleet') %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if (FLEETMANAGER or FLEETNODE) and grains.role in ['so-eval'] %}
|
|
||||||
{% do allowed_states.append('redis') %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{%- if ZEEKVER != 'SURICATA' and grains.role in ['so-sensor', 'so-eval', 'so-standalone', 'so-heavynode'] %}
|
{%- if ZEEKVER != 'SURICATA' and grains.role in ['so-sensor', 'so-eval', 'so-standalone', 'so-heavynode'] %}
|
||||||
{% do allowed_states.append('zeek') %}
|
{% do allowed_states.append('zeek') %}
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
@@ -249,11 +214,7 @@
|
|||||||
{% do allowed_states.append('strelka') %}
|
{% do allowed_states.append('strelka') %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if WAZUH and grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-node', 'so-managersearch', 'so-heavynode', 'so-receiver','so-idh']%}
|
{% if ELASTICSEARCH and grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-import'] %}
|
||||||
{% do allowed_states.append('wazuh') %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if ELASTICSEARCH and grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-node', 'so-managersearch', 'so-heavynode', 'so-import'] %}
|
|
||||||
{% do allowed_states.append('elasticsearch') %}
|
{% do allowed_states.append('elasticsearch') %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@@ -266,7 +227,7 @@
|
|||||||
{% do allowed_states.append('kibana.secrets') %}
|
{% do allowed_states.append('kibana.secrets') %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if grains.role in ['so-eval', 'so-standalone', 'so-node', 'so-managersearch', 'so-heavynode', 'so-manager'] %}
|
{% if grains.role in ['so-eval', 'so-standalone', 'so-managersearch', 'so-heavynode', 'so-manager'] %}
|
||||||
{% do allowed_states.append('curator') %}
|
{% do allowed_states.append('curator') %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@@ -282,15 +243,7 @@
|
|||||||
{% do allowed_states.append('redis') %}
|
{% do allowed_states.append('redis') %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if (FREQSERVER !=0) and grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch'] %}
|
{% if LOGSTASH and grains.role in ['so-helixsensor', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-receiver'] %}
|
||||||
{% do allowed_states.append('freqserver') %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if (DOMAINSTATS !=0) and grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch'] %}
|
|
||||||
{% do allowed_states.append('domainstats') %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if LOGSTASH and grains.role in ['so-helixsensor', 'so-manager', 'so-standalone', 'so-node', 'so-managersearch', 'so-heavynode', 'so-receiver'] %}
|
|
||||||
{% do allowed_states.append('logstash') %}
|
{% do allowed_states.append('logstash') %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@@ -298,13 +251,6 @@
|
|||||||
{% do allowed_states.append('redis') %}
|
{% do allowed_states.append('redis') %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if grains.os == 'CentOS' %}
|
|
||||||
{% if not ISAIRGAP %}
|
|
||||||
{% do allowed_states.append('yum') %}
|
|
||||||
{% endif %}
|
|
||||||
{% do allowed_states.append('yum.packages') %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{# all nodes on the right salt version can run the following states #}
|
{# all nodes on the right salt version can run the following states #}
|
||||||
{% do allowed_states.append('common') %}
|
{% do allowed_states.append('common') %}
|
||||||
{% do allowed_states.append('patch.os.schedule') %}
|
{% do allowed_states.append('patch.os.schedule') %}
|
||||||
|
|||||||
33
salt/backup/config_backup.sls
Normal file
33
salt/backup/config_backup.sls
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{% from 'backup/map.jinja' import BACKUP_MERGED %}
|
||||||
|
|
||||||
|
# Lock permissions on the backup directory
|
||||||
|
backupdir:
|
||||||
|
file.directory:
|
||||||
|
- name: /nsm/backup
|
||||||
|
- user: 0
|
||||||
|
- group: 0
|
||||||
|
- makedirs: True
|
||||||
|
- mode: 700
|
||||||
|
|
||||||
|
config_backup_script:
|
||||||
|
file.managed:
|
||||||
|
- name: /usr/sbin/so-config-backup
|
||||||
|
- user: root
|
||||||
|
- group: root
|
||||||
|
- mode: 755
|
||||||
|
- template: jinja
|
||||||
|
- source: salt://backup/tools/sbin/so-config-backup.jinja
|
||||||
|
- defaults:
|
||||||
|
BACKUPLOCATIONS: {{ BACKUP_MERGED.locations }}
|
||||||
|
DESTINATION: {{ BACKUP_MERGED.destination }}
|
||||||
|
|
||||||
|
# Add config backup
|
||||||
|
so_config_backup:
|
||||||
|
cron.present:
|
||||||
|
- name: /usr/sbin/so-config-backup > /dev/null 2>&1
|
||||||
|
- user: root
|
||||||
|
- minute: '1'
|
||||||
|
- hour: '0'
|
||||||
|
- daymonth: '*'
|
||||||
|
- month: '*'
|
||||||
|
- dayweek: '*'
|
||||||
7
salt/backup/defaults.yaml
Normal file
7
salt/backup/defaults.yaml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
backup:
|
||||||
|
locations:
|
||||||
|
- /opt/so/saltstack/local
|
||||||
|
- /etc/pki
|
||||||
|
- /etc/salt
|
||||||
|
- /nsm/kratos
|
||||||
|
destination: "/nsm/backup"
|
||||||
2
salt/backup/map.jinja
Normal file
2
salt/backup/map.jinja
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
{% import_yaml 'backup/defaults.yaml' as BACKUP_DEFAULTS %}
|
||||||
|
{% set BACKUP_MERGED = salt['pillar.get']('backup', BACKUP_DEFAULTS.backup, merge=true, merge_nested_lists=true) %}
|
||||||
10
salt/backup/soc_backup.yaml
Normal file
10
salt/backup/soc_backup.yaml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
backup:
|
||||||
|
locations:
|
||||||
|
description: List of locations to back up to the destination.
|
||||||
|
helpLink: backup.html
|
||||||
|
global: True
|
||||||
|
destination:
|
||||||
|
description: Directory to store the configuration backups in.
|
||||||
|
helpLink: backup.html
|
||||||
|
global: True
|
||||||
|
|
||||||
37
salt/backup/tools/sbin/so-config-backup.jinja
Executable file
37
salt/backup/tools/sbin/so-config-backup.jinja
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
TODAY=$(date '+%Y_%m_%d')
|
||||||
|
BACKUPDIR={{ DESTINATION }}
|
||||||
|
BACKUPFILE="$BACKUPDIR/so-config-backup-$TODAY.tar"
|
||||||
|
MAXBACKUPS=7
|
||||||
|
|
||||||
|
# Create backup dir if it does not exist
|
||||||
|
mkdir -p /nsm/backup
|
||||||
|
|
||||||
|
# If we haven't already written a backup file for today, let's do so
|
||||||
|
if [ ! -f $BACKUPFILE ]; then
|
||||||
|
|
||||||
|
# Create empty backup file
|
||||||
|
tar -cf $BACKUPFILE -T /dev/null
|
||||||
|
|
||||||
|
# Loop through all paths defined in global.sls, and append them to backup file
|
||||||
|
{%- for LOCATION in BACKUPLOCATIONS %}
|
||||||
|
tar -rf $BACKUPFILE {{ LOCATION }}
|
||||||
|
{%- endfor %}
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find oldest backup files and remove them
|
||||||
|
NUMBACKUPS=$(find /nsm/backup/ -type f -name "so-config-backup*" | wc -l)
|
||||||
|
while [ "$NUMBACKUPS" -gt "$MAXBACKUPS" ]; do
|
||||||
|
OLDESTBACKUP=$(find /nsm/backup/ -type f -name "so-config-backup*" -type f -printf '%T+ %p\n' | sort | head -n 1 | awk -F" " '{print $2}')
|
||||||
|
rm -f $OLDESTBACKUP
|
||||||
|
NUMBACKUPS=$(find /nsm/backup/ -type f -name "so-config-backup*" | wc -l)
|
||||||
|
done
|
||||||
4
salt/bpf/defaults.yaml
Normal file
4
salt/bpf/defaults.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
bpf:
|
||||||
|
pcap: []
|
||||||
|
suricata: []
|
||||||
|
zeek: []
|
||||||
4
salt/bpf/pcap.map.jinja
Normal file
4
salt/bpf/pcap.map.jinja
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{% import_yaml 'bpf/defaults.yaml' as BPFDEFAULTS %}
|
||||||
|
{% set BPFMERGED = salt['pillar.get']('bpf', BPFDEFAULTS.bpf, merge=True) %}
|
||||||
|
|
||||||
|
{% set PCAPBPF = BPFMERGED.pcap %}
|
||||||
16
salt/bpf/soc_bpf.yaml
Normal file
16
salt/bpf/soc_bpf.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
bpf:
|
||||||
|
pcap:
|
||||||
|
description: List of BPF filters to apply to PCAP.
|
||||||
|
multiline: True
|
||||||
|
forcedType: "[]string"
|
||||||
|
helpLink: bpf.html
|
||||||
|
suricata:
|
||||||
|
description: List of BPF filters to apply to Suricata.
|
||||||
|
multiline: True
|
||||||
|
forcedType: "[]string"
|
||||||
|
helpLink: bpf.html
|
||||||
|
zeek:
|
||||||
|
description: List of BPF filters to apply to Zeek.
|
||||||
|
multiline: True
|
||||||
|
forcedType: "[]string"
|
||||||
|
helpLink: bpf.html
|
||||||
4
salt/bpf/suricata.map.jinja
Normal file
4
salt/bpf/suricata.map.jinja
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{% import_yaml 'bpf/defaults.yaml' as BPFDEFAULTS %}
|
||||||
|
{% set BPFMERGED = salt['pillar.get']('bpf', BPFDEFAULTS.bpf, merge=True) %}
|
||||||
|
|
||||||
|
{% set SURICATABPF = BPFMERGED.suricata %}
|
||||||
4
salt/bpf/zeek.map.jinja
Normal file
4
salt/bpf/zeek.map.jinja
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{% import_yaml 'bpf/defaults.yaml' as BPFDEFAULTS %}
|
||||||
|
{% set BPFMERGED = salt['pillar.get']('bpf', BPFDEFAULTS.bpf, merge=True) %}
|
||||||
|
|
||||||
|
{% set ZEEKBPF = BPFMERGED.zeek %}
|
||||||
@@ -37,7 +37,7 @@ x509_signing_policies:
|
|||||||
- ST: Utah
|
- ST: Utah
|
||||||
- L: Salt Lake City
|
- L: Salt Lake City
|
||||||
- basicConstraints: "critical CA:false"
|
- basicConstraints: "critical CA:false"
|
||||||
- keyUsage: "critical keyEncipherment, digitalSignature"
|
- keyUsage: "critical keyEncipherment"
|
||||||
- subjectKeyIdentifier: hash
|
- subjectKeyIdentifier: hash
|
||||||
- authorityKeyIdentifier: keyid,issuer:always
|
- authorityKeyIdentifier: keyid,issuer:always
|
||||||
- extendedKeyUsage: serverAuth
|
- extendedKeyUsage: serverAuth
|
||||||
@@ -57,7 +57,7 @@ x509_signing_policies:
|
|||||||
- extendedKeyUsage: serverAuth
|
- extendedKeyUsage: serverAuth
|
||||||
- days_valid: 820
|
- days_valid: 820
|
||||||
- copypath: /etc/pki/issued_certs/
|
- copypath: /etc/pki/issued_certs/
|
||||||
fleet:
|
elasticfleet:
|
||||||
- minions: '*'
|
- minions: '*'
|
||||||
- signing_private_key: /etc/pki/ca.key
|
- signing_private_key: /etc/pki/ca.key
|
||||||
- signing_cert: /etc/pki/ca.crt
|
- signing_cert: /etc/pki/ca.crt
|
||||||
@@ -65,9 +65,8 @@ x509_signing_policies:
|
|||||||
- ST: Utah
|
- ST: Utah
|
||||||
- L: Salt Lake City
|
- L: Salt Lake City
|
||||||
- basicConstraints: "critical CA:false"
|
- basicConstraints: "critical CA:false"
|
||||||
- keyUsage: "critical keyEncipherment"
|
- keyUsage: "digitalSignature, nonRepudiation"
|
||||||
- subjectKeyIdentifier: hash
|
- subjectKeyIdentifier: hash
|
||||||
- authorityKeyIdentifier: keyid,issuer:always
|
- authorityKeyIdentifier: keyid,issuer:always
|
||||||
- extendedKeyUsage: serverAuth
|
|
||||||
- days_valid: 820
|
- days_valid: 820
|
||||||
- copypath: /etc/pki/issued_certs/
|
- copypath: /etc/pki/issued_certs/
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
{% from 'allowed_states.map.jinja' import allowed_states %}
|
{% from 'allowed_states.map.jinja' import allowed_states %}
|
||||||
{% if sls in allowed_states %}
|
{% if sls in allowed_states %}
|
||||||
|
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
||||||
|
|
||||||
|
|
||||||
include:
|
include:
|
||||||
- ca.dirs
|
- ca.dirs
|
||||||
|
|
||||||
{% set manager = salt['grains.get']('master') %}
|
|
||||||
/etc/salt/minion.d/signing_policies.conf:
|
/etc/salt/minion.d/signing_policies.conf:
|
||||||
file.managed:
|
file.managed:
|
||||||
- source: salt://ca/files/signing_policies.conf
|
- source: salt://ca/files/signing_policies.conf
|
||||||
@@ -25,7 +31,7 @@ pki_public_ca_crt:
|
|||||||
x509.certificate_managed:
|
x509.certificate_managed:
|
||||||
- name: /etc/pki/ca.crt
|
- name: /etc/pki/ca.crt
|
||||||
- signing_private_key: /etc/pki/ca.key
|
- signing_private_key: /etc/pki/ca.key
|
||||||
- CN: {{ manager }}
|
- CN: {{ GLOBALS.manager }}
|
||||||
- C: US
|
- C: US
|
||||||
- ST: Utah
|
- ST: Utah
|
||||||
- L: Salt Lake City
|
- L: Salt Lake City
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
{%- set DOCKERRANGE = salt['pillar.get']('docker:range', '172.17.0.0/24') %}
|
{%- set DOCKERRANGE = salt['pillar.get']('docker:range', '172.17.0.0/24') %}
|
||||||
{%- set DOCKERBIND = salt['pillar.get']('docker:bip', '172.17.0.1/24') %}
|
{%- set DOCKERBIND = salt['pillar.get']('docker:bip', '172.17.0.1/24') %}
|
||||||
{
|
{
|
||||||
"registry-mirrors": [ "https://:5000" ],
|
"registry-mirrors": [
|
||||||
|
"https://:5000"
|
||||||
|
],
|
||||||
"bip": "{{ DOCKERBIND }}",
|
"bip": "{{ DOCKERBIND }}",
|
||||||
"default-address-pools": [
|
"default-address-pools": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,16 +20,3 @@
|
|||||||
dateext
|
dateext
|
||||||
dateyesterday
|
dateyesterday
|
||||||
}
|
}
|
||||||
|
|
||||||
/opt/so/log/strelka/filecheck.log
|
|
||||||
{
|
|
||||||
daily
|
|
||||||
rotate 14
|
|
||||||
missingok
|
|
||||||
copytruncate
|
|
||||||
compress
|
|
||||||
create
|
|
||||||
extension .log
|
|
||||||
dateext
|
|
||||||
dateyesterday
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -3,4 +3,3 @@ filetype plugin indent on
|
|||||||
|
|
||||||
" Sets .sls files to use YAML syntax highlighting
|
" Sets .sls files to use YAML syntax highlighting
|
||||||
autocmd BufNewFile,BufRead *.sls set syntax=yaml
|
autocmd BufNewFile,BufRead *.sls set syntax=yaml
|
||||||
set number
|
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
{% from 'allowed_states.map.jinja' import allowed_states %}
|
{% from 'allowed_states.map.jinja' import allowed_states %}
|
||||||
{% if sls in allowed_states %}
|
{% if sls in allowed_states %}
|
||||||
|
|
||||||
{% set role = grains.id.split('_') | last %}
|
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
||||||
{% from 'elasticsearch/auth.map.jinja' import ELASTICAUTH with context %}
|
|
||||||
|
|
||||||
include:
|
include:
|
||||||
- common.soup_scripts
|
- common.soup_scripts
|
||||||
{% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch', 'so-import'] %}
|
- common.packages
|
||||||
|
{% if GLOBALS.role in GLOBALS.manager_roles %}
|
||||||
- manager.elasticsearch # needed for elastic_curl_config state
|
- manager.elasticsearch # needed for elastic_curl_config state
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@@ -15,11 +15,6 @@ rmvariablesfile:
|
|||||||
file.absent:
|
file.absent:
|
||||||
- name: /tmp/variables.txt
|
- name: /tmp/variables.txt
|
||||||
|
|
||||||
dockergroup:
|
|
||||||
group.present:
|
|
||||||
- name: docker
|
|
||||||
- gid: 920
|
|
||||||
|
|
||||||
# Add socore Group
|
# Add socore Group
|
||||||
socoregroup:
|
socoregroup:
|
||||||
group.present:
|
group.present:
|
||||||
@@ -88,91 +83,6 @@ vimconfig:
|
|||||||
- source: salt://common/files/vimrc
|
- source: salt://common/files/vimrc
|
||||||
- replace: False
|
- replace: False
|
||||||
|
|
||||||
# Install common packages
|
|
||||||
{% if grains['os'] != 'CentOS' %}
|
|
||||||
commonpkgs:
|
|
||||||
pkg.installed:
|
|
||||||
- skip_suggestions: True
|
|
||||||
- pkgs:
|
|
||||||
- apache2-utils
|
|
||||||
- wget
|
|
||||||
- ntpdate
|
|
||||||
- jq
|
|
||||||
- python3-docker
|
|
||||||
- curl
|
|
||||||
- ca-certificates
|
|
||||||
- software-properties-common
|
|
||||||
- apt-transport-https
|
|
||||||
- openssl
|
|
||||||
- netcat
|
|
||||||
- python3-mysqldb
|
|
||||||
- sqlite3
|
|
||||||
- libssl-dev
|
|
||||||
- python3-dateutil
|
|
||||||
- python3-m2crypto
|
|
||||||
- python3-packaging
|
|
||||||
- python3-lxml
|
|
||||||
- git
|
|
||||||
- vim
|
|
||||||
|
|
||||||
heldpackages:
|
|
||||||
pkg.installed:
|
|
||||||
- pkgs:
|
|
||||||
{% if grains['oscodename'] == 'bionic' %}
|
|
||||||
- containerd.io: 1.4.4-1
|
|
||||||
- docker-ce: 5:20.10.5~3-0~ubuntu-bionic
|
|
||||||
- docker-ce-cli: 5:20.10.5~3-0~ubuntu-bionic
|
|
||||||
- docker-ce-rootless-extras: 5:20.10.5~3-0~ubuntu-bionic
|
|
||||||
{% elif grains['oscodename'] == 'focal' %}
|
|
||||||
- containerd.io: 1.4.9-1
|
|
||||||
- docker-ce: 5:20.10.8~3-0~ubuntu-focal
|
|
||||||
- docker-ce-cli: 5:20.10.5~3-0~ubuntu-focal
|
|
||||||
- docker-ce-rootless-extras: 5:20.10.5~3-0~ubuntu-focal
|
|
||||||
{% endif %}
|
|
||||||
- hold: True
|
|
||||||
- update_holds: True
|
|
||||||
|
|
||||||
{% else %}
|
|
||||||
commonpkgs:
|
|
||||||
pkg.installed:
|
|
||||||
- skip_suggestions: True
|
|
||||||
- pkgs:
|
|
||||||
- wget
|
|
||||||
- ntpdate
|
|
||||||
- bind-utils
|
|
||||||
- jq
|
|
||||||
- tcpdump
|
|
||||||
- httpd-tools
|
|
||||||
- net-tools
|
|
||||||
- curl
|
|
||||||
- sqlite
|
|
||||||
- mariadb-devel
|
|
||||||
- nmap-ncat
|
|
||||||
- python3
|
|
||||||
- python36-docker
|
|
||||||
- python36-dateutil
|
|
||||||
- python36-m2crypto
|
|
||||||
- python36-packaging
|
|
||||||
- python36-lxml
|
|
||||||
- yum-utils
|
|
||||||
- device-mapper-persistent-data
|
|
||||||
- lvm2
|
|
||||||
- openssl
|
|
||||||
- git
|
|
||||||
- vim-enhanced
|
|
||||||
|
|
||||||
heldpackages:
|
|
||||||
pkg.installed:
|
|
||||||
- pkgs:
|
|
||||||
- containerd.io: 1.4.4-3.1.el7
|
|
||||||
- docker-ce: 3:20.10.5-3.el7
|
|
||||||
- docker-ce-cli: 1:20.10.5-3.el7
|
|
||||||
- docker-ce-rootless-extras: 20.10.5-3.el7
|
|
||||||
- python36-mysql: 1.3.12-2.el7
|
|
||||||
- hold: True
|
|
||||||
- update_holds: True
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
# Always keep these packages up to date
|
# Always keep these packages up to date
|
||||||
|
|
||||||
alwaysupdated:
|
alwaysupdated:
|
||||||
@@ -187,7 +97,6 @@ alwaysupdated:
|
|||||||
Etc/UTC:
|
Etc/UTC:
|
||||||
timezone.system
|
timezone.system
|
||||||
|
|
||||||
{% if salt['pillar.get']('elasticsearch:auth:enabled', False) %}
|
|
||||||
elastic_curl_config:
|
elastic_curl_config:
|
||||||
file.managed:
|
file.managed:
|
||||||
- name: /opt/so/conf/elasticsearch/curl.config
|
- name: /opt/so/conf/elasticsearch/curl.config
|
||||||
@@ -195,11 +104,10 @@ elastic_curl_config:
|
|||||||
- mode: 600
|
- mode: 600
|
||||||
- show_changes: False
|
- show_changes: False
|
||||||
- makedirs: True
|
- makedirs: True
|
||||||
{% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch', 'so-import'] %}
|
{% if GLOBALS.role in GLOBALS.manager_roles %}
|
||||||
- require:
|
- require:
|
||||||
- file: elastic_curl_config_distributed
|
- file: elastic_curl_config_distributed
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
# Sync some Utilities
|
# Sync some Utilities
|
||||||
utilsyncscripts:
|
utilsyncscripts:
|
||||||
@@ -210,17 +118,20 @@ utilsyncscripts:
|
|||||||
- file_mode: 755
|
- file_mode: 755
|
||||||
- template: jinja
|
- template: jinja
|
||||||
- source: salt://common/tools/sbin
|
- source: salt://common/tools/sbin
|
||||||
- defaults:
|
|
||||||
ELASTICCURL: 'curl'
|
|
||||||
- context:
|
|
||||||
ELASTICCURL: {{ ELASTICAUTH.elasticcurl }}
|
|
||||||
- exclude_pat:
|
- exclude_pat:
|
||||||
- so-common
|
- so-common
|
||||||
- so-firewall
|
- so-firewall
|
||||||
- so-image-common
|
- so-image-common
|
||||||
- soup
|
- soup
|
||||||
|
- so-status
|
||||||
|
|
||||||
{% if role in ['eval', 'standalone', 'sensor', 'heavynode'] %}
|
so-status_script:
|
||||||
|
file.managed:
|
||||||
|
- name: /usr/sbin/so-status
|
||||||
|
- source: salt://common/tools/sbin/so-status
|
||||||
|
- mode: 755
|
||||||
|
|
||||||
|
{% if GLOBALS.role in GLOBALS.sensor_roles %}
|
||||||
# Add sensor cleanup
|
# Add sensor cleanup
|
||||||
/usr/sbin/so-sensor-clean:
|
/usr/sbin/so-sensor-clean:
|
||||||
cron.present:
|
cron.present:
|
||||||
@@ -289,9 +200,17 @@ sostatus_log:
|
|||||||
- name: /opt/so/log/sostatus/status.log
|
- name: /opt/so/log/sostatus/status.log
|
||||||
- mode: 644
|
- mode: 644
|
||||||
|
|
||||||
|
common_pip_dependencies:
|
||||||
|
pip.installed:
|
||||||
|
- user: root
|
||||||
|
- pkgs:
|
||||||
|
- rich
|
||||||
|
- target: /usr/lib64/python3.6/site-packages
|
||||||
|
|
||||||
# Install sostatus check cron
|
# Install sostatus check cron
|
||||||
'/usr/sbin/so-status -q; echo $? > /opt/so/log/sostatus/status.log 2>&1':
|
sostatus_check_cron:
|
||||||
cron.present:
|
cron.present:
|
||||||
|
- name: '/usr/sbin/so-status -j > /opt/so/log/sostatus/status.log 2>&1'
|
||||||
- user: root
|
- user: root
|
||||||
- minute: '*/1'
|
- minute: '*/1'
|
||||||
- hour: '*'
|
- hour: '*'
|
||||||
@@ -299,36 +218,13 @@ sostatus_log:
|
|||||||
- month: '*'
|
- month: '*'
|
||||||
- dayweek: '*'
|
- dayweek: '*'
|
||||||
|
|
||||||
{% if role in ['eval', 'manager', 'managersearch', 'standalone'] %}
|
remove_post_setup_cron:
|
||||||
# Install cron job to determine size of influxdb for telegraf
|
cron.absent:
|
||||||
'du -s -k /nsm/influxdb | cut -f1 > /opt/so/log/telegraf/influxdb_size.log 2>&1':
|
- name: 'salt-call state.highstate'
|
||||||
cron.present:
|
- identifier: post_setup_cron
|
||||||
- user: root
|
|
||||||
- minute: '*/1'
|
|
||||||
- hour: '*'
|
|
||||||
- daymonth: '*'
|
|
||||||
- month: '*'
|
|
||||||
- dayweek: '*'
|
|
||||||
|
|
||||||
# Lock permissions on the backup directory
|
{% if GLOBALS.role not in ['eval', 'manager', 'managersearch', 'standalone'] %}
|
||||||
backupdir:
|
|
||||||
file.directory:
|
|
||||||
- name: /nsm/backup
|
|
||||||
- user: 0
|
|
||||||
- group: 0
|
|
||||||
- makedirs: True
|
|
||||||
- mode: 700
|
|
||||||
|
|
||||||
# Add config backup
|
|
||||||
/usr/sbin/so-config-backup > /dev/null 2>&1:
|
|
||||||
cron.present:
|
|
||||||
- user: root
|
|
||||||
- minute: '1'
|
|
||||||
- hour: '0'
|
|
||||||
- daymonth: '*'
|
|
||||||
- month: '*'
|
|
||||||
- dayweek: '*'
|
|
||||||
{% else %}
|
|
||||||
soversionfile:
|
soversionfile:
|
||||||
file.managed:
|
file.managed:
|
||||||
- name: /etc/soversion
|
- name: /etc/soversion
|
||||||
@@ -338,34 +234,8 @@ soversionfile:
|
|||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
# Manager daemon.json
|
{% if GLOBALS.so_model %}
|
||||||
docker_daemon:
|
{% if GLOBALS.os == 'Rocky' %}
|
||||||
file.managed:
|
|
||||||
- source: salt://common/files/daemon.json
|
|
||||||
- name: /etc/docker/daemon.json
|
|
||||||
- template: jinja
|
|
||||||
|
|
||||||
# Make sure Docker is always running
|
|
||||||
docker:
|
|
||||||
service.running:
|
|
||||||
- enable: True
|
|
||||||
- watch:
|
|
||||||
- file: docker_daemon
|
|
||||||
|
|
||||||
# Reserve OS ports for Docker proxy in case boot settings are not already applied/present
|
|
||||||
# 55000 = Wazuh, 57314 = Strelka, 47760-47860 = Zeek
|
|
||||||
dockerapplyports:
|
|
||||||
cmd.run:
|
|
||||||
- name: if [ ! -s /etc/sysctl.d/99-reserved-ports.conf ]; then sysctl -w net.ipv4.ip_local_reserved_ports="55000,57314,47760-47860"; fi
|
|
||||||
|
|
||||||
# Reserve OS ports for Docker proxy
|
|
||||||
dockerreserveports:
|
|
||||||
file.managed:
|
|
||||||
- source: salt://common/files/99-reserved-ports.conf
|
|
||||||
- name: /etc/sysctl.d/99-reserved-ports.conf
|
|
||||||
|
|
||||||
{% if salt['grains.get']('sosmodel', '') %}
|
|
||||||
{% if grains['os'] == 'CentOS' %}
|
|
||||||
# Install Raid tools
|
# Install Raid tools
|
||||||
raidpkgs:
|
raidpkgs:
|
||||||
pkg.installed:
|
pkg.installed:
|
||||||
@@ -376,8 +246,9 @@ raidpkgs:
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
# Install raid check cron
|
# Install raid check cron
|
||||||
/usr/sbin/so-raid-status > /dev/null 2>&1:
|
so_raid_status:
|
||||||
cron.present:
|
cron.present:
|
||||||
|
- name: '/usr/sbin/so-raid-status > /dev/null 2>&1'
|
||||||
- user: root
|
- user: root
|
||||||
- minute: '*/15'
|
- minute: '*/15'
|
||||||
- hour: '*'
|
- hour: '*'
|
||||||
|
|||||||
56
salt/common/packages.sls
Normal file
56
salt/common/packages.sls
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
||||||
|
|
||||||
|
{% if GLOBALS.os == 'Ubuntu' %}
|
||||||
|
commonpkgs:
|
||||||
|
pkg.installed:
|
||||||
|
- skip_suggestions: True
|
||||||
|
- pkgs:
|
||||||
|
- chrony
|
||||||
|
- apache2-utils
|
||||||
|
- wget
|
||||||
|
- ntpdate
|
||||||
|
- jq
|
||||||
|
- python3-docker
|
||||||
|
- curl
|
||||||
|
- ca-certificates
|
||||||
|
- software-properties-common
|
||||||
|
- apt-transport-https
|
||||||
|
- openssl
|
||||||
|
- netcat
|
||||||
|
- python3-mysqldb
|
||||||
|
- sqlite3
|
||||||
|
- libssl-dev
|
||||||
|
- python3-dateutil
|
||||||
|
- python3-m2crypto
|
||||||
|
- python3-mysqldb
|
||||||
|
- python3-packaging
|
||||||
|
- python3-lxml
|
||||||
|
- git
|
||||||
|
- vim
|
||||||
|
{% elif GLOBALS.os == 'Rocky' %}
|
||||||
|
commonpkgs:
|
||||||
|
pkg.installed:
|
||||||
|
- skip_suggestions: True
|
||||||
|
- pkgs:
|
||||||
|
- wget
|
||||||
|
- jq
|
||||||
|
- tcpdump
|
||||||
|
- httpd-tools
|
||||||
|
- net-tools
|
||||||
|
- curl
|
||||||
|
- sqlite
|
||||||
|
- mariadb-devel
|
||||||
|
- python3-dnf-plugin-versionlock
|
||||||
|
- nmap-ncat
|
||||||
|
- yum-utils
|
||||||
|
- device-mapper-persistent-data
|
||||||
|
- lvm2
|
||||||
|
- openssl
|
||||||
|
- git
|
||||||
|
- python3-docker
|
||||||
|
- python3-m2crypto
|
||||||
|
- rsync
|
||||||
|
- python3-rich
|
||||||
|
- python3-watchdog
|
||||||
|
- unzip
|
||||||
|
{% endif %}
|
||||||
@@ -1,207 +1,11 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import ipaddress
|
echo "Please use the Configuration section in SOC to allow hosts"
|
||||||
import textwrap
|
echo ""
|
||||||
import os
|
echo "If you need command line options on adding hosts please run so-firewall"
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
import argparse
|
|
||||||
import re
|
|
||||||
from lxml import etree as ET
|
|
||||||
from datetime import datetime as dt
|
|
||||||
from datetime import timezone as tz
|
|
||||||
|
|
||||||
|
|
||||||
LOCAL_SALT_DIR='/opt/so/saltstack/local'
|
|
||||||
WAZUH_CONF='/nsm/wazuh/etc/ossec.conf'
|
|
||||||
VALID_ROLES = {
|
|
||||||
'a': { 'role': 'analyst','desc': 'Analyst - 80/tcp, 443/tcp' },
|
|
||||||
'b': { 'role': 'beats_endpoint', 'desc': 'Logstash Beat - 5044/tcp' },
|
|
||||||
'e': { 'role': 'elasticsearch_rest', 'desc': 'Elasticsearch REST API - 9200/tcp' },
|
|
||||||
'f': { 'role': 'strelka_frontend', 'desc': 'Strelka frontend - 57314/tcp' },
|
|
||||||
'o': { 'role': 'osquery_endpoint', 'desc': 'Osquery endpoint - 8090/tcp' },
|
|
||||||
's': { 'role': 'syslog', 'desc': 'Syslog device - 514/tcp/udp' },
|
|
||||||
'w': { 'role': 'wazuh_agent', 'desc': 'Wazuh agent - 1514/tcp/udp' },
|
|
||||||
'p': { 'role': 'wazuh_api', 'desc': 'Wazuh API - 55000/tcp' },
|
|
||||||
'r': { 'role': 'wazuh_authd', 'desc': 'Wazuh registration service - 1515/tcp' }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def validate_ip_cidr(ip_cidr: str) -> bool:
|
|
||||||
try:
|
|
||||||
ipaddress.ip_address(ip_cidr)
|
|
||||||
except ValueError:
|
|
||||||
try:
|
|
||||||
ipaddress.ip_network(ip_cidr)
|
|
||||||
except ValueError:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def role_prompt() -> str:
|
|
||||||
print()
|
|
||||||
print('Choose the role for the IP or Range you would like to allow')
|
|
||||||
print()
|
|
||||||
for role in VALID_ROLES:
|
|
||||||
print(f'[{role}] - {VALID_ROLES[role]["desc"]}')
|
|
||||||
print()
|
|
||||||
role = input('Please enter your selection: ')
|
|
||||||
if role in VALID_ROLES.keys():
|
|
||||||
return VALID_ROLES[role]['role']
|
|
||||||
else:
|
|
||||||
print(f'Invalid role \'{role}\', please try again.', file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
def ip_prompt() -> str:
|
|
||||||
ip = input('Enter a single ip address or range to allow (ex: 10.10.10.10 or 10.10.0.0/16): ')
|
|
||||||
if validate_ip_cidr(ip):
|
|
||||||
return ip
|
|
||||||
else:
|
|
||||||
print(f'Invalid IP address or CIDR block \'{ip}\', please try again.', file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
def wazuh_enabled() -> bool:
|
|
||||||
file = f'{LOCAL_SALT_DIR}/pillar/global.sls'
|
|
||||||
with open(file, 'r') as pillar:
|
|
||||||
if 'wazuh: 1' in pillar.read():
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def root_to_str(root: ET.ElementTree) -> str:
|
|
||||||
return ET.tostring(root, encoding='unicode', method='xml', xml_declaration=False, pretty_print=True)
|
|
||||||
|
|
||||||
|
|
||||||
def add_wl(ip):
|
|
||||||
parser = ET.XMLParser(remove_blank_text=True)
|
|
||||||
with open(WAZUH_CONF, 'rb') as wazuh_conf:
|
|
||||||
tree = ET.parse(wazuh_conf, parser)
|
|
||||||
root = tree.getroot()
|
|
||||||
|
|
||||||
source_comment = ET.Comment(f'Address {ip} added by /usr/sbin/so-allow on {dt.utcnow().replace(tzinfo=tz.utc).strftime("%a %b %e %H:%M:%S %Z %Y")}')
|
|
||||||
new_global = ET.Element("global")
|
|
||||||
new_wl = ET.SubElement(new_global, 'white_list')
|
|
||||||
new_wl.text = ip
|
|
||||||
|
|
||||||
root.append(source_comment)
|
|
||||||
root.append(new_global)
|
|
||||||
|
|
||||||
with open(WAZUH_CONF, 'w') as add_out:
|
|
||||||
add_out.write(root_to_str(root))
|
|
||||||
|
|
||||||
|
|
||||||
def apply(role: str, ip: str) -> int:
|
|
||||||
firewall_cmd = ['so-firewall', 'includehost', role, ip]
|
|
||||||
salt_cmd = ['salt-call', 'state.apply', '-l', 'quiet', 'firewall', 'queue=True']
|
|
||||||
restart_wazuh_cmd = ['so-wazuh-restart']
|
|
||||||
print(f'Adding {ip} to the {role} role. This can take a few seconds...')
|
|
||||||
cmd = subprocess.run(firewall_cmd)
|
|
||||||
if cmd.returncode == 0:
|
|
||||||
cmd = subprocess.run(salt_cmd, stdout=subprocess.DEVNULL)
|
|
||||||
else:
|
|
||||||
return cmd.returncode
|
|
||||||
if cmd.returncode == 0:
|
|
||||||
if wazuh_enabled() and role=='analyst':
|
|
||||||
try:
|
|
||||||
add_wl(ip)
|
|
||||||
print(f'Added whitelist entry for {ip} from {WAZUH_CONF}', file=sys.stderr)
|
|
||||||
except Exception as e:
|
|
||||||
print(f'Failed to add whitelist entry for {ip} from {WAZUH_CONF}', file=sys.stderr)
|
|
||||||
print(e)
|
|
||||||
return 1
|
|
||||||
print('Restarting OSSEC Server...')
|
|
||||||
cmd = subprocess.run(restart_wazuh_cmd)
|
|
||||||
else:
|
|
||||||
return cmd.returncode
|
|
||||||
else:
|
|
||||||
print(f'Commmand \'{" ".join(salt_cmd)}\' failed.', file=sys.stderr)
|
|
||||||
return cmd.returncode
|
|
||||||
if cmd.returncode != 0:
|
|
||||||
print('Failed to restart OSSEC server.')
|
|
||||||
return cmd.returncode
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
if os.geteuid() != 0:
|
|
||||||
print('You must run this script as root', file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
main_parser = argparse.ArgumentParser(
|
|
||||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
||||||
epilog=textwrap.dedent(f'''\
|
|
||||||
additional information:
|
|
||||||
To use this script in interactive mode call it with no arguments
|
|
||||||
'''
|
|
||||||
))
|
|
||||||
|
|
||||||
group = main_parser.add_argument_group(title='roles')
|
|
||||||
group.add_argument('-a', dest='roles', action='append_const', const=VALID_ROLES['a']['role'], help="Analyst - 80/tcp, 443/tcp")
|
|
||||||
group.add_argument('-b', dest='roles', action='append_const', const=VALID_ROLES['b']['role'], help="Logstash Beat - 5044/tcp")
|
|
||||||
group.add_argument('-e', dest='roles', action='append_const', const=VALID_ROLES['e']['role'], help="Elasticsearch REST API - 9200/tcp")
|
|
||||||
group.add_argument('-f', dest='roles', action='append_const', const=VALID_ROLES['f']['role'], help="Strelka frontend - 57314/tcp")
|
|
||||||
group.add_argument('-o', dest='roles', action='append_const', const=VALID_ROLES['o']['role'], help="Osquery endpoint - 8090/tcp")
|
|
||||||
group.add_argument('-s', dest='roles', action='append_const', const=VALID_ROLES['s']['role'], help="Syslog device - 514/tcp/udp")
|
|
||||||
group.add_argument('-w', dest='roles', action='append_const', const=VALID_ROLES['w']['role'], help="Wazuh agent - 1514/tcp/udp")
|
|
||||||
group.add_argument('-p', dest='roles', action='append_const', const=VALID_ROLES['p']['role'], help="Wazuh API - 55000/tcp")
|
|
||||||
group.add_argument('-r', dest='roles', action='append_const', const=VALID_ROLES['r']['role'], help="Wazuh registration service - 1515/tcp")
|
|
||||||
|
|
||||||
ip_g = main_parser.add_argument_group(title='allow')
|
|
||||||
ip_g.add_argument('-i', help="IP or CIDR block to disallow connections from, requires at least one role argument", metavar='', dest='ip')
|
|
||||||
|
|
||||||
args = main_parser.parse_args(sys.argv[1:])
|
|
||||||
|
|
||||||
if args.roles is None:
|
|
||||||
role = role_prompt()
|
|
||||||
ip = ip_prompt()
|
|
||||||
try:
|
|
||||||
return_code = apply(role, ip)
|
|
||||||
except Exception as e:
|
|
||||||
print(f'Unexpected exception occurred: {e}', file=sys.stderr)
|
|
||||||
return_code = e.errno
|
|
||||||
sys.exit(return_code)
|
|
||||||
elif args.roles is not None and args.ip is None:
|
|
||||||
if os.environ.get('IP') is None:
|
|
||||||
main_parser.print_help()
|
|
||||||
sys.exit(1)
|
|
||||||
else:
|
|
||||||
args.ip = os.environ['IP']
|
|
||||||
|
|
||||||
if validate_ip_cidr(args.ip):
|
|
||||||
try:
|
|
||||||
for role in args.roles:
|
|
||||||
return_code = apply(role, args.ip)
|
|
||||||
if return_code > 0:
|
|
||||||
break
|
|
||||||
except Exception as e:
|
|
||||||
print(f'Unexpected exception occurred: {e}', file=sys.stderr)
|
|
||||||
return_code = e.errno
|
|
||||||
else:
|
|
||||||
print(f'Invalid IP address or CIDR block \'{args.ip}\', please try again.', file=sys.stderr)
|
|
||||||
return_code = 1
|
|
||||||
|
|
||||||
sys.exit(return_code)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
try:
|
|
||||||
main()
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|||||||
@@ -1,27 +1,18 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
doc_workstation_url="https://docs.securityonion.net/en/2.3/analyst-vm.html"
|
{# we only want the script to install the workstation if it is Rocky -#}
|
||||||
{# we only want the script to install the workstation if it is CentOS -#}
|
{% if grains.os == 'Rocky' -%}
|
||||||
{% if grains.os == 'CentOS' -%}
|
|
||||||
{# if this is a manager -#}
|
{# if this is a manager -#}
|
||||||
{% if grains.master == grains.id.split('_')|first -%}
|
{% if grains.master == grains.id.split('_')|first -%}
|
||||||
|
|
||||||
source /usr/sbin/so-common
|
source /usr/sbin/so-common
|
||||||
|
doc_workstation_url="$DOC_BASE_URL/analyst-vm.html"
|
||||||
pillar_file="/opt/so/saltstack/local/pillar/minions/{{grains.id}}.sls"
|
pillar_file="/opt/so/saltstack/local/pillar/minions/{{grains.id}}.sls"
|
||||||
|
|
||||||
if [ -f "$pillar_file" ]; then
|
if [ -f "$pillar_file" ]; then
|
||||||
@@ -89,12 +80,12 @@ echo "Since this is not a manager, the pillar values to enable analyst workstati
|
|||||||
{#- endif if this is a manager #}
|
{#- endif if this is a manager #}
|
||||||
{% endif -%}
|
{% endif -%}
|
||||||
|
|
||||||
{#- if not CentOS #}
|
{#- if not Rocky #}
|
||||||
{%- else %}
|
{%- else %}
|
||||||
|
|
||||||
echo "The Analyst Workstation can only be installed on CentOS. Please view the documentation at $doc_workstation_url."
|
echo "The Analyst Workstation can only be installed on Rocky. Please view the documentation at $doc_workstation_url."
|
||||||
|
|
||||||
{#- endif grains.os == CentOS #}
|
{#- endif grains.os == Rocky #}
|
||||||
{% endif -%}
|
{% endif -%}
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|||||||
@@ -1,27 +1,25 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
DEFAULT_SALT_DIR=/opt/so/saltstack/default
|
DEFAULT_SALT_DIR=/opt/so/saltstack/default
|
||||||
|
DOC_BASE_URL="https://docs.securityonion.net/en/2.4"
|
||||||
|
|
||||||
|
if [ -z $NOROOT ]; then
|
||||||
# Check for prerequisites
|
# Check for prerequisites
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
echo "This script must be run using sudo!"
|
echo "This script must be run using sudo!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure /usr/sbin is in path
|
||||||
|
if ! echo "$PATH" | grep -q "/usr/sbin"; then
|
||||||
|
export PATH="$PATH:/usr/sbin"
|
||||||
|
fi
|
||||||
|
|
||||||
# Define a banner to separate sections
|
# Define a banner to separate sections
|
||||||
banner="========================================================================="
|
banner="========================================================================="
|
||||||
@@ -162,15 +160,12 @@ elastic_license() {
|
|||||||
|
|
||||||
read -r -d '' message <<- EOM
|
read -r -d '' message <<- EOM
|
||||||
\n
|
\n
|
||||||
Starting in Elastic Stack version 7.11, the Elastic Stack binaries are only available under the Elastic License:
|
Elastic Stack binaries and Security Onion components are only available under the Elastic License version 2 (ELv2):
|
||||||
https://securityonion.net/elastic-license
|
https://securityonion.net/license/
|
||||||
|
|
||||||
Please review the Elastic License:
|
Do you agree to the terms of ELv2?
|
||||||
https://www.elastic.co/licensing/elastic-license
|
|
||||||
|
|
||||||
Do you agree to the terms of the Elastic License?
|
If so, type AGREE to accept ELv2 and continue. Otherwise, press Enter to exit this program without making any changes.
|
||||||
|
|
||||||
If so, type AGREE to accept the Elastic License and continue. Otherwise, press Enter to exit this program without making any changes.
|
|
||||||
EOM
|
EOM
|
||||||
|
|
||||||
AGREED=$(whiptail --title "$whiptail_title" --inputbox \
|
AGREED=$(whiptail --title "$whiptail_title" --inputbox \
|
||||||
@@ -199,14 +194,14 @@ get_random_value() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
gpg_rpm_import() {
|
gpg_rpm_import() {
|
||||||
if [[ "$OS" == "centos" ]]; then
|
if [[ "$OS" == "rocky" ]]; then
|
||||||
if [[ "$WHATWOULDYOUSAYYAHDOHERE" == "setup" ]]; then
|
if [[ "$WHATWOULDYOUSAYYAHDOHERE" == "setup" ]]; then
|
||||||
local RPMKEYSLOC="../salt/repo/client/files/centos/keys"
|
local RPMKEYSLOC="../salt/repo/client/files/rocky/keys"
|
||||||
else
|
else
|
||||||
local RPMKEYSLOC="$UPDATE_DIR/salt/repo/client/files/centos/keys"
|
local RPMKEYSLOC="$UPDATE_DIR/salt/repo/client/files/rocky/keys"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RPMKEYS=('RPM-GPG-KEY-EPEL-7' 'GPG-KEY-WAZUH' 'docker.pub' 'SALTSTACK-GPG-KEY.pub' 'securityonion.pub')
|
RPMKEYS=('RPM-GPG-KEY-EPEL-9' 'SALTSTACK-GPG-KEY2.pub' 'docker.pub' 'securityonion.pub')
|
||||||
|
|
||||||
for RPMKEY in "${RPMKEYS[@]}"; do
|
for RPMKEY in "${RPMKEYS[@]}"; do
|
||||||
rpm --import $RPMKEYSLOC/$RPMKEY
|
rpm --import $RPMKEYSLOC/$RPMKEY
|
||||||
@@ -237,31 +232,17 @@ init_monitor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
is_manager_node() {
|
is_manager_node() {
|
||||||
# Check to see if this is a manager node
|
grep "role: so-" /etc/salt/grains | grep -E "manager|eval|managersearch|standalone|import" &> /dev/null
|
||||||
role=$(lookup_role)
|
|
||||||
is_single_node_grid && return 0
|
|
||||||
[ $role == 'manager' ] && return 0
|
|
||||||
[ $role == 'managersearch' ] && return 0
|
|
||||||
[ $role == 'helix' ] && return 0
|
|
||||||
return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
is_sensor_node() {
|
is_sensor_node() {
|
||||||
# Check to see if this is a sensor (forward) node
|
# Check to see if this is a sensor (forward) node
|
||||||
role=$(lookup_role)
|
|
||||||
is_single_node_grid && return 0
|
is_single_node_grid && return 0
|
||||||
[ $role == 'sensor' ] && return 0
|
grep "role: so-" /etc/salt/grains | grep -E "sensor|heavynode|helix" &> /dev/null
|
||||||
[ $role == 'heavynode' ] && return 0
|
|
||||||
[ $role == 'helix' ] && return 0
|
|
||||||
return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
is_single_node_grid() {
|
is_single_node_grid() {
|
||||||
role=$(lookup_role)
|
grep "role: so-" /etc/salt/grains | grep -E "eval|standalone|import" &> /dev/null
|
||||||
[ $role == 'eval' ] && return 0
|
|
||||||
[ $role == 'standalone' ] && return 0
|
|
||||||
[ $role == 'import' ] && return 0
|
|
||||||
return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lookup_bond_interfaces() {
|
lookup_bond_interfaces() {
|
||||||
@@ -392,8 +373,14 @@ run_check_net_err() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
salt_minion_count() {
|
||||||
|
local MINIONDIR="/opt/so/saltstack/local/pillar/minions"
|
||||||
|
MINIONCOUNT=$(ls -la $MINIONDIR/*.sls | grep -v adv_ | wc -l)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
set_cron_service_name() {
|
set_cron_service_name() {
|
||||||
if [[ "$OS" == "centos" ]]; then
|
if [[ "$OS" == "rocky" ]]; then
|
||||||
cron_service_name="crond"
|
cron_service_name="crond"
|
||||||
else
|
else
|
||||||
cron_service_name="cron"
|
cron_service_name="cron"
|
||||||
@@ -402,7 +389,7 @@ set_cron_service_name() {
|
|||||||
|
|
||||||
set_os() {
|
set_os() {
|
||||||
if [ -f /etc/redhat-release ]; then
|
if [ -f /etc/redhat-release ]; then
|
||||||
OS=centos
|
OS=rocky
|
||||||
else
|
else
|
||||||
OS=ubuntu
|
OS=ubuntu
|
||||||
fi
|
fi
|
||||||
@@ -518,6 +505,18 @@ valid_hostname() {
|
|||||||
[[ $hostname =~ ^[a-zA-Z0-9\-]+$ ]] && [[ $hostname != 'localhost' ]] && return 0 || return 1
|
[[ $hostname =~ ^[a-zA-Z0-9\-]+$ ]] && [[ $hostname != 'localhost' ]] && return 0 || return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
verify_ip4() {
|
||||||
|
local ip=$1
|
||||||
|
# Is this an IP or CIDR?
|
||||||
|
if grep -qP "^[^/]+/[^/]+$" <<< $ip; then
|
||||||
|
# Looks like a CIDR
|
||||||
|
valid_ip4_cidr_mask "$ip"
|
||||||
|
else
|
||||||
|
# We know this is not a CIDR - Is it an IP?
|
||||||
|
valid_ip4 "$ip"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
valid_ip4() {
|
valid_ip4() {
|
||||||
local ip=$1
|
local ip=$1
|
||||||
|
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
|
||||||
{% set BACKUPLOCATIONS = salt['pillar.get']('backup:locations', {}) %}
|
|
||||||
|
|
||||||
TODAY=$(date '+%Y_%m_%d')
|
|
||||||
BACKUPFILE="/nsm/backup/so-config-backup-$TODAY.tar"
|
|
||||||
MAXBACKUPS=7
|
|
||||||
|
|
||||||
# Create backup dir if it does not exist
|
|
||||||
mkdir -p /nsm/backup
|
|
||||||
|
|
||||||
# If we haven't already written a backup file for today, let's do so
|
|
||||||
if [ ! -f $BACKUPFILE ]; then
|
|
||||||
|
|
||||||
# Create empty backup file
|
|
||||||
tar -cf $BACKUPFILE -T /dev/null
|
|
||||||
|
|
||||||
# Loop through all paths defined in global.sls, and append them to backup file
|
|
||||||
{%- for LOCATION in BACKUPLOCATIONS %}
|
|
||||||
tar -rf $BACKUPFILE {{ LOCATION }}
|
|
||||||
{%- endfor %}
|
|
||||||
tar -rf $BACKUPFILE /etc/pki
|
|
||||||
tar -rf $BACKUPFILE /etc/salt
|
|
||||||
tar -rf $BACKUPFILE /nsm/kratos
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Find oldest backup files and remove them
|
|
||||||
NUMBACKUPS=$(find /nsm/backup/ -type f -name "so-config-backup*" | wc -l)
|
|
||||||
while [ "$NUMBACKUPS" -gt "$MAXBACKUPS" ]; do
|
|
||||||
OLDESTBACKUP=$(find /nsm/backup/ -type f -name "so-config-backup*" -type f -printf '%T+ %p\n' | sort | head -n 1 | awk -F" " '{print $2}')
|
|
||||||
rm -f $OLDESTBACKUP
|
|
||||||
NUMBACKUPS=$(find /nsm/backup/ -type f -name "so-config-backup*" | wc -l)
|
|
||||||
done
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
|
||||||
|
|
||||||
echo "TheHive and its components are no longer part of Security Onion"
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
|
||||||
|
|
||||||
echo "TheHive and its components are no longer part of Security Onion"
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
|
||||||
|
|
||||||
echo "TheHive and its components are no longer part of Security Onion"
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
|
||||||
|
|
||||||
echo "TheHive and its components are no longer part of Security Onion"
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
|
||||||
|
|
||||||
echo "TheHive and its components are no longer part of Security Onion"
|
|
||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import ipaddress
|
import ipaddress
|
||||||
import textwrap
|
import textwrap
|
||||||
@@ -27,17 +19,12 @@ from xml.dom import minidom
|
|||||||
|
|
||||||
|
|
||||||
LOCAL_SALT_DIR='/opt/so/saltstack/local'
|
LOCAL_SALT_DIR='/opt/so/saltstack/local'
|
||||||
WAZUH_CONF='/nsm/wazuh/etc/ossec.conf'
|
|
||||||
VALID_ROLES = {
|
VALID_ROLES = {
|
||||||
'a': { 'role': 'analyst','desc': 'Analyst - 80/tcp, 443/tcp' },
|
'a': { 'role': 'analyst','desc': 'Analyst - 80/tcp, 443/tcp' },
|
||||||
'b': { 'role': 'beats_endpoint', 'desc': 'Logstash Beat - 5044/tcp' },
|
'b': { 'role': 'beats_endpoint', 'desc': 'Logstash Beat - 5044/tcp' },
|
||||||
'e': { 'role': 'elasticsearch_rest', 'desc': 'Elasticsearch REST API - 9200/tcp' },
|
'e': { 'role': 'elasticsearch_rest', 'desc': 'Elasticsearch REST API - 9200/tcp' },
|
||||||
'f': { 'role': 'strelka_frontend', 'desc': 'Strelka frontend - 57314/tcp' },
|
'f': { 'role': 'strelka_frontend', 'desc': 'Strelka frontend - 57314/tcp' },
|
||||||
'o': { 'role': 'osquery_endpoint', 'desc': 'Osquery endpoint - 8090/tcp' },
|
|
||||||
's': { 'role': 'syslog', 'desc': 'Syslog device - 514/tcp/udp' },
|
's': { 'role': 'syslog', 'desc': 'Syslog device - 514/tcp/udp' },
|
||||||
'w': { 'role': 'wazuh_agent', 'desc': 'Wazuh agent - 1514/tcp/udp' },
|
|
||||||
'p': { 'role': 'wazuh_api', 'desc': 'Wazuh API - 55000/tcp' },
|
|
||||||
'r': { 'role': 'wazuh_authd', 'desc': 'Wazuh registration service - 1515/tcp' }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -76,73 +63,15 @@ def ip_prompt() -> str:
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def wazuh_enabled() -> bool:
|
|
||||||
for file in os.listdir(f'{LOCAL_SALT_DIR}/pillar'):
|
|
||||||
with open(file, 'r') as pillar:
|
|
||||||
if 'wazuh: 1' in pillar.read():
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def root_to_str(root: ET.ElementTree) -> str:
|
|
||||||
xml_str = ET.tostring(root, encoding='unicode', method='xml').replace('\n', '')
|
|
||||||
xml_str = re.sub(r'(?:(?<=>) *)', '', xml_str)
|
|
||||||
|
|
||||||
# Remove specific substrings to better format comments on intial parse/write
|
|
||||||
xml_str = re.sub(r' -', '', xml_str)
|
|
||||||
xml_str = re.sub(r' -->', ' -->', xml_str)
|
|
||||||
|
|
||||||
dom = minidom.parseString(xml_str)
|
|
||||||
return dom.toprettyxml(indent=" ")
|
|
||||||
|
|
||||||
|
|
||||||
def rem_wl(ip):
|
|
||||||
parser = ET.XMLParser(remove_blank_text=True)
|
|
||||||
with open(WAZUH_CONF, 'rb') as wazuh_conf:
|
|
||||||
tree = ET.parse(wazuh_conf, parser)
|
|
||||||
root = tree.getroot()
|
|
||||||
|
|
||||||
global_elems = root.findall(f"global/white_list[. = '{ip}']/..")
|
|
||||||
if len(global_elems) > 0:
|
|
||||||
for g_elem in global_elems:
|
|
||||||
ge_index = list(root).index(g_elem)
|
|
||||||
if ge_index > 0 and root[list(root).index(g_elem) - 1].tag == ET.Comment:
|
|
||||||
root.remove(root[ge_index - 1])
|
|
||||||
root.remove(g_elem)
|
|
||||||
|
|
||||||
with open(WAZUH_CONF, 'w') as out:
|
|
||||||
out.write(root_to_str(root))
|
|
||||||
|
|
||||||
|
|
||||||
def apply(role: str, ip: str) -> int:
|
def apply(role: str, ip: str) -> int:
|
||||||
firewall_cmd = ['so-firewall', 'excludehost', role, ip]
|
firewall_cmd = ['so-firewall', 'excludehost', role, ip]
|
||||||
salt_cmd = ['salt-call', 'state.apply', '-l', 'quiet', 'firewall', 'queue=True']
|
salt_cmd = ['salt-call', 'state.apply', '-l', 'quiet', 'firewall', 'queue=True']
|
||||||
restart_wazuh_cmd = ['so-wazuh-restart']
|
|
||||||
print(f'Removing {ip} from the {role} role. This can take a few seconds...')
|
print(f'Removing {ip} from the {role} role. This can take a few seconds...')
|
||||||
cmd = subprocess.run(firewall_cmd)
|
cmd = subprocess.run(firewall_cmd)
|
||||||
if cmd.returncode == 0:
|
if cmd.returncode == 0:
|
||||||
cmd = subprocess.run(salt_cmd, stdout=subprocess.DEVNULL)
|
cmd = subprocess.run(salt_cmd, stdout=subprocess.DEVNULL)
|
||||||
else:
|
else:
|
||||||
return cmd.returncode
|
return cmd.returncode
|
||||||
if cmd.returncode == 0:
|
|
||||||
if wazuh_enabled and role=='analyst':
|
|
||||||
try:
|
|
||||||
rem_wl(ip)
|
|
||||||
print(f'Removed whitelist entry for {ip} from {WAZUH_CONF}', file=sys.stderr)
|
|
||||||
except Exception as e:
|
|
||||||
print(f'Failed to remove whitelist entry for {ip} from {WAZUH_CONF}', file=sys.stderr)
|
|
||||||
print(e)
|
|
||||||
return 1
|
|
||||||
print('Restarting OSSEC Server...')
|
|
||||||
cmd = subprocess.run(restart_wazuh_cmd)
|
|
||||||
else:
|
|
||||||
return cmd.returncode
|
|
||||||
else:
|
|
||||||
print(f'Commmand \'{" ".join(salt_cmd)}\' failed.', file=sys.stderr)
|
|
||||||
return cmd.returncode
|
|
||||||
if cmd.returncode != 0:
|
|
||||||
print('Failed to restart OSSEC server.')
|
|
||||||
return cmd.returncode
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@@ -163,11 +92,7 @@ def main():
|
|||||||
group.add_argument('-b', dest='roles', action='append_const', const=VALID_ROLES['b']['role'], help="Logstash Beat - 5044/tcp")
|
group.add_argument('-b', dest='roles', action='append_const', const=VALID_ROLES['b']['role'], help="Logstash Beat - 5044/tcp")
|
||||||
group.add_argument('-e', dest='roles', action='append_const', const=VALID_ROLES['e']['role'], help="Elasticsearch REST API - 9200/tcp")
|
group.add_argument('-e', dest='roles', action='append_const', const=VALID_ROLES['e']['role'], help="Elasticsearch REST API - 9200/tcp")
|
||||||
group.add_argument('-f', dest='roles', action='append_const', const=VALID_ROLES['f']['role'], help="Strelka frontend - 57314/tcp")
|
group.add_argument('-f', dest='roles', action='append_const', const=VALID_ROLES['f']['role'], help="Strelka frontend - 57314/tcp")
|
||||||
group.add_argument('-o', dest='roles', action='append_const', const=VALID_ROLES['o']['role'], help="Osquery endpoint - 8090/tcp")
|
|
||||||
group.add_argument('-s', dest='roles', action='append_const', const=VALID_ROLES['s']['role'], help="Syslog device - 514/tcp/udp")
|
group.add_argument('-s', dest='roles', action='append_const', const=VALID_ROLES['s']['role'], help="Syslog device - 514/tcp/udp")
|
||||||
group.add_argument('-w', dest='roles', action='append_const', const=VALID_ROLES['w']['role'], help="Wazuh agent - 1514/tcp/udp")
|
|
||||||
group.add_argument('-p', dest='roles', action='append_const', const=VALID_ROLES['p']['role'], help="Wazuh API - 55000/tcp")
|
|
||||||
group.add_argument('-r', dest='roles', action='append_const', const=VALID_ROLES['r']['role'], help="Wazuh registration service - 1515/tcp")
|
|
||||||
|
|
||||||
ip_g = main_parser.add_argument_group(title='allow')
|
ip_g = main_parser.add_argument_group(title='allow')
|
||||||
ip_g.add_argument('-i', help="IP or CIDR block to disallow connections from, requires at least one role argument", metavar='', dest='ip')
|
ip_g.add_argument('-i', help="IP or CIDR block to disallow connections from, requires at least one role argument", metavar='', dest='ip')
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import sys, argparse, re, docker
|
import sys, argparse, re, docker
|
||||||
from packaging.version import Version, InvalidVersion
|
from packaging.version import Version, InvalidVersion
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
. /usr/sbin/so-image-common
|
. /usr/sbin/so-image-common
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|||||||
34
salt/common/tools/sbin/so-elastic-agent-gen-installers
Executable file
34
salt/common/tools/sbin/so-elastic-agent-gen-installers
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0; you may not use
|
||||||
|
# this file except in compliance with the Elastic License 2.0.
|
||||||
|
|
||||||
|
#so-elastic-agent-gen-installers $FleetHost $EnrollmentToken
|
||||||
|
|
||||||
|
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
ENROLLMENTOKEN=$(curl -K /opt/so/conf/elasticsearch/curl.config -L "localhost:5601/api/fleet/enrollment_api_keys" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' | jq .list | jq -r -c '.[] | select(.policy_id | contains("endpoints")) | .api_key')
|
||||||
|
|
||||||
|
FLEETHOST=$(lookup_pillar "server:url" "elasticfleet")
|
||||||
|
|
||||||
|
#FLEETHOST=$1
|
||||||
|
#ENROLLMENTOKEN=$2
|
||||||
|
CONTAINERGOOS=( "linux" "darwin" "windows" )
|
||||||
|
|
||||||
|
rm -rf /tmp/elastic-agent-workspace
|
||||||
|
mkdir -p /tmp/elastic-agent-workspace
|
||||||
|
|
||||||
|
for OS in "${CONTAINERGOOS[@]}"
|
||||||
|
do
|
||||||
|
printf "\n\nGenerating $OS Installer..."
|
||||||
|
cp /opt/so/saltstack/default/salt/elasticfleet/files/elastic-agent/so-elastic-agent-*-$OS-x86_64.tar.gz /tmp/elastic-agent-workspace/$OS.tar.gz
|
||||||
|
docker run -e CGO_ENABLED=0 -e GOOS=$OS \
|
||||||
|
--mount type=bind,source=/etc/ssl/certs/,target=/workspace/files/cert/ \
|
||||||
|
--mount type=bind,source=/tmp/elastic-agent-workspace/,target=/workspace/files/elastic-agent/ \
|
||||||
|
--mount type=bind,source=/opt/so/saltstack/local/salt/elasticfleet/files/so_agent-installers/,target=/output/ \
|
||||||
|
{{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-elastic-agent-builder:{{ GLOBALS.so_version }} go build -ldflags "-X main.fleetHost=$FLEETHOST -X main.enrollmentToken=$ENROLLMENTOKEN" -o /output/so-elastic-agent_$OS
|
||||||
|
printf "\n $OS Installer Generated..."
|
||||||
|
done
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
if [ -f "/usr/sbin/so-common" ]; then
|
|
||||||
. /usr/sbin/so-common
|
|
||||||
fi
|
|
||||||
|
|
||||||
ES_AUTH_PILLAR=${ELASTIC_AUTH_PILLAR:-/opt/so/saltstack/local/pillar/elasticsearch/auth.sls}
|
|
||||||
ES_USERS_FILE=${ELASTIC_USERS_FILE:-/opt/so/saltstack/local/salt/elasticsearch/files/users}
|
|
||||||
|
|
||||||
authEnable=$1
|
|
||||||
|
|
||||||
if ! grep -q "enabled: " "$ES_AUTH_PILLAR"; then
|
|
||||||
echo "Elastic auth pillar file is invalid. Unable to proceed."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
function restart() {
|
|
||||||
if [[ -z "$ELASTIC_AUTH_SKIP_HIGHSTATE" ]]; then
|
|
||||||
echo "Elasticsearch on all affected minions will now be stopped and then restarted..."
|
|
||||||
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch or G@role:so-node or G@role:so-heavynode' cmd.run so-elastic-stop queue=True
|
|
||||||
echo "Applying highstate to all affected minions..."
|
|
||||||
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch or G@role:so-node or G@role:so-heavynode' state.highstate queue=True
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ "$authEnable" == "true" ]]; then
|
|
||||||
if grep -q "enabled: False" "$ES_AUTH_PILLAR"; then
|
|
||||||
sed -i 's/enabled: False/enabled: True/g' "$ES_AUTH_PILLAR"
|
|
||||||
restart
|
|
||||||
echo "Elastic auth is now enabled."
|
|
||||||
if grep -q "argon" "$ES_USERS_FILE"; then
|
|
||||||
echo ""
|
|
||||||
echo "IMPORTANT: The following users will need to change their password, after logging into SOC, in order to access Kibana:"
|
|
||||||
grep argon "$ES_USERS_FILE" | cut -d ":" -f 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Auth is already enabled."
|
|
||||||
fi
|
|
||||||
elif [[ "$authEnable" == "false" ]]; then
|
|
||||||
if grep -q "enabled: True" "$ES_AUTH_PILLAR"; then
|
|
||||||
sed -i 's/enabled: True/enabled: False/g' "$ES_AUTH_PILLAR"
|
|
||||||
restart
|
|
||||||
echo "Elastic auth is now disabled."
|
|
||||||
else
|
|
||||||
echo "Auth is already disabled."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Usage: $0 <true|false>"
|
|
||||||
echo ""
|
|
||||||
echo "Toggles Elastic authentication. Elasticsearch will be restarted on each affected minion."
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
27
salt/common/tools/sbin/so-elastic-auth-password-reset
Normal file → Executable file
27
salt/common/tools/sbin/so-elastic-auth-password-reset
Normal file → Executable file
@@ -1,19 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
source $(dirname $0)/so-common
|
source $(dirname $0)/so-common
|
||||||
require_manager
|
require_manager
|
||||||
@@ -98,18 +89,16 @@ function killAllSaltJobs() {
|
|||||||
function soUserSync() {
|
function soUserSync() {
|
||||||
# apply this state to update /opt/so/saltstack/local/salt/elasticsearch/curl.config on the manager
|
# apply this state to update /opt/so/saltstack/local/salt/elasticsearch/curl.config on the manager
|
||||||
salt-call state.sls_id elastic_curl_config_distributed manager queue=True
|
salt-call state.sls_id elastic_curl_config_distributed manager queue=True
|
||||||
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch or G@role:so-node or G@role:so-heavynode' saltutil.kill_all_jobs
|
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch or G@role:so-searchnode or G@role:so-heavynode' saltutil.kill_all_jobs
|
||||||
# apply this state to get the curl.config
|
# apply this state to get the curl.config
|
||||||
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch or G@role:so-node or G@role:so-heavynode' state.sls_id elastic_curl_config common queue=True
|
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch or G@role:so-searchnode or G@role:so-heavynode' state.sls_id elastic_curl_config common queue=True
|
||||||
$(dirname $0)/so-user sync
|
$(dirname $0)/so-user sync
|
||||||
printf "\nApplying logstash state to the appropriate nodes.\n\n"
|
printf "\nApplying logstash state to the appropriate nodes.\n\n"
|
||||||
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch or G@role:so-node or G@role:so-heavynode' state.apply logstash queue=True
|
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch or G@role:so-searchnode or G@role:so-heavynode' state.apply logstash queue=True
|
||||||
printf "\nApplying filebeat state to the appropriate nodes.\n\n"
|
|
||||||
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch or G@role:so-node or G@role:so-heavynode or G@role:so-sensor or G@role:so-fleet' state.apply filebeat queue=True
|
|
||||||
printf "\nApplying kibana state to the appropriate nodes.\n\n"
|
printf "\nApplying kibana state to the appropriate nodes.\n\n"
|
||||||
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch' state.apply kibana queue=True
|
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch' state.apply kibana queue=True
|
||||||
printf "\nApplying curator state to the appropriate nodes.\n\n"
|
printf "\nApplying curator state to the appropriate nodes.\n\n"
|
||||||
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch or G@role:so-node or G@role:so-heavynode' state.apply curator queue=True
|
salt -C 'G@role:so-standalone or G@role:so-eval or G@role:so-import or G@role:so-manager or G@role:so-managersearch or G@role:so-searchnode or G@role:so-heavynode' state.apply curator queue=True
|
||||||
}
|
}
|
||||||
|
|
||||||
function highstateManager() {
|
function highstateManager() {
|
||||||
|
|||||||
@@ -1,20 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
{%- set NODEIP = salt['pillar.get']('elasticsearch:mainip', '') %}
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
SKIP=0
|
SKIP=0
|
||||||
@@ -50,7 +41,7 @@ done
|
|||||||
if [ $SKIP -ne 1 ]; then
|
if [ $SKIP -ne 1 ]; then
|
||||||
# List indices
|
# List indices
|
||||||
echo
|
echo
|
||||||
{{ ELASTICCURL }} -k -L https://{{ NODEIP }}:9200/_cat/indices?v
|
curl -K /opt/so/conf/elasticsearch/curl.config -k -L https://{{ NODEIP }}:9200/_cat/indices?v
|
||||||
echo
|
echo
|
||||||
# Inform user we are about to delete all data
|
# Inform user we are about to delete all data
|
||||||
echo
|
echo
|
||||||
@@ -63,17 +54,10 @@ if [ $SKIP -ne 1 ]; then
|
|||||||
if [ "$INPUT" != "AGREE" ] ; then exit 0; fi
|
if [ "$INPUT" != "AGREE" ] ; then exit 0; fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check to see if Logstash/Filebeat are running
|
# Check to see if Logstash are running
|
||||||
LS_ENABLED=$(so-status | grep logstash)
|
LS_ENABLED=$(so-status | grep logstash)
|
||||||
FB_ENABLED=$(so-status | grep filebeat)
|
|
||||||
EA_ENABLED=$(so-status | grep elastalert)
|
EA_ENABLED=$(so-status | grep elastalert)
|
||||||
|
|
||||||
if [ ! -z "$FB_ENABLED" ]; then
|
|
||||||
|
|
||||||
/usr/sbin/so-filebeat-stop
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -z "$LS_ENABLED" ]; then
|
if [ ! -z "$LS_ENABLED" ]; then
|
||||||
|
|
||||||
/usr/sbin/so-logstash-stop
|
/usr/sbin/so-logstash-stop
|
||||||
@@ -89,19 +73,13 @@ fi
|
|||||||
# Delete data
|
# Delete data
|
||||||
echo "Deleting data..."
|
echo "Deleting data..."
|
||||||
|
|
||||||
INDXS=$({{ ELASTICCURL }} -s -XGET -k -L https://{{ NODEIP }}:9200/_cat/indices?v | egrep 'logstash|elastalert|so-' | awk '{ print $3 }')
|
INDXS=$(curl -K /opt/so/conf/elasticsearch/curl.config -s -XGET -k -L https://{{ NODEIP }}:9200/_cat/indices?v | egrep 'logstash|elastalert|so-' | awk '{ print $3 }')
|
||||||
for INDX in ${INDXS}
|
for INDX in ${INDXS}
|
||||||
do
|
do
|
||||||
{{ ELASTICCURL }} -XDELETE -k -L https://"{{ NODEIP }}:9200/${INDX}" > /dev/null 2>&1
|
curl -K /opt/so/conf/elasticsearch/curl.config-XDELETE -k -L https://"{{ NODEIP }}:9200/${INDX}" > /dev/null 2>&1
|
||||||
done
|
done
|
||||||
|
|
||||||
#Start Logstash/Filebeat
|
#Start Logstash
|
||||||
if [ ! -z "$FB_ENABLED" ]; then
|
|
||||||
|
|
||||||
/usr/sbin/so-filebeat-start
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -z "$LS_ENABLED" ]; then
|
if [ ! -z "$LS_ENABLED" ]; then
|
||||||
|
|
||||||
/usr/sbin/so-logstash-start
|
/usr/sbin/so-logstash-start
|
||||||
|
|||||||
@@ -1,19 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# Source common settings
|
# Source common settings
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|||||||
19
salt/common/tools/sbin/so-elastic-fleet-agent-policy-delete
Executable file
19
salt/common/tools/sbin/so-elastic-fleet-agent-policy-delete
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
POLICY_ID=$1
|
||||||
|
|
||||||
|
# Let's snag a cookie from Kibana
|
||||||
|
SESSIONCOOKIE=$(curl -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}')
|
||||||
|
|
||||||
|
echo "Deleting agent policy $POLICY_ID..."
|
||||||
|
|
||||||
|
# Delete agent policy
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/agent_policies/delete" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d"{\"agentPolicyId\": \"$POLICY_ID\"}"
|
||||||
|
|
||||||
|
echo
|
||||||
17
salt/common/tools/sbin/so-elastic-fleet-agent-policy-list
Executable file
17
salt/common/tools/sbin/so-elastic-fleet-agent-policy-list
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
# Let's snag a cookie from Kibana
|
||||||
|
SESSIONCOOKIE=$(curl -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}')
|
||||||
|
|
||||||
|
echo "Setting up default Security Onion package policies for Elastic Agent..."
|
||||||
|
|
||||||
|
# List configured agent policies
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies" | jq
|
||||||
|
|
||||||
|
echo
|
||||||
19
salt/common/tools/sbin/so-elastic-fleet-agent-policy-view
Executable file
19
salt/common/tools/sbin/so-elastic-fleet-agent-policy-view
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
POLICY_ID=$1
|
||||||
|
|
||||||
|
# Let's snag a cookie from Kibana
|
||||||
|
SESSIONCOOKIE=$(curl -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}')
|
||||||
|
|
||||||
|
echo "Viewing agent policy $POLICY_ID"
|
||||||
|
|
||||||
|
# View agent policy
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$POLICY_ID/full" | jq
|
||||||
|
|
||||||
|
echo
|
||||||
17
salt/common/tools/sbin/so-elastic-fleet-data-streams-list
Executable file
17
salt/common/tools/sbin/so-elastic-fleet-data-streams-list
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
# Let's snag a cookie from Kibana
|
||||||
|
SESSIONCOOKIE=$(curl -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}')
|
||||||
|
|
||||||
|
echo "Retrieving data stream information..."
|
||||||
|
|
||||||
|
# Retrieve data stream information
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/data_streams" | jq
|
||||||
|
|
||||||
|
echo
|
||||||
23
salt/common/tools/sbin/so-elastic-fleet-integration-policy-bulk-delete
Executable file
23
salt/common/tools/sbin/so-elastic-fleet-integration-policy-bulk-delete
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
POLICY_ID=$1
|
||||||
|
|
||||||
|
# Let's snag a cookie from Kibana
|
||||||
|
SESSIONCOOKIE=$(curl -q -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}')
|
||||||
|
|
||||||
|
# Get integration policies relative to agent policy
|
||||||
|
INTEGRATION_POLICY_IDS=$(curl -q -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$POLICY_ID" | jq -r '.item.package_policies[].id')
|
||||||
|
|
||||||
|
for i in $INTEGRATION_POLICY_IDS; do
|
||||||
|
# Delete integration policies
|
||||||
|
echo "Deleting integration policy: $i..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies/delete" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d"{\"packagePolicyIds\": [\"$i\"], \"force\":true}";
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
done
|
||||||
19
salt/common/tools/sbin/so-elastic-fleet-integration-policy-delete
Executable file
19
salt/common/tools/sbin/so-elastic-fleet-integration-policy-delete
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
POLICY_ID=$1
|
||||||
|
|
||||||
|
# Let's snag a cookie from Kibana
|
||||||
|
SESSIONCOOKIE=$(curl -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}')
|
||||||
|
|
||||||
|
echo "Deleting integration policy $POLICY_ID..."
|
||||||
|
|
||||||
|
# List configured package policies
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies/delete" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d"{\"packagePolicyIds\": [\"$POLICY_ID\"]}"
|
||||||
|
|
||||||
|
echo
|
||||||
17
salt/common/tools/sbin/so-elastic-fleet-integration-policy-list
Executable file
17
salt/common/tools/sbin/so-elastic-fleet-integration-policy-list
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
# Let's snag a cookie from Kibana
|
||||||
|
SESSIONCOOKIE=$(curl -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}')
|
||||||
|
|
||||||
|
echo "Setting up default Security Onion package policies for Elastic Agent..."
|
||||||
|
|
||||||
|
# List configured package policies
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/package_policies" | jq
|
||||||
|
|
||||||
|
echo
|
||||||
137
salt/common/tools/sbin/so-elastic-fleet-integration-policy-load
Executable file
137
salt/common/tools/sbin/so-elastic-fleet-integration-policy-load
Executable file
@@ -0,0 +1,137 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
{%- set ZEEKVER = salt['pillar.get']('global:mdengine', '') %}
|
||||||
|
{%- set STRELKAENABLED = salt['pillar.get']('strelka:enabled', '0') %}
|
||||||
|
{%- set RITAENABLED = salt['pillar.get']('rita:enabled', False) %}
|
||||||
|
|
||||||
|
wait_for_web_response "http://localhost:5601/api/spaces/space/default" "default" 300 "curl -K /opt/so/conf/elasticsearch/curl.config"
|
||||||
|
|
||||||
|
# Let's snag a cookie from Kibana
|
||||||
|
SESSIONCOOKIE=$(curl -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}')
|
||||||
|
|
||||||
|
# Disable certain Features from showing up in the Kibana UI
|
||||||
|
echo
|
||||||
|
echo "Disable certain Features from showing up in the Kibana UI"
|
||||||
|
so-kibana-space-defaults
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Suricata logs
|
||||||
|
echo
|
||||||
|
echo "Setting up Suricata package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "id": "suricata-logs", "name": "suricata-logs", "description": "Suricata integration", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": [ "/nsm/suricata/eve*.json" ], "data_stream.dataset": "suricata", "tags": [],"processors": "- add_fields:\n target: event\n fields:\n category: network\n module: suricata", "custom": "pipeline: suricata.common" }}}}}}'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Zeek logs
|
||||||
|
echo
|
||||||
|
echo "Setting up Zeek package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "name": "zeek-logs", "description": "Zeek logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": ["/nsm/zeek/logs/current/*.log"], "data_stream.dataset": "zeek", "tags": [], "processors": "- dissect:\n tokenizer: \"/nsm/zeek/logs/current/%{pipeline}.log\"\n field: \"log.file.path\"\n trim_chars: \".log\"\n target_prefix: \"\"\n- script:\n lang: javascript\n source: >\n function process(event) {\n var pl = event.Get(\"pipeline\");\n event.Put(\"@metadata.pipeline\", \"zeek.\" + pl);\n }\n- add_fields:\n target: event\n fields:\n category: network\n module: zeek\n- add_tags:\n tags: \"ics\"\n when:\n regexp:\n pipeline: \"^bacnet*|^bsap*|^cip*|^cotp*|^dnp3*|^ecat*|^enip*|^modbus*|^opcua*|^profinet*|^s7comm*\"", "custom": "exclude_files: [\"broker|capture_loss|ecat_arp_info|loaded_scripts|packet_filter|stats|stderr|stdout.log$\"]\n" } } } } } }'
|
||||||
|
echo
|
||||||
|
|
||||||
|
|
||||||
|
# Import - EVTX
|
||||||
|
echo
|
||||||
|
echo "Setting up EVTX import package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{ "package": { "name": "log", "version": "1.1.0" }, "name": "import-evtx-logs", "namespace": "so", "description": "Import Windows EVTX logs", "policy_id": "so-grid-nodes", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": [ "/nsm/import/*/evtx/data.json" ], "data_stream.dataset": "import", "custom": "pipeline: import.wel", "processors": "- dissect:\n tokenizer: \"/nsm/import/%{import.id}/evtx/%{import.file}\"\n field: \"log.file.path\"\n target_prefix: \"\"\n- decode_json_fields:\n fields: [\"message\"]\n target: \"\"\n- add_fields:\n target: event\n fields:\n module: windows_eventlog\n imported: true", "tags": [] } } } } } }'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Import - Suricata logs
|
||||||
|
echo
|
||||||
|
echo "Setting up Suricata import package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "id": "import-suricata-logs", "name": "import-suricata-logs", "description": "Import Suricata logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": ["/nsm/import/*/suricata/eve*.json"], "data_stream.dataset": "import", "tags": [], "processors": "- add_fields:\n target: event\n fields:\n category: network\n module: suricata\n imported: true\n- dissect:\n tokenizer: \"/nsm/import/%{import.id}/suricata/%{import.file}\"\n field: \"log.file.path\"\n target_prefix: \"\"", "custom": "pipeline: suricata.common" } } } } } }'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Import - Zeek logs
|
||||||
|
echo
|
||||||
|
echo "Setting up Zeek import package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "name": "import-zeek-logs", "description": "Zeek Import logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": ["/nsm/import/*/zeek/logs/*.log"], "data_stream.dataset": "import", "tags": [], "processors": "- dissect:\n tokenizer: \"/nsm/import/%{import.id}/zeek/logs/%{import.file}\"\n field: \"log.file.path\"\n target_prefix: \"\"\n- script:\n lang: javascript\n source: >\n function process(event) {\n var pl = event.Get(\"import.file\").slice(0,-4);\n event.Put(\"@metadata.pipeline\", \"zeek.\" + pl);\n }\n- add_fields:\n target: event\n fields:\n category: network\n module: zeek\n imported: true\n- add_tags:\n tags: \"ics\"\n when:\n regexp:\n import.file: \"^bacnet*|^bsap*|^cip*|^cotp*|^dnp3*|^ecat*|^enip*|^modbus*|^opcua*|^profinet*|^s7comm*\"", "custom": "exclude_files: [\"broker|capture_loss|ecat_arp_info|loaded_scripts|packet_filter|stats|stderr|stdout.log$\"]\n" } } } } } }'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Strelka logs
|
||||||
|
echo
|
||||||
|
echo "Setting up Strelka package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "id": "strelka-logs", "name": "strelka-logs", "description": "Strelka logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": [ "/nsm/strelka/log/strelka.log" ], "data_stream.dataset": "strelka", "tags": [],"processors": "- add_fields:\n target: event\n fields:\n category: file\n module: strelka", "custom": "pipeline: strelka.file" }}}}}}'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Syslog TCP Port 514
|
||||||
|
echo
|
||||||
|
echo "Setting up Syslog TCP package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{ "policy_id": "so-grid-nodes", "package": { "name": "tcp", "version": "1.5.0" }, "id": "syslog-tcp-514", "name": "syslog-tcp-514", "description": "Syslog Over TCP Port 514", "namespace": "so", "inputs": { "tcp-tcp": { "enabled": true, "streams": { "tcp.generic": { "enabled": true, "vars": { "listen_address": "0.0.0.0", "listen_port": "514", "data_stream.dataset": "syslog", "pipeline": "syslog", "processors": "- add_fields:\n target: event\n fields:\n module: syslog", "tags": [ "syslog" ], "syslog_options": "field: message\n#format: auto\n#timezone: Local" } } } } } }'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Syslog UDP Port 514
|
||||||
|
echo
|
||||||
|
echo "Setting up Syslog UDP package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{ "policy_id": "so-grid-nodes", "package": { "name": "udp", "version": "1.5.0" }, "id": "syslog-udp-514", "name": "syslog-udp-514", "description": "Syslog over UDP Port 514", "namespace": "so", "inputs": { "udp-udp": { "enabled": true, "streams": { "udp.generic": { "enabled": true, "vars": { "listen_address": "0.0.0.0", "listen_port": "514", "data_stream.dataset": "syslog", "pipeline": "syslog", "max_message_size": "10KiB", "keep_null": false, "processors": "- add_fields:\n target: event\n fields: \n module: syslog\n", "tags": [ "syslog" ], "syslog_options": "field: message\n#format: auto\n#timezone: Local" } } } } } }'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Kratos logs
|
||||||
|
echo
|
||||||
|
echo "Setting up Kratos package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "id": "kratos-logs", "name": "kratos-logs", "description": "Kratos logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": [ "/opt/so/log/kratos/kratos.log" ], "data_stream.dataset": "kratos", "tags": [],"custom":"pipeline: kratos","processors": "- decode_json_fields:\n fields: [\"message\"]\n target: \"\"\n add_error_key: true \n- add_fields:\n target: event\n fields:\n category: iam\n module: kratos" }}}}}}'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# RITA Logs
|
||||||
|
#echo
|
||||||
|
#echo "Setting up RITA package policy..."
|
||||||
|
#curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "id": "rita-logs", "name": "rita-logs", "description": "RITA Beacon logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": [ "/nsm/rita/beacons.csv", "/nsm/rita/long-connections.csv", "/nsm/rita/short-connections.csv", "/nsm/rita/exploded-dns.csv" ], "data_stream.dataset": "rita", "tags": [], "processors": "- add_fields:\n target: event\n fields:\n category: network\n module: rita\n- if:\n log.file.path: beacons.csv\n then: \n - add_fields:\n target: \"@metadata\"\n fields:\n pipeline: rita.beacon\n- if:\n regexp:\n log.file.path: \"*connections.csv\"\n then: \n - add_fields:\n target: \"@metadata\"\n fields:\n pipeline: rita.connection\n- if:\n log.file.path: \"exploded-dns.csv\"\n then: \n - add_fields:\n target: \"@metadata\"\n fields:\n pipeline: rita.dns" }}}}}}'
|
||||||
|
#echo
|
||||||
|
|
||||||
|
# Elasticsearch logs
|
||||||
|
echo
|
||||||
|
echo "Setting up Elasticsearch package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "elasticsearch", "version": "1.0.0" }, "id": "elasticsearch-logs", "name": "elasticsearch-logs", "description": "Elasticsearch Logs", "namespace": "default", "inputs": { "elasticsearch-logfile": { "enabled": true, "streams": { "elasticsearch.audit": { "enabled": false, "vars": { "paths": [ "/var/log/elasticsearch/*_audit.json" ] } }, "elasticsearch.deprecation": { "enabled": false, "vars": { "paths": [ "/var/log/elasticsearch/*_deprecation.json" ] } }, "elasticsearch.gc": { "enabled": false, "vars": { "paths": [ "/var/log/elasticsearch/gc.log.[0-9]*", "/var/log/elasticsearch/gc.log" ] } }, "elasticsearch.server": { "enabled": true, "vars": { "paths": [ "/opt/so/log/elasticsearch/*.log" ] } }, "elasticsearch.slowlog": { "enabled": false, "vars": { "paths": [ "/var/log/elasticsearch/*_index_search_slowlog.json", "/var/log/elasticsearch/*_index_indexing_slowlog.json" ] } } } }, "elasticsearch-elasticsearch/metrics": { "enabled": false, "vars": { "hosts": [ "http://localhost:9200" ], "scope": "node" }, "streams": { "elasticsearch.stack_monitoring.ccr": { "enabled": false }, "elasticsearch.stack_monitoring.cluster_stats": { "enabled": false }, "elasticsearch.stack_monitoring.enrich": { "enabled": false }, "elasticsearch.stack_monitoring.index": { "enabled": false }, "elasticsearch.stack_monitoring.index_recovery": { "enabled": false, "vars": { "active.only": true } }, "elasticsearch.stack_monitoring.index_summary": { "enabled": false }, "elasticsearch.stack_monitoring.ml_job": { "enabled": false }, "elasticsearch.stack_monitoring.node": { "enabled": false }, "elasticsearch.stack_monitoring.node_stats": { "enabled": false }, "elasticsearch.stack_monitoring.pending_tasks": { "enabled": false }, "elasticsearch.stack_monitoring.shard": { "enabled": false } } } } }'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Logstash logs
|
||||||
|
#echo
|
||||||
|
#echo "Setting up Logstash package policy..."
|
||||||
|
#curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "logstash", "version": "2.0.0" }, "id": "logstash-logs", "name": "logstash-logs", "description": "Logstash logs", "namespace": "default", "inputs": { "logstash-logfile": { "enabled": true, "streams": { "logstash.log": { "enabled": true, "vars": { "paths": [ "/opt/so/logs/logstash/logstash.log" ] } }, "logstash.slowlog": { "enabled": false, "vars": { "paths": [ "/var/log/logstash/logstash-slowlog-plain*.log", "/var/log/logstash/logstash-slowlog-json*.log" ] } } } }, "logstash-logstash/metrics": { "enabled": false, "vars": { "hosts": [ "http://localhost:9600" ], "period": "10s" }, "streams": { "logstash.stack_monitoring.node": { "enabled": false }, "logstash.stack_monitoring.node_stats": { "enabled": false } } } } }'
|
||||||
|
#echo
|
||||||
|
|
||||||
|
# Kibana logs
|
||||||
|
#echo
|
||||||
|
#echo "Setting up Kibana package policy..."
|
||||||
|
#curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "kibana", "version": "2.0.0" }, "id": "kibana-logs", "name": "kibana-logs", "description": "Kibana logs", "namespace": "default", "inputs": { "kibana-logfile": { "enabled": true, "streams": { "kibana.audit": { "enabled": false, "vars": { "paths": [ "/opt/so/log/kibana/kibana.log" ] } }, "kibana.log": { "enabled": true, "vars": { "paths": [ "/opt/so/log/kibana/kibana.log" ] } } } }, "kibana-kibana/metrics": { "enabled": false, "vars": { "hosts": [ "http://localhost:5601" ] }, "streams": { "kibana.stack_monitoring.cluster_actions": { "enabled": false }, "kibana.stack_monitoring.cluster_rules": { "enabled": false }, "kibana.stack_monitoring.node_actions": { "enabled": false }, "kibana.stack_monitoring.node_rules": { "enabled": false }, "kibana.stack_monitoring.stats": { "enabled": false }, "kibana.stack_monitoring.status": { "enabled": false } } } } }'
|
||||||
|
#echo
|
||||||
|
|
||||||
|
# Redis logs
|
||||||
|
echo
|
||||||
|
echo "Setting up Redis package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "redis", "version": "1.4.0" }, "id": "redis-logs", "name": "redis-logs", "description": "Redis logs", "namespace": "default", "inputs": { "redis-logfile": { "enabled": true, "streams": { "redis.log": { "enabled": true, "vars": { "paths": [ "/opt/so/log/redis/redis.log" ], "tags": [ "redis-log" ], "preserve_original_event": false } } } }, "redis-redis": { "enabled": false, "streams": { "redis.slowlog": { "enabled": false, "vars": { "hosts": [ "127.0.0.1:6379" ], "password": "" } } } }, "redis-redis/metrics": { "enabled": false, "vars": { "hosts": [ "127.0.0.1:6379" ], "idle_timeout": "20s", "maxconn": 10, "network": "tcp", "password": "" }, "streams": { "redis.info": { "enabled": false, "vars": { "period": "10s" } }, "redis.key": { "enabled": false, "vars": { "key.patterns": "- limit: 20\n pattern: '*'\n", "period": "10s" } }, "redis.keyspace": { "enabled": false, "vars": { "period": "10s" } } } } } }'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# IDH logs
|
||||||
|
echo
|
||||||
|
echo "Setting up IDH package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{"policy_id":"so-grid-nodes","package":{"name":"log","version":"1.1.1"},"id":"idh-logs","name":"idh-logs","namespace":"so","description":"IDH integration","inputs":{"logs-logfile":{"enabled":true,"streams":{"log.log":{"enabled":true,"vars":{"paths":["/nsm/idh/opencanary.log"],"data_stream.dataset":"idh","custom":"pipeline: common","processors": "\n- decode_json_fields:\n fields: [\"message\"]\n target: \"\"\n add_error_key: true\n- drop_fields:\n when:\n equals:\n logtype: \"1001\"\n fields: [\"src_host\", \"src_port\", \"dst_host\", \"dst_port\" ]\n ignore_missing: true\n- rename:\n fields:\n - from: \"src_host\"\n to: \"source.ip\"\n - from: \"src_port\"\n to: \"source.port\"\n - from: \"dst_host\"\n to: \"destination.host\"\n - from: \"dst_port\"\n to: \"destination.port\"\n ignore_missing: true\n- convert:\n fields:\n - {from: \"logtype\", to: \"event.code\", type: \"string\"}\n ignore_missing: true\n- drop_fields:\n fields: '\''[\"prospector\", \"input\", \"offset\", \"beat\"]'\''\n- add_fields:\n target: event\n fields:\n category: host\n module: opencanary","tags":[]}}}}}}'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# SOC - Server logs
|
||||||
|
echo
|
||||||
|
echo "Setting up SOC - Server Logs package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{"package":{"name":"log","version":"1.1.2"},"name":"soc-server-logs","namespace":"so","description":"Security Onion Console Logs","policy_id":"so-grid-nodes","inputs":{"logs-logfile":{"enabled":true,"streams":{"log.log":{"enabled":true,"vars":{"paths":["/opt/so/log/soc/sensoroni-server.log"],"data_stream.dataset":"soc","custom":"pipeline: common","processors": "- decode_json_fields:\n fields: [\"message\"]\n target: \"soc\"\n process_array: true\n max_depth: 2\n add_error_key: true \n- add_fields:\n target: event\n fields:\n category: host\n module: soc\n dataset_temp: server\n- rename:\n fields:\n - from: \"soc.fields.sourceIp\"\n to: \"source.ip\"\n - from: \"soc.fields.status\"\n to: \"http.response.status_code\"\n - from: \"soc.fields.method\"\n to: \"http.request.method\"\n - from: \"soc.fields.path\"\n to: \"url.path\"\n - from: \"soc.message\"\n to: \"event.action\"\n - from: \"soc.level\"\n to: \"log.level\"\n ignore_missing: true","tags":[]}}}}}}'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# SOC - Sensoroni logs
|
||||||
|
echo
|
||||||
|
echo "Setting up SOC - Sensoroni Logs package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{"package":{"name":"log","version":"1.1.2"},"name":"soc-sensoroni-logs","namespace":"so","description":"Security Onion - Sensoroni - Logs","policy_id":"so-grid-nodes","inputs":{"logs-logfile":{"enabled":true,"streams":{"log.log":{"enabled":true,"vars":{"paths":["/opt/so/log/sensoroni/sensoroni.log"],"data_stream.dataset":"soc","custom":"pipeline: common","processors": "- decode_json_fields:\n fields: [\"message\"]\n target: \"sensoroni\"\n process_array: true\n max_depth: 2\n add_error_key: true \n- add_fields:\n target: event\n fields:\n category: host\n module: soc\n dataset_temp: sensoroni\n- rename:\n fields:\n - from: \"sensoroni.fields.sourceIp\"\n to: \"source.ip\"\n - from: \"sensoroni.fields.status\"\n to: \"http.response.status_code\"\n - from: \"sensoroni.fields.method\"\n to: \"http.request.method\"\n - from: \"sensoroni.fields.path\"\n to: \"url.path\"\n - from: \"sensoroni.message\"\n to: \"event.action\"\n - from: \"sensoroni.level\"\n to: \"log.level\"\n ignore_missing: true","tags":[]}}}}}}'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# SOC - Elastic Auth Sync logs
|
||||||
|
echo
|
||||||
|
echo "Setting up SOC - Elastic Auth Sync Logs package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{"package":{"name":"log","version":"1.1.2"},"name":"soc-auth-sync-logs","namespace":"so","description":"Security Onion - Elastic Auth Sync - Logs","policy_id":"so-grid-nodes","inputs":{"logs-logfile":{"enabled":true,"streams":{"log.log":{"enabled":true,"vars":{"paths":["/opt/so/log/soc/sync.log"],"data_stream.dataset":"soc","custom":"pipeline: common","processors": "- dissect:\n tokenizer: \"%{event.action}\"\n field: \"message\"\n target_prefix: \"\"\n- add_fields:\n target: event\n fields:\n category: host\n module: soc\n dataset_temp: auth_sync","tags":[]}}}}}}'
|
||||||
|
echo
|
||||||
|
|
||||||
|
# SOC - Salt Relay logs
|
||||||
|
echo
|
||||||
|
echo "Setting up SOC - Salt_Relay Logs package policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{"package":{"name":"log","version":"1.1.2"},"name":"soc-salt-relay-logs","namespace":"so","description":"Security Onion - Salt Relay - Logs","policy_id":"so-grid-nodes","inputs":{"logs-logfile":{"enabled":true,"streams":{"log.log":{"enabled":true,"vars":{"paths":["/opt/so/log/soc/salt-relay.log"],"data_stream.dataset":"soc","custom":"pipeline: common","processors": "- dissect:\n tokenizer: \"%{soc.ts} | %{event.action}\"\n field: \"message\"\n target_prefix: \"\"\n- add_fields:\n target: event\n fields:\n category: host\n module: soc\n dataset_temp: salt_relay","tags":[]}}}}}}'
|
||||||
|
echo
|
||||||
12
salt/common/tools/sbin/so-elastic-fleet-restart
Executable file
12
salt/common/tools/sbin/so-elastic-fleet-restart
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
/usr/sbin/so-restart elastic-fleet $1
|
||||||
109
salt/common/tools/sbin/so-elastic-fleet-setup
Executable file
109
salt/common/tools/sbin/so-elastic-fleet-setup
Executable file
@@ -0,0 +1,109 @@
|
|||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0; you may not use
|
||||||
|
# this file except in compliance with the Elastic License 2.0.
|
||||||
|
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|
||||||
|
# Create ES Token
|
||||||
|
ESTOKEN=$(curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fleet/service_tokens" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' | jq -r .value)
|
||||||
|
printf "ESTOKEN = $ESTOKEN \n"
|
||||||
|
|
||||||
|
# Add SO-Manager Fleet URL
|
||||||
|
## This array replaces whatever URLs are currently configured
|
||||||
|
printf "\n"
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -L -X PUT "localhost:5601/api/fleet/settings" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{"fleet_server_hosts":["https://{{ GLOBALS.manager_ip }}:8220"]}'
|
||||||
|
printf "\n\n"
|
||||||
|
|
||||||
|
# Configure certificates
|
||||||
|
mkdir -p /opt/so/conf/elastic-fleet/certs
|
||||||
|
cp /etc/ssl/certs/intca.crt /opt/so/conf/elastic-fleet/certs
|
||||||
|
cp /etc/pki/elasticfleet* /opt/so/conf/elastic-fleet/certs
|
||||||
|
|
||||||
|
{% if grains.role in ['so-import', 'so-standalone', 'so-eval', 'so-manager', 'so-managersearch'] %}
|
||||||
|
# Add SO-Manager Elasticsearch Ouput
|
||||||
|
ESCACRT=$(openssl x509 -in /opt/so/conf/elastic-fleet/certs/intca.crt)
|
||||||
|
JSON_STRING=$( jq -n \
|
||||||
|
--arg ESCACRT "$ESCACRT" \
|
||||||
|
'{"name":"so-manager_elasticsearch","id":"so-manager_elasticsearch","type":"elasticsearch","hosts":["https://{{ GLOBALS.manager_ip }}:9200"],"is_default":true,"is_default_monitoring":true,"config_yaml":"","ssl":{"certificate_authorities": [$ESCACRT]}}' )
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fleet/outputs" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING"
|
||||||
|
printf "\n\n"
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
# Create Logstash Output payload
|
||||||
|
LOGSTASHCRT=$(openssl x509 -in /opt/so/conf/elastic-fleet/certs/elasticfleet.crt)
|
||||||
|
LOGSTASHKEY=$(openssl rsa -in /opt/so/conf/elastic-fleet/certs/elasticfleet.key)
|
||||||
|
LOGSTASHCA=$(openssl x509 -in /opt/so/conf/elastic-fleet/certs/intca.crt)
|
||||||
|
JSON_STRING=$( jq -n \
|
||||||
|
--arg LOGSTASHCRT "$LOGSTASHCRT" \
|
||||||
|
--arg LOGSTASHKEY "$LOGSTASHKEY" \
|
||||||
|
--arg LOGSTASHCA "$LOGSTASHCA" \
|
||||||
|
'{"name":"so-manager_logstash","id":"so-manager_logstash","type":"logstash","hosts":["{{ GLOBALS.manager_ip }}:5055"],"is_default":true,"is_default_monitoring":true,"config_yaml":"","ssl":{"certificate": $LOGSTASHCRT,"key": $LOGSTASHKEY,"certificate_authorities":[ $LOGSTASHCA ]}}'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add SO-Manager Logstash Ouput
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fleet/outputs" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING"
|
||||||
|
printf "\n\n"
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
# Add Elastic Fleet Integrations
|
||||||
|
|
||||||
|
# Add Elastic Fleet Server Agent Policy
|
||||||
|
#curl -vv -K /opt/so/conf/elasticsearch/curl.config -L \
|
||||||
|
#-X POST "localhost:5601/api/fleet/agent_policies" \
|
||||||
|
#-H 'kbn-xsrf: true' -H 'Content-Type: application/json' \
|
||||||
|
#-d '{"name":"SO-Manager","id":"so-manager","description":"SO Manager Fleet Server Policy","namespace":"default","monitoring_enabled":["logs"],"has_fleet_server":true}'
|
||||||
|
|
||||||
|
# Add Agent Policy - SOS Grid Nodes
|
||||||
|
#curl -vv -K /opt/so/conf/elasticsearch/curl.config -L \
|
||||||
|
#-X POST "localhost:5601/api/fleet/agent_policies" \
|
||||||
|
#-H 'kbn-xsrf: true' -H 'Content-Type: application/json' \
|
||||||
|
#-d '{"name":"SO-Grid","id":"so-grid","description":"SO Grid Endpoint Policy","namespace":"default","monitoring_enabled":["logs"]}'
|
||||||
|
|
||||||
|
# Add Agent Policy - Default endpoints
|
||||||
|
#curl -vv -K /opt/so/conf/elasticsearch/curl.config -L \
|
||||||
|
#-X POST "localhost:5601/api/fleet/agent_policies" \
|
||||||
|
#-H 'kbn-xsrf: true' -H 'Content-Type: application/json' \
|
||||||
|
#-d '{"name":"Endpoints-Initalization","id":"endpoints","description":"Initial Endpoint Policy","namespace":"default","monitoring_enabled":["logs"]}'
|
||||||
|
|
||||||
|
ENDPOINTSENROLLMENTOKEN=$(curl -K /opt/so/conf/elasticsearch/curl.config -L "localhost:5601/api/fleet/enrollment_api_keys" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' | jq .list | jq -r -c '.[] | select(.policy_id | contains("endpoints-default")) | .api_key')
|
||||||
|
GRIDNODESENROLLMENTOKEN=$(curl -K /opt/so/conf/elasticsearch/curl.config -L "localhost:5601/api/fleet/enrollment_api_keys" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' | jq .list | jq -r -c '.[] | select(.policy_id | contains("so-grid-nodes")) | .api_key')
|
||||||
|
|
||||||
|
# Store needed data in minion pillar
|
||||||
|
pillar_file=/opt/so/saltstack/local/pillar/minions/{{ GLOBALS.minion_id }}.sls
|
||||||
|
printf '%s\n'\
|
||||||
|
"elasticfleet:"\
|
||||||
|
" server:"\
|
||||||
|
" es_token: '$ESTOKEN'"\
|
||||||
|
" endpoints_enrollment: '$ENDPOINTSENROLLMENTOKEN'"\
|
||||||
|
" grid_enrollment: '$GRIDNODESENROLLMENTOKEN'"\
|
||||||
|
" url: '{{ GLOBALS.manager_ip }}'"\
|
||||||
|
"" >> "$pillar_file"
|
||||||
|
|
||||||
|
#Store Grid Nodes Enrollment token in Global pillar
|
||||||
|
global_pillar_file=/opt/so/saltstack/local/pillar/soc_global.sls
|
||||||
|
printf '%s\n'\
|
||||||
|
" fleet_grid_enrollment_token: '$GRIDNODESENROLLMENTOKEN'"\
|
||||||
|
"" >> "$global_pillar_file"
|
||||||
|
|
||||||
|
# Call Elastic-Fleet Salt State
|
||||||
|
salt-call state.apply elasticfleet queue=True
|
||||||
|
|
||||||
|
# Load Elastic Fleet integrations
|
||||||
|
/usr/sbin/so-elastic-fleet-integration-policy-load
|
||||||
|
|
||||||
|
# Temp
|
||||||
|
wget --progress=bar:force:noscroll -P /opt/so/saltstack/default/salt/elasticfleet/files/elastic-agent/ https://github.com/Security-Onion-Solutions/securityonion-docker-rpm/releases/download/so_elastic-agent-8.6.2/so-elastic-agent-8.6.2-darwin-x86_64.tar.gz
|
||||||
|
wget --progress=bar:force:noscroll -P /opt/so/saltstack/default/salt/elasticfleet/files/elastic-agent/ https://github.com/Security-Onion-Solutions/securityonion-docker-rpm/releases/download/so_elastic-agent-8.6.2/so-elastic-agent-8.6.2-linux-x86_64.tar.gz
|
||||||
|
wget --progress=bar:force:noscroll -P /opt/so/saltstack/default/salt/elasticfleet/files/elastic-agent/ https://github.com/Security-Onion-Solutions/securityonion-docker-rpm/releases/download/so_elastic-agent-8.6.2/so-elastic-agent-8.6.2-windows-x86_64.tar.gz
|
||||||
|
|
||||||
|
#git clone -b 2.4-so-elastic-agent https://github.com/Security-Onion-Solutions/securityonion-image.git
|
||||||
|
#cd securityonion-image/so-elastic-agent-builder
|
||||||
|
#docker build -t so-elastic-agent-builder .
|
||||||
|
|
||||||
|
so-elastic-agent-gen-installers
|
||||||
|
salt-call state.apply elasticfleet.install_agent_grid queue=True
|
||||||
12
salt/common/tools/sbin/so-elastic-fleet-start
Executable file
12
salt/common/tools/sbin/so-elastic-fleet-start
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
/usr/sbin/so-start elastic-fleet $1
|
||||||
12
salt/common/tools/sbin/so-elastic-fleet-stop
Executable file
12
salt/common/tools/sbin/so-elastic-fleet-stop
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
/usr/sbin/so-stop elastic-fleet $1
|
||||||
@@ -1,24 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node', 'so-import']%}
|
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode', 'so-import']%}
|
||||||
/usr/sbin/so-restart elasticsearch $1
|
/usr/sbin/so-restart elasticsearch $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
@@ -26,15 +18,11 @@
|
|||||||
/usr/sbin/so-restart kibana $1
|
/usr/sbin/so-restart kibana $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node']%}
|
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
|
||||||
/usr/sbin/so-restart logstash $1
|
/usr/sbin/so-restart logstash $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node', 'so-sensor']%}
|
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
|
||||||
/usr/sbin/so-restart filebeat $1
|
|
||||||
{%- endif %}
|
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node']%}
|
|
||||||
/usr/sbin/so-restart curator $1
|
/usr/sbin/so-restart curator $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node', 'so-import']%}
|
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode', 'so-import']%}
|
||||||
/usr/sbin/so-start elasticsearch $1
|
/usr/sbin/so-start elasticsearch $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
@@ -26,15 +18,11 @@
|
|||||||
/usr/sbin/so-start kibana $1
|
/usr/sbin/so-start kibana $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node']%}
|
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
|
||||||
/usr/sbin/so-start logstash $1
|
/usr/sbin/so-start logstash $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node', 'so-sensor']%}
|
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
|
||||||
/usr/sbin/so-start filebeat $1
|
|
||||||
{%- endif %}
|
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node']%}
|
|
||||||
/usr/sbin/so-start curator $1
|
/usr/sbin/so-start curator $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node', 'so-import']%}
|
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode', 'so-import']%}
|
||||||
/usr/sbin/so-stop elasticsearch $1
|
/usr/sbin/so-stop elasticsearch $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
@@ -26,15 +18,11 @@
|
|||||||
/usr/sbin/so-stop kibana $1
|
/usr/sbin/so-stop kibana $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node']%}
|
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
|
||||||
/usr/sbin/so-stop logstash $1
|
/usr/sbin/so-stop logstash $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node', 'so-sensor']%}
|
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
|
||||||
/usr/sbin/so-stop filebeat $1
|
|
||||||
{%- endif %}
|
|
||||||
|
|
||||||
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-node']%}
|
|
||||||
/usr/sbin/so-stop curator $1
|
/usr/sbin/so-stop curator $1
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
||||||
|
|||||||
57
salt/common/tools/sbin/so-elasticsearch-cluster-space-total
Executable file
57
salt/common/tools/sbin/so-elasticsearch-cluster-space-total
Executable file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
||||||
|
|
||||||
|
TOTAL_AVAILABLE_SPACE=0
|
||||||
|
|
||||||
|
# Wait for ElasticSearch to initialize
|
||||||
|
COUNT=0
|
||||||
|
ELASTICSEARCH_CONNECTED="no"
|
||||||
|
while [[ "$COUNT" -le 240 ]]; do
|
||||||
|
/usr/sbin/so-elasticsearch-query / -k --output /dev/null --silent --head --fail
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
ELASTICSEARCH_CONNECTED="yes"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
((COUNT+=1))
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ "$ELASTICSEARCH_CONNECTED" == "no" ]; then
|
||||||
|
echo
|
||||||
|
echo -e "Connection attempt timed out. Unable to connect to ElasticSearch. \nPlease try: \n -checking log(s) in /var/log/elasticsearch/\n -running 'sudo docker ps' \n -running 'sudo so-elastic-restart'"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set percentage of space to desired value, otherwise use a default value of 80 percent
|
||||||
|
if [[ "$1" != "" ]]; then
|
||||||
|
PERCENTAGE=$1
|
||||||
|
else
|
||||||
|
PERCENTAGE=80
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Iterate through the output of _cat/allocation for each node in the cluster to determine the total available space
|
||||||
|
{% if GLOBALS.role == 'so-manager' %}
|
||||||
|
for i in $(/usr/sbin/so-elasticsearch-query _cat/allocation | grep -v {{ GLOBALS.manager }} | awk '{print $5}'); do
|
||||||
|
{% else %}
|
||||||
|
for i in $(/usr/sbin/so-elasticsearch-query _cat/allocation | awk '{print $5}'); do
|
||||||
|
{% endif %}
|
||||||
|
size=$(echo $i | grep -oE '[0-9].*' | awk '{print int($1+0.5)}')
|
||||||
|
unit=$(echo $i | grep -oE '[A-Za-z]+')
|
||||||
|
if [ $unit = "tb" ]; then
|
||||||
|
size=$(( size * 1024 ))
|
||||||
|
fi
|
||||||
|
TOTAL_AVAILABLE_SPACE=$(( TOTAL_AVAILABLE_SPACE + size ))
|
||||||
|
done
|
||||||
|
|
||||||
|
# Calculate the percentage of available space based on our previously defined value
|
||||||
|
PERCENTAGE_AVAILABLE_SPACE=$(( TOTAL_AVAILABLE_SPACE*PERCENTAGE/100 ))
|
||||||
|
echo "$PERCENTAGE_AVAILABLE_SPACE"
|
||||||
28
salt/common/tools/sbin/so-elasticsearch-cluster-space-used
Executable file
28
salt/common/tools/sbin/so-elasticsearch-cluster-space-used
Executable file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
||||||
|
|
||||||
|
TOTAL_AVAILABLE_SPACE=0
|
||||||
|
|
||||||
|
# Iterate through the output of _cat/allocation for each node in the cluster to determine the total available space
|
||||||
|
{% if GLOBALS.role == 'so-manager' %}
|
||||||
|
for i in $(/usr/sbin/so-elasticsearch-query _cat/allocation | grep -v {{ GLOBALS.manager }} | awk '{print $3}'); do
|
||||||
|
{% else %}
|
||||||
|
for i in $(/usr/sbin/so-elasticsearch-query _cat/allocation | awk '{print $3}'); do
|
||||||
|
{% endif %}
|
||||||
|
size=$(echo $i | grep -oE '[0-9].*' | awk '{print int($1+0.5)}')
|
||||||
|
unit=$(echo $i | grep -oE '[A-Za-z]+')
|
||||||
|
if [ $unit = "tb" ]; then
|
||||||
|
size=$(( size * 1024 ))
|
||||||
|
fi
|
||||||
|
TOTAL_AVAILABLE_SPACE=$(( TOTAL_AVAILABLE_SPACE + size ))
|
||||||
|
done
|
||||||
|
|
||||||
|
# Calculate the percentage of available space based on our previously defined value
|
||||||
|
echo "$TOTAL_AVAILABLE_SPACE"
|
||||||
@@ -1,23 +1,14 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
{%- set NODEIP = salt['pillar.get']('elasticsearch:mainip', '') %}
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
if [ "$1" == "" ]; then
|
if [ "$1" == "" ]; then
|
||||||
{{ ELASTICCURL }} -s -k -L https://{{ NODEIP }}:9200/_component_template | jq '.component_templates[] |.name'| sort
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_component_template | jq '.component_templates[] |.name'| sort
|
||||||
else
|
else
|
||||||
{{ ELASTICCURL }} -s -k -L https://{{ NODEIP }}:9200/_component_template/$1 | jq
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_component_template/$1 | jq
|
||||||
fi
|
fi
|
||||||
|
|||||||
15
salt/common/tools/sbin/so-elasticsearch-ilm-lifecycle-status
Executable file
15
salt/common/tools/sbin/so-elasticsearch-ilm-lifecycle-status
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
|
|
||||||
|
if [ "$1" == "" ]; then
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_all/_ilm/explain | jq .
|
||||||
|
else
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/$1/_ilm/explain | jq .[]
|
||||||
|
fi
|
||||||
11
salt/common/tools/sbin/so-elasticsearch-ilm-policy-delete
Executable file
11
salt/common/tools/sbin/so-elasticsearch-ilm-policy-delete
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
|
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L -X DELETE https://{{ NODEIP }}:9200/_ilm/policy/$1
|
||||||
21
salt/common/tools/sbin/so-elasticsearch-ilm-policy-load
Executable file
21
salt/common/tools/sbin/so-elasticsearch-ilm-policy-load
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
{% import_yaml 'elasticsearch/defaults.yaml' as ESCONFIG with context %}
|
||||||
|
{%- set ES_INDEX_SETTINGS = salt['pillar.get']('elasticsearch:index_settings', default=ESCONFIG.elasticsearch.index_settings, merge=True) %}
|
||||||
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
|
|
||||||
|
{%- for index, settings in ES_INDEX_SETTINGS.items() %}
|
||||||
|
{%- if settings.policy is defined %}
|
||||||
|
echo
|
||||||
|
echo "Setting up {{ index }}-logs policy..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -s -k -L -X PUT "https://{{ NODEIP }}:9200/_ilm/policy/{{ index }}-logs" -H 'Content-Type: application/json' -d'{ "policy": {{ settings.policy | tojson(true) }} }'
|
||||||
|
echo
|
||||||
|
{%- endif %}
|
||||||
|
{%- endfor %}
|
||||||
|
echo
|
||||||
15
salt/common/tools/sbin/so-elasticsearch-ilm-policy-view
Executable file
15
salt/common/tools/sbin/so-elasticsearch-ilm-policy-view
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
|
|
||||||
|
if [ "$1" == "" ]; then
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_ilm/policy | jq .
|
||||||
|
else
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_ilm/policy/$1 | jq .[]
|
||||||
|
fi
|
||||||
10
salt/common/tools/sbin/so-elasticsearch-ilm-restart
Executable file
10
salt/common/tools/sbin/so-elasticsearch-ilm-restart
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
so-elasticsearch-ilm-stop
|
||||||
|
so-elasticsearch-ilm-start
|
||||||
12
salt/common/tools/sbin/so-elasticsearch-ilm-start
Executable file
12
salt/common/tools/sbin/so-elasticsearch-ilm-start
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
|
|
||||||
|
echo "Starting ILM..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L -X POST https://{{ NODEIP }}:9200/_ilm/start
|
||||||
11
salt/common/tools/sbin/so-elasticsearch-ilm-status
Executable file
11
salt/common/tools/sbin/so-elasticsearch-ilm-status
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
|
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_ilm/status | jq .
|
||||||
12
salt/common/tools/sbin/so-elasticsearch-ilm-stop
Executable file
12
salt/common/tools/sbin/so-elasticsearch-ilm-stop
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
|
|
||||||
|
echo "Stopping ILM..."
|
||||||
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L -X POST https://{{ NODEIP }}:9200/_ilm/stop
|
||||||
@@ -1,23 +1,14 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
{%- set NODEIP = salt['pillar.get']('elasticsearch:mainip', '') %}
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
if [ "$1" == "" ]; then
|
if [ "$1" == "" ]; then
|
||||||
{{ ELASTICCURL }} -s -k -L https://{{ NODEIP }}:9200/_index_template | jq '.index_templates[] |.name'| sort
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_index_template | jq '.index_templates[] |.name'| sort
|
||||||
else
|
else
|
||||||
{{ ELASTICCURL }} -s -k -L https://{{ NODEIP }}:9200/_index_template/$1 | jq
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_index_template/$1 | jq
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,21 +1,12 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
{%- set NODEIP = salt['pillar.get']('elasticsearch:mainip', '') %}
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
{{ ELASTICCURL }} -s -k -L "https://{{ NODEIP }}:9200/_cat/indices?pretty&v&s=index"
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L "https://{{ NODEIP }}:9200/_cat/indices?pretty&v&s=index"
|
||||||
|
|||||||
@@ -1,23 +1,15 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
IP={{ salt['grains.get']('ip_interfaces').get(salt['pillar.get']('sensor:mainint', salt['pillar.get']('manager:mainint', salt['pillar.get']('elasticsearch:mainint', salt['pillar.get']('host:mainint')))))[0] }}
|
IP={{ salt['grains.get']('ip_interfaces').get(salt['pillar.get']('sensor:mainint', salt['pillar.get']('manager:mainint', salt['pillar.get']('elasticsearch:mainint', salt['pillar.get']('host:mainint')))))[0] }}
|
||||||
ESPORT=9200
|
ESPORT=9200
|
||||||
|
|
||||||
echo "Removing read only attributes for indices..."
|
echo "Removing read only attributes for indices..."
|
||||||
echo
|
echo
|
||||||
{{ ELASTICCURL }} -s -k -XPUT -H "Content-Type: application/json" -L https://$IP:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}' 2>&1 | if grep -q ack; then echo "Index settings updated..."; else echo "There was any issue updating the read-only attribute. Please ensure Elasticsearch is running.";fi;
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -XPUT -H "Content-Type: application/json" -L https://$IP:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}' 2>&1 | if grep -q ack; then echo "Index settings updated..."; else echo "There was any issue updating the read-only attribute. Please ensure Elasticsearch is running.";fi;
|
||||||
|
|||||||
@@ -1,25 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
{%- set NODEIP = salt['pillar.get']('elasticsearch:mainip', '') %}
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
if [ "$1" == "" ]; then
|
if [ "$1" == "" ]; then
|
||||||
{{ ELASTICCURL }} -s -k -L https://{{ NODEIP }}:9200/_nodes/stats | jq .nodes | jq ".[] | .ingest.pipelines"
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_nodes/stats | jq .nodes | jq ".[] | .ingest.pipelines"
|
||||||
else
|
else
|
||||||
{{ ELASTICCURL }} -s -k -L https://{{ NODEIP }}:9200/_nodes/stats | jq .nodes | jq ".[] | .ingest.pipelines.\"$1\""
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_nodes/stats | jq .nodes | jq ".[] | .ingest.pipelines.\"$1\""
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,25 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
{%- set NODEIP = salt['pillar.get']('elasticsearch:mainip', '') %}
|
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
|
||||||
if [ "$1" == "" ]; then
|
if [ "$1" == "" ]; then
|
||||||
{{ ELASTICCURL }} -s -k -L https://{{ NODEIP }}:9200/_ingest/pipeline/* | jq .
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_ingest/pipeline/* | jq .
|
||||||
else
|
else
|
||||||
{{ ELASTICCURL }} -s -k -L https://{{ NODEIP }}:9200/_ingest/pipeline/$1 | jq .[]
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_ingest/pipeline/$1 | jq .[]
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,23 +1,14 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Copyright 2014-2023 Security Onion Solutions, LLC
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
#
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
# it under the terms of the GNU General Public License as published by
|
# Elastic License 2.0.
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
{%- set NODEIP = salt['pillar.get']('elasticsearch:mainip', '') %}
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
if [ "$1" == "" ]; then
|
if [ "$1" == "" ]; then
|
||||||
{{ ELASTICCURL }} -s -k -L https://{{ NODEIP }}:9200/_ingest/pipeline/* | jq 'keys'
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_ingest/pipeline/* | jq 'keys'
|
||||||
else
|
else
|
||||||
{{ ELASTICCURL }} -s -k -L https://{{ NODEIP }}:9200/_ingest/pipeline/$1 | jq
|
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -L https://{{ NODEIP }}:9200/_ingest/pipeline/$1 | jq
|
||||||
fi
|
fi
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user