Skip to content

OCN Firewall - Administrator Guide


Mục lục

On this page

Tổng quan

Hướng dẫn cài đặt OCN Firewall, hệ thống bao gồm:

  • MongoDB: Database chính
  • OCN Firewall API Server: Backend service cung cấp REST API
  • OCN Firewall Frontend: Web dashboard React application
  • OCN Firewall Agent: Service chạy trên các server để quản lý firewall rules

Yêu cầu hệ thống

Phần cứng tối thiểu

  • CPU: 2 cores
  • RAM: 4GB
  • Disk: 20GB (cho MongoDB data)
  • Network: Kết nối internet để pull Docker images

Phần mềm

  • Docker: Version 20.10+
  • Docker Compose: Version 2.0+
  • OS: Linux (Ubuntu 20.04+, …)

Cài đặt Docker và Docker Compose

1. Cài đặt Docker

# Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

# CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

2. Cài đặt Docker Compose

# Cài đặt Docker Compose plugin
sudo apt-get update
sudo apt-get install -y docker-compose-plugin

# Hoặc cài đặt standalone
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Cài đặt OCN Firewall

1. Tạo thư mục dự án

mkdir -p ocn-firewall
cd ocn-firewall

2. Các file khởi chạy cần thiết

Lưu ý: Ở môi trường Production MongoDB, các thành phần cần được setup đầy đủ Replica, HA. Liên hệ với bộ phận hỗ trợ kỹ thuật OCN để được tư vấn, hướng dẫn đầy đủ

# docker-compose.yaml
version: '3.8'

services:
  # MongoDB Database
  mongo:
    image: mongo:7.0.16
    container_name: ocn-firewall-mongo
    restart: always
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: Ocn123456@
      MONGO_INITDB_DATABASE: ocnfirewall
    volumes:
      - mongodata:/data/db
      - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
    networks:
      - ocn-firewall-network
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
    command: ["mongod", "--auth", "--bind_ip_all"]

  # OCN Firewall API Server
  firewalld:
    image: images.ocn.com.vn/firewall/firewall:v1.0.0
    container_name: ocn-firewall-api
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - /etc/localtime:/etc/localtime:ro
    ulimits:
      nproc: 65535
      nofile:
        soft: 20000
        hard: 40000
    logging:
      driver: "json-file"
      options:
        max-size: "200k"
        max-file: "10"
    environment:
      DEVELOPMENT_MODE: "true"
      HTTP_SERVER_HOST: "0.0.0.0"
      HTTP_SERVER_PORT: "8080"
      HTTP_SERVER_READ_TIMEOUT: "5s"
      HTTP_SERVER_READ_HEADER_TIMEOUT: "5s"
      HTTP_SERVER_WRITE_TIMEOUT: "5s"
      HTTP_SERVER_IDLE_TIMEOUT: "2m"
      HTTP_SERVER_CORS_ALLOW_DOMAIN: "*"
      HTTP_SERVER_CORS_ALLOW_METHOD: "POST OPTIONS GET PUT PATCH DELETE"
      DB_URI: "mongodb://ocn-firewall-mongo:27017/ocnfirewall"
      LOGGING: "False"
      USER_TOKEN_SECRET_KEY: "my_secret_key"
      ENCRYPT_KEY: "1234567890abcdf@"
      TIMEWHEEL_TICK: "1s"
      TIMEWHEEL_BUCKETS_CAPACITY: "120"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_HOURLY_IS_ENABLED: "true"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_HOURLY_TIME_SCHEDULE: "0 */1 * * *"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_DAILY_IS_ENABLED: "true"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_DAILY_TIME_SCHEDULE: "0 1 */1 * *"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_CLEANUP_SECONDLY_IS_ENABLED: "true"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_CLEANUP_SECONDLY_RETENTION_DAYS: "1"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_CLEANUP_SECONDLY_TIME_SCHEDULE: "0 0 * * *"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_CLEANUP_HOURLY_IS_ENABLED: "true"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_CLEANUP_HOURLY_RETENTION_DAYS: "3"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_CLEANUP_HOURLY_TIME_SCHEDULE: "0 0 * * *"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_CLEANUP_DAILY_IS_ENABLED: "true"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_CLEANUP_DAILY_RETENTION_DAYS: "7"
      CRON_SCHEDULER_SERVER_POLICY_STATISTIC_CLEANUP_DAILY_TIME_SCHEDULE: "0 0 * * *"
    depends_on:
      mongo:
        condition: service_healthy
    networks:
      - ocn-firewall-network
    healthcheck:
      test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/api/v1/ping"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s


  # OCN Firewall Frontend
  frontend:
    image: images.ocn.com.vn/firewall/frontend:v1.0.0
    container_name: ocn-firewall-frontend
    restart: always
    ports:
      - "8081:80"
    environment:
      # Thay đổi thành IP hoặc domain của bạn
      VITE_BASE_API_URL: "http://127.0.0.1:8080/api/v1"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./nginx/default.conf.template:/etc/nginx/templates/default.conf.template:ro
    ulimits:
      nproc: 65535
      nofile:
        soft: 20000
        hard: 40000
    logging:
      driver: "json-file"
      options:
        max-size: "200k"
        max-file: "10"
    depends_on:
      mongo:
        condition: service_healthy
      firewalld:
        condition: service_healthy
    networks:
      - ocn-firewall-network
    healthcheck:
      test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:80"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

