F5 kasutamine

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

http://en.wikipedia.org/wiki/F5_Networks ...

Seadmete nimekiri koos seadmete omadustega asub aadressil http://www.f5.com/pdf/products/big-ip-platforms-datasheet.pdf.

Tööpõhimõte

  • seadmes kirjeldatakse tavaliselt partitsioonid, mis võimaldavad erinevat liiklust lokaliseerida
  • partitsioonides kirjeldatakse tavaliselt ruuting domeenid, kusjuures üks on default routing domain, millega on seotud vaikelüüs ning mida kaudu käib välja monitoride liiklus
  • ruuting domeenides kirjeldatakse vähemalt üks või enam vlan'i, iga sellise vlaniga on seotud self ip aadress
  • self ip aadressilt paistab vaikimisi lähtuvat ruuting domeenist väljav liiklus

Mõisted

  • TMOS - Traffic Management Operating System
  • system objects - virtual servers, load balancing pools, health monitors, nodes, user accounts
  • TMOS objects - Self IP addressid, VLANs and VLAN groups, route domain, routes, user accounts
  • Local traffic - virtual servers, load balancing pools, pool members, nodes
  • TMM - Traffic Management Microkernel

Võrguskeem

F5 saab ühendada teenuste pakkuvate serverite, nende tulemüüri ja interneti vahele mitmel erineval viisil

  • niisama nö ruuterina
  • eraldi subnetti
  • nn one-arm lülituses

One-arm lülitus

TODO

Eraldi subneti kasutamine

                     ... klient internetist, 195.80.11.11                       
                      |
                  ____|____   195.80.1.1
                 |         |  OpenBSD tulemüür
                 |_________|
                   |  |  |
                   |  |  |---------- F5 haldusvork
                   |  |  
                   |  |----------|-- F5 teenuse vork
                   |             | 10.10.16.443
                   |
                   |
                   |---------|---------------|--- oracle rakendusserverid jms backend tier
                             |               |         
                            _|_             _|_
                           |   |           |   |
                           |___|           |___|
                  
                            SSO             WSRP
                         10.10.13.80

Üks võimalus ssl termineerimisega

  • 195.80.11.11:44444 -> 195.80.1.1 dst nat -> 10.10.16.443:443
  • 10.10.16.443:5555 -> 10.10.13.80:80

Teine võimalus ssl termineerimisega eeldusel, et tulemüüris on mingi trikk (nt mitu ruutingutabelit), et sso arvuti poolt tagasi saadetud vastuspakett ei läheks mitte otse kliendile, vaid f5 peale ja sealtkaudu kliendile

  • 195.80.11.11:44444 -> 195.80.1.1 dst nat -> 10.10.16.443:443
  • f5 võltsib src'i, 195.80.11.11:44444 -> 10.10.13.80:80

Paigaldamine

Esimesel seadme käivitamisel võimalusel omandab F5 haldusliides DHCP kaudu omale halduse ip aadressi. Seejärel saab logida sisse haldusliidesesse ning

  • sisestada litsents
  • öelda mõni jaatus

Seejärel saab hakata kasutama, seadistada partitsioon, vlanid jne.

Seadme halduse ip aadress (ingl. k. management port ip address), vaikelüüs, nimi, paroolid jms toimub valides

System -> Platform

Haldus

  • Veebiliidese kaudu
  • ssh promptist, tmsh või bigpipe abil

Seadme mudeli küsimine

# tmsh show sys hardware
...
Platform
 Name           BIG-IP 1600
 BIOS Revision  F5 Platform: C102 OBJ-0442-01 BIOS (build: 130) Date: 12/28/09
 Base MAC       0:1:d7:a5:1d:d0

System Information
 Type                       C102
 Chassis Serial             f5-ftte-erhb
 Level 200/400 Part         200-0444-09 REV B
 Switchboard Serial          
 Switchboard Part Revision   
 Host Board Serial           
 Host Board Part Revision   

Tarkvara versiooni küsimine

# tmsh 
(tmos)# show /sys version

Sys::Version
Main Package
 Product  BIG-IP
 Version  11.4.1
 Build    635.0
 Edition  Hotfix HF2
 Date     Tue Jan  7 10:31:55 PST 2014

Hotfix List
ID433290  ID421721  ID406390  ID430638  ID430941  ID434283
ID439036  ID429171  ID406916  ID414931  ID427743  ID427527
...

SSH prompt

  • Nimeserveri seadistamine
# bigpipe dns nameservers 10.10.9.4 10.10.9.5
# b dns list
dns {
   nameservers {
      10.10.9.4
      10.10.9.5
   }
}
  • Muudatuste salvestamine
# b save
  • NTP serveri seadistamine
# b ntp servers ntp.loomaaed.ee

NTP

NTP seadistamine toimub valides

System  ››  Configuration : Device : NTP

kus on oluline sisestada NTP serverite sellised nimed, millele ei vasta mitut ip aadressi. Kontrollida saab öeldes

# ntpq -p
                remote           refid      st t when poll reach   delay   offset  jitter
=========================================================================================
 ntp2.loomaaed.tartu.ee     10.80.105.226   2 u   33   64   77    1.157   28.016   8.883
*ntp1.loomaaed.tartu.ee     .GPS.            1 u   32   64   77    1.212   41.178  11.981

Käsitsi aja seadmine toimub nö nagu ikka Linuxis ntpdate utiliidiga.

Failisüsteem

  • /config - seadistusfailid
  • /shared/images - tarkvara uuendustele vastavad tõmmisefailid

Süsteemi seiskamine

Kahe õlalise süsteemi seiskamiseks sobib selline tegevuste järjekord

  • õlad on sünkroonis
  • öelda standby õlal Force Offline
Vasakul üleval pressida ONLINE ja paremal all Force Offline
  • logida standby õlga sisse ja öelda
# shutdown -hP now
  • eemaldada toitekaablid

Partitsiooni juurutamine

Partitsioon on F5 kasutamise instrument, mille abil saab seadmest läbi käivat teatud liiklust lokaliseerida, st eraldada muust liiklusest, millega F5 seade tegeleb. Kõik järgnevad sammud ei ole tingimata vajalikud uue partitsiooni juurutamisel.

Partitsiooni kirjeldamine

Partitsiooni (ingl. k. Administrative Partition) kirjeldamiseks tuleb

System -> Users -> Partition List

kus

  • Name - vm (näiteks, tähistab veebimajutust)
  • Device Group - (linnuke) Inherit traffic group from root folder (device-group-AUUL (Sync-Failover))
  • Traffic Group - (linnuke) Inherit traffic group from root folder (traffic-group-1 (floating))

Märkused

  • objekte ei saa partitsioonide vahel liigutada, objekt tuleb ühes partitsioonis kustutada ning teises uuesti tekitada

VLAN kirjeldamine

Valida sobiv partitsioon ning

Network -> VLANs -> Create

kus

  • Name - tt_vlan (tt on vastava partitsiooni nimi, näiteks)
  • Tag - 1509
  • Resources - Tagged -> 1.1
  • Configuration - jääb vaikimisi väärtustega va source check enabled'iks määrata

Tulemusena tekib selline seade

[root@bigip1:Active] / # ifconfig tt_vlan
tt_vlan   Link encap:Ethernet  HWaddr 00:01:D7:A5:1C:C8  
          inet6 addr: fe80::201:d7ff:fea5:1cc8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:840 (840.0 b)  TX bytes:468 (468.0 b)

Seal on näha nt vlan509 arp paketid

# tcpdump -ni tt_vlan

Route domaini kirjeldamine

Route domaini kirjeldamiseks tuleb valida partitsioon ning

Network -> Route domains -> Create

ning näidata

  • Name - 1509
  • ID - 1509
  • Description - tt_rd
  • strict isolation - (linnuke) Enabled; selle valimisel ei püüa F5 sisemiselt erinevate ruuting domeenide vahel ise liiklust ruutida
  • parent name - None
  • vlans - lisada vajalikud (nt vm_vlan)
  • parition default route domain -> This route domain is the partition default route domain

Märkused

  • dünaamilist ruutingut st BGP, OSPF jt saab kasutada ainult routing domain 0 sees
  • IPv6 saab kasutamda ainult routing domain 0 sees
  • saab teate
01070979:3: The specified vlan (tt_vlan) for route domain 1509 is in use by a self IP.

Self IP näitamine

Kokku on kahe node'iliselt F5 klastril kolm Self IP aadressi

  • kummalgi üks isiklik, nn non-floating
  • üks ühine, nn floating
Non-floating Self IP seadistamine

Non-floating Self IP seadistamiseks (sellelt valjuvad kontrollid jms, ilma snatita liiklus) olla kõnealusel partitsioonil ning

Network -> Self IPs -> Create

kus

  • Name - 10.10.9.140
  • IP Address - 10.10.9.140
  • Netmask - 255.255.255.0
  • VLAN - tt_vlan (valida kõnealune vlan)
  • Port Lockdown - Allow None (None - ei saa pöörduda haldusliidese poole)
  • Traffic Group - traffic-group-local-only (non-floating) ja linnuke valimata

Tulemusena saab vlan509 mõnest muus arvutist seda seda self ip aadressi pingida.

Floating Self IP seadistamine

Floating Self IP seadistamiseks, kõik nagu non-floating puhul, viimases punktis valida, kusjuures floating aadress tuleb seadistada ainult ühes seadmes, teisse levib see automaatselt

  • Traffic Group - traffic-group-1 (floating) ja linnuke valimata

Default gateway näitamine

Vaikelüüsi näitamiseks tuleb valida partitsioon ning

Network -> Routes -> New Route

ning kirjeldada

Name: any
Destination: 0.0.0.0
Netmask: 0.0.0.0
Resource: Use Gateway
Gateway address: 10.12.7.1

Klastri kasutamine

Kui kasutatakse seadmeid klastris, tuleb samad liigutused teha ka teisel seadmel, võttes arvesse floating self-ip kohta tehtud märkust. Tulemusena on seadmed süngist väljas, see käib asja juurde. Lõpuks tuleb aktiivsel seadmel valida Sync device to group koos overwrite configuration valikuga.

Partitsiooni kustutamine

Partitsiooni kustutamine toimub GUI pealt, tegevused on Partitsiooni moodustamisele vastupidises järjekorras

Esmalt kõik mitte-aktiivses õlas ja seejärel aktiivses:

  • virt hostid, profiilid, poolid, monitorid jms

Esmalt kõik mitte-aktiivses õlas ja seejärel aktiivses:

  • Default gateway näitamine
  • Floating Self IP seadistamine
  • Non-floating Self IP seadistamine
  • Route domaini kirjeldamine (Network -> Route domains -> Create)
  • VLAN kirjeldamine (Network -> VLANs -> Create)
  • Partitsiooni kirjeldamine (System -> Users -> Partition List)

HTTP teenuse seadistamine

Tööpõhimõte

HTTP teenuse pakkumiseks seostatakse sellised objektid

 Virtual Server ---> Destination Address (nt 10.0.7.77)
                ---> Service Port (nt 443)
                ---> Protocol (nt TCP)
                ---> HTTP profile

                ---> Load balancing pool    ---> Pool Member 1    ---> Node 1   ---> Node 1 monitor
                                            ---> Pool Member 2    ---> Node 2   ---> Node 2 monitor
                                            ---> Pool monitor

                ---> SNAT Pool              ---> Member List

                ---> SSL Profile (Client)

                ---> iRule

