[카테고리:] 우분투

  • 우분투 ssd통째로 복사방법

    우분투에서 SSD 전체를 통째로 복사(clone)하려면 dd 명령어나 Clonezilla 같은 도구를 사용할 수 있습니다. 가장 간단한 방법은 dd를 사용하는 것입니다. 아래는 dd 명령어를 사용한 방법입니다.


    1. dd 명령어로 SSD 통째로 복사하기

    주의사항

    • 잘못된 디바이스를 지정하면 데이터가 완전히 삭제됩니다.
    • 복사하는 SSD와 대상 SSD는 크기가 같거나 대상 SSD가 더 커야 합니다.
    • 작업 중 대상 SSD의 모든 데이터가 지워집니다.

    단계

    1. 디스크 확인

    lsblk

    예를 들어, 현재 시스템 디스크가 /dev/sda이고 복사할 대상 SSD가 /dev/sdb라고 가정합니다.

    2. 복사 실행 (root 권한 필요)

    sudo dd if=/dev/sda of=/dev/sdb bs=64K status=progress conv=noerror,sync

    • if = input file (복사할 디스크)
    • of = output file (대상 디스크)
    • bs=64K = 블록 사이즈
    • status=progress = 진행 상황 출력
    • conv=noerror,sync = 오류 무시하고 블록 맞추기

    SSD 500GB를 통째로 복사할 때 걸리는 시간은 복제 방법, 디스크 속도, 연결 방식 등에 따라 달라지지만, 대략적인 시간을 계산해볼 수 있습니다.


    ✅ 대략적인 계산

    예: dd 명령어로 복제

    sudo dd if=/dev/sda of=/dev/sdb bs=64K status=progress
    • 실제 복사 속도: 약 200MB/s ~ 500MB/s (SSD 성능/포트에 따라 다름)
    • 복사 용량: 500GB = 500 × 1024 = 512,000MB

    대략적인 복사 시간:

    속도예상 시간
    500MB/s17분
    300MB/s28분
    200MB/s43분
    100MB/s1시간 25분

    ✅ 실제에 영향 주는 요소들

    • SATA vs NVMe (SATA는 보통 500MB/s 이하)
    • USB 외장으로 복사 시 (USB 3.0이라도 SSD 속도 못 낼 수도 있음)
    • SSD 상태 (속도 저하나 손상된 블록 등)
    • 블록 사이즈 설정 (bs=64K ~ bs=1M 추천)
    • 시스템 부하나 CPU 사용률

    ✅ 복사 중 속도 확인

    status=progress 옵션으로 실시간 진행률을 볼 수 있습니다:

    bash복사편집sudo dd if=/dev/sda of=/dev/sdb bs=64K status=progress
    

    ✅ 더 빠르게 복사하려면

    • dcfldd 또는 pv를 사용해서 속도 확인/조절
    • bs=1M 옵션도 테스트
    • NVMe ↔ NVMe 또는 내부 SATA ↔ SATA 환경에서 복사

    NVMe SSD는 SATA보다 훨씬 빠르기 때문에, 복사 시간도 크게 단축됩니다. 아래는 500GB NVMe SSD → NVMe SSD 복사 시 예상 시간입니다.


    ✅ 전제 조건

    • 복사 대상: 500GB 전체 디스크
    • 복제 방식: dd, Clonezilla, 또는 cat, pv
    • 평균 속도: 1000MB/s ~ 3000MB/s (실제 복사 속도는 대부분 1000~1500MB/s 사이)

    ✅ 예상 복사 시간 (대략)

    복사 속도예상 시간
    3000MB/s3분
    2000MB/s4.3분
    1500MB/s5.7분
    1000MB/s8.5분
    700MB/s12분

    🔧 현실적으로 1000~1500MB/s 속도가 많이 나옵니다.
    💡 복사 도중 SSD가 열을 많이 받으면 서멀 쓰로틀링으로 속도가 떨어질 수 있습니다.

  • Ubuntu 모든 PHP8.3 확장 모듈을 한 번에 설치

    Ubuntu에서 사용 가능한 모든 PHP8.3 확장 모듈을 한 번에 설치하려면 아래 명령어를 실행하세요.

    sudo apt install -y php8.3-{cli,fpm,cgi,common,mbstring,xml,bcmath,bz2,curl,dba,enchant,gd,gmp,imap,intl,ldap,mysql,odbc,opcache,pgsql,pspell,readline,snmp,soap,sqlite3,sybase,tidy,xmlrpc,xsl,zip,imagick,redis,memcached,msgpack,igbinary,apcu,ssh2,uuid,http,raphf,yaml}
    

    php 8.4 모든 확장모듈

    sudo apt install -y php8.4-{cli,fpm,cgi,common,mbstring,xml,bcmath,bz2,curl,dba,enchant,gd,gmp,imap,intl,ldap,mysql,odbc,opcache,pgsql,pspell,readline,snmp,soap,sqlite3,sybase,tidy,xmlrpc,xsl,zip,imagick,redis,memcached,msgpack,igbinary,apcu,ssh2,uuid,http,raphf,yaml}

    php*.* 만 버전에 맞춰 수정하면 편합니다

  • nginx Request Entity Too Large 뜨는이유와 해결방법

    413 Request Entity Too Large” 오류는 Nginx에서 요청 크기가 허용된 한도를 초과했을 때 발생합니다. 주로 파일 업로드 시 발생하며, 해결 방법은 Nginx의 설정을 수정하는 것입니다.


    원인

    1. client_max_body_size 설정 부족
      • 기본적으로 Nginx는 client_max_body_size 설정을 통해 허용된 요청 본문 크기를 제한합니다.
      • 기본값은 1MB로 설정되어 있으며, 이보다 큰 파일을 업로드하면 오류가 발생합니다.
    2. 업스트림 서버 (예: PHP, Node.js) 제한
      • PHP의 post_max_size, upload_max_filesize 설정이 낮게 되어 있는 경우
      • FastCGI(예: PHP-FPM)에서 허용 크기를 제한하는 경우

    해결 방법

    1. Nginx 설정 변경

    설정 파일을 엽니다. sudo nano /etc/nginx/nginx.conf 또는 개별 서버 블록 설정 파일을 엽니다.

    sudo nano /etc/nginx/sites-available/default

    http, server, 또는 location 블록 내에 client_max_body_size 설정을 추가합니다.

    http {
    
    client_max_body_size 100M;
    
    }

    또는 개별 서버 블록에 추가:

    server {
    
    client_max_body_size 100M;
    }

    설정을 저장한 후 Nginx를 재시작합니다.

    sudo systemctl restart nginx

    이제 413 Request Entity Too Large 오류가 해결될 것입니다.

  • Pterodactyl 게임패널 소개

    Pterodactyl은 주로 게임 서버 관리호스팅을 위한 오픈 소스 플랫폼으로, 여러 게임의 서버를 웹 기반으로 관리할 수 있게 도와주는 시스템입니다. 서버 관리가 쉬워지고, 여러 게임 서버를 한 곳에서 제어할 수 있는 장점이 있어, 게임 서버 호스팅 서비스나 개인적으로 여러 서버를 운영하려는 사람들에게 매우 유용합니다. 주요 특징과 기능에 대해 좀 더 자세히 설명드리겠습니다.

    1. 기본 개념 및 역할

    Pterodactyl은 웹 기반 게임 서버 관리 대시보드를 제공하는 프로그램으로, 사용자가 게임 서버를 쉽게 설치하고, 구성하며, 모니터링할 수 있도록 도와줍니다. 또한 서버와 관련된 리소스 관리사용자 권한 관리 기능을 제공합니다. Pterodactyl을 사용하면 복잡한 서버 관리 작업을 간소화할 수 있습니다.

    2. 주요 특징

    • 웹 기반 대시보드: 사용자 친화적인 웹 UI를 통해 서버 관리가 가능합니다. 이를 통해 명령어를 입력하거나 복잡한 설정을 할 필요 없이, 마우스 클릭만으로 게임 서버를 관리할 수 있습니다.
    • 다양한 게임 서버 지원: Pterodactyl은 여러 게임의 서버를 지원합니다. Minecraft, CS:GO, ARK: Survival Evolved, Rust 등 많은 인기 있는 게임 서버를 관리할 수 있습니다.
    • 도커(Docker) 기반 격리 환경: Pterodactyl은 Docker를 사용하여 각 게임 서버를 격리된 환경에서 실행합니다. 이를 통해 서버 간의 충돌이나 리소스 관리가 용이하고, 보안 측면에서도 유리합니다.
    • 리소스 관리: CPU, RAM, 디스크 공간 등 서버의 리소스를 세밀하게 설정하고 관리할 수 있습니다. 각 게임 서버에 필요한 리소스를 할당하고, 사용 현황을 실시간으로 모니터링할 수 있습니다.
    • 사용자 권한 및 액세스 관리: 여러 사용자가 동일한 서버를 관리할 수 있도록 권한 시스템을 제공합니다. 예를 들어, 서버 관리자, 운영자, 일반 사용자 등으로 권한을 나누어 각기 다른 액세스 레벨을 설정할 수 있습니다.
    • 자동화된 백업 시스템: 서버 데이터를 자동으로 백업할 수 있어, 데이터 손실을 방지할 수 있습니다. 주기적으로 백업을 설정하고, 필요 시 백업 데이터를 복원할 수 있습니다.
    • 플러그인 및 확장성: Pterodactyl은 다양한 플러그인을 통해 기능을 확장할 수 있습니다. 또한 API를 제공하여 다른 시스템과의 통합이 가능합니다.

    3. 구성 요소

    Pterodactyl은 기본적으로 두 가지 주요 구성 요소로 나눌 수 있습니다:

    • Pterodactyl Panel: 서버 관리와 관련된 웹 대시보드를 제공합니다. 이 대시보드를 통해 서버를 생성하고, 사용자 권한을 관리하며, 서버의 상태를 모니터링할 수 있습니다.
    • Pterodactyl Daemon: 실제로 서버를 실행하는 백엔드 프로그램입니다. Daemon은 서버가 동작하는 환경을 관리하며, 게임 서버를 시작하고 중지하는 역할을 합니다.

    4. 설치 및 설정

    Pterodactyl은 Linux 기반 시스템에서 주로 설치되며, 다음과 같은 주요 단계를 거칩니다:

    1. 서버 준비: Pterodactyl을 설치할 서버를 준비합니다. 일반적으로 Ubuntu, CentOS 등 리눅스 운영 체제를 사용합니다.
    2. 패널 설치: Pterodactyl Panel은 웹 서버에 설치되어, 관리 대시보드를 제공합니다. 보통 Apache 또는 Nginx와 함께 설정합니다.
    3. Daemon 설치: Pterodactyl Daemon은 게임 서버가 실행될 실제 서버에 설치됩니다. 이 Daemon은 Docker와 상호작용하여 서버를 구동합니다.
    4. MySQL 데이터베이스 설정: Pterodactyl은 MySQL 데이터베이스를 사용하여 사용자, 서버 및 기타 설정을 저장합니다.
    5. 게임 서버 설치: Pterodactyl을 통해 다양한 게임 서버를 설치하고 구성할 수 있습니다.

    5. Pterodactyl의 장점

    • 오픈 소스: 무료로 사용 가능하며, 코드가 공개되어 있어 커스터마이징이 가능합니다.
    • 확장성: 대규모 서버 운영에 적합하고, 다양한 플러그인 및 API를 통해 기능을 확장할 수 있습니다.
    • 커뮤니티 지원: Pterodactyl은 활발한 커뮤니티를 가지고 있어, 다양한 문제에 대한 해결책을 빠르게 찾을 수 있습니다.

    6. Pterodactyl의 단점

    • 설치와 설정이 복잡할 수 있음: Pterodactyl은 초기 설정과 설치 과정에서 일정 수준의 기술적 지식이 필요합니다. 설치 과정 중에 발생할 수 있는 오류나 설정 문제를 해결하려면 일정한 경험이 필요할 수 있습니다.
    • 게임 서버에 제한적인 지원: 기본적으로 Pterodactyl은 많은 게임을 지원하지만, 특정 게임에 대한 지원이 부족할 수 있습니다.

    결론

    Pterodactyl은 게임 서버 호스팅 및 관리를 매우 효율적으로 처리할 수 있는 도구입니다. 특히, 여러 게임 서버를 관리하고자 하는 서버 관리자나 호스팅 서비스 제공자에게 매우 유용하며, 다양한 기능과 커스터마이징 옵션을 제공합니다. 다만, 설치 및 설정 과정에서 일정한 기술적 난이도가 있을 수 있으므로, 이를 해결할 수 있는 기술적 지원이 필요할 수 있습니다.

  • Pterodactyl wings 설치가이드

    Pterodactyl Wings는 Pterodactyl 패널과 연결되어 게임 서버를 호스팅하는 데 필요한 에이전트입니다. Wings는 서버에 실제로 게임 서버를 배포하고 관리하는 역할을 합니다. 아래는 Wings 설치 가이드입니다.

    1. 시스템 업데이트

    먼저, 시스템의 패키지 목록을 업데이트하고 필요한 의존성을 설치합니다.

    sudo apt update && sudo apt upgrade -y
    sudo apt install -y curl sudo apt-transport-https lsb-release ca-certificates

    2. Docker 설치

    Pterodactyl Wings는 Docker를 사용하여 서버를 실행하므로 Docker를 설치해야 합니다.

    sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io

    Docker 설치가 완료되면, Docker 서비스가 정상적으로 실행되는지 확인합니다.

    sudo systemctl start docker
    sudo systemctl enable docker
    sudo docker --version

    3. Docker-Compose 설치

    Docker-Compose는 Wings에서 사용하는 컨테이너를 관리하는 데 사용됩니다.

    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose

    설치가 완료되면, docker-compose 명령어가 잘 작동하는지 확인합니다.

    docker-compose --version

    4. Wings 설치

    Wings 설치를 위해 GitHub에서 최신 Wings 버전을 클론합니다.

    cd /var/www
    sudo git clone https://github.com/pterodactyl/wings.git pterodactyl-wings
    cd pterodactyl-wings

    5. Wings 설정

    Wings의 설정을 위해 환경 변수 파일을 설정합니다.

    sudo cp .env.example .env
    sudo nano .env

    파일에서 APP_URL, PANEL_URL, WINGS_SECRET와 같은 값을 설정합니다. PANEL_URL에는 Pterodactyl 패널의 주소를, WINGS_SECRET에는 패널에서 생성한 비밀 키를 입력해야 합니다.

    예시:

    APP_URL=http://your-server-ip:8080
    PANEL_URL=https://panel.yourdomain.com
    WINGS_SECRET=secret-key-here

    6. Docker Compose 파일 설정

    Wings는 docker-compose.yml 파일을 사용하여 Docker 컨테이너를 관리합니다. docker-compose.yml 파일을 확인하고 설정합니다.

    nano docker-compose.yml

    7. Wings 시작

    설정이 완료되면, Docker Compose를 사용하여 Wings를 시작합니다.

    sudo docker-compose up -d

    이 명령어는 Wings가 Docker 컨테이너에서 백그라운드로 실행되도록 합니다.

    8. Firewall 설정

    Wings는 기본적으로 포트 8080을 사용합니다. 이 포트를 방화벽에서 열어야 합니다.

    sudo ufw allow 8080

    9. Pterodactyl 패널에서 Wings 연결

    Pterodactyl 패널에 로그인하고 “Wings” 섹션에서 새 서버를 추가한 후, 생성된 Wings의 WINGS_SECRET 값을 입력하여 연결합니다. 패널에서 서버를 관리할 수 있습니다.

    10. 서비스로 Wings 실행 (선택사항)

    Wings를 시스템 서비스로 실행하려면, 시스템 서비스 파일을 작성하여 Wings가 부팅 시 자동으로 시작되도록 설정할 수 있습니다.

    sudo nano /etc/systemd/system/pterodactyl-wings.service

    내용 예시:

    [Unit]
    Description=Pterodactyl Wings Daemon
    After=network.target

    [Service]
    Type=simple
    User=root
    WorkingDirectory=/var/www/pterodactyl-wings
    ExecStart=/usr/local/bin/docker-compose up
    TimeoutStopSec=20
    Restart=always

    [Install]
    WantedBy=multi-user.target

    서비스 파일을 저장한 후, 시스템 서비스를 시작하고 자동으로 시작되도록 설정합니다.

    sudo systemctl daemon-reload
    sudo systemctl enable pterodactyl-wings
    sudo systemctl start pterodactyl-wings

    이로써 Wings 설치가 완료되었습니다. Pterodactyl 패널에서 서버를 관리하고, Docker를 통해 게임 서버를 호스팅할 수 있습니다.

  • Pterodactyl 익룡패널 설치가이드

    오늘은 minecraft rust fivem 등 각종게임패널인 Pterodactyl 익룡패널 설치하는방법에 대해 알아봅니다.

    Pterodactyl 설치를 PHP 8.3 버전으로 진행하려면 아래와 같은 단계로 진행할 수 있습니다:

    1. 시스템 업데이트

    먼저, 시스템의 패키지 목록을 업데이트하고 필요한 의존성을 설치합니다.

    sudo apt update && sudo apt upgrade -y
    sudo apt install -y curl unzip sudo apt-transport-https lsb-release ca-certificates

    2. PHP 8.3 설치

    PHP 8.3를 설치하려면, 먼저 PHP 리포지토리를 추가하고 PHP 8.3을 설치합니다.

    sudo add-apt-repository ppa:ondrej/php
    sudo apt update
    sudo apt install -y php8.3 php8.3-cli php8.3-fpm php8.3-mysql php8.3-xml php8.3-mbstring php8.3-curl php8.3-zip php8.3-bcmath php8.3-json php8.3-opcache

    설치가 완료되면 PHP 8.3가 제대로 설치되었는지 확인합니다.

    php -v

    3. MariaDB 설치

    Pterodactyl의 데이터베이스로 MariaDB를 사용할 수 있습니다. MariaDB를 설치하고 설정합니다.

    bash복사편집sudo apt install -y mariadb-server mariadb-client
    sudo mysql_secure_installation
    

    MariaDB를 설정한 후, 데이터베이스와 사용자를 생성합니다.

    sudo mysql -u root -p
    CREATE DATABASE pterodactyl;
    CREATE USER 'pterodactyluser'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON pterodactyl.* TO 'pterodactyluser'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;

    4. Pterodactyl 설치

    이제 Pterodactyl을 설치합니다. Pterodactyl의 최신 버전은 GitHub에서 다운로드할 수 있습니다.

    cd /var/www
    sudo git clone https://github.com/pterodactyl/panel.git pterodactyl
    cd pterodactyl
    sudo php8.3 composer install --no-dev --optimize-autoloader
    sudo cp .env.example .env

    .env 파일을 편집하여 데이터베이스 정보와 다른 설정을 입력합니다.

    sudo nano .env

    예시:

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=pterodactyl
    DB_USERNAME=pterodactyluser
    DB_PASSWORD=password

    5. 애플리케이션 키 생성

    Pterodactyl의 애플리케이션 키를 생성합니다.

    sudo php8.3 artisan key:generate --force

    6. 데이터베이스 마이그레이션

    Pterodactyl의 데이터베이스를 설정합니다.

    sudo php8.3 artisan migrate --seed --force

    7. 웹 서버 설정

    Nginx를 사용하여 Pterodactyl을 호스트합니다. Nginx 구성 파일을 생성합니다.

    sudo nano /etc/nginx/sites-available/pterodactyl

    내용 예시:

    server {
    listen 80;
    server_name example.com; # 여기에 서버 도메인을 입력하세요.

    root /var/www/pterodactyl/public;
    index index.php index.html index.htm;

    location / {
    try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ ^/index.php(/|$) {
    fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }

    location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    }

    Nginx 설정을 활성화하고 서비스 재시작합니다.

    ln -s /etc/nginx/sites-available/pterodactyl /etc/nginx/sites-enabled/
    sudo nginx -t
    sudo systemctl restart nginx

    8. Pterodactyl 웹 UI 설정

    이제 웹 브라우저에서 Pterodactyl 패널에 접속할 수 있습니다. http://your-server-ip 또는 도메인 이름을 통해 접속하여 관리자 계정을 설정합니다.


    이 과정이 끝나면 Pterodactyl이 정상적으로 설치되어야 합니다. 추가적인 설정이 필요하다면, 공식 문서나 커뮤니티를 참고할 수 있습니다.

  • GRE 터널이란?

    GRE 터널이란?

    **GRE(Generic Routing Encapsulation)**는 IP 패킷을 캡슐화하여 두 네트워크를 가상적으로 연결하는 터널링 프로토콜입니다.
    쉽게 말해, 서로 다른 네트워크를 하나의 네트워크처럼 연결하는 기술입니다.


    🔹 GRE 터널의 원리

    GRE는 원본 패킷을 새로운 GRE 패킷 안에 넣어 전송하는 방식으로 동작합니다.

    기본 동작 흐름

    1. 한쪽 장비(예: A)가 데이터를 전송하려고 하면, 해당 데이터를 GRE 캡슐화하여 새로운 패킷을 만듭니다.
    2. 이 GRE 패킷을 네트워크를 통해 반대쪽 장비(예: B)로 전송합니다.
    3. 반대쪽 장비(B)는 GRE 헤더를 제거하고 원본 패킷을 복원하여 처리합니다.

    📌 GRE 패킷 구조
    GRE 터널을 사용할 경우, 일반적인 IP 패킷에 추가적인 GRE 헤더와 외부 IP 헤더가 붙습니다.

    [외부 IP 헤더] -> [GRE 헤더] -> [원본 IP 패킷]

    예를 들어, 10.0.0.1과 10.0.0.2 간에 GRE 터널이 설정되었다고 가정하면:

    1. 10.0.0.1 → 10.0.0.2 로 가는 패킷을 GRE 캡슐화
    2. 캡슐화된 패킷을 공인 IP를 통해 전송 (예: 61.78.91.29 → 210.204.243.32)
    3. 도착지(210.204.243.32)에서 GRE 헤더를 제거하고 원본 패킷 복원
    4. 내부 네트워크(10.0.0.0/24)에서 마치 직접 통신하는 것처럼 동작

    🔹 GRE 터널이 필요한 이유

    1. 다른 네트워크 간의 연결
      • 서로 다른 사설 네트워크(예: 192.168.x.x ↔ 172.16.x.x)를 연결할 때 사용
    2. 라우팅 프로토콜 지원
      • OSPF, EIGRP 등 특정 라우팅 프로토콜을 지원하지 않는 네트워크에서도 GRE를 통해 사용 가능
    3. VPN 대체
      • IPSec이나 OpenVPN 같은 보안 프로토콜과 결합하면 보안성이 강화된 VPN을 구축 가능
    4. 멀티캐스트 패킷 전송 가능
      • 일반적인 VPN에서는 멀티캐스트 전송이 어렵지만, GRE는 이를 지원

    🔹 GRE 터널 vs. 다른 터널링 기술

    터널링 방식보안속도멀티캐스트 지원사용 사례
    GRE❌ (보안 없음)빠름✅ 지원내부 네트워크 연결, 멀티캐스트 지원
    IPSec✅ (암호화)상대적으로 느림❌ 미지원보안이 중요한 VPN
    WireGuard✅ (암호화)빠름❌ 미지원최신 VPN
    OpenVPN✅ (암호화)느림❌ 미지원일반 VPN 구축

    📌 GRE는 기본적으로 보안이 없기 때문에, 중요한 데이터 전송 시 IPSec과 함께 사용하는 것이 좋습니다.


    🔹 GRE 터널의 활용 예시

    1️⃣ 서로 다른 내부 네트워크 연결

    예제:

    • 회사 A (192.168.1.0/24)와 회사 B (192.168.2.0/24)가 공인 IP를 통해 GRE 터널로 연결
    • 서로 다른 사설 IP 대역을 하나의 네트워크처럼 사용 가능

    2️⃣ 게임 서버 & VPN 구성

    • GRE 터널을 사용하여 게임 서버를 특정 IP에서만 접근 가능하도록 설정
    • GRE 터널 + NAT을 조합하여 서버 트래픽을 특정 공인 IP를 통해 우회

    3️⃣ 멀티캐스트 라우팅

    • IPTV나 스트리밍 서버에서 멀티캐스트 패킷을 전송할 때 GRE 터널 사용

    🔹 결론

    ✅ GRE 터널은 서로 다른 네트워크를 가상적으로 연결하는 기술입니다.
    ✅ 보안 기능이 없으므로 IPSec과 함께 사용하면 보안이 강화됩니다.
    게임 서버, 멀티캐스트, 내부 네트워크 확장 등 다양한 용도로 사용됩니다.
    설정이 간단하고 속도가 빠르지만, 기본적으로 암호화되지 않음에 유의해야 합니다.

  • 우분투 gre tunnel 구성방법

    Ubuntu에서 GRE 터널을 구성하는 방법을 단계별로 설명해드리겠습니다.
    현재 사용 중인 환경을 고려하여 적절한 설정을 적용하시면 됩니다.


    1. GRE 터널 개요

    GRE(Generic Routing Encapsulation) 터널은 IP 패킷을 캡슐화하여 두 개의 네트워크를 연결하는 데 사용됩니다.
    예제 네트워크:

    • Host A (터널 서버)
      • 공인 IP: 61.78.91.29
      • 내부 IP: 10.0.0.1
    • Host B (터널 클라이언트)
      • 공인 IP: 210.204.243.32
      • 내부 IP: 10.0.0.2

    2. ip_gre 커널 모듈 로드

    두 서버에서 GRE 터널을 사용하려면 커널 모듈을 로드해야 합니다.

    sudo modprobe ip_gre

    모듈이 정상적으로 로드되었는지 확인:

    lsmod | grep gre

    3. Host A에서 GRE 터널 설정

    3.1. GRE 터널 인터페이스 생성

    sudo ip tunnel add gre1 mode gre remote 210.204.243.32 local 61.78.91.29 ttl 255
    • gre1: 터널 인터페이스 이름
    • mode gre: GRE 모드 사용
    • remote 210.204.243.32: 원격(Host B)의 공인 IP
    • local 61.78.91.29: 로컬(Host A)의 공인 IP
    • ttl 255: 패킷의 TTL 설정

    3.2. 터널 인터페이스 활성화 및 IP 설정

    sudo ip link set gre1 up
    sudo ip addr add 10.0.0.1/24 dev gre1

    4. Host B에서 GRE 터널 설정

    4.1. GRE 터널 인터페이스 생성

    sudo ip tunnel add gre1 mode gre remote 61.78.91.29 local 210.204.243.32 ttl 255

    4.2. 터널 인터페이스 활성화 및 IP 설정

    sudo ip link set gre1 up
    sudo ip addr add 10.0.0.2/24 dev gre1

    5. 라우팅 설정

    터널을 통해 통신이 가능하도록 라우팅 설정을 추가합니다.

    5.1. Host A에서 설정

    sudo ip route add 10.0.0.2/32 dev gre1

    5.2. Host B에서 설정

    sudo ip route add 10.0.0.1/32 dev gre1

    6. 방화벽 (iptables) 설정

    GRE 프로토콜(IP proto 47)을 허용해야 합니다.

    6.1. Host A에서 방화벽 설정

    sudo iptables -A INPUT -p 47 -s 210.204.243.32 -j ACCEPT
    sudo iptables -A OUTPUT -p 47 -d 210.204.243.32 -j ACCEPT

    6.2. Host B에서 방화벽 설정

    sudo iptables -A INPUT -p 47 -s 61.78.91.29 -j ACCEPT
    sudo iptables -A OUTPUT -p 47 -d 61.78.91.29 -j ACCEPT

    7. 설정 영구 적용

    재부팅 후에도 터널이 유지되도록 설정을 저장해야 합니다.

    7.1. sysctl 설정 (IP 포워딩 활성화)

    echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p

    7.2. 네트워크 설정 (/etc/network/interfaces)

    Host A (/etc/network/interfaces)

    auto gre1
    iface gre1 inet static
    address 10.0.0.1
    netmask 255.255.255.0
    pre-up ip tunnel add gre1 mode gre remote 210.204.243.32 local 61.78.91.29 ttl 255
    post-down ip tunnel del gre1

    Host B (/etc/network/interfaces)

    auto gre1
    iface gre1 inet static
    address 10.0.0.2
    netmask 255.255.255.0
    pre-up ip tunnel add gre1 mode gre remote 61.78.91.29 local 210.204.243.32 ttl 255
    post-down ip tunnel del gre1

    적용 후 네트워크 서비스 재시작:

    sudo systemctl restart networking

    8. 연결 테스트

    8.1. Host A에서 Host B 핑 테스트

    ping -c 4 10.0.0.2

    8.2. Host B에서 Host A 핑 테스트

    ping -c 4 10.0.0.1

    핑이 정상적으로 되면 GRE 터널이 성공적으로 연결된 것입니다.


    9. 추가 설정: NAT 사용 (선택 사항)

    터널을 통해 외부로 나가는 트래픽을 NAT로 변환하려면 iptables에 NAT 설정을 추가해야 합니다.

    9.1. Host A에서 NAT 설정

    sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

    9.2. Host B에서 NAT 설정

    sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

    이제 GRE 터널을 통해 내부 IP를 외부 네트워크에서 사용할 수 있습니다.


    이 설정을 적용하면 Host A와 Host B 간의 GRE 터널이 정상적으로 동작하며, 내부 네트워크(10.0.0.0/24)를 통해 서로 통신할 수 있습니다.

  • 우분투 DDOS 공격시 이더넷 자동변환 bash 스크립트

    아래는 DDoS 공격이 감지될 경우 이더넷 인터페이스를 자동으로 전환하고, 추가 공격이 발생하면 다시 전환하도록 설정된 Bash 스크립트입니다.

    기능 설명

    1. DDoS 감지: rx_packets를 모니터링하여 일정 초당 패킷 수(예: 10,000)를 초과하면 공격으로 판단
    2. 이더넷 인터페이스 전환: eth0eth1을 번갈아가며 변경
    3. 반복 실행: 지속적으로 감시하며, 공격이 다시 감지되면 재전환

    Bash 스크립트

    #!/bin/bash

    # 감시할 네트워크 인터페이스 목록 (교차 전환)
    IFACE1="eth0"
    IFACE2="eth1"

    # 패킷 임계값 (초당 패킷 수)
    THRESHOLD=10000

    # 현재 사용 중인 인터페이스 (초기값은 eth0)
    CURRENT_IFACE="$IFACE1"

    # 로그 파일 위치
    LOGFILE="/var/log/ddos_auto_switch.log"

    # DDoS 감지 함수
    detect_ddos() {
    RX1=$(cat /sys/class/net/$CURRENT_IFACE/statistics/rx_packets)
    sleep 1
    RX2=$(cat /sys/class/net/$CURRENT_IFACE/statistics/rx_packets)

    PPS=$((RX2 - RX1))
    echo "$(date) - $CURRENT_IFACE: $PPS PPS" >> "$LOGFILE"

    if (( PPS > THRESHOLD )); then
    return 0 # DDoS 감지됨
    else
    return 1 # 정상 상태
    fi
    }

    # 네트워크 인터페이스 변경 함수
    switch_interface() {
    if [[ "$CURRENT_IFACE" == "$IFACE1" ]]; then
    NEW_IFACE="$IFACE2"
    else
    NEW_IFACE="$IFACE1"
    fi

    echo "$(date) - DDoS 감지됨! $CURRENT_IFACE → $NEW_IFACE 변경" >> "$LOGFILE"

    # 네트워크 인터페이스 변경
    ip link set "$CURRENT_IFACE" down
    ip link set "$NEW_IFACE" up
    ip route replace default dev "$NEW_IFACE"

    # 현재 인터페이스 업데이트
    CURRENT_IFACE="$NEW_IFACE"
    }

    # 메인 루프 (주기적으로 체크)
    while true; do
    if detect_ddos; then
    switch_interface
    sleep 5 # 전환 후 안정화 대기
    else
    sleep 1 # 정상 상태면 계속 감시
    fi
    done

    사용 방법

    1. 스크립트 저장 nano /usr/local/bin/ddos_auto_switch.sh 위 코드를 붙여넣고 저장합니다.
    2. 실행 권한 부여 chmod +x /usr/local/bin/ddos_auto_switch.sh
    3. 백그라운드 실행 nohup /usr/local/bin/ddos_auto_switch.sh &
    4. 로그 확인 tail -f /var/log/ddos_auto_switch.log

    작동 방식

    • eth0에서 DDoS 감지 → eth1로 전환
    • 다시 eth1에서 DDoS 감지 → eth0으로 전환
    • 공격이 계속되면 계속 전환됨

    2. systemd 서비스 파일 생성

    이제 systemd 서비스 파일을 생성하여 자동 실행되도록 설정합니다.

    sudo nano /etc/systemd/system/ddos_auto_switch.service

    아래 내용을 입력 후 저장 (Ctrl + X, Y, Enter) 합니다.

    [Unit]
    Description=DDoS Auto Ethernet Switch Service
    After=network.target

    [Service]
    ExecStart=/usr/local/bin/ddos_auto_switch.sh
    Restart=always
    User=root

    [Install]
    WantedBy=multi-user.target

    3. 서비스 활성화 및 실행

    (1) systemd 서비스 리로드

    sudo systemctl daemon-reload

    (2) 서비스 활성화 (부팅 시 자동 실행)

    sudo systemctl enable ddos_auto_switch.service

    (3) 서비스 즉시 실행

    sudo systemctl start ddos_auto_switch.service

    (4) 서비스 상태 확인

    sudo systemctl status ddos_auto_switch.service

    (5) 서비스 로그 확인

    journalctl -u ddos_auto_switch.service -f

    4. 서비스 중지 및 제거 (필요 시)

    (1) 서비스 중지

    sudo systemctl stop ddos_auto_switch.service

    (2) 부팅 시 자동 실행 해제

    sudo systemctl disable ddos_auto_switch.service

    (3) 서비스 삭제

    sudo rm /etc/systemd/system/ddos_auto_switch.service
    sudo systemctl daemon-reload

    ✅ 이제 서버가 부팅될 때 자동으로 DDoS 감지 및 네트워크 인터페이스 전환이 동작합니다. 🚀

  • 우분투 24.04 Roundcube 웹메일 클라이언트 설치방법

    📌 Roundcube 웹메일 설치 및 추가 기능 설정

    Roundcube는 웹메일 클라이언트로, 브라우저에서 메일을 확인하고 보낼 수 있도록 해줍니다. 또한, 스팸 필터링(DKIM, SPF, DMARC)과 바이러스 검사(ClamAV) 등을 설정하면 보다 안전한 메일 서버를 운영할 수 있습니다.


    1️⃣ Roundcube 웹메일 설치

    1. Apache 및 PHP 설치

    sudo apt install apache2 php php-cli php-mbstring php-xml php-mysql php-curl php-gd php-intl php-zip unzip -y

    2. Roundcube 다운로드 및 설치

    cd /var/www/html
    wget https://github.com/roundcube/roundcubemail/releases/download/1.6.2/roundcubemail-1.6.2-complete.tar.gz
    tar -xvzf roundcubemail-1.6.2-complete.tar.gz
    mv roundcubemail-1.6.2 roundcube
    rm roundcubemail-1.6.2-complete.tar.gz

    3. Roundcube 데이터베이스 설정

    sudo mysql -u root -p
    CREATE DATABASE roundcube;
    CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'yourpassword';
    GRANT ALL PRIVILEGES ON roundcube.* TO 'roundcube'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;
    cd /var/www/html/roundcube
    mysql -u roundcube -p roundcube < SQL/mysql.initial.sql

    4. Apache 가상 호스트 설정

    sudo nano /etc/apache2/sites-available/roundcube.conf

    아래 내용 추가:

    <VirtualHost *:80>
    ServerName mail.example.com
    DocumentRoot /var/www/html/roundcube

    <Directory /var/www/html/roundcube>
    Options -Indexes
    AllowOverride All
    Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/roundcube_error.log
    CustomLog ${APACHE_LOG_DIR}/roundcube_access.log combined
    </VirtualHost>

    저장 후 활성화:

    sudo a2ensite roundcube.conf
    sudo a2enmod rewrite
    sudo systemctl restart apache2

    5. Roundcube 설치 마법사 실행

    브라우저에서 http://mail.example.com/installer 접속 후 설정 진행

    설정 완료 후 반드시 installer 디렉터리를 삭제하세요!

    rm -rf /var/www/html/roundcube/installer

    2️⃣ DKIM, SPF, DMARC 설정 (스팸 방지)

    이제 스팸 필터링을 위해 DKIM, SPF, DMARC를 설정합니다.

    1. OpenDKIM 설치

    sudo apt install opendkim opendkim-tools -y

    2. DKIM 키 생성

    sudo mkdir -p /etc/opendkim/keys/example.com
    cd /etc/opendkim/keys/example.com
    sudo opendkim-genkey -s mail -d example.com
    sudo chown opendkim:opendkim mail.private

    mail.txt 파일에서 DKIM 레코드를 DNS에 추가해야 합니다.

    3. OpenDKIM 설정 파일 수정

    sudo nano /etc/opendkim.conf
    Domain          example.com
    KeyFile /etc/opendkim/keys/example.com/mail.private
    Selector mail
    Socket inet:8891@localhost

    서비스 재시작:

    sudo systemctl restart opendkim
    sudo systemctl enable opendkim

    3️⃣ SPF (Sender Policy Framework) 설정

    DNS에서 TXT 레코드를 추가하세요.

    v=spf1 mx -all

    이 설정은 메일 서버(mail.example.com)만 발신을 허용합니다.


    4️⃣ DMARC 설정

    DNS에서 다음 TXT 레코드를 추가하세요.

    _dmarc.example.com TXT "v=DMARC1; p=none; rua=mailto:admin@example.com"

    이후 메일 로그를 확인하면서 “p=reject”로 변경하여 강력한 스팸 차단이 가능합니다.


    5️⃣ 바이러스 및 스팸 필터 설정 (ClamAV + SpamAssassin)

    1. ClamAV 설치 (바이러스 스캔)

    sudo apt install clamav clamav-daemon -y
    sudo systemctl enable clamav-daemon
    sudo systemctl start clamav-daemon

    2. SpamAssassin 설치 (스팸 필터)

    sudo apt install spamassassin -y
    sudo systemctl enable spamassassin
    sudo systemctl start spamassassin

    ✅ 최종 테스트

    이제 메일을 송수신하면서 DKIM, SPF, DMARC가 정상적으로 동작하는지 확인하세요.

    • SPF 테스트:bash복사편집nslookup -type=txt example.com
    • DKIM 테스트:bash복사편집opendkim-testkey -d example.com -s mail -k /etc/opendkim/keys/example.com/mail.private

    모든 설정이 완료되면, Gmail, Outlook 등의 메일 서비스에서 스팸 필터를 통과하는지 테스트하면 됩니다.


    🔹 결론

    이제 Roundcube 웹메일과 함께 SPF, DKIM, DMARC, 바이러스 검사(ClamAV), 스팸 필터(SpamAssassin) 등 추가 기능을 설정하여 보안이 강화된 메일 서버를 운영할 수 있습니다! 🚀