volumes:
  mongodata:
    driver: local

networks:
  ocn-firewall-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16
# Trường hợp không có internet copy file image và chạy:
sudo docker load -i ocn-firewall.tar
# nginx/default.conf.template
server {
    listen 80;
    server_name _;

    root /usr/share/nginx/html;
    index index.html;

    location / {
        sub_filter_once off;
        sub_filter_types application/javascript application/json text/html text/plain text/css;
        sub_filter 'https://firewall-be.ocn.com.vn/api/v1' '${VITE_BASE_API_URL}';

        try_files $uri $uri/ /index.html;
    }
}
# mongo-init.js
print('Starting MongoDB initialization...');
db = db.getSiblingDB('ocnfirewall');
db.createUser({
    user: "root",
    pwd: "Ocn123456@",
    roles: [
        {
            role: "userAdmin",
            db: "ocnfirewall"
        },
        {
            role: "readWrite",
            db: "ocnfirewall"
        },
        {
            role: "dbAdmin",
            db: "ocnfirewall"
        }
    ]
});

db.createCollection("init");
db.init.insertOne({ 
    initialized: true, 
    timestamp: new Date(),
    version: "1.0.0",
    description: "OCN Firewall Database"
});

db.createCollection("users");
db.createCollection("policies");
db.createCollection("servers");
db.createCollection("events");

print('MongoDB database "ocnfirewall" initialized successfully');
print('User "root" created with full access to database');
Hệ thống sẽ tự động tạo database ocnfirewall và user root với password Ocn123456@ khi khởi động lần đầu, bạn có thể đổi lại tài khoản mặc định ở file mongo-init.js này.

3. Khởi động hệ thống

# Khởi động tất cả services
docker-compose up -d

# Kiểm tra trạng thái
docker-compose ps

# Xem logs
docker-compose logs -f

# Chờ MongoDB khởi động hoàn toàn (có thể mất 1-2 phút)
docker-compose logs -f mongo

# Chờ API Server khởi động hoàn toàn
docker-compose logs -f firewalld

# Chờ Frontend khởi động hoàn toàn
docker-compose logs -f frontend

Cài đặt OCN Firewall Agent

1. Tải, cài đặt Agent từ repo.ocn.com.vn

# Liện hệ bộ phận hỗ trợ để được cung cấp tài khoản repo
CODENAME=$(lsb_release -cs)
echo "deb [signed-by=/etc/apt/trusted.gpg.d/ocn-nexus-pubkey.asc arch=amd64] https://nexus.ocn.com.vn/repository/ubuntu-$CODENAME/ $CODENAME main" | sudo tee /etc/apt/sources.list.d/nexus-ocn.list
sudo apt update
sudo apt install ocn-firewall
# Trường hợp không có internet copy file deb và chạy:
sudo dpkg -i ocn-firewall.deb

3. Cấu hình Agent

Tạo file cấu hình /opt/ocn/ocn-firewall/config/config.env:

