Gestion de Réseau Wi-Fi sur macOS
Déployez et gérez des configurations réseau Wi-Fi complètes sur vos appareils MacFleet. Ce tutoriel couvre la gestion de politiques réseau, configurations de sécurité, paramètres proxy, gestion DNS et stratégies de déploiement de niveau entreprise.
Comprendre la Gestion Réseau macOS
macOS fournit des outils de ligne de commande puissants pour la gestion réseau :
networksetup
- Outil principal pour la configuration réseauairport
- Scan et gestion Wi-Fi avancésscutil
- Utilitaire de configuration système pour les paramètres réseau- Profils réseau - Gestion réseau basée sur les politiques d'entreprise
Opérations Wi-Fi Basiques
Activer/Désactiver l'Interface Wi-Fi
#!/bin/bash
# Activer l'interface Wi-Fi
enable_wifi() {
echo "Activation de l'interface Wi-Fi..."
networksetup -setairportpower en0 on
if [[ $? -eq 0 ]]; then
echo "✅ Interface Wi-Fi activée avec succès"
return 0
else
echo "❌ Échec de l'activation de l'interface Wi-Fi"
return 1
fi
}
# Désactiver l'interface Wi-Fi
disable_wifi() {
echo "⚠️ Désactivation de l'interface Wi-Fi..."
echo "Assurez-vous que l'appareil a une connectivité alternative (Ethernet, etc.)"
networksetup -setairportpower en0 off
if [[ $? -eq 0 ]]; then
echo "✅ Interface Wi-Fi désactivée avec succès"
return 0
else
echo "❌ Échec de la désactivation de l'interface Wi-Fi"
return 1
fi
}
# Utilisation
enable_wifi
Activer/Désactiver le Service Wi-Fi
#!/bin/bash
# Activer le service Wi-Fi
turn_wifi_on() {
echo "Activation du service Wi-Fi..."
networksetup -setnetworkserviceenabled Wi-Fi on
if [[ $? -eq 0 ]]; then
echo "✅ Service Wi-Fi activé"
return 0
else
echo "❌ Échec de l'activation du service Wi-Fi"
return 1
fi
}
# Vérifier le statut du service Wi-Fi
check_wifi_service() {
echo "Vérification du statut du service Wi-Fi..."
local status
status=$(networksetup -getnetworkserviceenabled Wi-Fi)
echo "Statut du service Wi-Fi : $status"
return 0
}
# Utilisation
check_wifi_service
turn_wifi_on
Informations Réseau Wi-Fi
Obtenir les Informations Réseau Actuelles
#!/bin/bash
# Obtenir le SSID du réseau Wi-Fi actuel
get_current_network() {
echo "=== Réseau Wi-Fi Actuel ==="
local network_info
network_info=$(networksetup -getairportnetwork en0)
if [[ "$network_info" == *"not associated"* ]]; then
echo "❌ Non connecté à un réseau Wi-Fi"
return 1
else
echo "📶 $network_info"
return 0
fi
}
# Obtenir des informations Wi-Fi complètes
get_wifi_info() {
echo "=== Informations Réseau Wi-Fi ==="
networksetup -getinfo Wi-Fi
echo -e "\n=== Détails de l'Interface Wi-Fi ==="
ifconfig en0 | grep -E "(inet |ether |status)"
echo -e "\n=== Qualité Wi-Fi ==="
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I
}
# Scanner les réseaux disponibles
scan_networks() {
echo "=== Réseaux Wi-Fi Disponibles ==="
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s
}
# Utilisation
get_current_network
echo ""
get_wifi_info
Système de Gestion Wi-Fi d'Entreprise
#!/bin/bash
# Système de Gestion Wi-Fi d'Entreprise MacFleet
# Configuration Wi-Fi centralisée et gestion de politiques pour appareils de flotte
# Configuration
LOG_FILE="/var/log/macfleet_wifi.log"
CONFIG_DIR="/etc/macfleet/wifi"
PROFILES_DIR="$CONFIG_DIR/profiles"
BACKUP_DIR="/var/backups/network_configs"
# Modèles de profils réseau
declare -A NETWORK_PROFILES=(
["entreprise"]="security=WPA2Enterprise,proxy=auto,dns=entreprise"
["invite"]="security=WPA2Personal,proxy=none,dns=public"
["securise"]="security=WPA2Enterprise,proxy=obligatoire,dns=securise"
["developpement"]="security=WPA2Personal,proxy=bypass,dns=dev"
["public"]="security=none,proxy=auto,dns=public"
)
# Configurations serveurs DNS
declare -A DNS_CONFIGS=(
["entreprise"]="10.0.1.1 10.0.1.2"
["public"]="8.8.8.8 8.8.4.4"
["securise"]="1.1.1.1 1.0.0.1"
["dev"]="192.168.1.1 8.8.8.8"
)
# Fonction de journalisation
log_action() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# Configurer les serveurs DNS
configure_dns() {
local dns_profile="$1"
local custom_dns="$2"
log_action "Configuration des serveurs DNS : $dns_profile"
local dns_servers
if [[ -n "$custom_dns" ]]; then
dns_servers="$custom_dns"
else
dns_servers="${DNS_CONFIGS[$dns_profile]}"
fi
if [[ -z "$dns_servers" ]]; then
log_action "❌ Profil DNS inconnu ou configuration vide : $dns_profile"
return 1
fi
# Configurer les serveurs DNS
if networksetup -setdnsservers Wi-Fi $dns_servers; then
log_action "✅ Serveurs DNS configurés : $dns_servers"
# Vérifier la configuration
local current_dns
current_dns=$(networksetup -getdnsservers Wi-Fi)
log_action "Serveurs DNS actuels : $current_dns"
return 0
else
log_action "❌ Échec de la configuration des serveurs DNS"
return 1
fi
}
# Configurer les domaines de recherche
configure_search_domains() {
local domains="$*"
if [[ -z "$domains" ]]; then
log_action "Effacement des domaines de recherche"
networksetup -setsearchdomains Wi-Fi "Empty"
else
log_action "Configuration des domaines de recherche : $domains"
networksetup -setsearchdomains Wi-Fi $domains
fi
if [[ $? -eq 0 ]]; then
log_action "✅ Domaines de recherche configurés avec succès"
return 0
else
log_action "❌ Échec de la configuration des domaines de recherche"
return 1
fi
}
# Configurer le proxy web
configure_web_proxy() {
local proxy_type="$1"
local proxy_config="$2"
log_action "Configuration du proxy web : $proxy_type"
case "$proxy_type" in
"none")
# Désactiver tous les proxies
networksetup -setwebproxystate Wi-Fi off
networksetup -setsecurewebproxystate Wi-Fi off
networksetup -setautoproxystate Wi-Fi off
log_action "✅ Tous les proxies désactivés"
;;
"web")
local proxy_server proxy_port auth_required username password
IFS=':' read -ra PROXY_PARTS <<< "$proxy_config"
proxy_server="${PROXY_PARTS[0]}"
proxy_port="${PROXY_PARTS[1]}"
auth_required="${PROXY_PARTS[2]}"
username="${PROXY_PARTS[3]:-}"
password="${PROXY_PARTS[4]:-}"
if [[ "$auth_required" == "authenticated" && -n "$username" && -n "$password" ]]; then
networksetup -setwebproxy Wi-Fi "$proxy_server" "$proxy_port" on "$username" "$password"
else
networksetup -setwebproxy Wi-Fi "$proxy_server" "$proxy_port" off
fi
networksetup -setwebproxystate Wi-Fi on
log_action "✅ Proxy web configuré : $proxy_server:$proxy_port"
;;
"auto")
networksetup -setautoproxyurl Wi-Fi "$proxy_config"
networksetup -setautoproxystate Wi-Fi on
log_action "✅ Proxy automatique configuré : $proxy_config"
;;
*)
log_action "❌ Type de proxy inconnu : $proxy_type"
return 1
;;
esac
return 0
}
# Sauvegarder la configuration réseau actuelle
backup_network_config() {
local backup_timestamp
backup_timestamp=$(date '+%Y%m%d_%H%M%S')
local backup_file="$BACKUP_DIR/network_config_$backup_timestamp.tar.gz"
log_action "Création de la sauvegarde de configuration réseau : $backup_file"
# Créer un répertoire de sauvegarde temporaire
local temp_backup="/tmp/network_backup_$$"
mkdir -p "$temp_backup"
# Exporter les paramètres actuels
{
echo "# Statut du Service Wi-Fi"
networksetup -getnetworkserviceenabled Wi-Fi
echo -e "\n# Statut d'Alimentation Wi-Fi"
networksetup -getairportpower en0
echo -e "\n# Réseau Actuel"
networksetup -getairportnetwork en0
echo -e "\n# Informations Réseau"
networksetup -getinfo Wi-Fi
echo -e "\n# Serveurs DNS"
networksetup -getdnsservers Wi-Fi
echo -e "\n# Domaines de Recherche"
networksetup -getsearchdomains Wi-Fi
echo -e "\n# Proxy Web"
networksetup -getwebproxy Wi-Fi
} > "$temp_backup/current_config.txt"
# Créer une sauvegarde compressée
if tar -czf "$backup_file" -C "$(dirname "$temp_backup")" "$(basename "$temp_backup")" 2>/dev/null; then
log_action "✅ Sauvegarde réseau créée : $backup_file"
rm -rf "$temp_backup"
echo "$backup_file"
return 0
else
log_action "❌ Échec de la sauvegarde réseau"
rm -rf "$temp_backup"
return 1
fi
}
# Diagnostics réseau
network_diagnostics() {
echo "=== Diagnostics Réseau MacFleet ==="
echo "Horodatage : $(date)"
echo "Nom d'hôte : $(hostname)"
echo "======================================="
# Statut de l'interface Wi-Fi
echo -e "\n🔍 Statut de l'Interface Wi-Fi :"
local wifi_power
wifi_power=$(networksetup -getairportpower en0)
echo "Alimentation : $wifi_power"
local wifi_service
wifi_service=$(networksetup -getnetworkserviceenabled Wi-Fi)
echo "Service : $wifi_service"
# Connexion actuelle
echo -e "\n📶 Connexion Actuelle :"
networksetup -getairportnetwork en0
# Configuration réseau
echo -e "\n⚙️ Configuration Réseau :"
networksetup -getinfo Wi-Fi
# Paramètres DNS
echo -e "\n🌐 Paramètres DNS :"
networksetup -getdnsservers Wi-Fi
# Test de connectivité
echo -e "\n🌍 Test de Connectivité :"
if ping -c 3 8.8.8.8 >/dev/null 2>&1; then
echo "✅ Connectivité Internet : Disponible"
else
echo "❌ Connectivité Internet : Échec"
fi
if ping -c 3 apple.com >/dev/null 2>&1; then
echo "✅ Résolution DNS : Fonctionne"
else
echo "❌ Résolution DNS : Échec"
fi
}
# Fonction d'exécution principale
main() {
local action="${1:-status}"
local profile_name="$2"
local additional_param="$3"
log_action "=== Démarrage de la Gestion Wi-Fi MacFleet ==="
log_action "Action : $action"
log_action "Profil : ${profile_name:-N/A}"
case "$action" in
"status")
network_diagnostics
;;
"dns")
if [[ -z "$profile_name" ]]; then
echo "Profils DNS disponibles : ${!DNS_CONFIGS[*]}"
echo "Usage : $0 dns <nom_profil|serveurs_personnalisés>"
exit 1
fi
configure_dns "$profile_name" "$additional_param"
;;
"proxy")
if [[ -z "$profile_name" ]]; then
echo "Usage : $0 proxy <none|web|auto> [config]"
exit 1
fi
configure_web_proxy "$profile_name" "$additional_param"
;;
"backup")
backup_network_config
;;
*)
echo "Usage : $0 {status|dns|proxy|backup}"
echo " status - Afficher le statut et diagnostics réseau"
echo " dns - Configurer les serveurs DNS"
echo " proxy - Configurer les paramètres proxy"
echo " backup - Sauvegarder la configuration réseau actuelle"
exit 1
;;
esac
log_action "=== Gestion Wi-Fi terminée ==="
}
# Exécuter la fonction principale
main "$@"
Configuration Réseau Avancée
Gestion de Profils Wi-Fi d'Entreprise
#!/bin/bash
# Créer un profil réseau personnalisé
create_network_profile() {
local profile_name="$1"
local ssid="$2"
local security_type="$3"
local proxy_config="$4"
local dns_config="$5"
local profile_file="$PROFILES_DIR/${profile_name}.json"
cat > "$profile_file" << EOF
{
"profile_name": "$profile_name",
"created_date": "$(date -Iseconds)",
"wifi_settings": {
"ssid": "$ssid",
"security_type": "$security_type",
"auto_connect": true,
"priority": 100
},
"proxy_settings": {
"type": "$proxy_config",
"bypass_domains": ["*.local", "localhost"]
},
"dns_settings": {
"servers": "$dns_config",
"search_domains": ["company.com", "local"]
}
}
EOF
echo "Profil réseau créé : $profile_file"
}
Surveillance de Qualité Réseau
#!/bin/bash
# Surveiller la qualité et performance réseau
monitor_network_quality() {
local duration="${1:-60}" # durée de surveillance en secondes
local interval="${2:-5}" # intervalle de vérification en secondes
echo "=== Surveillance de Qualité Réseau ==="
echo "Durée : ${duration}s, Intervalle : ${interval}s"
local start_time end_time
start_time=$(date +%s)
end_time=$((start_time + duration))
while [[ $(date +%s) -lt $end_time ]]; do
local timestamp signal_strength tx_rate
timestamp=$(date '+%H:%M:%S')
# Obtenir les métriques Wi-Fi
local airport_info
airport_info=$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I)
signal_strength=$(echo "$airport_info" | grep 'RSSI:' | awk '{print $2}')
tx_rate=$(echo "$airport_info" | grep 'lastTxRate:' | awk '{print $2}')
# Tester la vitesse de connectivité
local ping_time
ping_time=$(ping -c 1 8.8.8.8 2>/dev/null | grep 'time=' | awk -F'time=' '{print $2}' | awk '{print $1}')
printf "%s | Signal: %sdBm | Vitesse: %sMbps | Ping: %s\n" \
"$timestamp" "$signal_strength" "$tx_rate" "${ping_time:-timeout}"
sleep "$interval"
done
}
Sécurité et Conformité
Audit de Sécurité Réseau
#!/bin/bash
# Audit complet de sécurité réseau
network_security_audit() {
echo "=== Audit de Sécurité Réseau ==="
log_action "Démarrage de l'audit de sécurité réseau"
# Vérifier le chiffrement Wi-Fi
local wifi_encryption
wifi_encryption=$(networksetup -getairportnetwork en0 | grep -o 'WPA\\|WEP\\|None' || echo 'Inconnu')
echo "Chiffrement Wi-Fi : $wifi_encryption"
# Vérifier le statut du proxy
local proxy_enabled
proxy_enabled=$(networksetup -getwebproxystate Wi-Fi)
echo "Proxy activé : $proxy_enabled"
# Vérifier les serveurs DNS
local dns_servers
dns_servers=$(networksetup -getdnsservers Wi-Fi)
echo "Serveurs DNS : $dns_servers"
# Recommandations de sécurité
echo -e "\n=== Recommandations de Sécurité ==="
if [[ "$wifi_encryption" == "None" ]]; then
echo "⚠️ Évitez les réseaux non chiffrés"
fi
if echo "$dns_servers" | grep -q "There aren't any DNS Servers"; then
echo "⚠️ Configurez des serveurs DNS sécurisés"
fi
log_action "✅ Audit de sécurité terminé"
}
Application de Politiques de Conformité
#!/bin/bash
# Appliquer les politiques de conformité d'entreprise
enforce_compliance_policy() {
local policy_name="$1"
log_action "Application de la politique de conformité : $policy_name"
case "$policy_name" in
"entreprise")
# Politique d'entreprise : DNS sécurisé, proxy obligatoire
configure_dns "entreprise"
configure_web_proxy "web" "proxy.company.com:8080:authenticated"
;;
"education")
# Politique éducation : DNS sûr, proxy de filtrage de contenu
configure_dns "public"
configure_web_proxy "auto" "http://filter.school.edu/proxy.pac"
;;
"sante")
# Politique santé : paramètres conformes HIPAA
configure_dns "securise"
configure_web_proxy "web" "secure-proxy.hospital.org:8080:authenticated"
;;
*)
log_action "❌ Politique de conformité inconnue : $policy_name"
return 1
;;
esac
log_action "✅ Politique de conformité appliquée : $policy_name"
return 0
}
Dépannage Réseau
Réparation Réseau Automatisée
#!/bin/bash
# Dépannage et réparation réseau automatisés
network_repair() {
local repair_level="${1:-basic}"
log_action "Démarrage de la réparation réseau : $repair_level"
echo "=== Réparation Réseau MacFleet ==="
# Test de connectivité de base
echo "🔍 Test de connectivité de base..."
if ping -c 3 8.8.8.8 >/dev/null 2>&1; then
echo "✅ Connectivité Internet : OK"
else
echo "❌ Connectivité Internet : ÉCHEC"
case "$repair_level" in
"basic")
echo "🔧 Tentative de réparation de base..."
# Redémarrer Wi-Fi
networksetup -setairportpower en0 off
sleep 3
networksetup -setairportpower en0 on
sleep 5
;;
"avance")
echo "🔧 Tentative de réparation avancée..."
# Réinitialisation réseau complète
configure_dns "public"
configure_web_proxy "none"
networksetup -setairportpower en0 off
sleep 3
networksetup -setairportpower en0 on
sleep 10
;;
esac
# Re-tester après réparation
echo "🔄 Nouveau test de connectivité..."
if ping -c 3 8.8.8.8 >/dev/null 2>&1; then
echo "✅ Réparation réussie"
log_action "Réparation réseau réussie : $repair_level"
else
echo "❌ Réparation échouée - escalader vers intervention manuelle"
log_action "Réparation réseau échouée : $repair_level"
fi
fi
}
Meilleures Pratiques
🚀 Optimisation des Performances
- Surveillez la qualité réseau régulièrement et basculez vers les réseaux optimaux
- Configurez des tailles MTU appropriées pour votre environnement réseau
- Utilisez la mise en cache DNS locale pour améliorer les vitesses de résolution
- Optimisez les paramètres proxy pour votre cas d'usage spécifique
🔐 Directives de Sécurité
- Utilisez toujours des réseaux chiffrés (WPA2/WPA3) dans les environnements d'entreprise
- Configurez des serveurs DNS sécurisés pour prévenir l'empoisonnement DNS
- Implémentez des politiques proxy pour le filtrage de contenu et la sécurité
- Audits de sécurité réguliers pour identifier les vulnérabilités réseau
📋 Meilleures Pratiques de Gestion
- Configuration basée sur les profils pour différents groupes d'utilisateurs et emplacements
- Application de politiques centralisées sur tous les appareils de flotte
- Sauvegarde régulière des configurations réseau avant les changements
- Surveillance et alertes automatisées pour les problèmes de connectivité
🔍 Conseils de Dépannage
- Utilisez les diagnostics réseau pour identifier les problèmes de configuration
- Surveillez la force du signal et les métriques de qualité réseau
- Testez la connectivité vers plusieurs points de terminaison pour une validation complète
- Documentez les changements réseau pour les pistes d'audit et le dépannage
Notes Importantes
- Les changements réseau prennent effet immédiatement mais peuvent nécessiter une reconnexion
- Les identifiants d'authentification proxy doivent être gérés de manière sécurisée
- Les changements DNS peuvent nécessiter un vidage du cache pour prendre effet
- Certains réseaux d'entreprise nécessitent des certificats spécifiques pour l'authentification
- Toujours sauvegarder les configurations avant de faire des changements significatifs