Projectopdracht Oscar Alexander
Deze Magnum Opus voor het vak 'Infrastructure As Code' heeft de bedoeling om een volledig functioneel, cloud-ready open-source solution op Rocky Linux 9 te bouwen. Deze rol zorgt voor gemakkelijke deployment over verschillende IAAS cloud providers of VM environments. Het is ontworpen om een gemakkelijk te bereiken virus scanner in werking te brengen a.d.h.v Clamav scans. Je upload files via een local hosted website, en krijgt daarna het resultaat van de scan op je gsm te zien. Door zelf geschreven code en docker images, gecombineerd met open-source docker images en software, is dit project tot een goed einde gekomen.
- Automatische malware scanner
- Website om files te sturen die gescant moeten worden
- Resultaten op in Telegram chat
- Deploybaar via Ansible
- Deploybaar via Semaphore
- Detecteert automatisch Linux distro (Rocky, CentOS, Ubuntu) en deployed daarop
.
├── ansible
│ ├── ansible.cfg # Config file for ansible
│ ├── playbooks # Playbooks directory
│ ├── roles # Has all the needed roles
│ └── vars # Main variable file + Telegram variabelen file, overwritten by Semaphore variables
├── docker
│ ├── docker-compose.yml # Main docker compose file
│ ├── test_virus # All the files needed by docker for test virus script
│ └── website # All the files needed by docker for website
├── image.png
├── README.md
├── test_files # Some test virus files!! Be careful
│ ├── eicar_com.zip
│ ├── test.exe
│ └── vlc-3.0.20-win64.exe
├── tests # Virus test files
│ └── test_virus
├── vars # Env file
└── website # Website files
- Operating System: Rocky Linux 9 met de meest recente updates.
- Ansible
- Git
- Telegram account met een bot api key.
- SSH toegang tot target. (met sudo rechten)
- Basis begrip van Ansible en YAML syntax.
Configureer eerst drie belangrijke bestanden zodat de deploy lukt.
-
vars/main.yml Als je er geen Semaphore wordt gebruikt moet je de variabelen instellen. Normaal is de default configuratie oke. Als je Semaphore gebruikt kan je de variabelen aanpassen via de environment:
-
playbooks/hosts Voeg hier het ip adres van je target toe. Er staat een voorbeeld configuratie, verwijder deze en voeg onder
[nodes]
het ip toe. -
vars/telegram_vars.yml Pas hier de voorbeeld token en chat id aan naar jouw telegram waarden. Dit is zeer belangrijk, anders werkt de applicatie niet! Om een bot en een chat-id te verkrijgen kan je deze turtoial volgen, of een youtube video,...
Nadat de hosts file is aangepast kan je de playbook uitvoeren met het volgende commando (open een terminal in /ansible/):
ansible-playbook -i playbooks/hosts playbooks/playbook.yml
Ik licht hier kort de belangrijkste software componenten toe:
- Clamav - Virus scanning software
- Docker - Containerization
- Docker Compose
- Ansible - Deployment
- Semaphore - UI for Ansible
- Python - Website run time environment
- Flask - Website hosting
- Rocky Linux 9
- CentOS 7
- Ubuntu Jimmy Server
In de /ansible/roles/ vind je alle roles terug die ik gebruik. Hieronder licht ik ze allemaal beknopt toe. Elke rol heeft een specifieke functie. Ik heb deze rollen geschreven voor verschillende besturingssystemen, ik licht nu enkel die voor Rocky Linux 9 toe.
main.yml Zorgt ervoor dat alle pakketten zijn geupdate naar de meest recente versie, en dat de basis pakketten die nodig zijn voor de opdracht, geinstalleerd zijn.
main.yml Zet simpleweg de hostname op een geconfigueerd variable.
main.yml Installeerd de nodig pakketten voor Clamav, start de service, past de configuratie aan en start een cronjob script om de database up-to-date te houden.
main.yml Installeerd de noodzakelijke pakketten voor Docker te gebruiken op Rocky Linux 9. Ik maak gebruik van de Docker CE.
main.yml Zet de docker omgevingen op en kopieert de nodige files.
main.yml Zet een firewall op om enkel noodzakelijke services door te laten.
Ik heb een aantal extras gemaakt.
Volg deze stappen, of volg de officele stappen van Snap hier. Deze snap install werkt goed, ik had steeds authentication errors als ik de Docker compose gebruikte.
-
Voeg het EPEL-repository toe: Semaphore is afhankelijk van pakketten die beschikbaar zijn in het EPEL repo. Voer de volgende commando uit om het EPEL-repo toe te voegen:
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
-
Upgrade het systeem: Zorg ervoor dat je systeem volledig is bijgewerkt:
sudo dnf upgrade -y
-
Schakel optionele en extra repositories in: Voeg meer repos toe met pakketten die Semaphore kan gebruiken:
sudo subscription-manager repos --enable "rhel-*-optional-rpms" --enable "rhel-*-extras-rpms"
-
Installeer Snapd: Semaphore kan geïnstalleerd worden via Snap:
sudo dnf install snapd -y sudo systemctl enable --now snapd.socket sudo ln -s /var/lib/snapd/snap /snap
-
Installeer Semaphore: installeer Semaphore via Snap:
sudo snap install semaphore
Ik heb support voor meerdere systemen, zoals CentOS en Ubuntu. Ubuntu was moeilijker, want het blijft Ubuntu. In de playbook.yml vind je de verschillende systemen terug. Voor elk systeem heb ik aparte rollen die worden aangeroepen met een when: ansible_facts['distribution'] == 'Rocky'
. Ansible detecteerd welk OS je gebruikt.