kus

  • Node vastab kõige primitiivsemal kujul teenust pakkuvale backend serveri konkreetsele õlale; õlg on kirjeldatud tema ip aadressiga
  • Node Monitor - Node sisaldab lisaks backend serverit monitoorivat monitori; kuna puudub info teenuse port koht, siis on see monitor tavaliselt 'icmp ping'
  • Pool Member ütleb teenust pakkuva backend serveri õla + teenuse port aadressid
  • Load balancing pool ütleb lisaks Pool memberitele kõrgema taseme monitori, mis tavaliselt monitoorib backend teenust http kihis
  • Virtual server ütleb lisaks backend load balancing pool infole frontend ip aadressi ja pordi, tls krüpto jms

Pool monitori tekitamine

Monitor kontrollib real serveri töötamist, mitte-töötamisel lülitab ta vastava real serveri load balanceing poolist välja. Monitori kirjeldamiseks tuleb valida

Local Traffic -> Monitors -> Create

ning täita lahtrid nt selliselt

  • Name - loomaaed_tartu_ee_pool_monitor
  • Description - loomaaed_tartu_ee_pool_monitor
  • Type - HTTP
  • Send String (ühel real)
GET / HTTP/1.1\nHost:www.auul.pri.ee\nUser-Agent:AUUL-f5-monitor\nX-Forwarded-For:AUUL-f5-monitor\r\n\r\n
  • Receive String
HTTP/1.1 200

Isetehtud monitori asemel võib sobida kasutada ka mõnda vaikimisi olemasolevat monitori, mis tingimata ei pea olema http monitor.

SNAT pooli tekitamine

SNAT pooli tekitamiseks tuleb valida

Local Traffic -> Address Translation -> SNAT Pool List -> Create

ning näidata

  • Name - loomaaed_tartu_ee_snat
  • Member List -> IP Address -> Add -> Finish

Peale SNAT pool member ip seadistamist saab teda võrgust pingida.

Load balancing pooli tekitamine

Pooli kirjeldamiseks tuleb valida

Local Traffic -> Pools -> Pool List -> Create

ning

  • Name - loomaaed_tartu_ee_pool
  • Health Monitors - loomaaed_tartu_ee_pool_monitor

ning

Resources New Members alt (.13.36 on real serveri aadress)

  • Node Name - 10.10.13.36
  • Address - 10.10.13.36
  • Port - 80

ja valida

Add -> Finished

Pooli tekitamise ajal saab Pooli lisada memberid, saab ka hiljem.

Pooli memberi lisamine

Olemasolevasse pooli memberite lisamiseks tuleb

Local Traffic -> Pools -> valida pool -> Members -> Add

ning näidata

  • Node Name - ip address
  • Address - ip address
  • Service Port - port

Ning

Configuration -> Advanced

juurest

  • Health Monitors -> Inherit From Pool
  • IP Encapsulation -> Inherit From Pool

Virtual Serveri kirjeldamine

Virtual Serveri kirjeldamiseks tuleb kokku ühendada kolm objekt

  • snat pool
  • load balancing pool realserveritega
  • virt serveri ip aadress, millelt ta teenust pakub

Selleks tuleb valida

Local Traffic -> Virtual Servers -> Virtual Servers List -> Create

ning näidata

  • Name - loomaaed_tartu_ee
  • Destination address - 10.10.13.169
  • Type - Standard
  • Service Port - 80
  • HTTP Profile - http
  • VLAN and Tunnel Traffic - Enabled on ...
  • VLANs and Tunnels - arendus_vlan
  • Source Address Translation - SNAT
  • SNAT Pool - loomaaed_tartu_ee_snat

seejärel valida Resources

Load Balancing

  • Default Pool - arendus_pool

OneConnect profiili kasutamine

Selleks, et F5 ei koormaks Apache veebiserverit paljude TCP ühendustega tuleb kasutada KeelAlive'i

  • Apache poolt
KeepAlive On
MaxKeepAliveRequests 0
KeepAliveTimeout 15
  • F5 peal Virtual Host juures lülitada sisse OneConnect profiil
 OneConnect Profile -> oneconnect

HTTP Compression profiili kasutamine

  • brauseri ja F5 vahel HTTP andmeid pakitakse
  • F5 ja Apache backendi vahel HTTP andmeid ei pakita

Selleks tuleks

  • F5 peal Virtual Host juures lülitada sisse
HTTP Compression Profile -> httpcompression
  • Apache peal disableda deflate jms, nt mooduli disablemise teel
# a2dismod deflate

X-Forwarded-For päise lisamine

Iseenesest saab X-Forwarder-For päise lisada nt sellised ridu iRule sees kasutades


when CLIENT_ACCEPTED {
  ..
  set CLIENTIP [regsub {%[0-9]+} [IP::remote_addr] ""]
}
 
when HTTP_REQUEST {
  set LOGDST "imool_org"
  HTTP::header remove X-Forwarded-For
  HTTP::header replace X-Forwarded-For $CLIENTIP
...
}

kus

  • CLIENT_ACCEPTED sektsioonis väärtustatakse muutja CLIENTIP
  • HTTP_REQUEST sektsoonis kasutatakse seda muuutujad HTTP::header direktiivi abil

Päringute logimine logiserverisse

TODO

Sticky sessioonid

Selleks, et sama brauseriga kasutaja sattuks oma pöördumistega järjest sama backend Apache poole sobib kasutada

Local Traffic  ››  Virtual Servers : Virtual Server List  ››  installer_id_ee_ssl

ning näidata nt

Default Persistence Profile -> cookie
Fallback Persistence Profile -> source_addr

HTTP SSL offload seadistamine

Eesmärgiks on sellisel viisil https:// teenuse seadistamine selliselt, et F5 seadmes toimub krüpto ja sealt edasi tavaline http realserveriga

brauser - https:// ---> F5 (ssl offload) --- http:// ---> realserver

Teine variant https'iga tegeleda oleks lihtsalt https liiklusele vastavate ip pakettide ruutimine brauseri ja realserveri vahel.

Tundub, et F5 https vastab Apache sellisete šifrite komplektile

SSLCipherSuite RC4:HIGH:!CAMELLIA:!MD5:!EXPORT:!DES:!DHE:!EDH:!aNULL

Tulemus

$ sslscan 10.10.6.202:443 | grep Accepted
   Accepted  SSLv3  256 bits  AES256-SHA
   Accepted  SSLv3  168 bits  DES-CBC3-SHA
   Accepted  SSLv3  128 bits  AES128-SHA
   Accepted  SSLv3  128 bits  RC4-SHA
   Accepted  TLSv1  256 bits  AES256-SHA
   Accepted  TLSv1  168 bits  DES-CBC3-SHA
   Accepted  TLSv1  128 bits  AES128-SHA
   Accepted  TLSv1  128 bits  RC4-SHA

SSL sertifikaadi kasutamise ettevalmistamine

Kui sertifikaat ja ahel laadida Common partitsiooni, siis on nad kasutatavad kõigis partitsioonides. Üks võimalus on laadida ülesse eraldi failidena

  • ahel, mille suhtes on tõenäoliselt palju sertifikaate välja antud, paigutada Common partitsiooni
  • salajane võti, virtual serveri partitsiooni
  • sertifikaat, mis vastab salajasele võtmele, virtual serveri partitsiooni
Local Traffic -> SSL Certificate List -> Import

(tegelikult)

System -> File Management -> SSL Certificate List

kus

  • esmalt laadida võti nimega wildcard.loomaaed.tartu.ee
  • valida nimekirjast tekkinud võti ja lisada sertifikaat

Tulemusena tekib 'Certificate & Key' tüüpi sissekanne.

Märkused

  • Lisaks saab F5 enda vahenditega mugavalt self-signed sertifikaadi tekitada, seejuures tuleb arvestada, et Subject Alternative Name kasutamisel tuleb lahtrisse kirjutada sarnaselt
DNS: yks.imool.org, DNS: teine.imool.org

Sertifikaadi uuendamine

Seadme sertifikaati ja ahela sertifikaati (või ahela bundlet) võiks reeglina kasutada nii, et tema nimi on mingi üldisel kujul, st ei sisalda aasta-arvu, märget võtme pikkuse kohta vms. Kuna seda nime kasutatakse SSL Client profiilides, siis teatud mahtudest edasi on palju lihtsam teha sertifikaadi muudatus ühes kohas, selles nimetatud objektis ning muudatus mõjub edasi profiilide kaudu.

Kui sertifikaati uuendatakse võiks võimalusel jääda võti samaks, sel juhul F5 seadistustes ei tule muud teha, kui laadida uus sertifikaat vastava C & K sissekande juures (Import asendab olemasoleva sertifikaadi, st ei teki kahte sertifikaati sisaldav objekt)

System  ››  File Management : SSL Certificate List  ››  www.loomaaed.tartu.ee - > Certificate sakk -> Import

Kui uuendatakse korraga ahela sertifikaati ja seadmesertifikaati, siis sobib nt selline protseduur

  • uuendada esmalt ahela nime taga olev sertifikaat (objekti nime säilitades) - F5 lubab sedasi ahela sertifikaadi sisse laadida vaatamata sellele, et ahel läheb sisuliselt kakti; https kliendi jaoks paistab kohe ahel praktiliselt ühe seadme sertifikaadi pikkusega
  • seejärel uuendada seadmesertifikaadi nime taga olev sertifikaat - tulemusena ahel muutub taas töötavaks ja protseduur on sellega lõppenud

SSL kliendi profiil

https:// teenuse seadistamiseks on vajalik koostada SSL kliendi profiil, klient tähistab antud juhul asjaolu, et kõnealune profiil tegeleb brauseriga. Profiili tekitamiseks tuleb valida

Local Traffic -> Profiles -> SSL -> Client -> Create

ning näidata (seejuures tuleb valida Custom linnuke vastaval real)

  • General Properties -> Name - loomaaed_tartu_ee_ssl_profile
  • Parent Profile - clientssl
  • Configuration -> Advanced -> Certificate
  • Configuration -> Advanced -> Key
  • Configuration -> Advanced -> Chain

Virtual Serveri seadistamine

Virtual Serveri seadistamine toimub muus osas tavalisel viisil, aga asemel/lisaks tuleb näidata

  • port 443
  • SSL Profile (Client) -> loomaaed_tartu_ee_ssl_profile

Kliendi sertifikaadiga autentimine

Selleks, et toimuks kliendi autentimine tema kliendi sertifikaadi alusel tuleb SSL kliendi profiilis lisaks näidata

  • Configuration -> Advanced -> Trusted Certificate Authorities - valida sobiv bundle
  • Client Authentication -> Client Certificate - request
  • Certifica
  • TODO

HTTPS tcp ühenduste proksimine

Nagu eelnev punkt üldises osas, aga ssl profiile pole vaja kasutada

  • http profile - none
  • ssl profile client ja server - tühjad
  • irule'id puuduvad