# Tạo file cấu hình
sudo mkdir -p /opt/ocn/ocn-firewall/config
sudo tee /opt/ocn/ocn-firewall/config/config.env > /dev/null <<EOF
# Agent Configuration
GROUPNAME=your-group-name
IP=your-server-ip
APISERVER_IPV4=your-api-server-ip
APISERVER_ADDRESS=http://your-api-server:8080
TOKEN=your-server-token

# Dataplane Configuration
IPV6_SUPPORT=false
IPTABLES_LOCK_SECONDS_TIMEOUT=30
DATASTORE_REFRESH_INTERVAL=30s
DATAPLANE_REFRESH_INTERVAL=30s
DEBUG=false
EOF

Giải thích các tham số cấu hình:

  • GROUPNAME: Tên nhóm server thuộc về
  • IP: IP address của server hiện tại
  • APISERVER_IPV4: IP address của API server (để kết nối trực tiếp)
  • APISERVER_ADDRESS: URL của API server (để kết nối qua HTTP)
  • TOKEN: Server authentication token từ API server
  • IPV6_SUPPORT: Hỗ trợ IPv6 (true/false)
  • IPTABLES_LOCK_SECONDS_TIMEOUT: Timeout cho iptables lock (giây)
  • DATASTORE_REFRESH_INTERVAL: Chu kỳ đồng bộ dữ liệu từ API server
  • DATAPLANE_REFRESH_INTERVAL: Chu kỳ cập nhật dataplane (iptables rules)
  • DEBUG: Bật/tắt debug mode

4. Thiết lập quyền truy cập

# Thiết lập quyền sở hữu
sudo chown -R ocn-firewall:ocn-firewall /opt/ocn/ocn-firewall/

# Thiết lập quyền truy cập
sudo chmod 755 /opt/ocn/ocn-firewall/
sudo chmod 644 /opt/ocn/ocn-firewall/config/config.env

5. Khởi động Agent

# Khởi động service
sudo systemctl start ocn-firewall

# Bật auto-start
sudo systemctl enable ocn-firewall

# Kiểm tra trạng thái
sudo systemctl status ocn-firewall

Kiểm tra cài đặt

1. Kiểm tra API Server

# Health check
curl http://localhost:8080/api/v1/ping

2. Kiểm tra Frontend

# Health check
curl http://localhost:80

3. Kiểm tra Agent

# Kiểm tra service status
sudo systemctl status ocn-firewall

# Kiểm tra logs
sudo journalctl -u ocn-firewall -f

# Kiểm tra process
ps aux | grep ocn-firewall

4. Quản lý máy chủ qua CLI

Sử dụng ocnfwctl server để quản lý các máy chủ đã đăng ký.

  • Liệt kê máy chủ:
    ocnfwctl server list [--group <groupname>] [--status <online|offline>] [--label <key=value>] [--columns <col1,col2,...>]
    # Ví dụ xem ID, hostname, status, IP
    ocnfwctl server list --columns id,hostname,status,ip
    
  • Xem chi tiết máy chủ:
    ocnfwctl server get --id <server_id>
    # Hoặc dùng --ip <ip_address> hoặc --hostname <hostname>
    
  • Cập nhật thông tin máy chủ: (Ví dụ: đổi nhóm)
    ocnfwctl server update --id <server_id> --groupname "new-group-name"
    
  • Xóa máy chủ: (Chỉ xóa khỏi API Server, không gỡ Agent)
    ocnfwctl server delete --id <server_id>
    # Lưu ý: Nên dừng Agent trên máy chủ trước khi xóa khỏi API Server.
    

5. Sử dụng Nhãn (Labels) và Nhóm (Groups)

