Contrôlez l'accès aux sites web sur vos appareils MacFleet en utilisant la gestion avancée du fichier hosts, le filtrage DNS et les contrôles de politique d'entreprise. Ce tutoriel fournit des outils complets pour implémenter les politiques d'accès web organisationnelles.
Comprendre les Méthodes de Contrôle d'Accès aux Sites Web
macOS offre plusieurs approches pour contrôler l'accès aux sites web :
- Gestion du Fichier Hosts - Redirection DNS locale pour des domaines spécifiques
- Configuration DNS - Filtrage au niveau réseau via des serveurs DNS personnalisés
- Paramètres Proxy Système - Routage du trafic via des proxys de filtrage
- Règles de Pare-feu - Blocage d'adresses IP et de plages de ports spécifiques
Blocage de Sites Web Basique
Bloquer un Site Web Unique
#!/bin/bash
# Bloquer l'accès à un site web spécifique
WEBSITE="www.facebook.com"
# Ajouter une entrée au fichier hosts
echo "127.0.0.1 $WEBSITE" >> /etc/hosts
echo "127.0.0.1 facebook.com" >> /etc/hosts
echo "Accès bloqué à $WEBSITE"
Bloquer Plusieurs Sites Web
#!/bin/bash
# Bloquer plusieurs sites web à la fois
BLOCKED_SITES=(
"www.facebook.com"
"facebook.com"
"m.facebook.com"
"www.twitter.com"
"twitter.com"
"www.instagram.com"
"instagram.com"
)
for site in "${BLOCKED_SITES[@]}"; do
echo "127.0.0.1 $site" >> /etc/hosts
echo "Bloqué: $site"
done
echo "Blocage de sites web terminé"
Déblocage de Sites Web Basique
Débloquer un Site Web Unique
#!/bin/bash
# Supprimer un site web du fichier hosts
WEBSITE="www.facebook.com"
/usr/bin/sed -i "" "/127.0.0.1 $WEBSITE/d" /etc/hosts
/usr/bin/sed -i "" "/127.0.0.1 facebook.com/d" /etc/hosts
echo "Accès débloqué à $WEBSITE"
Débloquer Tous les Sites Web
#!/bin/bash
# Supprimer toutes les entrées de blocage du fichier hosts
/usr/bin/sed -i "" '/^127.0.0.1.*[^localhost]/d' /etc/hosts
echo "Tous les blocages de sites web supprimés"
Système de Contrôle d'Accès Web d'Entreprise
#!/bin/bash
# Contrôle d'Accès Web d'Entreprise MacFleet
# Système complet de filtrage web et de gestion de politiques
# Configuration
MACFLEET_DIR="/etc/macfleet"
POLICIES_DIR="$MACFLEET_DIR/web_policies"
REPORTS_DIR="$MACFLEET_DIR/reports"
COMPLIANCE_DIR="$MACFLEET_DIR/compliance"
AUDIT_DIR="$MACFLEET_DIR/audit"
LOG_FILE="/var/log/macfleet_web_access.log"
BACKUP_DIR="$MACFLEET_DIR/backups"
# Créer la structure de répertoires
create_directories() {
local dirs=("$MACFLEET_DIR" "$POLICIES_DIR" "$REPORTS_DIR" "$COMPLIANCE_DIR" "$AUDIT_DIR" "$BACKUP_DIR")
for dir in "${dirs[@]}"; do
[[ ! -d "$dir" ]] && mkdir -p "$dir"
done
}
# Fonction de journalisation
log_action() {
local message="$1"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] $message" | tee -a "$LOG_FILE"
}
# Sauvegarder le fichier hosts
backup_hosts() {
local backup_file="$BACKUP_DIR/hosts_backup_$(date +%Y%m%d_%H%M%S)"
cp /etc/hosts "$backup_file"
log_action "Fichier hosts sauvegardé vers: $backup_file"
}
# Catégories de Sites Web pour le Filtrage d'Entreprise
declare -A WEBSITE_CATEGORIES=(
["reseaux_sociaux"]="facebook.com,twitter.com,instagram.com,linkedin.com,snapchat.com,tiktok.com,pinterest.com"
["divertissement"]="youtube.com,netflix.com,hulu.com,twitch.tv,spotify.com,reddit.com"
["jeux"]="steam.com,epic.com,roblox.com,minecraft.net,ea.com,ubisoft.com"
["shopping"]="amazon.com,ebay.com,etsy.com,shopify.com,aliexpress.com"
["actualites"]="cnn.com,bbc.com,reuters.com,bloomberg.com,wsj.com"
["contenu_adulte"]="example.com"
["malveillant"]="malware.com,phishing-site.com,trojan-host.com"
)
# Politiques de Sécurité
declare -A SECURITY_POLICIES=(
["securite_elevee"]="reseaux_sociaux,divertissement,jeux,shopping,contenu_adulte,malveillant"
["securite_moderee"]="contenu_adulte,malveillant,jeux"
["securite_minimale"]="contenu_adulte,malveillant"
["equipe_developpement"]="malveillant"
["acces_executif"]="malveillant"
)
# Bloquer des sites web par catégorie
block_category() {
local category="$1"
local policy="$2"
if [[ -z "${WEBSITE_CATEGORIES[$category]}" ]]; then
log_action "ERREUR: Catégorie inconnue: $category"
return 1
fi
log_action "Blocage de la catégorie: $category (Politique: $policy)"
# Diviser les domaines séparés par des virgules
IFS=',' read -ra domains <<< "${WEBSITE_CATEGORIES[$category]}"
for domain in "${domains[@]}"; do
# Ajouter plusieurs variations
echo "127.0.0.1 $domain" >> /etc/hosts
echo "127.0.0.1 www.$domain" >> /etc/hosts
echo "127.0.0.1 m.$domain" >> /etc/hosts
echo "127.0.0.1 mobile.$domain" >> /etc/hosts
log_action "Domaine bloqué: $domain"
done
# Sauvegarder les métadonnées de politique
echo "category=$category,policy=$policy,timestamp=$(date),user=$(whoami)" >> "$POLICIES_DIR/applied_blocks.log"
}
# Appliquer une politique de sécurité
apply_security_policy() {
local policy="$1"
if [[ -z "${SECURITY_POLICIES[$policy]}" ]]; then
log_action "ERREUR: Politique de sécurité inconnue: $policy"
return 1
fi
log_action "Application de la politique de sécurité: $policy"
backup_hosts
# Effacer les blocages existants
/usr/bin/sed -i "" '/^127.0.0.1.*[^localhost]/d' /etc/hosts
# Appliquer les catégories pour cette politique
IFS=',' read -ra categories <<< "${SECURITY_POLICIES[$policy]}"
for category in "${categories[@]}"; do
block_category "$category" "$policy"
done
# Vider le cache DNS
dscacheutil -flushcache
killall -HUP mDNSResponder
log_action "Politique de sécurité '$policy' appliquée avec succès"
# Générer un rapport de conformité
generate_compliance_report "$policy"
}
# Filtrage DNS avancé
configure_dns_filtering() {
local filter_level="$1"
log_action "Configuration du filtrage DNS: $filter_level"
case "$filter_level" in
"entreprise")
# Utiliser des serveurs DNS d'entreprise avec filtrage
networksetup -setdnsservers "Wi-Fi" 208.67.222.222 208.67.220.220
networksetup -setdnsservers "Ethernet" 208.67.222.222 208.67.220.220
;;
"securite_familiale")
# Utiliser un DNS sécurisé pour la famille
networksetup -setdnsservers "Wi-Fi" 208.67.222.123 208.67.220.123
networksetup -setdnsservers "Ethernet" 208.67.222.123 208.67.220.123
;;
"securise")
# Utiliser un DNS axé sur la sécurité
networksetup -setdnsservers "Wi-Fi" 1.1.1.2 1.0.0.2
networksetup -setdnsservers "Ethernet" 1.1.1.2 1.0.0.2
;;
"defaut")
# Réinitialiser au DNS automatique
networksetup -setdnsservers "Wi-Fi" "Empty"
networksetup -setdnsservers "Ethernet" "Empty"
;;
esac
log_action "Filtrage DNS configuré: $filter_level"
}
# Gestion de liste blanche pour les sites d'affaires essentiels
manage_whitelist() {
local action="$1"
local domain="$2"
local whitelist_file="$POLICIES_DIR/business_whitelist.txt"
case "$action" in
"ajouter")
if ! grep -q "^$domain$" "$whitelist_file" 2>/dev/null; then
echo "$domain" >> "$whitelist_file"
# Supprimer du fichier hosts si bloqué
/usr/bin/sed -i "" "/127.0.0.1.*$domain/d" /etc/hosts
log_action "Ajouté à la liste blanche: $domain"
else
log_action "Domaine déjà en liste blanche: $domain"
fi
;;
"supprimer")
if [[ -f "$whitelist_file" ]]; then
/usr/bin/sed -i "" "/^$domain$/d" "$whitelist_file"
log_action "Supprimé de la liste blanche: $domain"
fi
;;
"lister")
if [[ -f "$whitelist_file" ]]; then
echo "Liste Blanche d'Affaires:"
cat "$whitelist_file"
else
echo "Aucune liste blanche trouvée"
fi
;;
esac
}
# Mode d'accès d'urgence
emergency_access() {
local action="$1"
local emergency_file="$POLICIES_DIR/emergency_mode.flag"
case "$action" in
"activer")
# Sauvegarder les hosts actuels et effacer tous les blocages
backup_hosts
cp /etc/hosts "$BACKUP_DIR/hosts_before_emergency"
/usr/bin/sed -i "" '/^127.0.0.1.*[^localhost]/d' /etc/hosts
touch "$emergency_file"
echo "emergency_enabled=$(date)" > "$emergency_file"
log_action "ACCÈS D'URGENCE ACTIVÉ - Tous les blocages de sites web supprimés"
;;
"desactiver")
if [[ -f "$emergency_file" ]]; then
rm "$emergency_file"
# Restaurer la configuration précédente si disponible
if [[ -f "$BACKUP_DIR/hosts_before_emergency" ]]; then
cp "$BACKUP_DIR/hosts_before_emergency" /etc/hosts
log_action "Accès d'urgence désactivé - Configuration précédente restaurée"
else
log_action "Accès d'urgence désactivé - Reconfiguration manuelle requise"
fi
else
log_action "L'accès d'urgence n'est pas actuellement activé"
fi
;;
"statut")
if [[ -f "$emergency_file" ]]; then
echo "Accès d'urgence: ACTIVÉ"
cat "$emergency_file"
else
echo "Accès d'urgence: DÉSACTIVÉ"
fi
;;
esac
}
# Générer un rapport de conformité complet
generate_compliance_report() {
local policy="$1"
local report_file="$REPORTS_DIR/web_access_compliance_$(date +%Y%m%d_%H%M%S).json"
local blocked_domains=$(grep -c "^127.0.0.1" /etc/hosts 2>/dev/null || echo "0")
local whitelist_count=0
[[ -f "$POLICIES_DIR/business_whitelist.txt" ]] && whitelist_count=$(wc -l < "$POLICIES_DIR/business_whitelist.txt")
cat > "$report_file" << EOF
{
"metadonnees_rapport": {
"horodatage": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"nom_hote": "$(hostname)",
"politique_appliquee": "$policy",
"version_rapport": "1.0"
},
"controle_acces_web": {
"nombre_domaines_bloques": $blocked_domains,
"nombre_domaines_liste_blanche": $whitelist_count,
"filtrage_dns_actif": $(networksetup -getdnsservers Wi-Fi | grep -q "208.67" && echo "true" || echo "false"),
"mode_urgence": $([ -f "$POLICIES_DIR/emergency_mode.flag" ] && echo "true" || echo "false")
},
"politique_securite": {
"nom": "$policy",
"categories_bloquees": "$(echo "${SECURITY_POLICIES[$policy]}" | tr ',' ' ')",
"cadres_conformite": ["SOX", "HIPAA", "NIST", "ISO27001"]
},
"statut_systeme": {
"taille_fichier_hosts": $(wc -l < /etc/hosts),
"derniere_vidange_dns": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"sauvegarde_disponible": $([ -d "$BACKUP_DIR" ] && [ "$(ls -1 "$BACKUP_DIR"/hosts_backup_* 2>/dev/null | wc -l)" -gt 0 ] && echo "true" || echo "false")
}
}
EOF
log_action "Rapport de conformité généré: $report_file"
echo "Rapport sauvegardé vers: $report_file"
}
# Vérification de santé et validation
perform_health_check() {
echo "=== Vérification de Santé du Contrôle d'Accès Web MacFleet ==="
# Vérifier l'intégrité du fichier hosts
if [[ -f "/etc/hosts" ]]; then
echo "✓ Le fichier hosts existe"
local hosts_size=$(wc -l < /etc/hosts)
echo " - Lignes: $hosts_size"
else
echo "✗ Fichier hosts manquant"
fi
# Vérifier les domaines bloqués
local blocked_count=$(grep -c "^127.0.0.1" /etc/hosts 2>/dev/null || echo "0")
echo "✓ Domaines bloqués: $blocked_count"
# Vérifier la configuration DNS
local dns_servers=$(networksetup -getdnsservers Wi-Fi)
echo "✓ Serveurs DNS: $dns_servers"
# Vérifier la liste blanche
if [[ -f "$POLICIES_DIR/business_whitelist.txt" ]]; then
local whitelist_count=$(wc -l < "$POLICIES_DIR/business_whitelist.txt")
echo "✓ Domaines en liste blanche: $whitelist_count"
else
echo "○ Aucune liste blanche configurée"
fi
# Vérifier le mode d'urgence
if [[ -f "$POLICIES_DIR/emergency_mode.flag" ]]; then
echo "⚠️ Mode d'urgence: ACTIF"
else
echo "✓ Mode d'urgence: INACTIF"
fi
# Vérifier l'activité récente
if [[ -f "$LOG_FILE" ]]; then
local recent_entries=$(tail -5 "$LOG_FILE" | wc -l)
echo "✓ Entrées de journal récentes: $recent_entries"
fi
}
# Fonction de déploiement de flotte
deploy_to_fleet() {
local policy="$1"
local fleet_file="$2"
if [[ ! -f "$fleet_file" ]]; then
log_action "ERREUR: Fichier de flotte non trouvé: $fleet_file"
return 1
fi
log_action "Début du déploiement de flotte de la politique: $policy"
while IFS= read -r host; do
[[ -z "$host" || "$host" =~ ^#.*$ ]] && continue
echo "Déploiement vers: $host"
# Copier ce script vers l'hôte distant et l'exécuter
ssh "$host" "bash -s" << EOF
#!/bin/bash
# Déploiement distant de la politique d'accès web: $policy
# Créer les répertoires
mkdir -p /etc/macfleet/{web_policies,reports,compliance,audit,backups}
# Appliquer la politique (simplifié pour l'exécution distante)
$(declare -p WEBSITE_CATEGORIES)
$(declare -p SECURITY_POLICIES)
$(type apply_security_policy | sed '1d')
apply_security_policy "$policy"
EOF
if [[ $? -eq 0 ]]; then
log_action "Déploiement réussi vers: $host"
else
log_action "Échec du déploiement vers: $host"
fi
done < "$fleet_file"
log_action "Déploiement de flotte terminé"
}
# Fonction d'exécution principale
main() {
create_directories
case "${1:-}" in
"appliquer_politique")
apply_security_policy "$2"
;;
"bloquer_categorie")
backup_hosts
block_category "$2" "manuel"
;;
"configurer_dns")
configure_dns_filtering "$2"
;;
"liste_blanche")
manage_whitelist "$2" "$3"
;;
"urgence")
emergency_access "$2"
;;
"verification_sante")
perform_health_check
;;
"rapport")
generate_compliance_report "${2:-manuel}"
;;
"deployer")
deploy_to_fleet "$2" "$3"
;;
"aide"|*)
echo "Système de Contrôle d'Accès Web MacFleet"
echo ""
echo "Usage: $0 <commande> [options]"
echo ""
echo "Commandes:"
echo " appliquer_politique <politique> - Appliquer une politique de sécurité (securite_elevee|securite_moderee|securite_minimale|equipe_developpement|acces_executif)"
echo " bloquer_categorie <categorie> - Bloquer une catégorie de sites web (reseaux_sociaux|divertissement|jeux|shopping|actualites|contenu_adulte|malveillant)"
echo " configurer_dns <niveau> - Configurer le filtrage DNS (entreprise|securite_familiale|securise|defaut)"
echo " liste_blanche <action> <domaine> - Gérer la liste blanche (ajouter|supprimer|lister)"
echo " urgence <action> - Contrôle d'accès d'urgence (activer|desactiver|statut)"
echo " verification_sante - Effectuer une vérification de santé du système"
echo " rapport [politique] - Générer un rapport de conformité"
echo " deployer <politique> <fichier_flotte> - Déployer une politique vers la flotte"
echo ""
echo "Exemples:"
echo " $0 appliquer_politique securite_elevee"
echo " $0 liste_blanche ajouter salesforce.com"
echo " $0 urgence activer"
echo " $0 verification_sante"
;;
esac
}
# Exécuter la fonction principale
main "$@"
## Heures d'Affaires et Contrôles Conviviaux
### Contrôle d'Accès Basé sur l'Heure
```bash
#!/bin/bash
# Appliquer différentes politiques selon les heures d'affaires
apply_time_based_policy() {
local current_hour=$(date +%H)
local day_of_week=$(date +%u)
# Heures d'affaires: Lundi-Vendredi 9h - 18h
if [[ $day_of_week -le 5 ]] && [[ $current_hour -ge 9 ]] && [[ $current_hour -lt 18 ]]; then
echo "Heures d'affaires détectées - application de la politique stricte"
apply_security_policy "securite_elevee"
else
echo "En dehors des heures d'affaires - application de la politique assouplie"
apply_security_policy "securite_moderee"
fi
}
Système de Notification Utilisateur
#!/bin/bash
# Notifier l'utilisateur des changements d'accès aux sites web
notify_user() {
local message="$1"
local title="Accès Web MacFleet"
# Utiliser osascript pour la notification utilisateur
osascript -e "display notification \"$message\" with title \"$title\" sound name \"Glass\""
# Aussi enregistrer dans le système
log_action "Notification utilisateur: $message"
}
# Exemple d'utilisation
notify_user "Politique d'accès aux sites web mise à jour en mode Haute Sécurité"
Considérations de Sécurité Importantes
- Les permissions du fichier hosts doivent être restreintes pour empêcher les modifications non autorisées
- Le filtrage DNS fournit une protection au niveau réseau au-delà du fichier hosts local
- Les procédures d'accès d'urgence doivent être documentées et testées
- Les sauvegardes régulières du fichier hosts et de la configuration sont essentielles
- La journalisation d'audit aide à suivre les changements de politique et la conformité
Conformité et Rapports
Le système d'entreprise génère des rapports complets pour :
- Conformité SOX - Contrôles d'accès web des services financiers
- Exigences HIPAA - Politiques de protection des données de santé
- Cadre NIST - Alignement sur les normes de cybersécurité
- ISO 27001 - Gestion de la sécurité de l'information
Tests et Validation
Avant le déploiement en production :
- Tester les commandes individuelles sur des systèmes isolés
- Vérifier la résolution DNS après application des politiques
- Confirmer que les applications d'affaires restent accessibles
- Tester les procédures d'urgence et la restauration
- Valider la précision des rapports de conformité
Ce système complet transforme le blocage de sites web basique en une plateforme de contrôle d'accès de niveau entreprise avec gestion avancée de politiques, rapports de conformité et capacités de déploiement de flotte.