HTTP teenuse seadistamine, millel puudub backend

Reeglina seadistatakse F5 virtuaalne server nö interneti ja mingi rakendusserveri vahele. Teatud juhtudel, nt http redirect tegemiseks, pole backend rakendusserver vajalik kuna http redirect Location headeri saab F5 ise saata vastuseks päringule. Sellise virtual serveri tekitamiseks on vajalik tekitada virtual server näidates ainult

  • Name
  • Destination address
  • Service port
  • HTTP Profile - http

Muu hulgas puudub monitor ja default pool. Resouces juures sobib kasutada nt sellist irule'i

when CLIENT_ACCEPTED
{
	set CLIENTIP [regsub {%[0-9]+} [IP::remote_addr] ""]
}

when HTTP_REQUEST
{
  set LOGDST "hasart_rdr"
  HTTP::redirect "http://www.imool.org/
}

või nt

when HTTP_REQUEST
{
  switch -glob [string tolower [HTTP::host]]
    {
      "*miki.ee" { HTTP::redirect "https://mikihiir.ee/" }
      "*moraal.ee" { HTTP::redirect "https://www.auul.pri.ee/moraal/" }
      "*imool.net" { HTTP::redirect "https://www.auul.pri.ee/imool-net/" }
      default { HTTP::redirect "https://www.auul.pri.ee/" }	
    }
}

F5 seadme kasutamine Oracle iAS v. 10.1.2.3.0 lahendusega

Kasulikud lisamaterjalid

F5 seadme ettevalmistamine tema taga töötava iAS keskkonnaga koos töötamiseks toimub template kasutamise abil. Template kasutamise tulemusena tekib muusaes http profiil ja vastav pool. Template kasutamisel tuleb teha sellised valikud

  • Virtual server: 10.12.7.31 - ssl offloader 80 ja 443
  • template q. what uniq -- loomaaed
  • oracle as 10g portal server -> virt. serer ip -> .7.32, port -> 443
  • which servers do you want to reference -> .7.11:7778 -> Add
  • oracle as 10g portal sso -> virt addres -> .7.15 (uus aadress):443
  • which servers do you want to reference -> 10.12.7.11:4443 (see ias osa tuleb muuta pärast)

iRule kasutamine

iRule tehnika abil saab kirjeldada sündmustele vastavaid tegevusi. Nt mis hakkab juhtuma kui teatud ip aadressilt pöördutakse ja küsitakse teatud uri. iRule koosneb kolmest erinevast elemendist

event
operator
command

iRule kasutamiseks tuleb sooritada kaks tegevust

  • valida partitsioon ning kirjeldada iRule
  • valida Virtual Server -> Resources ning ühendada talle iRule külge

iRule kirjeldamine

iRule kirjeldamiseks tuleb valida

Local Traffic -> iRules -> iRules List -> Create

kus

  • Name - nt 'http_rdr_ftp_aso_ee_debian'
  • Definition -
when HTTP_REQUEST {
if { [HTTP::uri] contains "debian"} {
  HTTP::redirect "http://ftp.aso.ee/debian/"
  }
}

kus

  • when järel on kirjas, millise sündmuse (ingl. k. event) puhul reeglit kasutatakse, antud juhul http päringu puhul
  • contains on operaator, mis kontrollib, kas muutuaja HTTP::uri sisus esineb sõne 'debian'
  • HTTP::redirect on command mis suunab kliendi edasi näidatud aadressile

iRule kasutamine

iRule kasutamiseks tuleb kõnealune iRule seostada mõne virtual hosti ressurssiga valides

Local Traffic -> Virtual Servers -> Virtual Server List -> virtual serveri nimi -> Resources -> iRules -> Manage

ning valida nimekirjast varem kirjeldatud iRule.

Tulemusena, kui klient esitab päringu http://10.10.9.110/debian/, siis suunatakse ta edasi aadressile http://ftp.aso.ee/debian/

$ wget --server-response http://10.10.9.110/debian
--2012-10-01 23:20:23--  http://10.10.9.110/debian
Connecting to 10.10.9.110:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.0 302 Found
  Location: http://ftp.aso.ee/debian/
  Server: BigIP
  Connection: Keep-Alive
  Content-Length: 0
Location: http://ftp.aso.ee/debian/ [following]

Kasulikud lisamaterjalid

Template and Wizards kasutamine

TODO

OCSP kontrolli tegemine

TODO

Klaster

TODO

Sünkimine

Kui klastri õlad ei ole süngis, öeldakse avalehel nt

Changes Pending

Kui klastri õlad on süngis, öeldakse avalehel

In Sync

Sünkimisega ei saa sünkida igasugusid muudatusi, nt võrguseadmete seadistamisi (sh Self-IP väärtused) jms mitte; saab sünkida iRulesid, virtual servereid jms.

Kui soovitakse aktiivset õlga sünkida passiivsele, tuleb olles aktiivsel õlal, mille tunnuseks on avalehel

ONLINE (ACTIVE)

ja Common partitsioonis valida

Devices -> seadmenimi (Self)

ja seejärel, ning jätta Overwrite Configuration juures linnuke märkimata

Sync -> Sync device to group -> Sync

Edu korral öeldakse nt

Operation Status

Configsync Mode: Push
Transferring UCS to peer...
Installing UCS on peer...
Obtaining results of remote configuration installation...
Saving active configuration...
Current configuration backed up to /var/local/ucs/cs_backup.ucs.
Product : BIG-IP
Version : 10.2.2
Hostname: UCS   : bigip1.sise.it
          System: bigip2.sise.it
Installing --shared-- configuration on host bigip2.sise.it
Installing configuration...
Post-processing...
Reading configuration from /config/low_profile_base.conf.
Reading configuration from /defaults/config_base.conf.
Reading configuration from /config/bigip_sys.conf.
Reading configuration from /config/bigip_base.conf.
Reading configuration from /usr/share/monitors/base_monitors.conf.
Reading configuration from /config/profile_base.conf.
Reading configuration from /config/daemon.conf.
Reading configuration from /config/bigip.conf.
Reading configuration from /config/bigip_local.conf.
Loading the configuration ...

Checking configuration on local system and peer system...
Peer's IP address: 10.0.21.56
Synchronizing Master Keys...
Saving active configuration...

Seadistamine

Selle otsustamiseks, kumb F5 klastri komponent on passiivne või aktiivne saab kasutada selliseid andmeid

  • F5 seadmete vahel nö spetsiaalse protokolli alusel toimuv andmevahetus
  • F5 seadmed pingivad oma võrkude vaikelüüse
  • F5 seadmed jälgivad oma vlanides toimuvat liiklust
  • F5 seadmed jälgivad oma interface'ide olekut (link up/down)

Käsitsi ümberlülitamine

Aktiivses õlas öelda Force to Standby

Avalehel ACTIVE -> Force to Standby

Märkused

Kui klastri teine õlg tegevuse üle võtab, kirjutatakse tema, st uue aktiivses rollis oleva seadme logisse midagi sellist

Dec 16 09:13:59 10.10.9.56 notice sod[4986]: 010c0053:5: Active for traffic group /Common/traffic-group-1.
Dec 16 09:13:59 10.10.9.56 notice sod[4986]: 010c0019:5: Active

Varundamine

Põhimõtteliselt piisab varundamiseks kui salvestada /config kataloogi sisu väljapoole seadet, nt

# tar cf /tmp/f5-20120928-backup.tar /config

ja siis see ära kopeerida ning /tmp kataloogist tar kustutada.

# tmsh
# save /sys ucs /var/tmp/failinimi.ucs

Automaatse varunduse korraldamiseks sobib kasutada nt rsnapshot tarkvara, Rsnapshot.

backup_script   /usr/bin/ssh root@bigip1.moraal /shared/rsnapshot-ucs-backup/bigip-backup.sh      placeholder_dir_name_1
backup  root@bigip1.sise.kit:/shared/rsnapshot-ucs-backup/      bigip1.moraal/

kus

  • vahetult failisüsteemi kopeerimise eel käivitatakse F5 seadmes skript bigip-backup.sh (touch faili tulemusena on rsync logist hea jälgida millise arvutiga on parasjagu tegemist)
# cat /shared/rsnapshot-ucs-backup/bigip-backup.sh
#!/bin/bash
touch /shared/rsnapshot-ucs-backup/000-rsnapshot-backed-up-hostname-bigip1.sise.kit
tmsh save /sys ucs /shared/rsnapshot-ucs-backup/bigip1-5-55.ucs
  • seejärel varundatakse nö tavalisel viisil kataloog /shared/rsnapshot-ucs-backup

Partitsiooni, routing domaini, vlan, virtual server ja pooli kasutamise näide

Esmalt kirjeldada keskkond, kus virtual server ja pool tööle hakkab

  • Tekitada partitsioon tt_vlan
  • Valida partitsioon tt_vlan ning tekitada sinna vlan 509
  • Valida partitsioon ja kirjeldada routing domain
  • Valida partitsioon ja seadistada VLANile self ip 10.10.9.78

Kirjeldada virtual server ja pool

  • Tekitada SNAT pool
  • Tekitada Load balancing pool

Versiooni uuendamine

Uuenduste kohta jagatakse infot F5 hotfix matrix aadressil http://support.f5.com/kb/en-us/solutions/public/9000/500/sol9502.html.

Uuendused esinevad reegline iso tõmmise kujul, logides kasutajan sisse aadressil https://support.f5.com/, nt

  • BIGIP-11.4.1.608.0.iso - versiooni uuendamiseks uus versioon (nt 11.4.0 -> 11.4.1 või 11.4.x -> 12.y.z)
  • Hotfix-BIGIP-11.4.1-635.0-HF2.iso - järgmise hotfix (HF) rakendamiseks, versioon ei muutu (nt HF1 -> HF2)

Kasutamiseks tuleb nad esmalt kopeerida F5 seadmesse valides vastavalt

System -> Disk Management -> Image List | Hotfix List -> Import

Parasjagu kasutuses olevate volume set'ide, versioonide ja hotfixide (buildide) numbreid (build numbrile vastab HF number) saab küsida nt nii

[root@bigip1:Active:In Sync] config # tmsh
root@(bigip1)(cfg-sync In Sync)(Active)(/Common)(tmos)# show sys software status

-------------------------------------------------
Sys::Software Status
Volume  Product  Version  Build  Active    Status
-------------------------------------------------
HD1.1    BIG-IP   11.4.1  651.0     yes  complete
HD1.2    BIG-IP   11.4.1  637.0      no  complete
HD1.3      none     none   none      no  complete

kus

  • partitsioonile ehk volume set'ile HD1.1 on paigaldatud HF5 (mida tähistab build 651) ja partitsioonile HD1.2 on paigaldatud HF3 (mida tähistab build 637)
  • parasjagu on seade käivitatud HD1.1 partitsioonilt

kustutamiseks

# tmsh
(tmos) # delete sys software volume HD1.2

Klastri uuendamine