Nhãn và Nhóm là cơ chế cốt lõi để áp dụng chính sách một cách linh hoạt.

  • Nhóm (Groupname): Một thuộc tính chính của máy chủ, thường được đặt khi Agent đăng ký (ví dụ: web-servers, db-servers, production, staging). Một máy chủ chỉ thuộc về một nhóm tại một thời điểm.
  • Nhãn (Labels): Các cặp key-value tùy ý bạn có thể gán cho máy chủ để phân loại chi tiết hơn (ví dụ: env=production, app=backend, dc=us-east-1, os=ubuntu). Một máy chủ có thể có nhiều nhãn. Nhãn rất quan trọng khi định nghĩa selector trong chính sách.

  • Gắn nhãn cho máy chủ:

    ocnfwctl server label --id <server_id> --label <key1=value1> --label <key2=value2>
    # Ví dụ:
    ocnfwctl server label --id server-abc-123 --label env=production --label tier=frontend
    

  • Xóa nhãn:
    ocnfwctl server unlabel --id <server_id> --label <key_to_remove>
    
  • Liệt kê các nhóm hiện có:
    ocnfwctl server groups
    
  • Đổi tên nhóm cho nhiều máy chủ:
    ocnfwctl server group-rename --old-name "old-group" --new-name "new-group"
    

6. Giám sát trạng thái máy chủ

  • Kiểm tra trạng thái kết nối:
    ocnfwctl server list --columns id,hostname,ip,status,lastHeartbeat
    # 'status' sẽ là 'online' hoặc 'offline'
    # 'lastHeartbeat' cho biết thời gian cuối cùng Agent gửi tín hiệu
    
  • Kiểm tra phiên bản Agent:
    ocnfwctl server list --columns id,hostname,version
    
  • Xem lịch sử trạng thái: (Xem khi nào máy chủ online/offline)
    ocnfwctl server history --id <server_id>
    
  • Xem thông tin chi tiết Agent: (Cấu hình, trạng thái datastore/dataplane)
    ocnfwctl server agent-info --id <server_id>
    
  • Kiểm tra trạng thái áp dụng chính sách:
    ocnfwctl server policy-status --id <server_id>
    
  • Buộc đồng bộ lại chính sách: (Yêu cầu Agent lấy lại chính sách từ API Server)
    ocnfwctl server sync-policies --id <server_id>
    

7. Thống kê và báo cáo

  • Xem thống kê sử dụng chính sách: (Xem rule nào được sử dụng nhiều)
    ocnfwctl server stats --id <server_id>
    
  • Xem nhật ký sự kiện liên quan đến máy chủ:
    ocnfwctl logs list --resource server --resource-id <server_id>
    

8. Quản lý máy chủ qua API

Tương tự quản lý người dùng, bạn có thể dùng API để quản lý máy chủ. Tham khảo server-management.md hoặc tài liệu API cho các endpoint như:

  • GET /api/v1/servers
  • POST /api/v1/servers/tokens (Tạo token đăng ký)
  • GET /api/v1/servers/{id}
  • PUT /api/v1/servers/{id} (Cập nhật nhóm, nhãn)
  • DELETE /api/v1/servers/{id}

Quản lý Người dùng

1. Tổng quan về vai trò (Roles)

OCN Firewall sử dụng RBAC (Role-Based Access Control) để quản lý quyền hạn:

  • admin: Toàn quyền quản trị hệ thống, bao gồm quản lý người dùng, chính sách, máy chủ, và cấu hình hệ thống.
  • operator: Có quyền quản lý chính sách và máy chủ, xem thông tin, nhưng không thể quản lý người dùng hoặc cấu hình hệ thống cốt lõi.
  • viewer: Chỉ có quyền xem thông tin (read-only). Không thể thực hiện thay đổi.

2. Quản lý người dùng qua CLI

Sử dụng ocnfwctl user để thực hiện các thao tác quản lý người dùng (yêu cầu quyền admin).

  • Liệt kê người dùng:
    ocnfwctl user list [--role <role_name>]
    
  • Xem chi tiết người dùng:
    ocnfwctl user get --username <username>
    
  • Tạo người dùng mới:
    ocnfwctl user create --username <username> --password "<password>" --role <role> [--fullname "<full_name>"] [--email "<email>"] [--phone "<phone>"]
    # Ví dụ:
    ocnfwctl user create --username jdoe --password "SecurePass123$" --role operator --fullname "Jane Doe" --email "jane.doe@example.com"
    
  • Cập nhật thông tin: (Không cập nhật username, password, role ở đây)
    ocnfwctl user update --username <username> [--fullname "<full_name>"] [--email "<email>"] [--phone "<phone>"]
    
  • Đặt lại mật khẩu: (Admin đặt lại cho người khác)
    ocnfwctl user set-password --username <username> --new-password "<new_password>"
    
  • Thay đổi mật khẩu: (Người dùng tự thay đổi)
    ocnfwctl user change-password --old-password "<old_password>" --new-password "<new_password>"
    
  • Thay đổi vai trò:
    ocnfwctl user set-role --username <username> --role <new_role>
    
  • Vô hiệu hóa tài khoản:
    ocnfwctl user disable --username <username>
    
  • Kích hoạt tài khoản:
    ocnfwctl user enable --username <username>
    
  • Xóa người dùng:
    ocnfwctl user delete --username <username>
    

