Firewall — Serveur 3CX
Configure iptables avec l'ensemble des ports nécessaires au bon fonctionnement de 3CX Phone System.
Ports ouverts :
| Port | Proto | Usage |
|------|-------|-------|
| 22 | TCP | SSH |
| 80 | TCP | HTTP (redirect vers HTTPS) |
| 443 | TCP | HTTPS — interface admin |
| 5001 | TCP | HTTPS SIP — clients 3CX (app mobile, softphone) |
| 5015 | TCP | Wizard de configuration (à fermer après setup) |
| 5060 | TCP+UDP | SIP standard |
| 5061 | TCP | SIP TLS |
| 5090 | TCP+UDP | Tunnel SBC |
| 9000–9499 | UDP | RTP — flux audio/vidéo |
> Note : Le port 5015 peut être fermé après la configuration initiale pour réduire la surface d'attaque.
#!/bin/bash
set -euo pipefail
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERR]${NC} $*"; exit 1; }
[[ $EUID -ne 0 ]] && error "Ce script doit être exécuté en root."
warn "Ce script va appliquer les règles firewall 3CX."
warn "Seuls les ports nécessaires à 3CX seront ouverts."
echo ""
read -rp " Continuer ? [oui/NON] " confirm
[[ "$confirm" != "oui" ]] && echo "Annulé." && exit 0
# ── Installation iptables-persistent ─────────────────────────────────────────
info "=== Installation de iptables-persistent ==="
apt-get update -qq
DEBIAN_FRONTEND=noninteractive apt-get install -y iptables-persistent
# ── Flush ────────────────────────────────────────────────────────────────────
info "=== Remise à zéro des règles ==="
iptables -F; iptables -X; iptables -Z
ip6tables -F; ip6tables -X; ip6tables -Z
# ── Politique par défaut ──────────────────────────────────────────────────────
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT
info "=== Application des règles 3CX ==="
tcp() { iptables -A INPUT -p tcp --dport "$1" -j ACCEPT; ip6tables -A INPUT -p tcp --dport "$1" -j ACCEPT; }
udp() { iptables -A INPUT -p udp --dport "$1" -j ACCEPT; ip6tables -A INPUT -p udp --dport "$1" -j ACCEPT; }
# Loopback
iptables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT
# Connexions établies
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ICMP
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
# ── Ports 3CX ────────────────────────────────────────────────────────────────
tcp 22 # SSH
tcp 80 # HTTP
tcp 443 # HTTPS admin
tcp 5001 # HTTPS SIP (app 3CX, softphones)
tcp 5015 # Wizard (peut être fermé après config)
tcp 5060 # SIP TCP
udp 5060 # SIP UDP
tcp 5061 # SIP TLS
tcp 5090 # Tunnel SBC TCP
udp 5090 # Tunnel SBC UDP
# RTP audio/vidéo (plage complète 3CX)
iptables -A INPUT -p udp --dport 9000:9499 -j ACCEPT
ip6tables -A INPUT -p udp --dport 9000:9499 -j ACCEPT
# ── Sauvegarde ───────────────────────────────────────────────────────────────
info "=== Sauvegarde des règles ==="
netfilter-persistent save
echo ""
info "=== Firewall 3CX configuré ==="
echo ""
echo " Ports ouverts :"
echo " 22/tcp — SSH"
echo " 80/tcp — HTTP"
echo " 443/tcp — HTTPS admin"
echo " 5001/tcp — HTTPS SIP (clients 3CX)"
echo " 5015/tcp — Wizard (fermer après config)"
echo " 5060/tcp+udp — SIP"
echo " 5061/tcp — SIP TLS"
echo " 5090/tcp+udp — Tunnel SBC"
echo " 9000-9499/udp — RTP audio/vidéo"
echo ""
echo " Fermer le wizard après config :"
echo " iptables -D INPUT -p tcp --dport 5015 -j ACCEPT && netfilter-persistent save"
echo ""
iptables -L INPUT -n -v --line-numbers
echo ""