F5 seadmete klastri uuendamisel on lähtepuntiks sünkroniseeritud seadistustega seadmed, tegevused tuleb teha sellises järjekorras, esmalt B (tavaolekus standby rollis töötav) seadmel

  • lülitatakse B seade Force Offline režiimi (vasakul üleval ONLINE -> ekraani alt 'Force Offline')
  • uuendatakse B seade (seejuures seade rebooditakse; tulemusena lähevad seadmed süngist välja, haldusliideses on tekst Changes Pending)
  • lülitatakse B seade Release Offline abil tavalisse ONLINE režiimi tagasi
  • lülitatakse changes pending olekus B seade aktiivseks (millega kaasneb automaatselt senise aktiivse muutumine standby'ks) valides aktiivsel seadmel vasakul üleval (ACTIVE) -> Force to Standby

ja seejärel A (tavaolekus active rollis töötav, praegu standby olekus) seadmel

  • lülitatakse A seade Force Offline režiimi
  • uuendatakse A seade (mis enne muudatuste algust aktiivses rollis töötas; seejuures rebooditakse, seadmed lähevad veel rohkem süngist välja)
  • lülitatakse A seade Release Offline abil tavalisse ONLINE režiimi tagasi
  • sünkroniseeritakse seadistused B -> A (st parasjagu aktiivselt -> standby seadmele); kasutades Overwrite configuration linnukest
  • lülitatakse A tagasi aktiivselt (st esialgne aktiivne tagasi aktiivseks) valides B seadmel vasakul üleval (ACTIVE) -> Force to Standby

Uuendamise lõppemise tunnuseks on

  • brauseris on vastav teade ja saab sisse logida
  • /var/log/ltm lõpus on midagi sellist
Jan 19 19:31:21 bigip2 notice mcpd[6795]: 01070404:5: Add a new Publication for publisherID bd and filterType 0x200
Jan 19 19:31:22 bigip2 notice sod[5786]: 01140030:5: HA proc_running bd is now responding.
Jan 19 19:31:22 bigip2 notice sod[5786]: 010c0049:5: Tmm ready - links up.
Jan 19 19:31:22 bigip2 info lacpd[7490]: 01160016:6: Connected to failover service.
Jan 19 19:31:29 bigip2 notice tmm1[19748]: 01010029:5: Re-enabling general logging; held 4 messages.
Jan 19 19:31:29 bigip2 notice tmm[19748]: 01010029:5: Re-enabling general logging; held 8 messages.
Jan 19 19:31:29 bigip2 notice tmm1[19748]: 01010029:5: Clock advanced by 830 ticks
Jan 19 19:31:29 bigip2 notice tmm[19748]: 01010029:5: Clock advanced by 830 ticks

Hotfix rakendamine

  • Laadida HF tõmmis seadmesse, tulemusena ilmub Available Images nimekirja uus sissekanne (failisüsteemis asuvad tõmmised kataloogis /share/images)
System -> Software Management -> Hotfix List -> Import
  • Paigaldada standby seadmele linnukesega tähistatud hotfix öeldes Install ja näidates, millisele kõvakettale (HD1) selle mitte-aktiivsele volume set'ile (nt 1; kui näidata järgmine number mida pole, siis tekitatakse uus volume set) ta läheb

Fail:F5-1.gif

Automaatselt paigaldatakse esmalt sinna alus-tõmmise versioon + hotfix otsa (tundub, et sel põhjusel ei maksa nö baasversiooni-tõmmist seadmest kustutada) tegevuste käiku saab jälgida ssh sisselogides aegajalt ning df öeldes, nt

[root@bigip:Active:Standalone] config # df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg--db--sda-set.1.root
                      403M  203M  180M  53% /
/dev/mapper/vg--db--sda-set.1._config
                      3.0G   73M  2.8G   3% /config
/dev/mapper/vg--db--sda-set.1._usr
                      2.2G  1.7G  443M  80% /usr
/dev/mapper/vg--db--sda-set.1._var
                      3.0G  338M  2.5G  12% /var
/dev/mapper/vg--db--sda-dat.share.1
                       30G  4.8G   24G  18% /shared
/dev/mapper/vg--db--sda-dat.log.1
                      6.9G   91M  6.5G   2% /var/log
none                  2.0G  916K  2.0G   1% /dev/shm
none                  2.0G   25M  2.0G   2% /shared/rrd.1.2
none                  2.0G  9.4M  2.0G   1% /var/tmstat
none                  2.0G  1.4M  2.0G   1% /var/run
prompt                4.0M   28K  4.0M   1% /var/prompt
none                  2.0G     0  2.0G   0% /var/loipc
/shared/images/BIGIP-11.4.1.608.0.iso
                      1.5G  1.5G     0 100% /mnt/tm_install/10742.i9FVbD
/dev/mapper/vg--db--sda-set.1.root
                      403M  203M  180M  53% /mnt/tm_install/10742.h9p45d
/dev/mapper/vg--db--sda-set.1._config
                      3.0G   73M  2.8G   3% /mnt/tm_install/10742.h9p45d/config
/dev/mapper/vg--db--sda-set.1._usr
                      2.2G  1.7G  443M  80% /mnt/tm_install/10742.h9p45d/usr
/dev/mapper/vg--db--sda-set.1._var
                      3.0G  338M  2.5G  12% /mnt/tm_install/10742.h9p45d/var

Käsurealt on samaväärne öelda midagi sellist

 # tmsh install sys software hotfix Hotfix-BIGIP-11.4.1-651.0-HF5.iso volume HD1.1  

Paigaldamise ajal paistab progress selline

Fail:F5-4.gif

Seejärel tuleb näidata milline on uus Boot Location ning, kas sinna kopeeritakse ka kasutusel olevad seadistused üle (virtual serverid, irule'd, poolid jms) valides

System -> Software Management -> Boot Locations

Fail:F5-2.gif

kus

  • Valida 'Install Configuration' ja sobiva konfiguratsiooniga 'Source Volume'
  • Activate

Seejärel teeb seada endale reboodi ja käivitatakse uuelt aktiivselt volume set'ilt uus versioon.

Nüüd tõnäoliselt ütlevad seadmete haldusliidesed, et seadmetel on Changes Pending, aga siiski lülitada kasutajad ümber uuendatud seadmele valides aktiivse seadme haldusliideses

 ACTIVE -> Force standby

Seejärel kontrollida, kas teenused töötavad.

Järgnevalt tuleb uuendada saranselt enne uuenduste algust aktiivses rollis olnud seade, mis on parasjagu standby olekus. Tulemusena on mõlemad seadmed uuendatud, kui seadistused on veel rohkem süngist väljas. Seejärel tuleb seadmete seadistused sünkida parasjagu aktiivselt -> standby seadmele kuigi tõenäoliselt haldusliideses öeldakse vastupidi

Sync Summary	
Status	Changes Pending
Summary	There is a possible change conflict between seade_yks and seade_kaks.
Details	Recommended action: Synchronize seade_kaks to group device-group-IMOOL

ja Sync Status on

Awaiting initial Sync with Changes Pending

Kogu uuendamise protseduuri vältel on see ainuke sünkimine, kusjuures seadistusi süngitakse uute partitsioonide vahel selleks, et viimati töötanud vana komplekt oleks esialgses seisus ja vajadusel kasutatav. Ja lõpuks lülitada enne muudatuste algust aktiivses rollis olnud seade aktiivsesse rolli.

Märkused

  • Tegevuste ajal on ja proovides püüda vahetult peale rebooti sisselogida on mõistlik jälgida mõlemas seadmes /var/log/ltm logi
# tail -f /var/log/ltm
  • Abiks võib osutada seadmetele serial konsooli külgeühendamine
  • Ebaõnnestunud muudatuse puhul saab tagasi pöörduda valides Boot Location alt viimati kasutusel olnud boot locationi ning näidata
Install Configuration -> No
  • Mõnel juhul on vaja suurendada failisüsteeme, neid tuleks uuendada vaid mitteaktiivses osas, klastri puhul mõlemas seadmes
  • Tundub, et peale rebooti on seade mõni minu 'Changes pending' asemel 'Disconnected' olekus ja see käib asja juurde.

Võrguhooldustööd

Kui F5 klastrit puudutavates võrkudes toimuvad hooldustööd ja on eesmärk pakkuda teenust ühe õla abil ning et teine õlg ei hakkaks kuidagi loksuma ja segama (nt split brain), siis võib olla asjakohane teises õlas öelda

avalehel ONLINE -> Force Offline

ning peale hoolduse lõppu

avalehel ONLINE -> Release Offline

Serial konsool

F5 seadmele nö tavalist KVM (keyboard-video-monitor) seadet külge ühendada ei saa, ainult viis niisama etherneti peal töötaval ühendusel ssh kasutamise asemel on kasutada serial konsooli. Alustuseks tasub küsida F5 seadmelt seriali kiirust

[root@bigip1:Active] config # tmsh show sys console

Sys::Console
----------------
Baud Rate  19200

ja seejärel ühenduda, nt

$ cu -l /dev/ttyS0 -s 19200
Connected.

BIG-IP 10.2.2 Build 852.0
Kernel 2.6.18-164.11.1.el5.1.0.f5app on an x86_64
bigip1.loomaaed login: root
Password: 
Last login: Thu Oct  4 17:24:05
[root@bigip1:Active] config #

Oracle WebLogic kasutamine

TODO

App Security

TODO

Logimine f5 failisüsteemi lokaalselt

Krüpto cipher logimiseks sobib kasutada ajutiselt nt

when CLIENT_ACCEPTED
{
	set CLIENTIP [regsub {%[0-9]+} [IP::remote_addr] ""]
}
when HTTP_REQUEST
{
  ..

  log "moraal.ee cipher: $CLIENTIP [SSL::cipher version]"
 
  ...
}

Logimine võrgus töötavasse logiserverisse

Logimine tuleb seadistada kahe erineva osa jaoks

  • F5 seadme süsteemsete komponentide logi
  • HTTP virtual serverite logimine toimub iRule abil

HTTP päringute logimise ettevalmistamine

Esmalt tuleb tekitada välisele logiserverile viitav pool. TODO

Logimine võrgu töötavasse logiserverisse HSL abil

HSL (High Speed Logging) https://support.f5.com/kb/en-us/products/big-ip_ltm/manuals/product/bigip-external-monitoring-implementations-11-3-0/2.html võimaldab logida efektiivselt mitmesse logiserverisse.

Tööpõhimõte

TODO

Seadistamine

Tekitada logiserveri monitor

Tekitada tavalisel viisil monitor, nt ping abil.

Tekitada logiserverite pool Common partitsiooni

Logiserverite pooli Common partitsiooni tekitamiseks tuleb töötada Common partitsioonis ja valida

Local Traffic -> Pools -> Pool List -> Create

ning nö tavalisel viisil tekitada pool näidates ühe või enam memberit, milleks on syslog logiserverid.

  • Name - syslog_logiserver_1_pool
Tekitada Remote High Speed Log Destination

Remote High Speed Log Destination tekitamisel tuleb valida (neid võib olla üks või mitu)

System -> Logs -> Configuration -> Destination -> Create

kus

  • Name - syslog_logiserver_1_rhsl
  • Type - Remote High-Speed Log
  • Pool Name - syslog log serveri pool nimi
  • Protocol - TCP või UDP
Tekitada Formatted Remote High Speed Log Destination

Formatted Remote High Speed Log Destination tekitamisel tuleb valida (neid võib olla üks või mitu)

System -> Logs -> Configuration -> Destination -> Create

kus

  • Name - syslog_logiserver_1_frhsl
  • Type - Remote Syslog
  • Syslog Format - Syslog
  • High-Speed Log Destination - syslog_logiserver_1_rhsl
Tekitada Publisher

Publisher tekitamiseks tuleb valida

System -> Logs -> Configuration -> Publisher -> Create

kus

  • Name - syslog_logiserver_1_ja_logiserver_2_plr
  • Destinations -> syslog_logiserver_1_rhsl ja syslog_logiserver_2_rhsl
F5 irule abil logi saatmine logiserverisse

F5 virtual serveri logimine kutsutakse esile irule täiendamisega, ntwebcache accel sisse lülitada ning irule peab sisaldama sobivat HSL::open ja HSL::send direktiivi

when CLIENT_ACCEPTED
{
        set CLIENTIP [regsub {%[0-9]+} [IP::remote_addr] ""]
        set hsl [HSL::open -publisher /Common/imre_syslog_rhsl_pub]
}
 
when HTTP_REQUEST
{
        set LOGDST "web_moraal_ee"
        set LOGURI [HTTP::uri]
        set LOGCLIENT [regsub {%[0-9]+} [IP::remote_addr] ""]
        set LOGHTTPMETHOD [HTTP::method]
        set LOGREQSTART [clock clicks -milliseconds]
        set LOGREQSTARTFORMATED [clock format [clock seconds] -format {%Y-%m-%dT%T%z}]
        set LOGLBMEMEBER [regsub {%[0-9]+} [LB::server addr] ""]
         
        if {[HTTP::header exists "User-Agent"]}
        {
            set LOGUA [HTTP::header User-Agent]
        }
        else
        {
            set LOGUA "-"
        }
 
        HTTP::header replace X-imretest-Forwarded-For $CLIENTIP
        HTTP::header remove X-imretest-Forwarded-Proto
 
        pool web_moraal_ee_pool
}
 
when CACHE_RESPONSE
{
    HSL::send $hsl "<141>$LOGDST: $LOGREQSTARTFORMATED $LOGCLIENT 127.0.0.1 $LOGHTTPMETHOD \"$LOGURI\" \"$LOGUA\" [expr {[ clock clicks -milliseconds ] - $LOGREQSTART}]"
}
 
when HTTP_RESPONSE
{
        HTTP::header remove "X-Powered-By"
        HTTP::header remove "X-Varnish"
        HTTP::header remove "Via"
        HTTP::header remove "Server"
        set LOGSTATUS [HTTP::status]
 
        HSL::send $hsl "<141>$LOGDST: $LOGREQSTARTFORMATED $LOGCLIENT $LOGLBMEMEBER $LOGHTTPMETHOD \"$LOGURI\" $LOGSTATUS \"$LOGUA\" [expr {[ clock clicks -milliseconds ] - $LOGREQSTART}]"
}

kus

Tulemusena ilmub logiserverisse virtual serverile vastavasse faili rida

root@log:/srv/log/192.168.0.249# tail -n 1 web_moraal_ee.2023-06-04.log
Jun  4 22:05:51 192.168.0.249 web_moraal_ee: 2023-06-04T22:05:50+0300 10.235.106.155 10.6.13.13 POST "/api/es-public/midagi.php" 200 "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0" 1423

kus

  • kaks esimest positsiooni, st 'Jun 4 22:05:51 193.40.0.249' täidab rsyslog; sealt edasi vastab sissekanne nii nagu HSL::send väljendab
  • viimasel positsioonil on päringu teenindamiseks kulunud aeg
  • '10.235.106.155 10.6.13.13' on vastavalt päringu esitanud ip aadress ja päringut teenindanud backend pool member ip aadress; kui teenindab cache, siis backend postitsioonil on ip aadress 127.0.0.1

Statistika kogumine

TODO

SNMP kasutamine

SNMP seadistamine toimub haldusliideses valides

System -> SNMP

kus

  • näidata lubatud ip aadressid
  • kirjeldada community stringid

Vajalikud MIB arhiivid saab kopeerida sama F5 haldusliidese avalehelt, kaks .tar.gz faili. Tulemusena peaks töötama nt käsk

$ snmpwalk -v 2c -c communitinimi 10.100.9.54 SNMPv2-MIB::sysName.0
SNMPv2-MIB::sysName.0 = STRING: bigip1.auul

Sorriserver kasutamine

Tööpõhimõte

TODO

Veebiserveri seadistamine

TODO

F5 seadistamine

TODO

Autentimine vastu LDAP kataloogi

F5 kasutajate autentimiseks vastu Active Directory LDAP kataloogi sobib valida (antud juhul autentimiseks kontrollitakse, kas kasutaja poolt sisestatud kasutajanimi ja parool sobivad ldap vastu autentimiseks)

System  ››  Users : Authentication

ja täita lahtrid sarnaselt

Fail:F5-3.gif

kus

  • User Template lahtrid on täidetud
  • Bind lahtrid on tühjad

Kasutaja autentimise testimiseks käsurealt sobib öelda nt

$ ldapsearch -x -H ldap://10.10.9.4 -D "git-f5@imool.ee" -w parool -b "OU=Teenuskontod,DC=imool,DC=ee"

Kasulikud lisamaterjalid

Märkused

  • kui peale F5 haldusliidesesse sisselogimist öeldakse, siis ei maksa sellest ehmuda, nii võib olla kuna brauser satub cookide tõttu sellisesse partitsiooni, kus vastav irule puudub
Instance not found:/toodang-auul/sisene_auul_ee.irule
  • restart, peale ssh'ga sisselogimist
# bigstart restart
  • routing domainides võrgu kasumine
# rdexec 111 ping 10.0.111.55
# rdexec 507 telnet 10.10.6.98 80
Trying 10.10.6.98...
Connected to 10.10.6.98.
Escape character is '^]'.
^]
telnet> Connection closed.

Debugimine

tcpdump kasutamine

Partitsiooni liikluse salvestamine (nö niisama shellist, mitte tmsh)

# tcpdump -vvv -s0 -nni /vm/vm_vlan:nnnp -w /shared/failinimi.pcap host 10.10.26.126 and port 443
# tcpdump -vvv -s0 -nni 0.0:nnnp -w /shared/20141211/0.0.pcap

kus

  • /vm/vm_vlan juures tähistab esimene vm partitsiooni ning vm_vlan partitsioonis olevat vlan'i
  • nnn - tähistab nö verbaalsust, p on seotud promicious mode'iga või selle puudumisega, tundub, et parem on seda mitte kasutada
  • -s0 - salvestada kogu pakett
  • -w - salvestab faili
  • host 10.10.26.126 and port 443 - filter

QKview

Aadressile https://ihealth.f5.com/ saab üles laadida nn QKviews faile, selle moodustamiseks tuleb haldusliideses valida

System -> Support -> Support Snapshot -> QKView

ja öelda Start.

ssldump

Salvestatud võrguliiklust saab teatud tingimustel dekrüptida, selleks on vaja

  • Salvestatud võrguliikluse .pcap nn dump faili
  • vastava teenuse salajast võtit, nt https:// private key - sedasi saab kasutaja avada ka igasuguseid .pcap faile, st pole turvaline viis suhelda nt support partneriga
  • salajase võtmele ja konkreetsele võrguliikluse dumpile vastvat PMS (Pre Master Secret) faili - saab avada vaid vastavat .pcap faili

.pms faili moodustamiseks sobib öelda

# ssldump -r dump.pcap -k imool.ee.key -M dump.pcap.pms

Kasulikud lisamaterjalid

ID kaardiga autentimine

ID kaardiga autentimisel on mõnes mõttes vaja valida kahe olulise viisi vahel

  • kogu veebikoht nõuab id kaardiga autentimist
  • veebikoha mingi /uri nõuab id kaardiga autentimist

Kogu veebikoht nõuab id kaardiga autentimist

ID kaardiga autentimise ja tuleb 'SSL kliendi profiil' profiili juures teha mõned muudatused

TODO

Seejärel iseenesest hakatakse kliendilt küsima sertifikaati (mille esitamisega seoses peab ta sisestama PIN1 koodi). Praktiliselt on vaja veel F5 irule juures kirjeldada sertifikaadiga tegelemist suuremal või vähemal määral

  • kogu sertifikaadi saatmine backend rakendusele
  • sertifikaadi mingi elemendi, nt subject saatmine rakendusele
  • sertifikaadi CRL või OCSP kontroll

Nt selline irule

 when HTTP_REQUEST
 {
   log "SISENE_IMOOL: [HTTP::uri]"
 }
 
 when HTTP_REQUEST_SEND
  {
    clientside
      {
        set ssl_cert [SSL::cert 0]
        HTTP::header replace "WL-Proxy-Client-Keysize" [SSL::cipher bits]
        HTTP::header replace "WL-Proxy-Client-Cert" [b64encode $ssl_cert]
        HTTP::header replace "Ssl-Client-S-Dn" [X509::subject $ssl_cert]
        log "SISENE_IMOOL x509 issuer: [X509::issuer $ssl_cert]"
        log "SISENE_IMOOL x509 subject: [X509::subject $ssl_cert]"
      }
   }
 }
 