3. Quản lý người dùng qua API

Các endpoint API RESTful tương ứng cũng có sẵn để tự động hóa hoặc tích hợp. Tham khảo tài liệu user-management.md hoặc tài liệu API chi tiết (nếu có) cho các endpoint như:

  • GET /api/v1/users
  • POST /api/v1/users
  • GET /api/v1/users/{username}
  • PUT /api/v1/users/{username}
  • DELETE /api/v1/users/{username}
  • PATCH /api/v1/users/{username}/role
  • … và các API khác cho 2FA, password, status.

4. Xác thực hai yếu tố (2FA)

Tăng cường bảo mật bằng cách yêu cầu 2FA (TOTP) khi đăng nhập.

  • Người dùng tự bật 2FA:
    1. ocnfwctl user enable-2fa (Hiển thị QR code và recovery code)
    2. Quét QR code bằng ứng dụng Authenticator (Google Auth, Authy, etc.)
    3. ocnfwctl user verify-2fa --code <6_digit_code> (Xác nhận bằng mã từ app) [Đề xuất chèn ảnh chụp màn hình mã QR và quá trình verify 2FA]
  • Người dùng tự tắt 2FA:
    ocnfwctl user disable-2fa --code <6_digit_code>
    
  • Admin tắt 2FA cho người dùng: (Khi người dùng mất thiết bị)
    ocnfwctl user admin-disable-2fa --username <username>
    
  • Admin đặt lại 2FA cho người dùng: (Yêu cầu người dùng thiết lập lại từ đầu)
    ocnfwctl user reset-2fa --username <username>
    

5. Quản lý phiên đăng nhập

  • Xem trạng thái đăng nhập hiện tại:
    ocnfwctl auth status
    
  • Đăng xuất phiên hiện tại:
    ocnfwctl auth logout
    
  • Đăng xuất tất cả các phiên của bạn:
    ocnfwctl auth logout-all
    
  • Admin buộc đăng xuất người dùng khác:
    ocnfwctl user logout --username <username>
    

6. Chính sách mật khẩu

OCN Firewall thường có chính sách mật khẩu tích hợp (độ dài, độ phức tạp, lịch sử). Đảm bảo người dùng tuân thủ các chính sách này khi tạo hoặc thay đổi mật khẩu. Quản trị viên có thể tùy chỉnh các chính sách này trong cấu hình API Server (nếu được hỗ trợ).

7. Kiểm tra và Ghi nhật ký

Mọi hành động quản lý người dùng đều được ghi lại. Sử dụng lệnh sau để xem log:

ocnfwctl logs list --resource user [--resource-id <username>]

Quản lý Chính sách Hệ thống (System Policies)

1. Tổng quan về chính sách

Một chính sách (Policy) trong OCN Firewall là một đối tượng xác định:

  • Metadata: Tên (name), mô tả (description), nhãn (labels) cho chính sách.
  • Selector: Một biểu thức logic (dựa trên nhãn và nhóm của máy chủ) để xác định máy chủ nào sẽ áp dụng chính sách này.
  • Thứ tự ưu tiên (Order): Một số nguyên xác định thứ tự áp dụng chính sách khi nhiều chính sách cùng khớp với một máy chủ (số nhỏ hơn = ưu tiên cao hơn).
  • Quy tắc vào (Ingress): Danh sách các quy tắc kiểm soát lưu lượng đi vào các máy chủ được chọn bởi selector.
  • Quy tắc ra (Egress): Danh sách các quy tắc kiểm soát lưu lượng đi ra từ các máy chủ được chọn bởi selector.

