LIN
Linux documentation (based on Debian/Ubuntu mostly) + Bash scripting
Static IP configuration
# The primary network interface
allow-hotplug ens33
iface ens33 inet static
address 192.168.67.10
netmask 255.255.255.0
gateway 192.168.67.2
dns-nameservers 192.168.67.2Iptables
Setup gateway/IPv4 forwarding
Pour activer la transaction de packet par notre serveur, il faut ajouter la ligne suivante dans le fichier
/etc/sysctl.conf
Ligne à ajouter : net.ipv4.ip_forward=1
Avec la commande echo :
sudo tee -a "net.ipv4.ip_forward=1" /etc/sysctl.conf
sudo sysctl -pEnsuite, il faut installer l'outil iptables pour de mettre le mode masquerade. (ens33 = interface de sortie WAN)
apt-get install iptables iptables-persistent -y
iptables -t nat -A POSTROUTING -o $(ip -o -4 route show to default | awk '{print $5}') -j MASQUERADE
iptable-save > /etc/iptables/rules.v4Different tables
Table
Purpose
Common Chains
Common Uses
filter
Default table for packet filtering
INPUT, OUTPUT, FORWARD
Used for packet filtering (allow/deny rules)
nat
Network address translation (NAT)
PREROUTING, POSTROUTING, OUTPUT
Used for DNAT, SNAT, Masquerading, Port forwarding
mangle
Used for packet mangling (modifying packet headers)
PREROUTING, POSTROUTING, FORWARD, INPUT, OUTPUT
Used for marking packets, changing TTL, ECN
raw
Used for configuring exemptions from connection tracking
PREROUTING, OUTPUT
Used for disabling connection tracking or setting exemptions
security
Used for security-related packet filtering
INPUT, OUTPUT, FORWARD
Used in SELinux or AppArmor environments for additional security checks
Example of iptables rules
# setup routing
**sudo tee -a "net.ipv4.ip_forward=1" /etc/sysctl.conf**
sysctl -p
apt-get install iptables iptables-persistent -y
iptables -t nat -A POSTROUTING -o $(ip -o -4 route show to default | awk '{print $5}') -j MASQUERADEiptables-save > /etc/iptables/rules.v4
# port redirection
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 172.10.10.5:22
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 172.10.10.5:8080ISCSI initiator
Docker
Installation
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL <https://download.docker.com/linux/debian/gpg> -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \\
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] <https://download.docker.com/linux/debian> \\
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \\
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-composePull image
docker image pull nginx
docker image lsAfficher container
docker container ls -aStart nouveau container
docker container run nginx
**-it** pour rester dans le container sans le fermer
**-d** pour détacher le conteneur du processus principal de la console. (continuer à utiliser la console du notre machine)docker run -d -p 8080:80 nginx
# Run un container sur de l'image nginx en redirigant le port local 8080 sur le port 80 du container (=> option -p).Start container existant
docker start <container ID>Bash dans un container en exécution
docker exec -ti <container ID> bashCopier un ficher du local vers le container
docker cp ~/.index.html <container id>:/path/to/locationCréation d’image
Inspecter les modifications
docker container diff <container id>Valider un container
docker container commit <container id>
docker image ls # On devrait voir apparaître notre nouvelle image, sans nom
docker image tag <image id> myNewImageName # afin de lui attribuer un nomStructure d’un Dockerfile + Créer l’image
FROM alpine # Spécifie une image de base
RUN apk update && apk add nodejs # Pour exécuter une commande dans le conteneur
COPY . /app # permet de récupérer des fichiers locaux à la machine sur laquelle la commande docker build est lancée, et de les intégrer dans l’image en cours de création
WORKDIR /app # Permet de changer le dossier courrant, comme un "cd /app" en CLI
CMD ["node","index.js"] # Exécuter la commande "node index.js" dans notre container
docker image build -t image_name:tagname /path/to/dockerfileDIRPousser l’image dans notre registre Docker
docker login # Se connecter à notre compte
docker tag image_name:tagname yfanha/image_name:tagname # Créer un lien entre l'image créée précédemment et l'image qu'on veut envoyer sur le Docker Hub
docker push yfanha/image_name:tagnameDocker compose
docker-compose up -d vous permettra de démarrer l'ensemble des conteneurs en arrière-plan
docker-compose ps vous permettra de voir le status de l'ensemble de votre stack
docker-compose logs -f --tail 5 vous permettra d'afficher les logs de votre stack
docker-compose stop vous permettra d'arrêter l'ensemble des services d'une stack
docker-compose down vous permettra de détruire l'ensemble des ressources d'une stack
docker-compose config vous permettra de valider la syntaxe de votre fichier docker-compose.yml.
Exemple d’un fichier docker-compose.yml
version: '3'
services:
db: # Premier conteneur
image: mysql:5.7 # Image a utiliser
volumes:
- /data/mysql:/var/lib/mysql # Stocke le dossier du conteneur /var/lib/mysql dans le dossier local /data/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress: # Deuxième conteneur
depends_on:
- db
image: wordpress:latest # Image a utiliser
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpressLancer le stack
docker-compose up -d # Il faut se placer à la racine du projet (dans le dossier où se trouve le docker-compose.yml)System-wide environment variable and scripts
https://askubuntu.com/questions/866161/setting-path-variable-in-etc-environment-vs-profile
Last updated