kus

  • TODO
  • mõnusamaks tegelemiseks saab kasutada F5 logimise võimalusi
# tail -f /var/log/ltm
..
Mar 29 18:30:49 bigip1 info tmm3[18527]: 01220002:6: Rule /test/sisene_imool_ee_ssl.irule <HTTP_REQUEST_SEND>:\
  SISENE_IMOOL x509-subject: serialNumber=37003212713,GN=IMRE,SN=OOLBERG,CN=OOLBERG\,IMRE\,37003212713,OU=authentication,O=ESTEID (DIGI-ID),C=EE

Veebikoht konkreetne /uri nõuab id kaardiga autentimist

Olgu eesmärk käivitada aadressil https://dh.moraal.ee/ selline teenus

  • https://dh.moraal.ee/ avaleht on tavalisel viisil kättesaadav, ei nõuta autentimist; sellele vastab Apache backend ja pool dh_moraal_ee
  • https://dh.moraal.ee/ref1 nõuab id kaardiga autentimist; sellele vastab üks pool
  • https://dh.moraal.ee/ref2 nõuab id kaardiga autentimist; sellele vastab teine pool
  • toimub ainult kliendilt sertifikaadi nõudmine (sertifikaadi andmeid backendile ei saadeta; saaks kasutada logimisel vms)

SSL profiil nö tavalisel https:// viisil, kuid pöörata tähelepanu sellistele parameetritele (reegline irule sees saab neid valikud override'ida)

  • Options - All Options Disabled
  • Renegotiation - Enabled
  • Unclean Shutdown - Enabled
  • Client Certificate - ignore
  • Frequency - once
  • Retain Certificate - Enabled
  • Certifiate Chain Travel Depth - 3
  • Trusted Certificate Authorities - ID
  • Advertised Certificate Authorities - ID

