Met de toenemende populariteit van cybercriminaliteit, is er een dringende behoefte aan bedrijven om betere bescherming te hebben tegen hackers. Een Intrusion Prevention System (IPS) is een van de beste manieren om je te verdedigen tegen computeraanvallen. Maar voordat je het internet afschuimt naar een IPS, geef Suricata eens een kans.
In deze tutorial leer je hoe je een volledig functioneel Suricata IPS op een Linux-server configureert om je netwerk tegen online bedreigingen te beschermen.
Klaar? Lees verder en begin je netwerk te beschermen!
Vereisten
Deze tutorial zal een praktische demonstratie zijn. Als je wilt meedoen, zorg dan dat je het volgende hebt:
- A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
- A non-root user with sudo privileges.
- Afhankelijk van je netwerkconfiguratie en hoe je van plan bent Suricata te gebruiken, heb je mogelijk meer of minder CPU en RAM voor je server nodig. Over het algemeen geldt: hoe meer verkeer je van plan bent te inspecteren, hoe meer middelen je aan Suricata toewijst. In een ontwikkelaarsomgeving is het plan om te beginnen met minimaal 2 CPU’s en 8GB RAM zodat Suricata zijn taken kan uitvoeren zonder de kwaliteit van de dienstverlening voor alle gebruikers in gevaar te brengen.
Suricata installeren en PPA Repository toevoegen
Suricata wordt niet standaard geïnstalleerd op Ubuntu, maar het installeren van Suricata is vergelijkbaar met hoe je andere pakketten op je systeem installeert.
1. Voer het apt update
-commando uit om de beschikbare pakketten in je systeem bij te werken.

2. Voer vervolgens het add-apt-repository
-commando uit om de PPA-opslagplaats toe te voegen die wordt onderhouden door de Open Information Security Foundation (OISF). Door de PPA-opslagplaats toe te voegen, krijg je de nieuwste en stabiele versie van Suricata (ppa:oisf/suricata-stable
).

3. Voer opnieuw het sudo apt update
-commando uit om de nieuw toegevoegde Suricata-opslagplaats te laden naar de pakketindex van je systeem.
4. Voer nu het sudo apt policy
-commando uit om te verifiëren dat je de Suricata PPA correct hebt toegevoegd. Zorg ervoor dat je Suricata PPA in de lijst ziet staan zoals hieronder getoond voordat je Suricata installeert

5. Voer het volgende commando uit om suricata te installeren
op je systeem.

6. Zodra de installatie is voltooid, voer je het hieronder weergegeven systemctl status
-commando uit om de suricata
-service status
te controleren.
Hieronder zie je dat de Suricata-service actief (draait).

Het configureren van Suricata
Het Suricata-pakket wordt geleverd met een configuratiebestand genaamd suricata.yaml dat zich bevindt in de map /etc/suricata. Dit configuratiebestand heeft veel verschillende instellingen voor verschillende gebruiksscenario’s. Maar let op, er zijn een paar instellingen in het standaardconfiguratiebestand die je moet aanpassen voordat je Suricata gaat gebruiken.
De standaardmodus voor Suricata is de Intrusion Detection (IDS) modus, die logt maar geen verkeer laat vallen. Deze modus wordt gebruikt bij het configureren en kennismaken met Suricata. Zodra je meer vertrouwd bent met Suricata en beter begrijpt over welke soorten verkeer Suricata je zal waarschuwen, kun je ervoor kiezen om de IPS-modus in te schakelen.
Suricata voegt een veld toe in zijn JSON-formaat (community flow ID). De community flow ID is een 8-byte veld waarmee je records kunt correleren die worden gegenereerd door andere tools. Deze functie is handig bij het gebruik van Suricata in combinatie met andere tools zoals Bro of Elasticsearch.
1. Open het bestand /etc/suricata/suricata.yaml in je favoriete teksteditor.
2. Zoek een regel die community-id: false leest en verander het naar community-id: true. Bewaar de wijzigingen en verlaat de teksteditor.
Elke keer dat je gebeurtenissen onderzoekt, zie je de community flow ID in hun JSON-uitvoer.

Voer vervolgens het volgende commando uit om een apparaat met een standaardroute op je systeem te vinden (route show default
). De -p
-vlag vertelt het ip
-commando om het apparaat op een menselijke leesbare manier af te drukken, terwijl de -j
-vlag de JSON-uitvoer afdrukt.
Suricata is standaard geconfigureerd om pakketten te snuffelen vanaf elk beschikbaar netwerkinterface. Maar je kunt dit gedrag wijzigen en een interface opgeven waarnaar Suricata luistert bij het starten.
Zoals je hieronder ziet, geeft de dev-parameter de interface aan die Suricata zal gebruiken om pakketten te snuffelen. In deze demo is de interface eth0, maar jouw interface kan verschillend zijn, zoals tun0, wlan0, enzovoort.

