Konfigurácia internej SSL komunikácie za pomoci Self-Signed Certifikátov
Úvod
Na zabezpečenie komunikácie je potrebné vytvorenie vlastnej certifikačnej autority, jednotlivých certifikátov a kľúčov. Na vytvorenie vieme použiť spustiteľný súbor $SPLUNK_HOME/bin/splunk, ktorý nás prevedie samotným procesom, alebo sadu skriptov $SPLUNK_HOME/bin/genRootCA.sh a $SPLUNK_HOME/bin/genSignedServerCert.sh, ktoré daný príkaz volá. Proces je pomerne zdĺhavý a v prípade problémov je potrebné sledovať $SPLUNK_HOME/var/log/splunk/splunkd.log.
Legenda
Skrátené názvy často používaných súborov, adresárov a ciest.
./splunk == $SPLUNK_HOME/bin/splunk
splunkd.log == $SPLUNK_HOME/var/log/splunk/splunkd.log
server.conf == $SPLUNK_HOME/etc/system/local/server.conf
inputs.conf == $SPLUNK_HOME/etc/system/local/inputs.conf
outputs.conf == $SPLUNK_HOME/etc/system/local/outputs.conf
web.conf == $SPLUNK_HOME/etc/system/local/web.conf
auth/ == $SPLUNK_HOME/etc/auth
Vytvorenie systémovej premennej
Často používame premennú $SPLUNK_HOME ktorá obsahuje cestu k domovskému priečinku SPLUNK-u. Pre zjednodušenie práce môžeme vytvoriť systémovú premennú ktorá platí pre všetkých používateľov. V našom prípade, pre domovský priečinok /opt/splunkforwarder vyzerá príkaz na vytvorenie takto :
echo 'SPLUNK_HOME="/opt/splunkforwarder"' >> /etc/environment && source /etc/environment
Generovanie certifikátov a kľúčov certifikačnej autority1
Odporúčame vytvoriť samostatný adresár v adresári auth/ na uloženie novovytvorených súborov. V našom prípade sme vytvorili adresár CA_SSL :
mkdir $SPLUNK_HOME/etc/auth/CA_SSL
Začneme vytvorením privátneho kľúča našej certifikačnej autority :
$SPLUNK_HOME/bin/splunk cmd openssl genrsa -aes256 -out $SPLUNK_HOME/etc/auth/CA_SSL/privateKeyCA.key 2048
Po vykonaní príkazu nás konzola vyzve k zadaniu hesla autority. Zadáme unikátne heslo a bezpečne ho uschováme, nakoľko ho budeme používať pri podpise každého nového certifikátu našou autoritou.
Vytvoríme požiadavku na podpísanie certifikátu ktorú chceme podpísať pomocou nášho kľúča:
$SPLUNK_HOME/bin/splunk cmd openssl req -new -key $SPLUNK_HOME/etc/auth/CA_SSL/privateKeyCA.key -out $SPLUNK_HOME/etc/auth/CA_SSL/signingRequestCA.csr
Po vykonaní príkazu nás konzola vyzve k zadaniu hesla autority. Zadáme heslo ktoré sme použili pri tvorbe nášho kľúča. Kľúč sa následne dešifruje a použije na podpísanie danej požiadavky - teda si sami podpíšeme žiadosť o vydanie certifikátu.
Po overení hesla nás OpenSSL vyzve na zadanie parametrov certifikátu :
- Názov krajiny - najlepšie v dvojznakovom ISO formáte (EN,GB,DE,SK, atď.)
- Názov štátu alebo kraja - slovom alebo kódom
- Názov lokality - slovom názov mesta/dediny/obce
- Názov organizácie - slovom alebo slovným spojením názov firmy/organizácie
- Názov oddelenia - slovom alebo slovným spojením
- Plne kvalifikovaný názov zariadenia [FQDN] - Dôležité zadáme názov domény certifikačnej autority, ak chceme vytvoriť wildcard certifikát tak zadáme
*(napríklad*.mojadomena.sk)- Emailová adresa - emailová adresa na kontaktovanie administrátorov, bude zverejnená v certifikáte
Vytvorenú požiadavku podpíšeme pomocou kľúča ktorý sme predtým vytvorili :
$SPLUNK_HOME/bin/splunk cmd openssl x509 -req -in $SPLUNK_HOME/etc/auth/CA_SSL/signingRequestCA.csr -sha512 -signkey $SPLUNK_HOME/etc/auth/CA_SSL/privateKeyCA.key -CAcreateserial -out $SPLUNK_HOME/etc/auth/CA_SSL/signedCertificateCA.pem -days 1095
Budeme vyzvaní k zadaniu hesla od kľúča autority.
Vložené parametre vieme upraviť na základe dokumentácie OpenSSL, ktorú je možné nájsť na ich webe.
Platnosť certifikátu vieme upraviť pomocou prepínača-daysktorý udáva počet dní platnosti certifikátu. Po uplynutí platnosti je potrebné znovuvytvorenie nového certifikátu, alebo vypnutie kontroly platnosti certifikátov na systémoch ktoré ho používajú.
Generovanie certifikátov a kľúčov pre jednotlivé zariadenia1
Po vytvorení vlastnej certifikačnej autority môžeme pristúpiť k tvorbe certifikátov pre jednotlivé servery/zariadenia v našej architektúre. V tomto kroku vytvoríme certifikát pre našu hlavnú inštanciu SPLUNK-u, teda pre indexer s webovým rozhraním. Tento krok môžeme replikovať na každom zariadení, alebo vytvoríme na tejto inštancii všetky potrebné certifikáty a následne ich rozpošleme na jednotlivé zariadenia napríklad pomocou scp.
Jednotlivé kroky vieme upraviť tak, aby sme vytvorili wildcard certifikát ktorý vieme použiť pre všetky koncové zariadenia v našej infraštruktúre, avšak pri prelomení alebo expirácii certifikátu budú všetky zariadenia odpojené.
Odporúčame vytvoriť samostatný adresár v adresári auth/ na uloženie novovytvorených súborov. V našom prípade sme vytvorili adresár SPLUNK_SSL :
mkdir $SPLUNK_HOME/etc/auth/SPLUNK_SSL
Začneme vytvorením privátneho kľúča nášho servera :
$SPLUNK_HOME/bin/splunk cmd openssl genrsa -aes256 -out $SPLUNK_HOME/etc/auth/SPLUNK_SSL/privateKeyHost.key 2048
Budeme vyzvaní k vytvoreniu hesla od kľúča servera.
Vytvoríme požiadavku na podpísanie certifikátu ktorú chceme podpísať certifikačnou autoritou :
$SPLUNK_HOME/bin/splunk cmd openssl req -new -key $SPLUNK_HOME/etc/auth/SPLUNK_SSL/privateKeyHost.key -out $SPLUNK_HOME/etc/auth/SPLUNK_SSL/signingRequestHost.csr
Budeme vyzvaní k zadaniu hesla od kľúča servera.
Taktiež budeme vyzvaní k zadaniu informácií, ktoré sme zadávali aj pri tvorbe našej certifikačnej autority. Postupujeme podľa predošlých pokynov, avšak dbáme na to aby [FQDN] bolo jedinečné, prípadne spadalo do subdomény certifikátu (napríkladsplunk.mojadomena.sk) alebo bolo wildcardom.
Na záver použijeme vytvorenú požiadavku, certifikát certifikačnej autority a jej kľúč na vytvorenie výsledného certifikátu :
$SPLUNK_HOME/bin/splunk cmd openssl x509 -req -in $SPLUNK_HOME/etc/auth/SPLUNK_SSL/signingRequestHost.csr -SHA256 -CA $SPLUNK_HOME/etc/auth/CA_SSL/signedCertificateCA.pem -CAkey $SPLUNK_HOME/etc/auth/CA_SSL/privateKeyCA.key -CAcreateserial -out $SPLUNK_HOME/etc/auth/SPLUNK_SSL/signedCertificateHost.pem -days 1095
Budeme vyzvaní k zadaniu hesla od kľúča certifikačnej autority.
Zlúčenie vzniknutých súborov do formátu vhodného pre SPLUNK2
SPLUNK vyžaduje aby boli súbory ktoré potrebuje spojené do jedného v presne určenom poradí. Konkrétne sa jedná o nasledujúce poradie :
- Podpísaný certifikát zariadenia
- Kľúč od certifikátu zariadenia
- Podpísaný certifikát certifikačnej autority
Konkrétne by mal mať výsledný súbor nasledujúci formát :
-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: xxxxx
DEK-Info: xxxxx
xxxxxxxxxxxxxxxxxxxxxxxxx
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE-----
Spomínaný súbor môžeme jednoducho vytvoriť s pomocou príkazu cat. V tomto prípade by sme mali $SPLUNK_HOME nahradiť cestou, nakoľko náš účet nemusí mať danú premennú nastavenú a príkaz nespúšťame cez ./splunk (v našom prípade /opt/splunk) :
cat /opt/splunk/etc/auth/SPLUNK_SSL/signedCertificateHost.pem /opt/splunk/etc/auth/SPLUNK_SSL/privateKeyHost.key /opt/splunk/etc/auth/CA_SSL/signedCertificateCA.pem > /opt/splunk/etc/auth/SPLUNK_SSL/mergedCertificate.pem
Konfigurácia indexera - prijímateľa logov3 4 5
Na nastavenie certifikátov a SSL je potrebné upraviť súbor server.conf a inputs.conf. Nami vytvorené certifikáty môžeme použiť aj pre webové rozhranie, úpravou súboru web.conf, a tým celú konfiguráciu zjednotiť.
Súbor server.conf v základnej inštalácii existuje, je potrebné ho však editovať. Pôvodný obsah ktorý nieje uvedený nemodifikujeme, upravíme alebo pridáme iba nižšie uvedené záznamy do každej stanzy :
[general]
serverName = splunk.mojserver.sk # Sem vložíme FQDN zariadenia z certifikátu
[sslConfig]
sslPassword = PLAINTEXT_KEY_PASS # Sem vložíme heslo od SSL kľúča v čitateľnom formáte, SPLUNK ho po reštarte zašifruje
enableSplunkdSSL = true # Hodnota TRUE nám povolí SSL, FALSE zakáže
serverCert = $SPLUNK_HOME/etc/auth/SPLUNK_SSL/mergedCertificate.pem # Sem vložíme cestu k zlúčenému certifikátu
cliVerifyServerName = false # Kontroluje či názov servera sedí s certifikátom, nefunguje pri self-signed certifikátoch takže musí byť FALSE
requireClientCert = false # Vyžaduje certifikát od klienta, ale spôsobuje problémy pri splunk CLI takže odporúča sa nechať FALSE
Stanza je konkrétny blok konfigurácie ktorý sa nachádza pod kategóriami. Teda všetko pod
[general]je z rovnakej kategórie až po nasledujúcu stanzu.
Súbor inputs.conf sa v čerstvej inštalácii SPLUNK-u nenachádza a je potrebné ho vytvoriť. Obsah by mal byť nasledujúci :
[SSL]
serverCert = $SPLUNK_HOME/etc/auth/SPLUNK_SSL/mergedCertificate.pem # Sem vložíme cestu k zlúčenému certifikátu
sslPassword = PLAINTEXT_KEY_PASS # Sem vložíme heslo od SSL kľúča v čitateľnom formáte, SPLUNK ho po reštarte zašifruje
sslVersions = tls1.2 # Zoznam verzií SSL ktoré chceme používať
useSSLCompression = true # Použitie kompresie pri prenose dát
[tcp-ssl:9997]
disabled = false # Zapnutie počúvania na danom porte
Stanza
[tcp-ssl:9997]definuje alternatívny názov pre port. Port môžeme ľubovoľne premenovať a aj zmeniť, formát však musí zostať rovnaký.
Pre použitie týchto certifikátov aj pre webové rozhranie stačí editovať súbor web.conf :
[settings]
enableSplunkWebSSL = true # Povolenie SSL na webovom rozhraní
privKeyPath = $SPLUNK_HOME/etc/auth/SPLUNK_SSL/privateKeyHost.key # Cesta k privátnemu kľúču
serverCert = $SPLUNK_HOME/etc/auth/SPLUNK_SSL/signedCertificateHost.pem # Cesta k certifikátu servera
sslPassword = PLAINTEXT_KEY_PASS # Sem vložíme heslo od SSL kľúča v čitateľnom formáte, SPLUNK ho po reštarte zašifruje
sslRootCAPath = $SPLUNK_HOME/etc/auth/CA_SSL/signedCertificateCA.pem # Cesta k certifikátu autority
httpport = 443 # Port na ktorom je poskytované webové rozhranie | Predvolená hodnota : 8000
Konfigurácia forwardera - odosielateľa logov3 4
Pre forwarder je taktiež potrebné editovať súbor server.conf :
[general]
serverName = forwarder.mojserver.sk # Sem vložíme FQDN zariadenia z certifikátu
[sslConfig]
sslPassword = PLAINTEXT_KEY_PASS # Sem vložíme heslo od SSL kľúča v čitateľnom formáte, SPLUNK ho po reštarte zašifruje
serverCert = $SPLUNK_HOME/etc/auth/FORWARDER_SSL/mergedCertificate.pem # Sem vložíme cestu k zlúčenému certifikátu
cliVerifyServerName = false # Verifikovanie názvu servera voči certifikátu, nefunguje pri self-signed certifikátoch takže musí byť FALSE
requireClientCert = false # Vyžaduje certifikát od klienta, ale spôsobuje problémy pri splunk CLI takže odporúča sa nechať FALSE
Následne vytvoríme súbor outputs.conf :
[tcpout]
defaultGroup = ssl-logging # Názov predvolenej skupiny
[tcpout:ssl-logging]
server = splunk.mojserver.sk:9997 # Server a port kam chceme posielať logy
[tcpout-server://splunk.okmavkacka.sk:9997]
useSSL = true # Povolenie SSL
clientCert = $SPLUNK_HOME/etc/auth/FORWARDER_SSL/mergedCertificate.pem # Cesta k zlúčenému certifikátu
sslPassword = PLAINTEXT_KEY_PASS # Sem vložíme heslo od SSL kľúča v čitateľnom formáte, SPLUNK ho po reštarte zašifruje
useACK = true # Ak je TRUE tak forwarder overuje či súbory ktoré odoslal prišli na daný server, ak nie posiela ich znova a čaká na ACK paket od servera
disabled = false # Zapnutie výstupu na porte
useClientSSLCompression = true # Povolenie kompresie v SSL komunikácii
sslVersions = tls1.2 # Zoznam povolených verzií SSL