Compare commits
8 Commits
86583798f5
...
0d46cf7752
Author | SHA1 | Date |
---|---|---|
|
0d46cf7752 | |
|
a3ecc212dd | |
|
506dfb1086 | |
|
f22cf0bff7 | |
|
917f3a68bb | |
|
579631df00 | |
|
680b9a2af9 | |
|
bf8b686477 |
scripts
|
@ -5,7 +5,7 @@ Ce guide vous explique comment télécharger et exécuter les scripts d'installa
|
|||
## 🛠 Prérequis
|
||||
Avant d'utiliser les scripts, assurez-vous de disposer des éléments suivants :
|
||||
- Un système Linux de type Debian
|
||||
- `git` installé si vous déployez avec GIT
|
||||
- `git` installé si vous déployez avec GIT (sauf méthode 3)
|
||||
- Les droits administrateur (`sudo`)
|
||||
|
||||
## 🚀 Installation
|
||||
|
@ -34,6 +34,7 @@ Un script personnalisé permet de télécharger un ou plusieurs scripts en fonct
|
|||
- Interface interactive de sélection des scripts avec `whiptail`
|
||||
- Suppression des fichiers obsolètes
|
||||
- Application automatique des permissions d'exécution
|
||||
- Pas besoin d'avoir le programme `git`
|
||||
|
||||
---
|
||||
|
||||
|
|
|
@ -1,103 +1,63 @@
|
|||
#!/bin/bash
|
||||
# Basé sur un travail de Cédric Abonnel / Cédrix sous licence CC BY-NC 4.0
|
||||
|
||||
# Importer les fonctions communes
|
||||
source "$(dirname "$0")/../common/common_utils.sh"
|
||||
# Fichier contenant les enregistrements
|
||||
FILE="/etc/dnsmasq.d/custom_hosts"
|
||||
|
||||
# Vérifier si le script est exécuté en root
|
||||
check_root
|
||||
|
||||
# Vérifie si une IP est fournie
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: $0 <IP>"
|
||||
# Vérification de l'existence du fichier
|
||||
if [[ ! -f "$FILE" ]]; then
|
||||
echo "Erreur: Le fichier $FILE n'existe pas."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
IP="$1"
|
||||
|
||||
echo "🔍 Recherche du nom d'hôte pour l'IP : $IP"
|
||||
|
||||
# Fonction pour vérifier si une commande est disponible
|
||||
command_exists() {
|
||||
command -v "$1" &> /dev/null
|
||||
}
|
||||
|
||||
# Détection du serveur DNS en prenant en compte dnsmasq et fallback sur resolv.conf
|
||||
get_dns_server() {
|
||||
local dns_server=""
|
||||
|
||||
if command_exists resolvectl; then
|
||||
dns_server=$(resolvectl dns | awk '/^Global:/ {print $2; exit}')
|
||||
fi
|
||||
|
||||
if [ -z "$dns_server" ] && command_exists dnsmasq; then
|
||||
dns_server=$(ss -tulpn | grep dnsmasq | awk '{print $5}' | cut -d: -f1 | head -n1)
|
||||
fi
|
||||
|
||||
if [ -z "$dns_server" ] && [ -f /etc/resolv.conf ]; then
|
||||
dns_server=$(grep -m1 '^nameserver' /etc/resolv.conf | awk '{print $2}')
|
||||
fi
|
||||
|
||||
echo "${dns_server:-9.9.9.9}" # Utilisation d'un fallback 9.9.9.9 si aucun DNS trouvé
|
||||
}
|
||||
|
||||
DNS_SERVER=$(get_dns_server)
|
||||
echo "🛜 Serveur DNS détecté : $DNS_SERVER"
|
||||
|
||||
# 1️⃣ Test LLMNR (Link-Local Multicast Name Resolution)
|
||||
if command_exists resolvectl; then
|
||||
HOSTNAME_LLMNR=$(resolvectl query "$IP" 2>/dev/null | grep -oP '(?<=Name:\s).*' | head -n1)
|
||||
if [ -n "$HOSTNAME_LLMNR" ]; then
|
||||
echo "✅ LLMNR: $HOSTNAME_LLMNR"
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
echo "⚠ LLMNR non disponible (resolvectl absent)"
|
||||
# Vérification des arguments
|
||||
if [[ $# -ne 1 ]]; then
|
||||
echo "Usage: $0 <nom_machine|FQDN|adresse_IP>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2️⃣ Test mDNS (Multicast DNS / Avahi)
|
||||
if command_exists avahi-resolve; then
|
||||
HOSTNAME_MDNS=$(avahi-resolve -a "$IP" 2>/dev/null | awk '{print $2}')
|
||||
if [ -n "$HOSTNAME_MDNS" ]; then
|
||||
echo "✅ mDNS (Avahi): $HOSTNAME_MDNS"
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
echo "⚠ mDNS non disponible (avahi-resolve absent)"
|
||||
SEARCH_TERM="$1"
|
||||
|
||||
# Détection du nom de domaine
|
||||
if [[ -f /etc/resolv.conf ]]; then
|
||||
DOMAIN=$(awk '/^search / {print $2; exit} /^domain / {print $2; exit}' /etc/resolv.conf)
|
||||
fi
|
||||
|
||||
# 3️⃣ Vérification du cache ARP
|
||||
if command_exists arp; then
|
||||
HOSTNAME_ARP=$(arp -a | grep "$IP" | awk '{print $1}')
|
||||
if [ -n "$HOSTNAME_ARP" ]; then
|
||||
echo "✅ ARP: $HOSTNAME_ARP"
|
||||
exit 0
|
||||
# Alternative si resolv.conf n'existe pas ou est vide
|
||||
if [[ -z "$DOMAIN" ]]; then
|
||||
DOMAIN=$(hostname --domain 2>/dev/null) # Essayer avec hostname
|
||||
if [[ -z "$DOMAIN" ]]; then
|
||||
DOMAIN=$(nmcli -t -f IP4.DOMAIN dev show | head -n 1) # Essayer avec nmcli
|
||||
fi
|
||||
else
|
||||
echo "⚠ ARP non disponible"
|
||||
fi
|
||||
|
||||
# 4️⃣ Vérification via NetBIOS (Windows/Samba)
|
||||
if command_exists nmblookup; then
|
||||
HOSTNAME_NETBIOS=$(nmblookup -A "$IP" 2>/dev/null | grep -m1 '<00>' | awk '{print $1}')
|
||||
if [ -n "$HOSTNAME_NETBIOS" ]; then
|
||||
echo "✅ NetBIOS: $HOSTNAME_NETBIOS"
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
echo "⚠ NetBIOS non disponible (nmblookup absent)"
|
||||
# Vérifier qu'on a bien trouvé un domaine
|
||||
if [[ -z "$DOMAIN" ]]; then
|
||||
echo "Erreur: Impossible de détecter le nom de domaine."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 5️⃣ Scan réseau avec Nmap pour identifier l'hôte
|
||||
if command_exists nmap; then
|
||||
HOSTNAME_NMAP=$(nmap --dns-servers "$DNS_SERVER" -sP "$IP" 2>/dev/null | grep "Nmap scan report" | awk '{print $5}')
|
||||
if [ -n "$HOSTNAME_NMAP" ]; then
|
||||
echo "✅ Nmap: $HOSTNAME_NMAP"
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
echo "⚠ Nmap non disponible"
|
||||
# Si l'entrée ne contient pas un point, on ajoute le domaine détecté
|
||||
if [[ ! "$SEARCH_TERM" =~ \. ]]; then
|
||||
SEARCH_TERM="$SEARCH_TERM.$DOMAIN"
|
||||
fi
|
||||
|
||||
# Vérification si l'entrée est une adresse IP
|
||||
if [[ "$SEARCH_TERM" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
RESULTS=$(grep -E "/$SEARCH_TERM\$" "$FILE")
|
||||
else
|
||||
if [[ ! "$SEARCH_TERM" =~ ^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
|
||||
echo "Erreur: '$SEARCH_TERM' ne semble pas être un FQDN valide."
|
||||
exit 1
|
||||
fi
|
||||
RESULTS=$(grep -E "^address=/$SEARCH_TERM/" "$FILE")
|
||||
fi
|
||||
|
||||
# Vérification et affichage des résultats
|
||||
if [[ -n "$RESULTS" ]]; then
|
||||
echo "Résultats trouvés :"
|
||||
echo "$RESULTS"
|
||||
else
|
||||
echo "Aucun résultat trouvé pour '$SEARCH_TERM'."
|
||||
fi
|
||||
|
||||
echo "❌ Aucune correspondance trouvée."
|
||||
exit 1
|
||||
|
|
|
@ -18,11 +18,23 @@ NETMASK_CIDR=$(echo "$IP_INFO" | cut -d'/' -f2)
|
|||
# Extraire le préfixe réseau (ex: "192.168.100")
|
||||
PREFIX=$(echo "$NETWORK_IP" | awk -F. '{print $1"."$2"."$3}')
|
||||
|
||||
# Calculer les bornes de la plage d'adresses IP en fonction du masque
|
||||
NETMASK=$(( 32 - NETMASK_CIDR ))
|
||||
TOTAL_HOSTS=$(( 2 ** NETMASK ))
|
||||
# Calculer la plage IP en fonction du masque
|
||||
TOTAL_HOSTS=$(( 2 ** (32 - NETMASK_CIDR) ))
|
||||
IP_RANGE_START="$PREFIX.1"
|
||||
IP_RANGE_END="$PREFIX.$(( TOTAL_HOSTS - 2 ))" # -2 pour exclure le broadcast
|
||||
IP_RANGE_END="$PREFIX.$(( TOTAL_HOSTS - 2 ))" # -2 pour exclure le broadcast et l'adresse réseau
|
||||
|
||||
# Afficher la plage détectée
|
||||
echo "🔍 Plage IP détectée :"
|
||||
echo " ➡ Début : $IP_RANGE_START"
|
||||
echo " ➡ Fin : $IP_RANGE_END"
|
||||
|
||||
# Demander confirmation ou modification de la plage
|
||||
read -p "Nouvelle adresse de début (laisser vide pour conserver $IP_RANGE_START) : " NEW_START
|
||||
read -p "Nouvelle adresse de fin (laisser vide pour conserver $IP_RANGE_END) : " NEW_END
|
||||
|
||||
# Si l'utilisateur ne saisit rien, conserver les valeurs détectées
|
||||
IP_RANGE_START=${NEW_START:-$IP_RANGE_START}
|
||||
IP_RANGE_END=${NEW_END:-$IP_RANGE_END}
|
||||
|
||||
# Fichier contenant les réservations DHCP
|
||||
RESERVATION_FILE="/etc/dnsmasq.d/custom_hosts"
|
||||
|
@ -49,33 +61,23 @@ fi
|
|||
# Lire toutes les IP utilisées dans le fichier de réservation
|
||||
USED_IPS=($(grep -oE 'address=/[^/]+/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' "$RESERVATION_FILE" | awk -F'/' '{print $3}'))
|
||||
|
||||
# Si aucune IP n'est réservée, retourner la première adresse disponible
|
||||
if [[ ${#USED_IPS[@]} -eq 0 ]]; then
|
||||
echo "✅ Première IP disponible : $IP_RANGE_START"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Trouver la plus grande IP utilisée
|
||||
MAX_IP_INT=0
|
||||
for ip in "${USED_IPS[@]}"; do
|
||||
ip_int=$(ip_to_int "$ip")
|
||||
if (( ip_int > MAX_IP_INT )); then
|
||||
MAX_IP_INT=$ip_int
|
||||
fi
|
||||
done
|
||||
|
||||
# Calculer la prochaine IP disponible
|
||||
NEXT_IP_INT=$((MAX_IP_INT + 1))
|
||||
NEXT_IP=$(int_to_ip "$NEXT_IP_INT")
|
||||
|
||||
# Vérifier que cette IP est bien dans la plage autorisée
|
||||
# Vérification et recherche de la première IP disponible
|
||||
START_INT=$(ip_to_int "$IP_RANGE_START")
|
||||
END_INT=$(ip_to_int "$IP_RANGE_END")
|
||||
|
||||
if (( NEXT_IP_INT > END_INT )); then
|
||||
echo "❌ Plus aucune IP disponible dans la plage définie."
|
||||
exit 1
|
||||
fi
|
||||
CURRENT_IP_INT=$START_INT
|
||||
|
||||
echo "✅ Première IP disponible : $NEXT_IP"
|
||||
exit 0
|
||||
while (( CURRENT_IP_INT <= END_INT )); do
|
||||
CURRENT_IP=$(int_to_ip "$CURRENT_IP_INT")
|
||||
|
||||
# Vérifier si l'IP est déjà réservée
|
||||
if [[ ! " ${USED_IPS[@]} " =~ " $CURRENT_IP " ]]; then
|
||||
echo "✅ Première IP disponible : $CURRENT_IP"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
(( CURRENT_IP_INT++ ))
|
||||
done
|
||||
|
||||
echo "❌ Plus aucune IP disponible dans la plage définie."
|
||||
exit 1
|
||||
|
|
|
@ -12,26 +12,62 @@ if ! command -v dnsmasq &> /dev/null; then
|
|||
echo "Installation de dnsmasq..."
|
||||
apt update && apt install -y dnsmasq
|
||||
echo "Installation d'outils réseau..."
|
||||
apt install -y systemd-resolved avahi-utils net-tools smbclient nmap
|
||||
apt install -y avahi-utils net-tools smbclient nmap
|
||||
systemctl disable --now avahi-daemon
|
||||
else
|
||||
echo "dnsmasq est déjà installé."
|
||||
fi
|
||||
|
||||
# Récupérer toutes les interfaces réseau sauf loopback
|
||||
mapfile -t NOMS < <(ip -o link show | awk -F': ' '{print $2}' | grep -v lo)
|
||||
|
||||
# Obtenir l'adresse IP du serveur sur l'interface principale
|
||||
IP_SERVEUR=$(ip -4 addr show $(ip route show default | awk '/default/ {print $5}') | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
|
||||
if [[ -z "$IP_SERVEUR" ]]; then
|
||||
echo "Impossible de déterminer l'adresse IP du serveur."
|
||||
if [[ ${#NOMS[@]} -eq 0 ]]; then
|
||||
echo "Aucune interface réseau trouvée."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier si l'IP est dans une plage privée autorisée
|
||||
if [[ "$IP_SERVEUR" =~ ^10\..* || "$IP_SERVEUR" =~ ^192\.168\..* || "$IP_SERVEUR" =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\..* ]]; then
|
||||
echo "Adresse IP privée détectée : $IP_SERVEUR"
|
||||
# Construire les options avec IP si existante
|
||||
OPTIONS=()
|
||||
for IFACE in "${NOMS[@]}"; do
|
||||
# Nettoyer l'interface de @ifX
|
||||
IFACE_CLEAN=$(echo "$IFACE" | cut -d'@' -f1)
|
||||
IP=$(ip -4 -o addr show "$IFACE_CLEAN" 2>/dev/null | awk '{print $4}' | cut -d'/' -f1)
|
||||
if [[ -n "$IP" ]]; then
|
||||
OPTIONS+=("$IFACE_CLEAN ($IP)")
|
||||
else
|
||||
OPTIONS+=("$IFACE_CLEAN (Pas d'IP)")
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Sélectionnez l'interface réseau à utiliser (IP affichée si existante) :"
|
||||
PS3="Votre choix : "
|
||||
select CHOIX in "${OPTIONS[@]}"; do
|
||||
if [[ -n "$CHOIX" ]]; then
|
||||
INTERFACE=$(echo "$CHOIX" | awk '{print $1}')
|
||||
break
|
||||
else
|
||||
echo "Choix invalide. Veuillez réessayer."
|
||||
fi
|
||||
done
|
||||
|
||||
# Maintenant que l'interface est choisie, récupérer l'IP
|
||||
IP_EXISTANTE=$(ip -4 -o addr show "$INTERFACE" 2>/dev/null | awk '{print $4}' | cut -d'/' -f1)
|
||||
|
||||
if [[ -n "$IP_EXISTANTE" ]]; then
|
||||
IP_SERVEUR="$IP_EXISTANTE"
|
||||
else
|
||||
echo "Erreur : L'adresse IP $IP_SERVEUR n'est pas dans un réseau privé."
|
||||
exit 1
|
||||
read -rp "Aucune IP détectée sur $INTERFACE. Veuillez entrer une IP à utiliser : " IP_SAISIE
|
||||
IP_SERVEUR="$IP_SAISIE"
|
||||
fi
|
||||
|
||||
echo "✅ Interface sélectionnée : $INTERFACE"
|
||||
echo "✅ Adresse IP sélectionnée : $IP_SERVEUR"
|
||||
|
||||
# Vérifier si l'IP est privée ou publique
|
||||
if [[ "$IP_SERVEUR" =~ ^10\. ]] || [[ "$IP_SERVEUR" =~ ^192\.168\. ]] || [[ "$IP_SERVEUR" =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\. ]]; then
|
||||
echo "✅ Adresse IP privée détectée : $IP_SERVEUR"
|
||||
else
|
||||
echo "⚠️ Attention : L'adresse IP $IP_SERVEUR semble PUBLIQUE !"
|
||||
fi
|
||||
|
||||
FORCE=false
|
||||
|
@ -40,8 +76,10 @@ if [[ "$1" == "--force" ]]; then
|
|||
echo "Mode forçage activé : reconfiguration complète..."
|
||||
fi
|
||||
|
||||
if systemctl is-active --quiet dnsmasq && [ "$FORCE" = false ]; then
|
||||
echo "dnsmasq est déjà actif et configuré. Utilisez --force pour reconfigurer."
|
||||
DNSMASQ_CONF="/etc/dnsmasq.conf"
|
||||
|
||||
if grep -q "# CONFIGURE_PAR_CEDRIX" "$DNSMASQ_CONF" && [ "$FORCE" = false ]; then
|
||||
echo "dnsmasq est déjà configuré. Utilisez --force pour reconfigurer."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
@ -88,7 +126,8 @@ fi
|
|||
# Configurer dnsmasq
|
||||
echo "Configuration de dnsmasq..."
|
||||
|
||||
cat <<EOF > /etc/dnsmasq.conf
|
||||
cat <<EOF > $DNSMASQ_CONF
|
||||
# CONFIGURE_PAR_CEDRIX
|
||||
# Configuration de dnsmasq
|
||||
|
||||
# Interface réseau principale
|
||||
|
@ -152,10 +191,18 @@ echo 'nameserver 127.0.0.1' > /etc/resolv.conf
|
|||
echo "Configuration DNS mise à jour sur 127.0.0.1"
|
||||
# Redémarrer les services nécessaires
|
||||
echo "Redémarrage des services..."
|
||||
systemctl restart dnsmasq 2>/dev/null && echo "dnsmasq redémarré."
|
||||
systemctl restart systemd-resolved 2>/dev/null && echo "systemd-resolved redémarré."
|
||||
systemctl restart networking 2>/dev/null && echo "networking redémarré."
|
||||
systemctl restart NetworkManager 2>/dev/null && echo "NetworkManager redémarré."
|
||||
for service in dnsmasq systemd-resolved networking NetworkManager; do
|
||||
if systemctl list-unit-files | grep -qw "${service}.service"; then
|
||||
echo "Redémarrage de $service..."
|
||||
if timeout 5s systemctl restart "$service" 2>/dev/null; then
|
||||
echo "$service redémarré."
|
||||
else
|
||||
echo "⚠️ Timeout ou erreur sur $service."
|
||||
fi
|
||||
else
|
||||
echo "Service $service non disponible sur ce système."
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Configuration terminée avec succès!"
|
||||
echo "Serveur DHCP/DNS fonctionnel sur $IP_SERVEUR"
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
#!/bin/bash
|
||||
# Basé sur un travail de Cédric Abonnel / Cédrix sous licence CC BY-NC 4.0
|
||||
# Objectif : Faire du NAT du LAN vers le WAN
|
||||
|
||||
# Import des fonctions utilitaires communes
|
||||
source "$(dirname "$0")/../common/common_utils.sh"
|
||||
|
||||
# Vérification des droits root
|
||||
check_root
|
||||
|
||||
echo "[+] Détection des interfaces réseau..."
|
||||
|
||||
# Détection de l'interface WAN (par défaut la passerelle)
|
||||
WAN_IF=$(ip route | grep default | awk '{print $5}' | head -n 1)
|
||||
if [[ -z "$WAN_IF" ]]; then
|
||||
echo "[❌] Aucune interface WAN détectée (pas de route par défaut)."
|
||||
exit 1
|
||||
fi
|
||||
echo "[+] Interface WAN détectée : $WAN_IF"
|
||||
|
||||
# Détection de l'interface LAN (IP privée autre que WAN_IF)
|
||||
LAN_IF=""
|
||||
LAN_IP=""
|
||||
LAN_SUBNET=""
|
||||
|
||||
while IFS= read -r line; do
|
||||
IFACE=$(echo "$line" | awk '{print $2}')
|
||||
IP_CIDR=$(echo "$line" | awk '{print $4}')
|
||||
IP_ADDR=${IP_CIDR%%/*}
|
||||
|
||||
# Vérifie que l'interface n'est pas celle du WAN et possède une IP privée
|
||||
if [[ "$IFACE" != "$WAN_IF" ]] && (
|
||||
[[ "$IP_ADDR" =~ ^192\.168\. ]] ||
|
||||
[[ "$IP_ADDR" =~ ^10\. ]] ||
|
||||
([[ "$IP_ADDR" =~ ^172\. ]] && [[ $(echo "$IP_ADDR" | cut -d. -f2) -ge 16 ]] && [[ $(echo "$IP_ADDR" | cut -d. -f2) -le 31 ]])
|
||||
); then
|
||||
LAN_IF="$IFACE"
|
||||
LAN_IP="$IP_ADDR"
|
||||
LAN_SUBNET="$IP_CIDR"
|
||||
break
|
||||
fi
|
||||
done < <(ip -o -4 addr show)
|
||||
|
||||
if [[ -z "$LAN_IF" || -z "$LAN_SUBNET" ]]; then
|
||||
echo "[❌] Impossible de détecter l'interface LAN ou le sous-réseau."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[+] Interface LAN détectée : $LAN_IF ($LAN_IP / $LAN_SUBNET)"
|
||||
echo "[ℹ️] Toutes les interfaces réseau :"
|
||||
ip -o -4 addr show | awk '{print "- Interface:", $2, "=> IP:", $4}'
|
||||
|
||||
if [[ "$LAN_IF" == "$WAN_IF" ]]; then
|
||||
echo "[❌] Erreur : L'interface LAN et WAN sont identiques ($WAN_IF). Corrige ta configuration réseau."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n "$LAN_IF" ]]; then
|
||||
echo "[+] Interface LAN détectée : $LAN_IF"
|
||||
echo "[+] Sous-réseau LAN détecté : $LAN_SUBNET"
|
||||
else
|
||||
echo "[⚠️] Aucune interface réseau avec une IP privée détectée."
|
||||
echo " Vérifiez votre configuration réseau ou connectez-vous à un réseau local."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
echo "[+] Mise à jour et installation des paquets nécessaires..."
|
||||
apt update -y
|
||||
apt install -y iptables iproute2
|
||||
|
||||
echo "[+] Activation de l'IP forwarding..."
|
||||
echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||
sed -i '/^#net.ipv4.ip_forward=1/s/^#//' /etc/sysctl.conf
|
||||
sysctl -p
|
||||
|
||||
echo "[+] Nettoyage des anciennes règles iptables NAT..."
|
||||
iptables -t nat -F
|
||||
iptables -F
|
||||
|
||||
echo "[+] Mise en place du NAT (MASQUERADE)..."
|
||||
iptables -t nat -A POSTROUTING -s "$LAN_SUBNET" -o "$WAN_IF" -j MASQUERADE
|
||||
|
||||
echo "[+] Sauvegarde des règles iptables..."
|
||||
apt install -y iptables-persistent
|
||||
netfilter-persistent save
|
||||
|
||||
echo "[✅] NAT opérationnel : $LAN_SUBNET sort par $WAN_IF"
|
|
@ -14,15 +14,6 @@ check_dns "$DOMAIN"
|
|||
|
||||
REVERSED_DOMAIN=$(echo "$DOMAIN" | awk -F. '{for(i=NF; i>0; i--) printf "%s%s", $i, (i>1 ? "." : "")}')
|
||||
VHOST_CONF="/etc/apache2/sites-available/$REVERSED_DOMAIN.conf"
|
||||
LE_DIR="/etc/letsencrypt/live/$DOMAIN"
|
||||
BACKUP_DIR="/etc/apache2/backups"
|
||||
TEMPLATE_DIR="/etc/apache2/templates"
|
||||
TEMPLATE="$TEMPLATE_DIR/vhost-template.conf"
|
||||
CHALLENGE_DIR="/var/www/cedrix/.well-known/acme-challenge"
|
||||
PATH_URL_ACME_CHALLENGE=".well-known/acme-challenge"
|
||||
TEST_FILE="test-challenge"
|
||||
TEST_URL="http://${DOMAIN}/${PATH_URL_ACME_CHALLENGE}/${TEST_FILE}"
|
||||
RANDOM_CONTENT=$(openssl rand -hex 12)
|
||||
|
||||
# Créer les dossiers nécessaires
|
||||
mkdir -p "$BACKUP_DIR" "$TEMPLATE_DIR" "$CHALLENGE_DIR"
|
||||
|
@ -32,8 +23,6 @@ mkdir -p "/var/www/$REVERSED_DOMAIN"
|
|||
chown -R www-data:www-data "/var/www/$REVERSED_DOMAIN"
|
||||
chmod -R 755 "/var/www/$REVERSED_DOMAIN"
|
||||
|
||||
|
||||
|
||||
# Vérifier si le VirtualHost HTTP existe déjà
|
||||
if [[ ! -f "$VHOST_CONF" ]]; then
|
||||
echo "=== Création du fichier VirtualHost HTTP pour $DOMAIN ==="
|
||||
|
@ -44,11 +33,9 @@ if [[ ! -f "$VHOST_CONF" ]]; then
|
|||
ErrorLog \${APACHE_LOG_DIR}/$REVERSED_DOMAIN-error.log
|
||||
CustomLog \${APACHE_LOG_DIR}/$REVERSED_DOMAIN-access.log combined
|
||||
|
||||
# Cedrix challenge
|
||||
Alias /${PATH_URL_ACME_CHALLENGE}/ $CHALLENGE_DIR/
|
||||
<Directory $CHALLENGE_DIR>
|
||||
<Directory /var/www/$REVERSED_DOMAIN>
|
||||
Options +Indexes
|
||||
AllowOverride None
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
|
@ -61,26 +48,5 @@ else
|
|||
echo "✅ VirtualHost HTTP déjà configuré pour $DOMAIN."
|
||||
fi
|
||||
|
||||
|
||||
# Vérification d'accès au dossier cedric-challenge
|
||||
echo "Vérification d'accès au dossier ${PATH_URL_ACME_CHALLENGE}"
|
||||
echo "$RANDOM_CONTENT" | sudo tee "$CHALLENGE_DIR/$TEST_FILE" > /dev/null
|
||||
chmod 644 "$CHALLENGE_DIR/$TEST_FILE"
|
||||
RESPONSE=$(curl -s "$TEST_URL")
|
||||
|
||||
if [[ "$RESPONSE" == "$RANDOM_CONTENT" ]]; then
|
||||
echo "✅ Le dossier est accessible depuis l'extérieur."
|
||||
else
|
||||
echo "❌ Le dossier n'est pas accessible depuis l'extérieur."
|
||||
echo "URL testée : $TEST_URL"
|
||||
echo "Vérifiez votre configuration Apache/Nginx, les firewalls, les proxy et les permissions."
|
||||
#sudo rm -f "$CHALLENGE_DIR/$TEST_FILE"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# Suppression du fichier test
|
||||
#sudo rm -f "$CHALLENGE_DIR/$TEST_FILE"
|
||||
|
||||
|
||||
echo "✅ Virtual Host configuré pour $DOMAIN avec succès !"
|
||||
exit 0
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
#!/bin/bash
|
||||
# Basé sur un travail de Cédric Abonnel / Cédrix sous licence CC BY-NC 4.0
|
||||
|
||||
# Importer les fonctions communes
|
||||
source "$(dirname "$0")/../common/common_utils.sh"
|
||||
|
||||
# Vérifier si le script est exécuté en root
|
||||
check_root
|
||||
|
||||
# Définition des couleurs pour un affichage clair
|
||||
GREEN="\e[32m"
|
||||
YELLOW="\e[33m"
|
||||
RED="\e[31m"
|
||||
RESET="\e[0m"
|
||||
|
||||
echo -e "${YELLOW}Mise à jour des paquets...${RESET}"
|
||||
apt update && apt upgrade -y || { echo -e "${RED}Échec de la mise à jour des paquets${RESET}"; exit 1; }
|
||||
|
||||
# Détection de la version de Debian
|
||||
VERSION=$(lsb_release -sc)
|
||||
SUPPORTED_VERSIONS=("buster" "bullseye" "bookworm")
|
||||
|
||||
if [[ ! " ${SUPPORTED_VERSIONS[@]} " =~ " ${VERSION} " ]]; then
|
||||
echo -e "${RED}Version de Debian non supportée : $VERSION${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}Version de Debian détectée : $VERSION${RESET}"
|
||||
|
||||
# Vérification de l'existence du dépôt Sury
|
||||
if ! grep -q "packages.sury.org" /etc/apt/sources.list.d/php.list 2>/dev/null; then
|
||||
echo -e "${YELLOW}Ajout du dépôt Sury pour PHP...${RESET}"
|
||||
apt install -y ca-certificates apt-transport-https software-properties-common || { echo -e "${RED}Échec de l'installation des paquets nécessaires${RESET}"; exit 1; }
|
||||
wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg || { echo -e "${RED}Échec du téléchargement de la clé GPG de Sury${RESET}"; exit 1; }
|
||||
echo "deb https://packages.sury.org/php/ $VERSION main" | tee /etc/apt/sources.list.d/php.list
|
||||
apt update
|
||||
else
|
||||
echo -e "${GREEN}Le dépôt Sury est déjà installé.${RESET}"
|
||||
fi
|
||||
|
||||
# Définition de la version PHP souhaitée
|
||||
PHP_VERSION="8.3"
|
||||
|
||||
# Vérification de l'installation de PHP
|
||||
echo -e "${YELLOW}Installation de PHP $PHP_VERSION et des modules courants...${RESET}"
|
||||
apt install -y php$PHP_VERSION php$PHP_VERSION-cli php$PHP_VERSION-fpm \
|
||||
php$PHP_VERSION-mysql php$PHP_VERSION-curl php$PHP_VERSION-gd \
|
||||
php$PHP_VERSION-mbstring php$PHP_VERSION-xml php$PHP_VERSION-zip \
|
||||
php$PHP_VERSION-bcmath php$PHP_VERSION-soap php$PHP_VERSION-intl \
|
||||
php$PHP_VERSION-readline php$PHP_VERSION-ldap php$PHP_VERSION-imagick || { echo -e "${RED}Échec de l'installation de PHP${RESET}"; exit 1; }
|
||||
|
||||
# Vérification si Apache est installé et installation du module PHP si nécessaire
|
||||
if systemctl list-units --type=service --all | grep -q "apache2.service"; then
|
||||
echo -e "${YELLOW}Apache détecté. Installation de libapache2-mod-php${RESET}"
|
||||
apt install -y libapache2-mod-php$PHP_VERSION || { echo -e "${RED}Échec de l'installation de libapache2-mod-php${RESET}"; exit 1; }
|
||||
|
||||
echo -e "${YELLOW}Redémarrage d'Apache...${RESET}"
|
||||
systemctl restart apache2 || { echo -e "${RED}Échec du redémarrage d'Apache${RESET}"; exit 1; }
|
||||
fi
|
||||
|
||||
# Configuration de PHP-FPM si ce n'est pas déjà fait
|
||||
PHP_INI="/etc/php/$PHP_VERSION/fpm/php.ini"
|
||||
|
||||
if grep -q "memory_limit = 512M" "$PHP_INI"; then
|
||||
echo -e "${GREEN}Configuration de PHP-FPM déjà optimisée.${RESET}"
|
||||
else
|
||||
echo -e "${YELLOW}Configuration de PHP-FPM...${RESET}"
|
||||
sed -i 's/memory_limit = .*/memory_limit = 512M/' "$PHP_INI"
|
||||
sed -i 's/upload_max_filesize = .*/upload_max_filesize = 100M/' "$PHP_INI"
|
||||
sed -i 's/post_max_size = .*/post_max_size = 100M/' "$PHP_INI"
|
||||
sed -i 's/max_execution_time = .*/max_execution_time = 300/' "$PHP_INI"
|
||||
|
||||
echo -e "${YELLOW}Redémarrage de PHP-FPM...${RESET}"
|
||||
systemctl restart php$PHP_VERSION-fpm || { echo -e "${RED}Échec du redémarrage de PHP-FPM${RESET}"; exit 1; }
|
||||
fi
|
||||
|
||||
# Vérification des modules PHP installés
|
||||
echo -e "${GREEN}Modules PHP installés :${RESET}"
|
||||
php -m
|
||||
|
||||
# Test de la configuration Apache
|
||||
if systemctl is-active --quiet apache2; then
|
||||
echo -e "${YELLOW}Vérification du support de PHP par Apache...${RESET}"
|
||||
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
|
||||
chown www-data:www-data /var/www/html/info.php
|
||||
chmod 644 /var/www/html/info.php
|
||||
echo -e "${GREEN}Vous pouvez tester PHP en accédant à : http://<IP_SERVEUR>/info.php${RESET}"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}Installation terminée avec succès ! 🚀${RESET}"
|
Loading…
Reference in New Issue