4. Open tot slot het configuratiebestand /etc/suricata/suricata.yaml, zoek de interface-parameter onder de af-packet-sectie en pas deze dienovereenkomstig aan. In deze demo wordt eth0 gebruikt als de interface voor het snuffelen aan pakketten.
Bewaar de wijzigingen, maar houd je teksteditor nu open.

Instellen van de Live Rule Reloading-functie
U heeft nu Suricata geconfigureerd, maar dat is slechts het begin van de bescherming van uw netwerk. Normaal gesproken wilt u regels direct toevoegen en automatisch herladen. Hoe? De live regelherlaadfunctie van Suricata stelt u in staat om regels dynamisch bij te werken. Als gevolg hiervan hoeft u Suricata niet handmatig opnieuw te starten, zodat de nieuwe regels van kracht worden.
Open het /etc/suricata/suricata.yaml bestand, kopieer/plak de volgende aanwijzingen onderaan de inhoud van het bestand, en sla de wijzigingen op. Deze aanwijzingen stellen u in staat om de functie voor live regelherladen in te schakelen.
Met deze instelling, wanneer u uw regelsets bewerkt/bijwerkt, worden de wijzigingen van kracht zonder dat u uw Suricata-service hoeft te herstarten.

Voer nu het kill
commando hieronder uit om uw Suricata-proces ($(pidof suricata)
) op de hoogte te stellen van het bijwerken van de regels zonder opnieuw te starten.
Het commando stuurt een door de gebruiker gedefinieerd signaal (-usr2
) naar het gespecificeerde proces-ID, waarna Suricata automatisch het volgende uitvoert:
- Nieuwe configuratie laden om regelvariabelen en waarden bij te werken.
- Nieuwe regels laden
- Nieuwe detectiemachine construeren
- Oude en nieuwe detectiemachines omwisselen
- Zorg ervoor dat alle threads zijn bijgewerkt
- Oude detectiemachine vrijgeven
Suricata-regelsets bijwerken
De functie voor live regelherladen is gereed, maar het heeft geen zin tenzij u uw regelsets bijwerkt. Standaard heeft het Suricata-pakket een beperkte regelset die alleen de meest voorkomende internetprotocollen detecteert in de /etc/suricata/rules map.
Op dit moment zul je een foutmelding krijgen zoals hieronder wanneer je probeert de Suricata-service te starten en te gebruiken: Geen regelbestanden komen overeen met het patroon. Deze foutmelding geeft aan dat er geen regelsets zijn voor Suricata om te gebruiken.

Om deze fout op te lossen, moet je regelbestanden aan je Suricata-instantie verstrekken. Gelukkig heeft Suricata een hulpprogramma genaamd suricata-update
dat je zal helpen bij het ophalen van meer regelsets van derden.
1. Voer de onderstaande opdracht uit om een update voor je Suricata-instantie te krijgen.
Zoals je hieronder kunt zien, geeft de uitvoer aan dat het suricata-update
-commando de regels heeft opgehaald door verbinding te maken met https://rules.emergingthreats.net/open/. Vervolgens worden de nieuwe regels opgeslagen in de map /var/lib/suricata/rules/.
De uitvoer geeft ook het volgende weer:
- Het totale aantal (31737) regelsets
- Het aantal regels dat is ingeschakeld (24355)
- Het aantal toegevoegd (31737)/verwijderd (0).

Voer vervolgens de onderstaande opdracht uit om alle regelsetproviders op te sommen (list-sources
).
Het
suricata-update
-commando haalt regelsets op van veel providers, waaronder gratis en commerciële providers.
Hieronder zie je een klein deel van de lijst. Noteer een regelsetnaam waarvan je wilt dat Suricata specifiek regelsets ophaalt. Deze tutorial haalt et/open-regelsets op ter demonstratie (stap drie).

3. Voer de onderstaande opdracht uit om de et/open
regelsets op te halen en op te nemen (enable-source
) in uw Suricata-regels.