Mỗi quy tắc (Rule) trong Ingress hoặc Egress thường bao gồm:

  • Nguồn/Đích (From/To): Xác định nguồn (cho Ingress) hoặc đích (cho Egress) của lưu lượng. Có thể là:
    • Một selector khác (ví dụ: group=db-servers, env=production).
    • Một dải địa chỉ CIDR (ví dụ: 192.168.1.0/24, 10.0.0.0/8).
    • Một Zone được định nghĩa trước (ví dụ: internet, private).
  • Cổng (Ports): Danh sách các cổng hoặc dải cổng (ví dụ: 80, 443, 3000-3010).
  • Giao thức (Protocol): tcp, udp, icmp.
  • Hành động (Action): allow (cho phép) hoặc deny (từ chối).

2. Làm việc với chính sách (CLI)

Sử dụng ocnfwctl policy để quản lý chính sách.

  • Liệt kê chính sách:
    ocnfwctl policy list [--selector <selector_expression>] [--label <key=value>]
    
  • Xem chi tiết chính sách:
    ocnfwctl policy get --id <policy_id_or_name>
    
  • Tạo/Cập nhật chính sách từ file YAML: (Phương pháp khuyến nghị)
    1. Tạo file YAML định nghĩa chính sách (xem ví dụ trong system-policy.md).
      # Ví dụ: allow-http-https.yaml
      name: allow-web-traffic
      description: "Allow HTTP and HTTPS ingress from internet"
      spec:
        selector: "group=web-servers" # Áp dụng cho máy chủ nhóm web-servers
        order: 100
        ingress:
          - from:
              - selector: "internet" # Zone internet
            ports:
              - 80
              - 443
            protocol: tcp
            action: allow
        egress: # Ví dụ: cho phép mọi egress (có thể hạn chế hơn)
          - to:
              - selector: "*"
            action: allow
      
    2. Áp dụng file:
      ocnfwctl policy apply -f allow-http-https.yaml
      # Lệnh này sẽ tạo mới nếu chưa có, hoặc cập nhật nếu đã tồn tại chính sách cùng tên
      
  • Tạo chính sách trực tiếp qua CLI: (Phù hợp cho chính sách đơn giản)
    ocnfwctl policy create --name <name> --selector "<selector>" --order <order> \
      --ingress-from <selector/cidr/zone> --ingress-ports <ports> --ingress-protocol <proto> --ingress-action <allow/deny> \
      [--egress-to ...] # Tương tự cho egress
    # Ví dụ:
    ocnfwctl policy create --name deny-ssh-from-internet --selector "*" --order 10 \
      --ingress-from "internet" --ingress-ports 22 --ingress-protocol tcp --ingress-action deny
    
  • Cập nhật chính sách: (Cập nhật metadata, order)
    ocnfwctl policy update --id <policy_id_or_name> [--description "<desc>"] [--order <new_order>]
    
  • Cập nhật quy tắc trong chính sách: (Cập nhật rule hiện có)
    # Cập nhật rule ingress đầu tiên (index 0)
    ocnfwctl policy update-rule --id <policy_id> --ingress-index 0 --ingress-ports 80,443,8080
    
  • Xóa chính sách:
    ocnfwctl policy delete --id <policy_id_or_name>
    
  • Xóa quy tắc khỏi chính sách:
    ocnfwctl policy delete-rule --id <policy_id> --ingress-index <index>
    # Hoặc --egress-index <index>
    

3. Các loại chính sách hệ thống

Bạn có thể tạo nhiều loại chính sách để đáp ứng các nhu cầu khác nhau:

  • Chính sách Mặc định (Default Policy): Sử dụng selector "*"order cao (ví dụ: 999) để áp dụng cho tất cả máy chủ nếu không có chính sách cụ thể nào khác khớp. Thường dùng để thiết lập quy tắc cơ bản (ví dụ: cho phép ICMP, từ chối mọi thứ khác).
  • Chính sách Theo Nhóm/Vai trò: Sử dụng selector như group=web-servers, role=db để áp dụng quy tắc riêng cho từng loại máy chủ.
  • Chính sách Theo Môi trường: Sử dụng selector như env=production, env=staging để phân tách quy tắc giữa các môi trường.
  • Chính sách Bảo mật Ưu tiên cao: Sử dụng order thấp (ví dụ: 10, 20) và action deny để chặn các truy cập không mong muốn (ví dụ: chặn IP độc hại, chặn truy cập SSH từ internet).
  • Chính sách Tạm thời/Lập lịch: Sử dụng tính năng lập lịch (scheduling) để kích hoạt/vô hiệu hóa chính sách vào những thời điểm cụ thể (xem mục Lập lịch chính sách).