irule

 when CLIENT_ACCEPTED
 {
	set CLIENTIP [regsub {%[0-9]+} [IP::remote_addr] ""]
 }
 when HTTP_REQUEST
 {
	set LOGDST "dh_moraal_ee"

	switch -glob [HTTP::uri] {
		"/ref1*" {
			if { [SSL::cert count] <= 0 } {
				HTTP::collect
				SSL::session invalidate
				SSL::authenticate once
				SSL::authenticate depth 3
				SSL::cert mode require
				SSL::renegotiate
			}
			pool dh_mk1_moraal_ee_pool
		}
		"/ref*" {
			if { [SSL::cert count] <= 0 } {
				HTTP::collect
				SSL::session invalidate
				SSL::authenticate once
				SSL::authenticate depth 3
				SSL::cert mode require
				SSL::renegotiate
			}
			pool dh_mk2_moraal_ee_pool
		}
		default {
			pool dh_moraal_ee_pool
		}
 	}
 } 
 
 when CLIENTSSL_CLIENTCERT { 
	HTTP::release
 }
 

kus

  • teenusega seoses on kirjeldatud kolm pool'i
  • if lausete väljajätmisel nõutakse kliendisertifikaati rangemalt (säilitades if { ... } vahel oleva sisu
  • kui default { } puudub, siis idee poolest peaks töötama, aga reaalselt jääb avaleht vahel laadimina ja ootama

Riigiga seotud internetiühenduse teenusepakkujate nimekirja esitamine

Vahel on ikkagi abiks ISP täpsusega kontrollida teenustele ligipääsemist või teha niisama järeldusi. Riigiga seotud internetiühenduse teenusepakkujate nimekirja esitamine kasutades alusena AS numbreid võiks töötada nt sellise skriptiga

 $ cat s-dotted.sh 
 #!/bin/bash
 
 IFS=$'\n'
 
 # for a in `wget -q ftp://ftp.ripe.net/ripe/stats/delegated-ripencc-latest -O - | grep '|EE|' | grep ipv4 | sed -r 's/\|/\ /g' | awk {'print $4 " " $5'}`; do
 for a in `cat delegated-ripencc-latest.tmp | grep '|EE|' | grep ipv4 | sed -r 's/\|/\ /g' | awk {'print $4 " " $5'}`; do
 
 net=`echo $a | awk {'print $1'}`;
 mask=`echo $a | awk {'print $2'}`;
 
 cidr=$((32-`echo "l($mask)/l(2)" | bc -l | cut -f 1 -d "."`))
 
 if [ $cidr -lt 21 ]; then
   who=`whois $net/$cidr | grep ^org-name | head -n 1 | sed -r 's/org-name:\ +//'`
 #  echo "$who  $net/$cidr"
   mask_dotted=`ipcalc $net/$cidr | grep Netmask | awk {'print $2'}`
   echo "$who  $net/$mask_dotted"
 fi
 
 done
 

kus

  • vajalik et on paigaldatud ipcalc ja whois paketid
  • IFS=$'\n' - nii for käib mööda reavahetusi
  • bc -l - selle võtmega bc oskab arvutada logaritmi
  • $cidr -lt 21 - esitatakse vaid suuremad võrgud

Käivitamine paistab sedasi, NB! bash shell on vajalik, mitte sh shell vms

$ ./s-dotted.sh | sort
Aktsiaselts MaveCom  10.22.208.0/255.255.240.0
Aktsiaselts MaveCom  10.79.112.0/255.255.240.0
AS Eesti Nelekom  10.46.0.0/255.255.128.0
AS Eesti Nelekom  10.106.96.0/255.255.224.0
AS Eesti Nelekom  10.126.96.0/255.255.224.0
AS Eesti Nelekom  10.250.160.0/255.255.224.0
...

Misc irules

  • URI elementide ümberkirjutamine
 if {[HTTP::uri] starts_with "/ref1/"} {
   HTTP::uri [string map {/ref1/ /dh/} [HTTP::uri]]
   pool dh_mk1_moraal_ee_pool 

 } elseif {[HTTP::uri] starts_with "/ref2/"} {
   HTTP::uri [string map {/ref2/ /dh/} [HTTP::uri]]
   pool dh_mk2_moraal_ee_pool 

 } else {
   pool dh_mk2_moraal_ee_pool
   HTTP::respond 200 content "<html><body>dh<br><a href=\"/ref1/\">/ref1/</a><br><a href=\"/ref2/\">/ref2/</a></body></html>"
 } 
 

kus

  • uri komponentide käsitlemine, probleemiks on ocsp get päringu esitamisel '/' märkigest nö jagu saamine
switch [HTTP::method] {
  "GET" {
      switch -glob [HTTP::path] {
         "/ssl*" {
            HTTP::uri "/ejbca/publicweb/status/ocsp[URI::path [HTTP::uri] 2][URI::basename [HTTP::uri]]"
            pool ocsp_moraal_ee_pool
         }
 ....

kus

admin ja root parooli muutmine

  • admin on GUI kasutajanimi (+ tmsh kasutajanimi kui üle ssh sisse logida)
  • root on shell kasutajanimi
  • nad on kaks sõltumatut kasutajat, st neil võib olla erinev parool

admin kasutaja parooli saab vist GUI peal edukalt vahetada. Shellist vahetamiseks

  • enne muudatust võiks igaks juhuks korraldada root kasutaja jaoks ssh võtmega sisselogimise (/root/.ssh/authorized_keys tavalisel viisil)
  • lähtepunktina on seadmed sünkis
  • mitteaktiivsel seadmel
tmsh modify auth password root
tmsh modify auth user admin prompt-for-password
tmsh save /sys config

tulemusena on seadmed kollaselt süngist väljas

  • aktiivsel seadmel
tmsh modify auth password root
tmsh modify auth user admin prompt-for-password
tmsh save /sys config

tulemusena on seadmed punaselt süngist väljas

  • aktiivsel öelda sync koos konfi üle kirjutamisega

Muudatuse kehtestamise kontrollimiseks

  • veenduda, et saab ssh ja GUI kaudu sisse logida
  • veenduda, et peale rebooti saab ssh ja GUI kaudu sisse logida

Kasulikud lisamaterjalid

rdr virtual server

rdr virtual server tegeleb ainult irule abil päringute töötlemisega, nt http redirectimise eesmärgil.

csr moodustamine

Uue sertifikaadi ostmisel kasutatava csr moodustamiseks sobib avada

System  ››  File Management : SSL Certificate List -> Create

ning täita lahtrid nt selliselt

  • Name - wildcard.moraal.ee
  • Issuer - Certificate Authority
  • Division - *.moraal.ee
  • Organization - Moraal OÜ
  • Locality - Tartu
  • State or Provice - Tartumaa
  • Country - Estonia EE (eraldi latris)
  • E-mail Address - täitmata
  • Subject Alternative Name - DNS:*.moraal.ee,DNS:moraal.ee
  • Key Type - RSA
  • Size - 2048 bits
  • Challenge Password, Confirm Password - täitmata

kus

  • kuna iseenesest domeeni wildcard aadress ei sisalda domeeni ennast, siis vajadusel SAN juures näidata kõik nimevariandid (sh mida kasutati juba Common Name lahtris)

Seejärel tuleb moodustatud csr alla laadida ja üles laadida CA keskkonda. Seejuures saab arvestada, et CA keskkonnas saab põhimõtteliselt kõiki csr koostamisel näidatud väärtusi muuta v.a. key type ja size

Spanning Tree Protocol

STP (Spanning Tree Protocol) protokolli abil arvutatake võrgus L2 kihis convergence, lühidalt öeldes, tehakse nii, et võrgus pakettide switchimine töötab ja pole loop'isid. Eriti asjakohane on see võrguseadmetel, mis on omavahel ühendatud mitme füüsilise kaabliga. Sellisel juhul STP ühe füüsilise ühenduse riknemisel võtab automaatselt kasutusse teise. Kuna F5 seadmed on tavaliselt ühendatud L2 mõttes mitte-dubleeritud viisil, siis soovitatakse F5 ltm seadmel STP välja lülitada

Network -> Spanning Tree -> Options -> Mode -> Disabled

Lisaks on iga interface juures näha stp olek, nt

Network -> Interfaces -> 1.1 -> STP Configuration -> Advanced

kus peale eelmise sammu täitmist on paista

STP Mode -> Disable

Muud parameetrid on nö sisselülitatud olekus paista, aga reaalselt ei ole nad kehtestatud kuna üldiselt on F5 seadmel STP välja lülitatud. STP võib välja lülitada teenuse pakkumise ajal, ühel seadmel enne, teisel pärast kusjuures seejuures seadmed ei lähe süngist välja.

Šifrite kasutamine

# tmm --clientciphers 'ECDHE:DEFAULT:!SSLv3:!DHE:RSA+HIGH'
       ID  SUITE                            BITS PROT    METHOD  CIPHER    MAC     KEYX
 0: 49200  ECDHE-RSA-AES256-GCM-SHA384      256  TLS1.2  Native  AES-GCM   SHA384  ECDHE_RSA 
 1: 49192  ECDHE-RSA-AES256-SHA384          256  TLS1.2  Native  AES       SHA384  ECDHE_RSA 
 2: 49172  ECDHE-RSA-AES256-CBC-SHA         256  TLS1    Native  AES       SHA     ECDHE_RSA 
 3: 49172  ECDHE-RSA-AES256-CBC-SHA         256  TLS1.1  Native  AES       SHA     ECDHE_RSA 
 4: 49172  ECDHE-RSA-AES256-CBC-SHA         256  TLS1.2  Native  AES       SHA     ECDHE_RSA 
 5: 49170  ECDHE-RSA-DES-CBC3-SHA           168  TLS1    Native  DES       SHA     ECDHE_RSA 
 6: 49170  ECDHE-RSA-DES-CBC3-SHA           168  TLS1.1  Native  DES       SHA     ECDHE_RSA 
 7: 49170  ECDHE-RSA-DES-CBC3-SHA           168  TLS1.2  Native  DES       SHA     ECDHE_RSA 
...

Vastuste puhverdamine

Üldiselt toimub http puhverdamine selliselt, et

  • moodustatakse globaalne puhverdamise profiil (nt prod_webacc)
  • f5 virtual host juures seostatakse puhverdamise profiil selle virtual hostiga

Puhverdamise profiilil on sellised omadused

  • kasutada olev mälu
  • sissekannete arv
  • maksimaalne kehtivusaeg
  • milliste tunnuste alusel leitakse puhverdatavad objektid (nt nn faililaiend, suurus)

Lisaks saab puhverdada irule abil spetsiifiliselt määratud uri poole pöördumisel saadavaid vastuseid, nt

if { [HTTP::uri] ends_with ".msi" || [HTTP::uri] ends_with ".exe" || [HTTP::uri] ends_with ".dmg" }
  {
    CACHE::enable
  }

F5 haldab automaatselt puhvri sisu, st vahe kasutust leidvad vastused eemaldatakse jne, puhrvi sisu saab käsitsi kontrollida selliselt

# tmsh show /ltm profile ramcache prod_webacc
# tmsh delete /ltm profile ramcache prod_webacc

Kuna iga puhverdamise profiili jaoks reserveeritakse hulk mälu ja seda F5 ei saa kasutada muuks, siis soovitatakse kasutada mõnda globaalset profiili ja mitte hakata nt iga virtual host jaoks tekitama oma puhverdamise profiili.

F5 samaaegsete ühenduste piiramine

Väited

  • piiratakse samaaegsete ühenduste koguarvu
  • piiratakse samaaegsete ühtenduste arvu kliendi ip aadressi kohta
  • vaikimisi ei rakendata piirangut, aga logitakse ühenduste koguarvu ja arvu kliendi ip aadressi kohta
  • piirangu ületajale esitatakse http 503 koodiga vastus
  • globaalse ja kliendi ip aadressi kohta ühenduste arvu piirangu ületajatele rakendatakse piirangut nii, et nö tagasipöördujaid teenindatakse
  • tagasipöördujad on sellistelt ip aadressidelt tulevad tcp ühendused, mida on viimase 10 minuti jooksul f5 kaudu backendi ühendatud
  • sageduspiirangut ei rakendata (st uute tcp ühenduste tekitamisi ajaühiku kohta ei piirata)

irule sisaldab selleks nt

when CLIENT_ACCEPTED {
...
   table set -subtable moraal-connlimit "[IP::client_addr][TCP::client_port]" "" 120
   table set -subtable moraal-connlimit:[IP::client_addr] [TCP::client_port] "" 120
}

when HTTP_REQUEST {
...
		"POST" {
            log local0. "moraal-connlimit-global: [table keys -subtable moraal-connlimit -count]"
            log local0. "moraal-connlimit-per-ip [IP::client_addr]: [table keys -subtable moraal-connlimit:[IP::client_addr] -count]"
            log local0. "moraal-tagasipoorduja [IP::client_addr]: [table lookup -subtable moraal-tagasipoorduja [IP::client_addr]]"

			if {[table keys -subtable moraal-connlimit:[IP::client_addr] -count] >= 10 || ([table keys -subtable moraal-connlimit -count] >= 500 && [table lookup -subtable moraal-tagasipoorduja [IP::client_addr]] !=1)}
			{
                log local0. "moraal-blokeerib [IP::client_addr]"
				HTTP::respond 503 content "toimub hooldus"
				return
			}
            ...
			switch -glob [string tolower [HTTP::path]] {
				"/update/" {
					HTTP::uri "/"
					if {[active_members moraal_pool] > 0} {
					    table set -subtable moraal-tagasipoorduja "[IP::client_addr]" "1" 600
						pool moraal_pool
					} else {
            ...
}
..

when CLIENT_CLOSED {
  table delete -subtable moraal-connlimit "[IP::client_addr][TCP::client_port]"
  table delete -subtable moraal-connlimit:[IP::client_addr] [TCP::client_port]
}

kus

  • samaaegsete ühtenduse alusel ligipääsu piiramiseks kasutatakse F5 mällu moodustatud tabel tüüpi objekte, tabel sisaldab key-value andmeid
  • F5 mällu moodustatakse 'id-gw-connlimit' nimeline tabel ja kliendi pöördumisel lisatakse sinna key nimega 'kliendi-ip-kliendi-port' ja tühja value väärtusega; tabeli elemendi aegumise aeg on 2 minutit
  • F5 mällu moodustatakse 'id-gw-connlimit-kliendi-ip' nimeline tabel ja kliendi pöördumisel lisatakse sinna key nimega 'kliendi-ip' ja value väärtuseks kliendi src port; tabeli elemendi aegumise aeg on 2 minutit (selliseid tabeleid on nii palju kui erinevaid ip aadresse kust pöördutakse)
  • F5 mällu moodustatakse 'id-gw-tagasipoorduja' nimeline tabel ja kliendi http port /update/ päringu teenindamisel lisatakse sinna key nimega 'kliendi-ip' ja value väärtusega "1"; tabeli elemendi aegumise aeg on 10 minutit
  • enne http post päringu teenindamist kontrollitakse, kas pöördumine toimub suure kasutamise tingimustes (globaalne samaaegsete pöördumiste limiit on ületatud) ja kui on, siis esitatakse pöördujale http 503 teade; erandiks on nö tagasipöördujad, keda teenindatakse tavalisel viisil
  • 'id-gw-connlimit' ja 'id-gw-connlimit-kliendi-ip' tabelitest kustutab sama irule sissekandeid, kui mingil põhjusel sissekannet ei kustutata, siis ta aegub 2 minuti jooksul
  • 'id-gw-tagasipoorduja' tabelist sissekandeid ei kustutata, nad kustuvad aegumise teel
  • selline käsitlus tagab, et kui kasutaja on alustanud uuendamise protsessi, ta saab selle lõpule viia (eeldusel, et tema pöördumise ip aadress kogu protsessi ajal säilib)

Tekib sarnane logi

Oct 25 23:04:10 bigip1 info tmm1[19871]: Rule /toodang-moraal/moraal_ssl.irule <HTTP_REQUEST>: moraal-connlimit-global: 21
Oct 25 23:04:10 bigip1 info tmm1[19871]: Rule /toodang-moraal/moraal_ssl.irule <HTTP_REQUEST>: moraal-connlimit-per-ip 10.204.62.115%526: 3
Oct 25 23:04:22 bigip1 info tmm1[19871]: Rule /toodang-moraal/moraal_ssl.irule <HTTP_REQUEST>: moraal-connlimit-global: 19
Oct 25 23:04:22 bigip1 info tmm1[19871]: Rule /toodang-moraal/moraal_ssl.irule <HTTP_REQUEST>: moraal-connlimit-per-ip 10.204.62.115%526: 2

Summarse HTTP päringute arvu piiramine ajaühikus

when CLIENT_ACCEPTED
{
        set CLIENTIP [regsub {%[0-9]+} [IP::remote_addr] ""]
}
when HTTP_REQUEST
{
        set LOGDST "veebiserver_moraal_ee"
        # set connarv 15

        HTTP::header replace Proxy-Client-IP $CLIENTIP
        HTTP::header remove X-Forwarded-For
        HTTP::header replace X-Forwarded-For $CLIENTIP

	switch [HTTP::method] {
		"GET" {
                switch -glob [HTTP::uri] {
                    "/conns-for-ip-per-day" {
                        if { [matchclass [IP::remote_addr] equals private_net] } {
                            set response "<html><head>Client Connections - conns-for-ip-per-day</head><p><body>"
	                        append response "Count:[table keys -subtable "conns-for-ip-per-day" -count]<br>"
                            foreach ip [table keys -subtable conns-for-ip-per-day] {
                                append response "$ip = [table lookup -subtable conns-for-ip-per-day $ip]<br>"
                            }
                            append response "klient [IP::remote_addr]"
                            append response "</body></html>"
                            HTTP::respond 200 content $response Content-Type "text/html"
                            return
                        }
                    }
                    "/conns-for-ip-per-month" {
                        if { [matchclass [IP::remote_addr] equals private_net] } {
                            set response "<html><head>Client Connections - conns-for-ip-per-month</head><p><body>"
	                        append response "Count:[table keys -subtable "conns-for-ip-per-month" -count]<br>"
                            foreach ip [table keys -subtable conns-for-ip-per-month] {
                                append response "$ip = [table lookup -subtable conns-for-ip-per-month $ip]<br>"
                            }
                            append response "klient [IP::remote_addr]"
                            append response "</body></html>"
                            HTTP::respond 200 content $response Content-Type "text/html"
                            return
                        }
                    }
                    "/conns-for-ip-per-day-tyhjendamine" {
                        if { [matchclass [IP::remote_addr] equals private_net] } {
                           table delete -subtable conns-for-ip-per-day -all
                           HTTP::respond 200 content "conns-for-ip-per-day-tyhjendamine tabel tyhendati"
                           return
                        }
                    }
                    "/conns-for-ip-per-month-tyhjendamine" {
                        if { [matchclass [IP::remote_addr] equals private_net] } {
                           table delete -subtable conns-for-ip-per-month -all
                           HTTP::respond 200 content "conns-for-ip-per-month-tyhjendamine tabel tyhendati"
                           return        
                        }
                    }
                    "/imretestib.html" {
                        if { [matchclass [IP::remote_addr] equals veebiserver_moraal_ee_wl] } {
                            pool veebiserver_moraal_ee_pool
                        } else {
                            if {[table lookup -subtable "conns-for-ip-per-day" "[IP::client_addr]"] == ""} {
                                set conns_per_day_old 0
                            } else {
                                set conns_per_day_old [table lookup -subtable "conns-for-ip-per-day" "[IP::client_addr]"]
                            }
                            if {[table lookup -subtable "conns-for-ip-per-month" "[IP::client_addr]"] == ""} {
                                set conns_per_month_old 0
                            } else {
                                set conns_per_month_old [table lookup -subtable "conns-for-ip-per-month" "[IP::client_addr]"]
                            }
                            if {$conns_per_day_old < 5 && $conns_per_month_old < 8 } {
                                pool veebiserver_moraal_ee_pool
                            } else {
                                HTTP::respond 403 content "conns_per_day_old on $conns_per_day_old ja conns_per_month_old on $conns_per_month_old - ei teeninda"
                                return
                            }
                        }
                    }
                    default {
                        HTTP::respond 200 content "tundmatu /uri"
                        return
                    }
                }
	    } "POST" {
	            switch -glob [HTTP::uri] {
	                "/tsa" {
                        if { [matchclass [IP::remote_addr] equals veebiserver_moraal_ee_wl] } {
                            pool veebiserver_moraal_ee_pool
                        } else {
                            if {[table lookup -subtable "conns-for-ip-per-day" "[IP::client_addr]"] == ""} {
                                set conns_per_day_old 0
                            } else {
                                set conns_per_day_old [table lookup -subtable "conns-for-ip-per-day" "[IP::client_addr]"]
                            }
                            if {[table lookup -subtable "conns-for-ip-per-month" "[IP::client_addr]"] == ""} {
                                set conns_per_month_old 0
                            } else {
                                set conns_per_month_old [table lookup -subtable "conns-for-ip-per-month" "[IP::client_addr]"]
                            }
                            if {$conns_per_day_old < 5 && $conns_per_month_old < 8 } {
                                pool veebiserver_moraal_ee_pool
                            } else {
                                HTTP::respond 403 content "conns_per_day_old on $conns_per_day_old ja conns_per_month_old on $conns_per_month_old - ei teeninda"
                                return
                            }
                        }
                    }
                    default {
                        HTTP::respond 200 content "tundmatu /uri"
                        return
                    }
                }
	    }
	}
		
}
when HTTP_RESPONSE
{
    if {[HTTP::status] equals "200"} {
        set conns_per_day_new [expr $conns_per_day_old + 1]
        set conns_per_month_new [expr $conns_per_month_old + 1]
        table set -subtable conns-for-ip-per-day "[IP::client_addr]" $conns_per_day_new 86400 86400
        table set -subtable conns-for-ip-per-month "[IP::client_addr]" $conns_per_month_new 2678400 2678400
    }
    HTTP::header remove "X-Powered-By"
    HTTP::header remove "X-Varnish"
    HTTP::header remove "Via"
    HTTP::header remove "Server"
}

kus

.php päringute teenindamise piiramine

when HTTP_REQUEST
{
	set LOGDST "www_moraal_ee"
	set request [HTTP::request]
	set www_moraal_ee_conns_for_ip_per_interval_limit 10

	HTTP::header replace HTTPS on
	HTTP::header replace Proxy-Client-IP $CLIENTIP
	HTTP::header remove X-Forwarded-For
	HTTP::header replace X-Forwarded-For $CLIENTIP

   # [matchclass [IP::remote_addr] equals private_net]
   if { [HTTP::path] equals "/www_moraal_ee_conns_for_ip_per_interval_blocked" && ([matchclass [IP::remote_addr] equals cert_net] || [matchclass [IP::remote_addr] equals private_net]) } {
            set response "<html><head>Client Connections - www_moraal_ee_conns_for_ip_per_interval_blocked_table - rakendumise limiit $www_moraal_ee_conns_for_ip_per_interval_limit</head><p><body>"
	        append response "Count:[table keys -subtable "www_moraal_ee_conns_for_ip_per_interval_blocked_table" -count]<br>"
            foreach ip [table keys -subtable www_moraal_ee_conns_for_ip_per_interval_blocked_table] {
                append response "$ip = [table lookup -subtable www_moraal_ee_conns_for_ip_per_interval_blocked_table $ip]<br>"
            }
            append response "klient [IP::remote_addr]"
            append response "</body></html>"
            HTTP::respond 200 content $response Content-Type "text/html"
            return
    }

   if { [HTTP::path] equals "/www_moraal_ee_conns_for_ip_per_interval" && ([matchclass [IP::remote_addr] equals cert_net] || [matchclass [IP::remote_addr] equals private_net]) } {
            set response "<html><head>Client Connections - www_moraal_ee_conns_for_ip_per_interval_table - rakendumise limiit $www_moraal_ee_conns_for_ip_per_interval_limit</head><p><body>"
	        append response "Count:[table keys -subtable "www_moraal_ee_conns_for_ip_per_interval_table" -count]<br>"
            foreach ip [table keys -subtable www_moraal_ee_conns_for_moraal_per_interval_table] {
                append response "$ip = [table lookup -subtable www_moraal_ee_conns_for_ip_per_interval_table $ip]<br>"
            }
            append response "klient [IP::remote_addr]"
            append response "</body></html>"
            HTTP::respond 200 content $response Content-Type "text/html"
            return
    }

    if {[active_members www_moraal_ee_sorry_pool] > 0 && not([matchclass [IP::remote_addr] equals private_net])}
    {
        pool www_moraal_ee_sorry_pool
    }
    else
    {
        if { [HTTP::path] ends_with "/index.php"}
        {
            set www_moraal_ee_conns_for_ip_per_interval [table lookup -subtable "www_moraal_ee_conns_for_ip_per_interval_table" "[IP::client_addr]"]
            if {"$www_moraal_ee_conns_for_ip_per_interval" == ""}{set www_moraal_ee_conns_for_ip_per_interval 0}

            if { $www_moraal_ee_conns_for_ip_per_interval < $www_moraal_ee_conns_for_ip_per_interval_limit }
            {
                incr www_moraal_ee_conns_for_ip_per_interval 1
                table set -subtable www_moraal_ee_conns_for_ip_per_interval_table "[IP::client_addr]" $www_moraal_ee_conns_for_ip_per_interval 60 60
                # log local0. "imre20200708 pass www_moraal_ee - [HTTP::path]"
            } else
            {
                table set -subtable www_moraal_ee_conns_for_ip_per_interval_blocked_table "[IP::client_addr]" 1 86400 86400
                HTTP::respond 403 content "<html><title>Paringute piirang on yletatud</title><body>Paringute piirang on yletatud - ei teenindata</body></html>"
                log local0. "imre20200708 block $CLIENTIP www_moraal_ee - [HTTP::uri]"
                return
            }
        }
        pool www_moraal_ee_pool
        
    }
}

Post päringu sisu käigult muutmine

when CLIENT_ACCEPTED
{
        set CLIENTIP [regsub {%[0-9]+} [IP::remote_addr] ""]
}
when HTTP_REQUEST
{
        set LOGDST "www_moraal_ee"
        HTTP::host "www.auul.pri.ee"
        

   if { [HTTP::method] eq "POST" } {

      set collect_length 2048

      if {[HTTP::header Content-Length] eq ""}{
         set collect_length $collect_length

      } elseif {[HTTP::header Content-Length] == 0}{
         unset collect_length

      } elseif {[HTTP::header Content-Length] > $collect_length}{
         set collect_length $collect_length

      } else {
         set collect_length [HTTP::header Content-Length]

      }

      if {[info exists collect_length]} {
         HTTP::collect $collect_length
      }
   }
        
        pool www_auul_pri_ee_pool

}

when HTTP_REQUEST_DATA {
    regsub -all "asendatav_tekst" [HTTP::payload] "asendav_tekst" newdata
    HTTP::payload replace 0 [HTTP::payload length] $newdata
}

HTTP vastuse käigult muutmine

TODO

  • Stream moodul

ecc kasutamine

Tundub, et 2020 aastal on sobiv ja F5 v. xx.y peal ainuvõimalik kasutada virtual serveri juures paralleelselt rsa ja ecc krüptot. Selleks tuleb talitada nii nagu nö tavaliselt kuid lisaks kirjeldada ssl profiili juures lisaks rsale ecc krüpto materjali kasutamine

TODO

ning kasutada ssl client profiilis nt ciphers väärtust

ECDHE_ECDSA:DEFAULT:!SSLv3:!TLSv1:!TLSv1_1:!DHE:RSA+HIGH:!3DES

Active-passive liikmetega pool

Valida

Local Traffic  ››  Pools : Pool List  ››  pooli_nimi_pool

ning näidata

  • Load Balancing method - Round Robin
  • Priority Group Activation - Less than ...
  • Available members - 1

ning Current members juures

  • a õlg - Priority Group 1
  • b õlg - Priority Group 0

Kasulikud lisamaterjalid

Supported Products -> BIG-IP LTM / VE -> TMOS Management Guide for BIG-IP Systems
Supported Products -> BIG-IP LTM / VE -> Configuration Guide for BIG-IP Local Traffic Manager

2023 aasta alguse tähelepanekud

vlan moodustamine

root@(moraal-f5)(cfg-sync Standalone)(Active)(/prt-moraal-dev)(tmos)# create /net vlan vlan_1205 interfaces add { 1.2 { tagged } } tag 1205

self ip aadressi omistamine

root@(moraal-f5)(cfg-sync Standalone)(Active)(/prt-moraal-dev)(tmos)# create /net self si-vlan_1203 address 10.0.3.1%1201/24 vlan vlan_1204

self ip eemaldamine

root@(moraal-f5)(cfg-sync Standalone)(Active)(/prt-moraal-dev)(tmos)# delete /net self si-vlan_1203

ruuting domeeni tekitamine

root@(moraal-f5)(cfg-sync Standalone)(Active)(/prt-moraal-dev)(tmos)# create /net route-domain 1201 description RD1201 vlans add { vlan_1201  }

Olemasolevasse ruuting domeeni vlan lisamine

root@(moraal-f5)(cfg-sync Standalone)(Active)(/prt-moraal-dev)(tmos)# modify /net route-domain 1203 description RD1203 vlans add { vlan_1205  }

staatilise ruutingu tekitamine

root@(moraal-f5)(cfg-sync Standalone)(Active)(/prt-moraal-dev)(tmos)# create /net route 192.168.19.0/24 gw 10.13.13.4

ruutingute esitamine

root@(moraal-f5)(cfg-sync Standalone)(Active)(/prt-moraal-dev)(tmos)# list /net route
net route 192.168.17.0/24 {
    gw 10.13.13.4
    network 192.168.17.0/24
    partition prt-moraal-dev
}

ruuting domeenide nimekirja küsimine

root@(moraal-f5)(cfg-sync Standalone)(Active)(/prt-moraal-dev)(tmos)# list /net route-domain
net route-domain 101 {
    description RD101
    id 101
    partition prt-moraal-dev
}
net route-domain 102 {
    description RD102
    id 102
    partition prt-moraal-dev
}
net route-domain 1201 {
    description RD1201
    id 1201
    partition prt-moraal-dev
    vlans {
        vlan_1201
    }
}
net route-domain 1203 {
    description RD1203
    id 1203
    partition prt-moraal-dev
    vlans {
        vlan_1204
        vlan_1203
        vlan_1205
    }
}

BIG-IP VE

TODO

Virtuaalsele arvutile isanda juurest kopeeritud plokkseadme tõmmise lisamine

root@pve-moraal-x570:/srv/btrfs_2x_mx500/tmp# qm importdisk 5004 BIGIP-17.0.0.2-0.0.2.qcow2 si_srv_qcow2 --format qcow2

AOM

TODO

[root@localhost:Active:Standalone] config # aom_setup_user -h
Usage: /bin/aom_setup_user [options]
           -d disable AOM user
           -e enable AOM user
           -l list AOM user
           -o overwrite and enable AOM user, necessary to change/overwrite the existing AOM username
 /bin/aom_setup_user will prompt for the the AOM username and password to configure.
[root@localhost:Active:Standalone] config # aom_setup_user -l
There is no AOM username configured.

[root@localhost:Active:Standalone] config # aom_setup_user   
Enter username:aomuser
Enter Password: 
Password must be between 1 and 16 characters.
Enter Password: 
Confirm Password: 
AOM username  aomuser successfully set and enabled.  Note that the AOM network must be configured via the AOM menu.
[root@localhost:Active:Standalone] config # aom_setup_user -l
Current AOM username: aomuser (enabled)

Üle ssh aom süsteemi sisselogimiseks sobib öelda

imre@moraal:~$ ssh -o HostKeyAlgorithms=+ssh-rsa aomuser@192.168.10.141
The authenticity of host '192.168.10.141 (192.168.10.141)' can't be established.
RSA key fingerprint is SHA256:L91bwPi2kvTPPgwv49Mmno4x9IV3gvEVRnjiU6bmxoY.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.141' (RSA) to the list of known hosts.
aomuser@192.168.10.141's password: 


--- Press Enter to deactivate another concurrent session...


--- Press <ESC>( for AOM Command Menu.

(

AOM Command Menu:
B --- Set console baud rate
I --- Display platform information
P --- Power on/off host subsystem
R --- Reset host subsystem
N --- Configure AOM network
S --- Configure SSH Server
A --- Reset AOM
Q --- Quit menu and return to console


Enter Command:

MGMT

[root@ylnrm-f5-2:Active:Standalone] config # tmsh create /sys management-ip 192.168.10.152/24

[root@ylnrm-f5-2:Active:Standalone] config # tmsh list /sys management-ip
sys management-ip 192.168.10.152/24 {
    description configured-statically
}

[root@ylnrm-f5-2:Active:Standalone] config # tmsh list /sys management-route
sys management-route default {
    description configured-statically
    gateway 192.168.10.254
    mtu 1500
    network default

[root@ylnrm-f5-2:Active:Standalone] config # tmsh save /sys config partitions all

boot location

TODO

# switchboot -l
# switchboot -b HD1.2