Tenslotte, voer opnieuw het suricata-update
-commando uit om de zojuist geselecteerde regelset te laden.
Validatie van de Suricata-configuratie
Je hebt Suricata geconfigureerd en zelfs regelsets toegevoegd, dus het is tijd om je wijzigingen te valideren en ervoor te zorgen dat alles werkt zoals verwacht. Het Suricata-pakket heeft een ingebouwde validatieservice waarmee je eventuele afwijkingen van de huidige configuratie kunt zien.
Voer het suricata
-commando hieronder uit om de wijzigingen in het Suricata-configuratiebestand te valideren (-c /etc/suricata/suricata.yaml
). Het commando toont ook alle validatieberichten (-v
).
De -T
-vlag vertelt Suricata om in “testmodus” en “top down”-modus te draaien. Beide modi hebben strengere regels voor het matchen van pakketten en zijn minder geneigd om een valse positief te genereren.
Aangezien Suricata een zeer configureerbare firewall is, kan de test enkele minuten duren om te voltooien. Als er geen fouten zijn, zie je een uitvoer vergelijkbaar met de onderstaande die een volledige melding weergeeft.

Als je configuratiebestand fouten bevat vergelijkbaar met degene hieronder, zal Suricata elke fout afdrukken, waarbij specifieke regels worden aangegeven die problemen veroorzaken. Als je deze fouten krijgt, los dan elk configuratieprobleem één voor één op totdat de validatie succesvol is.

Testen van de Suricata-regels
Nu uw Suricata-configuratiebestanden zijn gevalideerd, kunt u Suricata uitvoeren om te controleren of ze correct werken. U zult Suricata gebruiken om de ET Open (2100498) te testen met het curl
-commando om verdachte activiteiten/verkeer te detecteren.
Op dit moment heeft uw Suricata-instantie meer dan 30.000 regels die Suricata heeft opgehaald uit verschillende regelsets. Een volledige test van alle regels met hun uitleg past niet in deze tutorial.
1. Voer het curl
-commando hieronder uit om wat verkeer/HTTP-verzoeken/activiteiten van de TestMyNIDS-website te genereren. TestMyNIDS is een e-learningproject dat is toegewijd aan het ondersteunen van NIDS-tests, validatie en vergelijking. De website biedt een uniek platform voor vergelijkende analyse van NIDS en gerelateerde tools.
U kunt deze website gebruiken om verdachte activiteiten/verkeer te testen om te zien of uw geconfigureerde regelset zoals verwacht werkt.
De responsgegevens zijn ontworpen om een valse waarschuwing te activeren en doen alsof ze een Linux/Unix root-gebruiker zijn. En deze root-gebruiker bevindt zich op een systeem dat mogelijk gecompromitteerd is.

Voer vervolgens het grep
-commando hieronder uit om het fast.log
-bestand in de /var/log/suricata/-directory te onderzoeken op een overeenkomend waarschuwingsbericht 2100498
. Dit commando controleert het logbestand op gebruikerswaarschuwing.
Afgezien van het fast.log-bestand, is een ander logbestand om op te letten het eve.log-bestand in dezelfde map.
Je ziet een uitvoer vergelijkbaar met degene hieronder die het openbare IPv4-adres van je systeem laat zien.

3. Voer nu het jq
-commando hieronder uit om het eve.log-bestand te onderzoeken. Het eve.log-bestand wordt ook gebruikt voor het loggen van gebeurtenissen, maar dan in JSON-indeling (/var/log/suricata/eve.json
). Het zijn de eve.json– en fast.log-bestanden waarnaar je zult verwijzen voor verdacht verkeer en geblokkeerde pogingen. Neem indien nodig actie zodra je ze hebt gevonden.
Hieronder zie je “signature_id”: 2100498 in de uitvoer, wat het waarschuwingssignatuur-ID is dat je hebt opgegeven in het commando.
Je kunt ook de “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” zien in de uitvoer, wat het Community Flow ID is dat je hebt ingesteld in het /etc/suricata/suricata.yaml-bestand.
Deze community_id is handig wanneer je Suricata samen met andere tools zoals Elasticsearch gebruikt om een volledige “security monitoring stack” te krijgen voor een redelijk lage kostprijs.

Conclusie
Gedurende deze tutorial heb je geleerd hoe je Suricata installeert en configureert met regelsets om je netwerk te beschermen. Je hebt ook getest of de regelsets werken door verkeer op je netwerk te genereren.
Op dit punt draait Suricata perfect met je aangepaste regelset om verdachte activiteiten/verkeer op je netwerk te detecteren.
Nu, waarom niet voortbouwen op deze nieuwe kennis? Misschien beginnen met het installeren en configureren van Suricata, Zeek, de Elasticsearch-stack om een volledige “beveiligingsmonitoringsstack” op te zetten?