4. Selector và cách sử dụng

Selector là chìa khóa để áp dụng chính sách đúng chỗ. Cú pháp bao gồm:

  • key=value: Khớp máy chủ có nhãn key bằng value.
  • key!=value: Khớp máy chủ có nhãn key khác value hoặc không có nhãn key.
  • key in (value1, value2): Khớp nếu nhãn keyvalue1 hoặc value2.
  • key notin (value1, value2): Khớp nếu nhãn key không phải value1 hoặc value2.
  • key: Khớp nếu máy chủ có nhãn key (bất kỳ giá trị nào).
  • !key: Khớp nếu máy chủ không có nhãn key.
  • *: Khớp tất cả máy chủ.
  • Kết hợp nhiều điều kiện bằng dấu phẩy , (tương đương AND). Ví dụ: env=production,role=web.

Ví dụ Selector trong quy tắc (From/To):

  • from: selector: "internet": Lưu lượng từ Zone internet.
  • from: selector: "group=monitoring": Lưu lượng từ các máy chủ thuộc nhóm monitoring.
  • to: cidr: "10.0.0.0/8": Lưu lượng đến mạng nội bộ 10.0.0.0/8.

5. Thứ tự ưu tiên và xử lý xung đột

Khi một máy chủ khớp với nhiều chính sách:

  1. Các chính sách được sắp xếp theo order từ thấp đến cao (ưu tiên cao đến thấp).
  2. Các quy tắc (Ingress/Egress) bên trong tất cả các chính sách khớp được gộp lại theo thứ tự ưu tiên của chính sách.
  3. Đối với một kết nối cụ thể, Agent sẽ duyệt qua danh sách quy tắc đã gộp. Quy tắc đầu tiên khớp với kết nối đó sẽ được áp dụng (allow hoặc deny).
  4. Nếu không có quy tắc nào khớp, hành động mặc định là deny.

Mẹo:

  • Đặt order thấp cho các quy tắc deny quan trọng (ví dụ: chặn IP xấu).
  • Đặt order cao cho các chính sách mặc định (ví dụ: allow ICMP).
  • Sử dụng các khoảng order (10, 20, 100, 110) để dễ dàng chèn chính sách mới vào giữa.

6. Lập lịch chính sách (Scheduling)

Cho phép kích hoạt/vô hiệu hóa chính sách theo thời gian.

  • Tạo/Cập nhật chính sách với lịch trình: Thêm block schedulers vào định nghĩa YAML hoặc dùng các tham số --scheduler-* khi tạo/cập nhật bằng CLI.
    # Ví dụ trong YAML
    schedulers:
      - name: "weekend-maintenance"
        startTime: "01:00" # Giờ địa phương của API Server
        endTime: "05:00"
        daysOfWeek: ["Saturday", "Sunday"]
    
    # Ví dụ CLI khi tạo
    ocnfwctl policy create ... --scheduler-name "maint" --scheduler-start "01:00" ...
    
  • Xem lịch trình: ocnfwctl policy schedulers --id <policy_id>
  • Cập nhật lịch trình: ocnfwctl policy update-scheduler ...
  • Xóa lịch trình: ocnfwctl policy delete-scheduler ...

Khi chính sách được lập lịch, nó chỉ có hiệu lực trong khoảng thời gian được chỉ định.

7. Quản lý chính sách qua API

Sử dụng API để tự động hóa việc quản lý chính sách. Tham khảo system-policy.md hoặc tài liệu API cho các endpoint như:

  • GET /api/v1/policies
  • POST /api/v1/policies
  • GET /api/v1/policies/{id}
  • PUT /api/v1/policies/{id}
  • DELETE /api/v1/policies/{id}
  • Các API liên quan đến rules và schedulers.

