Contrôle Wi-Fi d'Entreprise sur macOS
Contrôlez et gérez les paramètres Wi-Fi sur vos appareils MacFleet en utilisant des outils de ligne de commande avancés et des politiques sans fil centralisées. Ce tutoriel couvre la gestion de l'alimentation Wi-Fi, le contrôle des connexions, l'application de la sécurité et la gestion de réseau sans fil de niveau entreprise avec des capacités complètes de surveillance et de conformité.
Comprendre la Gestion Wi-Fi macOS
macOS fournit plusieurs outils de ligne de commande pour la gestion Wi-Fi :
networksetup
- Outil principal pour la configuration et le contrôle réseauairport
- Utilitaire de gestion d'interface sans fil de bas niveauifconfig
- Outil de configuration d'interface réseau- Préférences Système - Équivalent GUI pour les paramètres sans fil
Le contrôle Wi-Fi d'entreprise nécessite une attention particulière aux politiques de sécurité, à la gestion de l'alimentation et aux exigences de conformité.
Commandes de Contrôle Wi-Fi de Base
Désactiver le Wi-Fi
#!/bin/bash
# Commande de base pour désactiver le Wi-Fi
turn_off_wifi_basic() {
# Obtenir le nom de l'interface airport
local AIRPORT=$(networksetup -listallhardwareports | grep -A 1 Wi-Fi | grep Device | awk '{print $2}')
if [[ -n "$AIRPORT" ]]; then
networksetup -setairportpower "$AIRPORT" off
if [[ $? -eq 0 ]]; then
echo "✅ Wi-Fi désactivé avec succès"
return 0
else
echo "❌ Échec de la désactivation du Wi-Fi"
return 1
fi
else
echo "❌ Interface Wi-Fi non trouvée"
return 1
fi
}
# Exemple d'utilisation
turn_off_wifi_basic
Activer le Wi-Fi
#!/bin/bash
# Activer le Wi-Fi avec vérification
turn_on_wifi() {
local interface_name="$1"
# Détection automatique de l'interface si non fournie
if [[ -z "$interface_name" ]]; then
interface_name=$(networksetup -listallhardwareports | grep -A 1 Wi-Fi | grep Device | awk '{print $2}')
fi
if [[ -z "$interface_name" ]]; then
echo "❌ Interface Wi-Fi non trouvée"
return 1
fi
echo "Activation de l'interface Wi-Fi : $interface_name"
networksetup -setairportpower "$interface_name" on
# Attendre que l'interface soit active
sleep 3
# Vérifier que le Wi-Fi est activé
local wifi_status
wifi_status=$(networksetup -getairportpower "$interface_name" | grep "On")
if [[ -n "$wifi_status" ]]; then
echo "✅ Wi-Fi activé avec succès"
return 0
else
echo "❌ Échec de l'activation du Wi-Fi"
return 1
fi
}
# Exemple d'utilisation
# turn_on_wifi "en0"
Vérifier le Statut Wi-Fi
#!/bin/bash
# Vérifier le statut Wi-Fi actuel avec informations détaillées
check_wifi_status() {
echo "=== Rapport de Statut Wi-Fi ==="
echo "Généré : $(date)"
echo "==============================="
echo ""
# Obtenir toutes les interfaces Wi-Fi
local wifi_interfaces
wifi_interfaces=$(networksetup -listallhardwareports | grep -A 1 Wi-Fi | grep Device | awk '{print $2}')
if [[ -z "$wifi_interfaces" ]]; then
echo "❌ Aucune interface Wi-Fi trouvée"
return 1
fi
for interface in $wifi_interfaces; do
echo "Interface : $interface"
echo "-----------------"
# Statut d'alimentation
local power_status
power_status=$(networksetup -getairportpower "$interface")
echo "Statut d'Alimentation : $power_status"
# Statut de connexion
if echo "$power_status" | grep -q "On"; then
# Obtenir le réseau actuel
local current_network
current_network=$(networksetup -getairportnetwork "$interface" | cut -d' ' -f4-)
echo "Réseau Actuel : $current_network"
# Obtenir l'adresse IP si connecté
local ip_address
ip_address=$(ifconfig "$interface" | grep "inet " | awk '{print $2}')
if [[ -n "$ip_address" ]]; then
echo "Adresse IP : $ip_address"
else
echo "Adresse IP : Non assignée"
fi
# Force du signal (si disponible)
if command -v airport >/dev/null 2>&1; then
local signal_info
signal_info=$(airport -I | grep "agrCtlRSSI" | awk '{print $2}')
if [[ -n "$signal_info" ]]; then
echo "Force du Signal : $signal_info dBm"
fi
fi
else
echo "Wi-Fi désactivé"
fi
echo ""
done
}
# Exécuter la vérification de statut
check_wifi_status
Système de Contrôle Wi-Fi d'Entreprise
#!/bin/bash
# Système de Contrôle Wi-Fi d'Entreprise MacFleet
# Gestion sans fil complète, application de sécurité et surveillance de conformité
# Configuration
LOG_FILE="/var/log/macfleet_wifi_control.log"
CONFIG_FILE="/etc/macfleet/wifi_config.conf"
BACKUP_DIR="/var/backups/macfleet/wifi"
POLICY_DIR="/etc/macfleet/wifi_policies"
# Créer la structure de répertoires
setup_directories() {
mkdir -p "$(dirname "$LOG_FILE")" "$BACKUP_DIR" "$POLICY_DIR" "$(dirname "$CONFIG_FILE")"
touch "$LOG_FILE"
# Définir les permissions appropriées
chmod 755 "$BACKUP_DIR" "$POLICY_DIR"
}
# Fonction de journalisation
log_action() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# Application de politique Wi-Fi d'entreprise
enforce_wifi_policy() {
local policy_name="$1"
local policy_file="$POLICY_DIR/${policy_name}.policy"
if [[ ! -f "$policy_file" ]]; then
log_action "ERREUR : Politique Wi-Fi non trouvée : $policy_name"
return 1
fi
log_action "Application de la politique Wi-Fi : $policy_name"
# Charger la configuration de politique
source "$policy_file"
# Obtenir l'interface Wi-Fi
local wifi_interface
wifi_interface=$(networksetup -listallhardwareports | grep -A 1 Wi-Fi | grep Device | awk '{print $2}')
if [[ -z "$wifi_interface" ]]; then
log_action "ERREUR : Aucune interface Wi-Fi trouvée"
return 1
fi
# Appliquer les paramètres de politique
case "${WIFI_POLICY_ACTION:-disable}" in
"disable")
networksetup -setairportpower "$wifi_interface" off
log_action "Wi-Fi désactivé selon la politique : $policy_name"
;;
"enable")
networksetup -setairportpower "$wifi_interface" on
log_action "Wi-Fi activé selon la politique : $policy_name"
;;
"scheduled")
apply_scheduled_wifi_policy "$wifi_interface" "$policy_name"
;;
"conditional")
apply_conditional_wifi_policy "$wifi_interface" "$policy_name"
;;
*)
log_action "ERREUR : Action de politique inconnue : ${WIFI_POLICY_ACTION}"
return 1
;;
esac
return 0
}
# Contrôle Wi-Fi programmé
apply_scheduled_wifi_policy() {
local interface="$1"
local policy_name="$2"
local current_hour=$(date +%H)
local current_day=$(date +%u) # 1=Lundi, 7=Dimanche
log_action "Application de la politique Wi-Fi programmée : $policy_name"
# Charger le planning depuis la politique
local enable_hours="${WIFI_ENABLE_HOURS:-09-17}"
local enable_days="${WIFI_ENABLE_DAYS:-1-5}"
# Analyser la plage horaire
local start_hour end_hour
start_hour=$(echo "$enable_hours" | cut -d'-' -f1)
end_hour=$(echo "$enable_hours" | cut -d'-' -f2)
# Analyser la plage de jours
local start_day end_day
start_day=$(echo "$enable_days" | cut -d'-' -f1)
end_day=$(echo "$enable_days" | cut -d'-' -f2)
# Vérifier si l'heure actuelle est dans la fenêtre autorisée
local time_allowed=false
local day_allowed=false
if [[ "$current_hour" -ge "$start_hour" && "$current_hour" -lt "$end_hour" ]]; then
time_allowed=true
fi
if [[ "$current_day" -ge "$start_day" && "$current_day" -le "$end_day" ]]; then
day_allowed=true
fi
if [[ "$time_allowed" == "true" && "$day_allowed" == "true" ]]; then
networksetup -setairportpower "$interface" on
log_action "Wi-Fi activé - dans les heures programmées"
else
networksetup -setairportpower "$interface" off
log_action "Wi-Fi désactivé - hors des heures programmées"
fi
}
# Contrôle Wi-Fi conditionnel
apply_conditional_wifi_policy() {
local interface="$1"
local policy_name="$2"
log_action "Application de la politique Wi-Fi conditionnelle : $policy_name"
# Vérifier le niveau de batterie
local battery_level
battery_level=$(pmset -g batt | grep -o '[0-9]*%' | tr -d '%')
# Vérifier la source d'alimentation
local power_source
power_source=$(pmset -g ps | head -1 | grep -o "'.*'" | tr -d "'")
# Vérifier la connexion ethernet
local ethernet_connected=false
local ethernet_interfaces
ethernet_interfaces=$(networksetup -listallhardwareports | grep -A 1 Ethernet | grep Device | awk '{print $2}')
for eth_interface in $ethernet_interfaces; do
local eth_status
eth_status=$(ifconfig "$eth_interface" 2>/dev/null | grep "status: active")
if [[ -n "$eth_status" ]]; then
ethernet_connected=true
break
fi
done
# Appliquer la logique conditionnelle
local should_enable_wifi=true
# Désactiver le Wi-Fi si ethernet est connecté et la politique l'exige
if [[ "$ethernet_connected" == "true" && "${DISABLE_WIFI_WITH_ETHERNET:-false}" == "true" ]]; then
should_enable_wifi=false
log_action "Wi-Fi désactivé - Connexion Ethernet détectée"
fi
# Désactiver le Wi-Fi si la batterie est faible et la politique l'exige
if [[ -n "$battery_level" && "$battery_level" -lt "${MIN_BATTERY_FOR_WIFI:-20}" ]]; then
should_enable_wifi=false
log_action "Wi-Fi désactivé - Niveau de batterie faible : $battery_level%"
fi
# Activer/désactiver le Wi-Fi selon les conditions
if [[ "$should_enable_wifi" == "true" ]]; then
networksetup -setairportpower "$interface" on
log_action "Wi-Fi activé - Conditions remplies"
else
networksetup -setairportpower "$interface" off
log_action "Wi-Fi désactivé - Conditions non remplies"
fi
}
# Vérification de conformité de sécurité
check_wifi_security_compliance() {
log_action "Exécution de la vérification de conformité de sécurité Wi-Fi"
local compliance_issues=()
local wifi_interface
wifi_interface=$(networksetup -listallhardwareports | grep -A 1 Wi-Fi | grep Device | awk '{print $2}')
if [[ -z "$wifi_interface" ]]; then
log_action "ERREUR : Aucune interface Wi-Fi trouvée pour la vérification de conformité"
return 1
fi
# Vérifier si le Wi-Fi est activé quand il devrait être désactivé
local power_status
power_status=$(networksetup -getairportpower "$wifi_interface")
if echo "$power_status" | grep -q "On"; then
# Wi-Fi activé, vérifier la sécurité du réseau actuel
local current_network
current_network=$(networksetup -getairportnetwork "$wifi_interface" | cut -d' ' -f4-)
if [[ "$current_network" != "You are not associated with an AirPort network." ]]; then
log_action "Connecté au réseau : $current_network"
# Vérifier si le réseau est dans la liste approuvée
local approved_networks_file="$POLICY_DIR/approved_networks.list"
if [[ -f "$approved_networks_file" ]]; then
if ! grep -q "^$current_network$" "$approved_networks_file"; then
compliance_issues+=("Connecté à un réseau non approuvé : $current_network")
fi
fi
# Vérifier les réseaux ouverts
if command -v airport >/dev/null 2>&1; then
local network_security
network_security=$(airport -I | grep "Security")
if echo "$network_security" | grep -q "none"; then
compliance_issues+=("Connecté à un réseau ouvert/non sécurisé")
fi
fi
fi
fi
# Générer le rapport de conformité
if [[ ${#compliance_issues[@]} -eq 0 ]]; then
log_action "✅ Vérification de conformité de sécurité Wi-Fi réussie"
return 0
else
log_action "❌ Violations de conformité de sécurité Wi-Fi trouvées :"
for issue in "${compliance_issues[@]}"; do
log_action " - $issue"
done
return 1
fi
}
# Fonction de gestion principale
main() {
local action="${1:-status}"
local parameter1="$2"
local parameter2="$3"
setup_directories
log_action "Contrôle Wi-Fi MacFleet démarré avec l'action : $action"
case "$action" in
"disable"|"off")
turn_off_wifi_basic
;;
"enable"|"on")
turn_on_wifi "$parameter1"
;;
"status")
check_wifi_status
;;
"policy")
enforce_wifi_policy "$parameter1"
;;
"compliance")
check_wifi_security_compliance
;;
*)
check_wifi_status
;;
esac
log_action "Contrôle Wi-Fi MacFleet terminé avec l'action : $action"
}
# Exécuter la fonction principale avec tous les arguments
main "$@"
Modèles de Politiques Wi-Fi
Configuration de Politique Wi-Fi d'Entreprise
# /etc/macfleet/wifi_policies/corporate_standard.policy
# Politique Wi-Fi d'Entreprise MacFleet
# Action de politique : disable, enable, scheduled, conditional
WIFI_POLICY_ACTION="conditional"
# Paramètres programmés (pour action scheduled)
WIFI_ENABLE_HOURS="08-18" # 8h à 18h
WIFI_ENABLE_DAYS="1-5" # Lundi au vendredi
# Paramètres conditionnels
DISABLE_WIFI_WITH_ETHERNET="true"
MIN_BATTERY_FOR_WIFI="15"
# Paramètres de sécurité
REQUIRE_WPA2_MINIMUM="true"
BLOCK_OPEN_NETWORKS="true"
AUTO_CONNECT_CORPORATE_ONLY="true"
# Gestion de l'alimentation
POWER_OPTIMIZATION_LEVEL="balanced"
AUTO_DISABLE_IDLE="true"
IDLE_TIMEOUT_MINUTES="30"
Politique Wi-Fi Axée Sécurité
# /etc/macfleet/wifi_policies/high_security.policy
# Politique Wi-Fi Haute Sécurité MacFleet
WIFI_POLICY_ACTION="conditional"
# Exigences de sécurité
REQUIRE_WPA3_MINIMUM="true"
BLOCK_OPEN_NETWORKS="true"
BLOCK_WEP_NETWORKS="true"
APPROVED_NETWORKS_ONLY="true"
# Désactivation conditionnelle
DISABLE_WIFI_WITH_ETHERNET="true"
DISABLE_WIFI_IN_SECURE_AREAS="true"
MIN_BATTERY_FOR_WIFI="25"
# Surveillance
ENABLE_CONNECTION_LOGGING="true"
ALERT_ON_UNAPPROVED_NETWORKS="true"
SCAN_INTERVAL_MINUTES="5"
Fonctions de Sécurité et Conformité
Gestion de Liste Blanche de Réseaux
#!/bin/bash
# Gérer les réseaux Wi-Fi approuvés
manage_network_whitelist() {
local action="$1"
local network_name="$2"
local whitelist_file="$POLICY_DIR/approved_networks.list"
case "$action" in
"add")
if [[ -z "$network_name" ]]; then
echo "ERREUR : Nom de réseau requis"
return 1
fi
# Ajouter le réseau à la liste blanche
if ! grep -q "^$network_name$" "$whitelist_file" 2>/dev/null; then
echo "$network_name" >> "$whitelist_file"
log_action "Réseau ajouté à la liste blanche : $network_name"
else
log_action "Réseau déjà dans la liste blanche : $network_name"
fi
;;
"remove")
if [[ -z "$network_name" ]]; then
echo "ERREUR : Nom de réseau requis"
return 1
fi
# Supprimer le réseau de la liste blanche
if [[ -f "$whitelist_file" ]]; then
grep -v "^$network_name$" "$whitelist_file" > "${whitelist_file}.tmp"
mv "${whitelist_file}.tmp" "$whitelist_file"
log_action "Réseau supprimé de la liste blanche : $network_name"
fi
;;
"list")
echo "=== Liste Blanche des Réseaux Approuvés ==="
if [[ -f "$whitelist_file" ]]; then
cat "$whitelist_file"
else
echo "Aucun réseau approuvé configuré"
fi
;;
*)
echo "ERREUR : Action de liste blanche invalide : $action"
return 1
;;
esac
}
# Exemple d'utilisation
# manage_network_whitelist "add" "WiFiEntreprise"
# manage_network_whitelist "list"
Notes Techniques Importantes
Référence des Commandes NetworkSetup
networksetup -setairportpower <device> on|off
: Activer/désactiver le Wi-Finetworksetup -getairportpower <device>
: Vérifier le statut d'alimentation Wi-Finetworksetup -getairportnetwork <device>
: Obtenir le réseau Wi-Fi actuelnetworksetup -listpreferredwirelessnetworks <device>
: Lister les réseaux sauvegardés
Considérations de Sécurité
- Privilèges Administrateur : Beaucoup de commandes réseau nécessitent un accès admin
- Isolation Réseau : Assurer une segmentation réseau appropriée
- Gestion des Profils : Auditer et nettoyer régulièrement les profils réseau sauvegardés
- Protection Réseau Ouvert : Bloquer les connexions aux réseaux non sécurisés
- Surveillance de Conformité : Implémenter une vérification continue de conformité de sécurité
Meilleures Pratiques de Gestion de l'Alimentation
- Optimisation Batterie : Désactiver le Wi-Fi quand la batterie est critique
- Priorité Ethernet : Préférer les connexions filaires quand disponibles
- Contrôle Programmé : Implémenter des politiques Wi-Fi basées sur l'heure
- Gestion Inactivité : Désactiver le Wi-Fi pendant les périodes d'inactivité prolongées
- Surveillance des Ressources : Suivre les modèles de consommation d'énergie
Cas d'Usage d'Entreprise
- Environnements Sécurisés : Liste blanche stricte des réseaux et conformité
- Déploiements Économes en Énergie : Optimisation batterie pour travailleurs mobiles
- Opérations Programmées : Contrôle Wi-Fi basé sur l'heure pour différentes équipes
- Exigences de Conformité : Pistes d'audit et surveillance de sécurité
- Standardisation de Flotte : Politiques Wi-Fi cohérentes sur tous les appareils
N'oubliez pas de tester tous les scripts sur des appareils individuels avant de les déployer sur votre environnement MacFleet, et d'assurer la conformité avec les politiques de sécurité d'entreprise lors de l'implémentation de systèmes de contrôle Wi-Fi d'entreprise.