Skip to main content
Glama

Wazuh MCP Server

by gensecaihq
install_fedora.sh15.8 kB
#!/bin/bash # ============================================================================= # Fedora/RHEL/CentOS Installation Script for Wazuh MCP Server # Supports: Fedora, RHEL, CentOS, Rocky Linux, AlmaLinux # ============================================================================= set -e # Exit on any error # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' BOLD='\033[1m' NC='\033[0m' # No Color # Helper functions print_header() { echo -e "${CYAN}======================================================================${NC}" echo -e " ${BOLD}WAZUH MCP SERVER - FEDORA/RHEL/CENTOS SETUP${NC}" echo -e " ${BLUE}Secure Integration for Claude Desktop & Wazuh SIEM${NC}" echo -e "${CYAN}======================================================================${NC}" echo } print_info() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[✓]${NC} $1" } print_error() { echo -e "${RED}[✗]${NC} $1" } print_warning() { echo -e "${YELLOW}[⚠]${NC} $1" } print_step() { echo -e "\n${BOLD}▶▶▶ $1${NC}" } # Detect distribution detect_distro() { if [ -f /etc/os-release ]; then . /etc/os-release DISTRO=$ID VERSION=$VERSION_ID DISTRO_NAME=$PRETTY_NAME MAJOR_VERSION=${VERSION_ID%%.*} else print_error "Cannot detect distribution" exit 1 fi print_info "Detected: $DISTRO_NAME" case $DISTRO in fedora) PKG_MGR="dnf" print_success "Fedora detected" ;; rhel|centos|rocky|almalinux) # Determine package manager if command -v dnf >/dev/null 2>&1; then PKG_MGR="dnf" elif command -v yum >/dev/null 2>&1; then PKG_MGR="yum" else print_error "Neither dnf nor yum found" exit 1 fi print_success "RHEL-compatible distribution detected (using $PKG_MGR)" ;; *) print_warning "Unsupported distribution: $DISTRO" print_info "This script is designed for Fedora/RHEL-based distributions" read -p "Continue anyway? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi # Default to dnf if available, otherwise yum if command -v dnf >/dev/null 2>&1; then PKG_MGR="dnf" elif command -v yum >/dev/null 2>&1; then PKG_MGR="yum" else print_error "No supported package manager found" exit 1 fi ;; esac print_info "Using package manager: $PKG_MGR" } # Check if running as root check_root() { if [ "$EUID" -eq 0 ]; then print_warning "Running as root - this is not recommended" print_info "Consider running as a regular user with sudo access" read -p "Continue as root? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi } # Enable additional repositories enable_repos() { print_step "Enabling additional repositories" case $DISTRO in fedora) # Enable RPM Fusion for additional packages (optional) if [ "$EUID" -eq 0 ]; then $PKG_MGR install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm || print_warning "RPM Fusion installation failed" else sudo $PKG_MGR install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm || print_warning "RPM Fusion installation failed" fi ;; rhel|centos) # Enable EPEL repository if [ "$MAJOR_VERSION" -ge 8 ]; then if [ "$EUID" -eq 0 ]; then $PKG_MGR install -y epel-release || print_warning "EPEL installation failed" else sudo $PKG_MGR install -y epel-release || print_warning "EPEL installation failed" fi elif [ "$MAJOR_VERSION" -eq 7 ]; then if [ "$EUID" -eq 0 ]; then yum install -y epel-release || print_warning "EPEL installation failed" else sudo yum install -y epel-release || print_warning "EPEL installation failed" fi fi ;; esac print_success "Repository setup completed" } # Update packages update_packages() { print_step "Updating package lists" if [ "$EUID" -eq 0 ]; then $PKG_MGR update -y else sudo $PKG_MGR update -y fi print_success "Package lists updated" } # Install system dependencies install_system_deps() { print_step "Installing system dependencies" local packages=( "python3" "python3-pip" "python3-devel" "gcc" "gcc-c++" "make" "git" "curl" "ca-certificates" "openssl-devel" "libffi-devel" ) # Add distribution-specific packages case $DISTRO in fedora) packages+=("python3-virtualenv") # Try to install python3-pydantic if available if $PKG_MGR list python3-pydantic >/dev/null 2>&1; then packages+=("python3-pydantic") fi ;; rhel|centos) if [ "$MAJOR_VERSION" -ge 8 ]; then packages+=("python3-virtualenv") packages+=("platform-python-devel") else # CentOS 7 needs different packages packages+=("python36-devel") fi ;; esac print_info "Installing packages: ${packages[*]}" if [ "$EUID" -eq 0 ]; then $PKG_MGR install -y "${packages[@]}" else sudo $PKG_MGR install -y "${packages[@]}" fi print_success "System dependencies installed" } # Check Python version check_python() { print_step "Checking Python version" # Try different Python executables local python_cmd="" for cmd in python3 python3.9 python3.10 python3.11 python3.12; do if command -v $cmd >/dev/null 2>&1; then local version=$($cmd -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')") if python3 -c "import sys; exit(0 if sys.version_info >= (3, 9) else 1)" 2>/dev/null; then python_cmd=$cmd break fi fi done if [ -z "$python_cmd" ]; then print_error "Python 3.9+ not found" print_info "Available Python versions:" for cmd in python3 python3.9 python3.10 python3.11 python3.12; do if command -v $cmd >/dev/null 2>&1; then local version=$($cmd --version 2>&1) print_info " $cmd: $version" fi done exit 1 fi local python_version=$($python_cmd -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')") print_success "Python version compatible: $python_version (using $python_cmd)" # Create symlink if needed if [ "$python_cmd" != "python3" ]; then export PYTHON_CMD=$python_cmd else export PYTHON_CMD=python3 fi } # Create virtual environment create_venv() { print_step "Setting up virtual environment" # Check if already in virtual environment if [ -n "$VIRTUAL_ENV" ]; then print_success "Already running in virtual environment" return 0 fi if [ -d "venv" ]; then print_info "Virtual environment already exists" else print_info "Creating virtual environment..." # Try different methods to create virtual environment if command -v virtualenv >/dev/null 2>&1; then virtualenv -p $PYTHON_CMD venv elif $PYTHON_CMD -m venv --help >/dev/null 2>&1; then $PYTHON_CMD -m venv venv else print_error "Cannot create virtual environment" print_info "Please install python3-virtualenv or python3-venv" exit 1 fi print_success "Virtual environment created" fi # Activate virtual environment print_info "Activating virtual environment..." source venv/bin/activate # Verify activation if [ -n "$VIRTUAL_ENV" ]; then print_success "Virtual environment activated: $VIRTUAL_ENV" else print_error "Failed to activate virtual environment" exit 1 fi } # Upgrade pip upgrade_pip() { print_step "Upgrading pip" python -m pip install --upgrade pip setuptools wheel if [ $? -eq 0 ]; then print_success "Pip upgraded successfully" else print_warning "Pip upgrade failed, continuing with existing version" fi } # Install Python dependencies install_python_deps() { print_step "Installing Python dependencies" if [ ! -f "requirements.txt" ]; then print_error "requirements.txt not found" exit 1 fi print_info "Installing production dependencies..." pip install -r requirements.txt if [ $? -eq 0 ]; then print_success "Dependencies installed successfully" else print_error "Failed to install dependencies" print_info "This might be due to missing system packages or compilation issues" print_info "Try installing development packages: sudo $PKG_MGR groupinstall 'Development Tools'" exit 1 fi # Install development dependencies if available if [ -f "requirements-dev.txt" ]; then print_info "Installing development dependencies..." pip install -r requirements-dev.txt || print_warning "Development dependencies installation failed" fi } # Install the package install_package() { print_step "Installing Wazuh MCP Server" pip install -e . if [ $? -eq 0 ]; then print_success "Wazuh MCP Server installed successfully" else print_error "Failed to install Wazuh MCP Server" exit 1 fi } # Setup configuration setup_config() { print_step "Setting up configuration" # Create .env file if [ ! -f ".env" ]; then if [ -f ".env.example" ]; then cp .env.example .env print_success "Created .env from .env.example" else # Create default .env cat > .env << 'EOF' # ============================================================================= # WAZUH MCP SERVER - CONFIGURATION # ============================================================================= # Wazuh Manager Configuration WAZUH_HOST=your-wazuh-server.com WAZUH_PORT=55000 WAZUH_USER=your-username WAZUH_PASS=your-password # Wazuh Indexer Configuration WAZUH_INDEXER_HOST=your-wazuh-server.com WAZUH_INDEXER_PORT=9200 WAZUH_INDEXER_USER=your-username WAZUH_INDEXER_PASS=your-password # Security Settings (Fedora/RHEL optimized) VERIFY_SSL=false WAZUH_ALLOW_SELF_SIGNED=true # Logging LOG_LEVEL=INFO EOF print_success "Created default .env file" fi # Set secure permissions chmod 600 .env print_success "Set secure permissions on .env file (600)" else print_info ".env file already exists" fi # Create logs directory if [ ! -d "logs" ]; then mkdir -p logs chmod 755 logs print_success "Created logs directory" fi } # Test installation test_installation() { print_step "Testing installation" local tests=( "wazuh_mcp_server.main:Main module" "wazuh_mcp_server.config:Configuration module" "wazuh_mcp_server.api.wazuh_client:API client" "wazuh_mcp_server.analyzers.security_analyzer:Security analyzer" "wazuh_mcp_server.utils.logging:Utilities" ) for test in "${tests[@]}"; do local module="${test%%:*}" local description="${test##*:}" if python -c "import $module; print('✓ $description OK')" 2>/dev/null; then print_success "$description: OK" else print_error "$description: FAILED" return 1 fi done print_success "Installation test completed successfully" } # Show completion message show_completion() { local project_path=$(pwd) echo print_header echo -e "${GREEN} 🎉 ${BOLD}SETUP COMPLETE - READY FOR DEPLOYMENT!${NC}" echo -e "${GREEN}======================================================================${NC}" echo echo -e "${BOLD}📋 NEXT STEPS:${NC}" echo echo -e "${CYAN}1. Configure Wazuh Connection:${NC}" echo " • Edit .env file with your Wazuh server details:" echo -e " ${YELLOW}nano .env${NC}" echo " • Required fields: WAZUH_HOST, WAZUH_USER, WAZUH_PASS" echo echo -e "${CYAN}2. Test Connection:${NC}" echo " • source venv/bin/activate" echo " • python -m wazuh_mcp_server --stdio" echo echo -e "${CYAN}3. Claude Desktop Integration:${NC}" echo " • Open Claude Desktop" echo " • Go to Settings → Developer → Edit Config" echo " • Add configuration from documentation" echo " • Config location: ~/.config/Claude/claude_desktop_config.json" echo echo -e "${CYAN}4. Fedora/RHEL Specific Notes:${NC}" echo " • SELinux may affect file access - check with: getenforce" echo " • Firewall rules may need adjustment for Wazuh connectivity" echo " • Consider using system Python packages when available" echo -e " • Check system logs: ${YELLOW}journalctl -f${NC}" echo echo -e "${CYAN}5. Security Recommendations:${NC}" echo " • Use dedicated Wazuh service accounts" echo " • Enable SSL verification in production" echo " • Monitor logs regularly" echo -e " • Check permissions: ${YELLOW}ls -la .env${NC}" echo echo -e "${BOLD}🛡️ CAPABILITIES ENABLED:${NC}" local capabilities=( "Real-time security monitoring and alerting" "AI-powered threat analysis and correlation" "Comprehensive vulnerability management" "Compliance reporting (PCI DSS, GDPR, HIPAA)" "Agent management and configuration" "Fedora/RHEL optimized compatibility layer" ) for capability in "${capabilities[@]}"; do echo " • $capability" done echo echo -e "${BOLD}🔧 SYSTEM CONFIGURATION:${NC}" echo " • Distribution: $DISTRO_NAME" echo " • Package Manager: $PKG_MGR" echo " • Python: $($PYTHON_CMD --version 2>&1)" echo echo -e "${BOLD}📞 SUPPORT:${NC}" echo " • Documentation: ./docs/" echo " • Logs: ./logs/" echo " • Issues: https://github.com/gensecaihq/Wazuh-MCP-Server/issues" echo " • Fedora/RHEL troubleshooting: ./docs/fedora-rhel-setup.md" echo echo -e "${GREEN}======================================================================${NC}" } # Main installation function main() { print_header # Pre-flight checks detect_distro check_root # Installation steps enable_repos update_packages install_system_deps check_python create_venv upgrade_pip install_python_deps install_package setup_config test_installation # Show completion show_completion } # Error handling trap 'print_error "Installation failed at line $LINENO. Check the error messages above."' ERR # Run main function main "$@"

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gensecaihq/Wazuh-MCP-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server