8. Kiểm tra và xác thực chính sách

Trước khi áp dụng vào môi trường sản xuất, hãy kiểm tra kỹ lưỡng:

  • Kiểm tra cú pháp YAML: Đảm bảo file YAML hợp lệ.
  • Kiểm tra tính hợp lệ của chính sách:
    ocnfwctl policy validate -f <policy_file.yaml>
    
  • Kiểm tra máy chủ nào sẽ khớp với selector:
    ocnfwctl policy check-match --id <policy_id_or_name>
    # Hoặc kiểm tra với selector tùy ý
    ocnfwctl policy check-match --selector "env=production,role!=db"
    
  • Kiểm tra tác động lên kết nối cụ thể: (Rất hữu ích để debug)
    # Kiểm tra kết nối từ 1.2.3.4 đến 10.0.0.5 cổng 80/tcp sẽ bị xử lý thế nào
    ocnfwctl policy check-connection --src-ip 1.2.3.4 --dst-ip 10.0.0.5 --dst-port 80 --protocol tcp
    
  • Mô phỏng áp dụng (Simulate): (Nếu được hỗ trợ) Xem trước những thay đổi mà chính sách mới sẽ gây ra mà không thực sự áp dụng.
    ocnfwctl policy simulate -f <new_policy.yaml>
    

9. Ví dụ chính sách phổ biến

Tham khảo các ví dụ trong system-policy.md cho các kịch bản như:

  • Máy chủ Web (cho phép HTTP/S vào, cho phép ra DB/Cache).
  • Máy chủ Database (chỉ cho phép vào từ App/Web, cho phép ra Backup).
  • Chính sách Bảo mật cơ bản (cho phép SSH từ admin, chặn IP xấu).
  • Phân tách môi trường (chặn giao tiếp giữa Production và Staging).

Monitoring và Logging

1. Xem logs real-time

# API Server logs
docker-compose logs -f firewalld

# Frontend logs
docker-compose logs -f frontend

# MongoDB logs
docker-compose logs -f mongo

# Agent logs
sudo journalctl -u ocn-firewall -f

2. Kiểm tra resource usage

# Kiểm tra container resources
docker stats

# Kiểm tra disk usage
docker system df

# Kiểm tra network
docker network ls
docker network inspect ocn-firewall_ocn-firewall-network

Troubleshooting

1. Vấn đề thường gặp

API Server không khởi động

# Kiểm tra logs
docker-compose logs firewalld

# Kiểm tra MongoDB connection
docker exec ocn-firewall-mongo mongosh -u root -p Ocn123456@ --authenticationDatabase admin --eval "db.adminCommand('ping')"

# Kiểm tra environment variables
docker exec ocn-firewall-api env | grep -E "(DB_URI|HTTP_SERVER)"

MongoDB không khởi động

# Kiểm tra logs
docker-compose logs mongo

# Kiểm tra disk space
df -h

# Kiểm tra permissions
ls -la ./mongodata

Agent không kết nối được API Server

# Kiểm tra network connectivity
ping your-api-server-ip

# Kiểm tra port accessibility
telnet your-api-server-ip 8080

# Kiểm tra firewall rules
sudo iptables -L

2. Reset hệ thống

# Dừng tất cả services
docker-compose down

# Xóa volumes (CẢNH BÁO: Mất dữ liệu!)
docker-compose down -v

# Xóa images
docker-compose down --rmi all

# Khởi động lại
docker-compose up -d

Bạn đã hoàn thành việc cài đặt OCN Firewall thành công. Hệ thống này được thiết kế để mang lại trải nghiệm quản lý firewall đơn giản, hiệu quả và bảo mật cao cho doanh nghiệp của bạn.

Cần hỗ trợ thêm?

Đội ngũ kỹ thuật chuyên nghiệp của chúng tôi luôn sẵn sàng hỗ trợ bạn:

  • Hotline kỹ thuật: (+84)376332287 (24/7)
  • Email hỗ trợ: info@ocn.com.vn
  • Tài liệu kỹ thuật: https://docs.ocn.com.vn/
  • Blog: https://blog.ocn.com.vn
  • Các sản phẩm khác: https://ocn.com.vn