Cron 사용법

1. cron 서비스 관리
# cron 서비스 상태 확인
systemctl status crond

# cron 서비스 시작
systemctl start crond

# 부팅 시 자동 시작 설정
systemctl enable crond

2. crontab 명령어 기본 사용법
# 현재 사용자의 crontab 편집
crontab -e

# crontab 목록 확인
crontab -l

# crontab 삭제
crontab -r

3. crontab 시간 형식
* * * * * 실행할_명령어
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ └─ 요일 (0-7, 0과 7은 일요일)
│ │ │ └─── 월 (1-12)
│ │ └──── 일 (1-31)
│ └────── 시 (0-23)
└──────── 분 (0-59)

4. 사용 예시:
# 매일 오후 2시에 실행
0 14 * * * /home/user/backup.sh

# 매시간 30분마다 실행
30 * * * * /scripts/check.sh

# 평일(월-금) 오전 9시에 실행
0 9 * * 1-5 /home/user/workday.sh

# 5분마다 실행
*/5 * * * * /scripts/monitor.sh

5. 주요 설정 파일 위치:

  • 시스템 전체 cron 작업: /etc/crontab
  • 사용자별 cron 작업: /var/spool/cron/
  • cron 작업 허용/거부 설정: /etc/cron.allow, /etc/cron.deny
  • cron 로그 확인:
  • 6, cron 로그 확인
    tail -f /var/log/cron

    화면비율 / 해상도 차트

    CINEMA DCP 4k
    Frame Aspect Ratio / Resolution (Square Pixels 1.0)

    Flat (1.85:1) / 3996×2160
    Scope (2.39:1) / 4096×1716
    QuadHD (16:9) / 3840×2160
    Full Container / 4096×2160
    CINEMA DCP 2k
    Frame Aspect Ratio / Resolution (Square Pixels 1.0)

    Flat (1.85:1) / 1998×1080
    Scope (2.39:1) / 2048×858
    QuadHD (16:9) / 1920×1080
    Full Container / 2048×1080
    5k
    Frame Aspect Ratio / Resolution (Square Pixels 1.0)

    1.33:1 (4:3) / 5120×3840
    1.66:1 (5:3) / 5120×3072
    1.77:1 (16:9) / 5120×2880
    1.85:1 / 5120×2768
    1.9:1 (Epic Full Frame) / 5120×2700
    2:1 / 5120×2560
    2.37:1 (RED 5k Wide) / 5120×2700
    2.39:1 (referred to as 2.40) / 5120×2142
    2.44 / 5120×2098
    2.35:1 / 5120×2179
    4k
    Frame Aspect Ratio / Resolution (Square Pixels 1.0)

    1.33:1 (4:3) / 4096×3072
    1.66:1 (5:3) / 4096×2458
    1.77:1 (16:9) / 4096×2304
    1.85:1 / 4096×2214
    1.9:1 (Epic Full Frame) / 4096×2160
    2:1 / 4096×2048
    2.35:1 / 4096×2048
    2.37:1 (RED Wide) / 4096×1743
    2.39:1 (referred to as 2.40) / 4096×1728
    2.44 / 4096×1714
    4kHD (QuadHD)
    Frame Aspect Ratio / Resolution (Square Pixels 1.0)

    1.33:1 (4:3) / 3840×2880
    1.66:1 (5:3) / 3840×2304
    1.77:1 (16:9) / 3840×2160
    1.85:1 / 3840×2076
    2:1 / 3840×1920
    2.35:1 / 3840×1634
    2.37:1 (RED Wide) / 3840×1620
    2.39:1 (referred to as 2.40) / 3840×1607
    2.44 / 3840×1574
    2k
    Frame Aspect Ratio / Resolution (Square Pixels 1.0)

    1.33:1 (4:3) / 2048×1536
    1.66:1 (5:3) / 2048×1229
    1.77:1 (16:9) / 2048×1152
    1.85:1 / 2048×1107
    2:1 / 2048×1024
    2.35:1 / 2048×871
    2.37:1 (RED Wide) / 2048×864
    2.39:1 (referred to as 2.40) / 2048×858
    2.44 / 2048×839
    1080p
    Frame Aspect Ratio / Resolution (Square Pixels 1.0)

    1.33:1 (4:3) / 1920×1440
    1.66:1 (5:3) / 1920×1152
    1.77:1 (16:9) / 1920×1080
    1.85:1 / 1920×1038
    2:1 / 1920×960
    2.35:1 / 1920×817
    2.37:1 (RED Wide) / 1920×810
    2.39:1 (referred to as 2.40) / 1920×803
    2.40:1 (Blu-Ray) / 1920×800
    2.44 / 1920×787
    720p
    Frame Aspect Ratio / Resolution (Square Pixels 1.0)

    1.33:1 (4:3) / 1280×962
    1.66:1 (5:3) / 1280×768
    1.77:1 (16:9) / 1280×720
    1.85:1 / 1280×692
    2:1 / 1280×640
    2.35:1 / 1280×545
    2.37:1 (RED Wide) / 1280×540
    2.39:1 (referred to as 2.40) / 1280×536
    2.44 / 1280×525

    CentOS Stream 에서 Swap 메모리를 생성 운용하는 법

    스왑 메모리 확인:

    다음 명령어들을 사용하여 스왑 메모리의 존재와 사용량을 확인할 수 있습니다

    bashCopyfree -h

    이 명령어는 메모리와 스왑 사용량을 사람이 읽기 쉬운 형태로 보여줍니다.

    bashCopyswapon --show

    이 명령어는 현재 사용 중인 스왑 공간의 세부 정보를 표시합니다.

    bashCopycat /proc/swaps

    이 명령어는 활성화된 스왑 영역에 대한 정보를 표시합니다.

    스왑 파일 생성 및 활성화:

    스왑 메모리가 없거나 추가가 필요한 경우, 다음 단계를 따라 스왑 파일을 생성하고 활성화할 수 있습니다:

    #!/bin/bash
    
    # 스왑 파일 크기 설정 (GB 단위)
    SWAP_SIZE=2
    
    # 스왑 파일 생성
    sudo fallocate -l ${SWAP_SIZE}G /swapfile
    
    # 권한 설정
    sudo chmod 600 /swapfile
    
    # 스왑 파일 포맷
    sudo mkswap /swapfile
    
    # 스왑 활성화
    sudo swapon /swapfile
    
    # 부팅 시 자동 마운트를 위해 /etc/fstab에 추가
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
    
    # 스왑 설정 확인
    echo "Swap configuration:"
    free -h
    swapon --show
    
    echo "Swap file created and activated successfully."

    이 스크립트를 사용하려면:

    스크립트를 서버의 적절한 위치(예: /home/centos/create_swap.sh)에 저장합니다.
    실행 권한을 부여합니다:

    Copychmod +x /home/centos/create_swap.sh

    루트 권한으로 스크립트를 실행합니다:

    Copysudo /home/centos/create_swap.sh

    주의사항:

    스크립트는 기본적으로 2GB의 스왑 파일을 생성합니다. 필요에 따라 SWAP_SIZE 변수를 수정하여 크기를 조정할 수 있습니다.
    스왑 파일 크기는 시스템의 RAM 크기와 워크로드에 따라 다르게 설정해야 합니다. 일반적으로 RAM의 1~2배 정도로 설정합니다.
    이미 스왑 파일이 존재하는 경우, 이 스크립트를 실행하기 전에 기존 스왑을 비활성화하고 제거해야 합니다.

    스왑 메모리 관리에 대한 추가 팁:

    스왑 사용량이 너무 높으면 시스템 성능이 저하될 수 있습니다. 정기적으로 모니터링하는 것이 좋습니다.
    SSD를 사용하는 경우, 스왑 사용으로 인한 디스크 수명 단축을 고려해야 합니다.
    클라우드 환경에서는 프로바이더의 권장사항을 따르는 것이 좋습니다.


    현재 스왑메모리가 Swap: 8G 이렇게 운용되고 있는데 이걸 16G 로 늘리려면?

    현재 8GB의 스왑 메모리를 16GB로 늘리는 과정은 다음과 같습니다. 이 과정에서는 기존 스왑을 비활성화하고 새로운 크기의 스왑 파일을 생성한 후 활성화합니다.

    #!/bin/bash
    
    # 새로운 스왑 크기 설정 (GB)
    NEW_SWAP_SIZE=16
    
    # 현재 스왑 파일 위치 확인
    CURRENT_SWAP_FILE=$(swapon --show=NAME --noheadings)
    
    # 스왑 비활성화
    sudo swapoff -a
    
    # 기존 스왑 파일이 있다면 삭제
    if [ -n "$CURRENT_SWAP_FILE" ]; then
        sudo rm $CURRENT_SWAP_FILE
    fi
    
    # 새로운 스왑 파일 생성
    sudo fallocate -l ${NEW_SWAP_SIZE}G /swapfile
    
    # 권한 설정
    sudo chmod 600 /swapfile
    
    # 스왑 파일 포맷
    sudo mkswap /swapfile
    
    # 새 스왑 활성화
    sudo swapon /swapfile
    
    # /etc/fstab 업데이트
    # 먼저 기존 스왑 항목 제거
    sudo sed -i '/swap/d' /etc/fstab
    # 새 스왑 파일 항목 추가
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
    
    # 새 스왑 설정 확인
    echo "New swap configuration:"
    free -h
    swapon --show
    
    echo "Swap file expanded to 16GB and activated successfully."

    이 스크립트를 사용하려면:

    스크립트를 서버의 적절한 위치(예: /home/centos/expand_swap.sh)에 저장합니다.
    실행 권한을 부여합니다:

    Copychmod +x /home/centos/expand_swap.sh

    루트 권한으로 스크립트를 실행합니다:

    Copysudo /home/centos/expand_swap.sh

    주의사항:

    이 스크립트는 현재 스왑을 비활성화하고 새로운 스왑 파일을 생성합니다. 이 과정에서 일시적으로 시스템의 메모리 사용량이 증가할 수 있습니다.
    충분한 디스크 공간이 있는지 확인하세요. 16GB의 여유 공간이 필요합니다.
    실행 전에 중요한 작업을 저장하고, 가능하다면 시스템 부하가 적은 시간에 실행하세요.
    스크립트 실행 중 오류가 발생하면 시스템이 스왑 없이 작동할 수 있으므로 주의가 필요합니다.
    클라우드 환경에서는 프로바이더의 권장사항을 따르는 것이 좋습니다.

    스크립트 실행 후:

    free -h 명령어로 새로운 스왑 크기를 확인하세요.
    시스템을 재부팅하여 모든 변경사항이 제대로 적용되었는지 확인하는 것이 좋습니다.

    워드프레스 추가 보안설정

    wp-config.php 전역 설정 파일에 아래와 같은 설정이 추가되며, 각 설정 내용은 다음과 같습니다.
    각 항목에 대한 설명을 참고 바라며, 파일 내 설정을 주석 처리 함으로써 간단히 비활성화 하실 수 있으나 보안 강화를 위해 유지를 권장 합니다.

    /* custom security setting */
    define('DISALLOW_FILE_EDIT',true);
    define('IMAGE_EDIT_OVERWRITE',true);
    define('DISABLE_WP_CRON',true);
    define('EMPTY_TRASH_DAYS',7);
    define('DISALLOW_FILE_EDIT',true);
    워드프레스 관리자 패널에서 테마파일 편집기 항목을 비활성화 합니다.
    워드프레스 침해 사고 중 가장 높은 비율이 관리자 권한 탈취이며, 테마 편집기를 통해 사용중인 ( 또는 설치되어 있는 ) 테마/플러그인 파일을 직접 수정하여 악성코드를 심는 과정을 거치게 됩니다. 테마파일 편집기 기능을 비활성화 함으로써 직접적으로 파일에 코드를 심는 문제를 해결 할수 있습니다.

    블럭테마 관련 참고 사항 : 
    워드프레스 코어 5.9.3에서 기존 제공하는 블럭테마를 사용하는 경우 블럭편집기 메뉴가 노출 됩니다. 이 설정은 텍스트 기반 편집기 접근을 제한하는 역할을 합니다.

    define(‘IMAGE_EDIT_OVERWRITE’,true);
    워드프레스 라이브러리에 업로드된 미디어 파일을 수정하는 경우 ( 썸네일을 생성 하거나, 사이즈를 수정하는 등의 ) 수정 하기 전의 원본 파일을 그대로 유지합니다. 때문에 수정할 때마다 서버 내에는 미디어 파일을 중복으로 계속 생성하고 유지하게 되며 할당된 하드 용량을 계속 사용하게 됩니다.
    IMAGE_EDIT_OVERWRITE 설정을 활성화 함으로써 이와 같은 파일 수정 작업시 기존 이미지 파일에 overwrite 함으로써 중복으로 생성되는 문제를 해결 할 수 있습니다. 

    define(‘EMPTY_TRASH_DAYS’,7);
    워드프레스에서 작성된 POST, PAGE등을 삭제하는 경우 완전히 삭제하지 않고 휴지통에 30일 동안 유지를 하게 됩니다.
    이 기간 동안 DB에 보관을 하고 있는 것인데 이 기간을 줄임으로써 DB 사이즈와 속도의 부담을 줄일 수 있습니다.
    7일 이상 지난 POST의 경우 휴지통에서 삭제되도록 함으로써 위와 같은 문제를 줄입니다.

      linux에서 파일 이름으로 찾아서 일괄 삭제하는 법

      find . -name "*A2*" | xargs rm

      “*A2*” 에서 *는 모든 문자를 말한다.

      즉, A2만 포함한다면, A2 앞뒤로 어떤 글자가 와도 상관없다는 뜻이다.

      따라서, find . -name “*A2*” 라고 하면 파일명에 A2가 포함된 파일들을 찾아준다.

      | 기호는 파이프인데, find 에서 나온 결과들을 넘겨준다.

      그걸 인자로 받는 것이 xargs 이고, rm은 파일 삭제 명령어이다.

      원글 참조 : linux에서 파일 이름으로 찾아서 일괄 삭제.. : 네이버블로그 (naver.com)

      firewalld 사용법

      
      # 서비스 시작
      [root@localhost ~]# systemctl start firewalld
      
      # 서비스 재시작
      [root@localhost ~]# systemctl restart firewalld
      
      # 서비스 중지
      [root@localhost ~]# systemctl stop firewalld
      
      # 서비스 등록
      [root@localhost ~]# systemctl enable firewalld
      
      # 서비스 상태 확인
      [root@localhost ~]# systemctl status firewalld
      
      # firewalld 정책 저장 또는 적용
      [root@localhost ~]# firewall-cmd --reload
      
      # firewalld 설정파일 경로
      [root@localhost ~]# vi /etc/firewalld/firewalld.conf
      

      firewalld 존(zone) 관리

      ▷ 존(zone)은 방화벽에서 사용하는 영역별 그룹이라고 보면 됩니다. 방화벽을 기준으로 외부는 External(외부), 내부는 Internal(내부), 중간 영역인 DMZ 등 다양한 존으로 나눠서 그룹 관리가 가능합니다.

      ▷ firewalld 에서 기본으로 제공하는 존(zone)이 있으며, 신규 추가하여 사용도 가능합니다. 자세한 내용은 아래 내용을 참고하기 바랍니다.

      # 사전 정의된 zone 목록 확인
      [root@localhost ~]# firewall-cmd --get-zones
      block dmz drop external home internal public trusted work
      
      # 기본 설정 zone 확인
      [root@localhost ~]# firewall-cmd --get-default-zone
      public
      
      # 기본 zone 변경
      [root@localhost ~]# firewall-cmd --set-default-zone=external
      
      # 현재 설정 확인
      [root@localhost ~]# firewall-cmd --list-all
      
      # 전체 zone 목록 상세 확인
      [root@localhost ~]# firewall-cmd --list-all-zones
      
      # 네트워크 인터페이스에 적용된 zone 리스트 확인 (변경 전)
      [root@localhost ~]# firewall-cmd --get-active-zone
      external
        interfaces: enp0s8 enp0s3
      
      # 네트워크 인터페이스에 zone 변경
      [root@localhost ~]# firewall-cmd --change-interface=enp0s3 --zone=public
      
      # 네트워크 인터페이스에 적용된 zone 리스트 확인 (변경 후)
      [root@localhost ~]# firewall-cmd --get-active-zone
      external
        interfaces: enp0s8
      public
        interfaces: enp0s3
      
      # 신규 zone 추가
      [root@localhost ~]# firewall-cmd --permanent --new-zone=test
      success
      
      # 기존 zone 삭제
      [root@localhost ~]# firewall-cmd --permanent --delete-zone=test
      success

      firewalld 서비스 관리

      ▷ firewalld 서비스는 잘 알려진 포트 또는 어플리케이션 서비스를 사전 정의한 것입니다. 

      ▷ firewalld 서비스를 이용하면 ssh, telnet, icmp, mysql 등 잘 알려진 어플리케이션에 대해 별도 포트로 설정하지 않고 서비스 이름으로 관리가 가능합니다.

      
      # 사전 등록된 서비스 목록 확인
      [root@localhost ~]# firewall-cmd --get-services
      
      # 사전 정의된 서비스 파일 위치
      [root@localhost ~]# firewall-cmd --get-services
      
      # 특정 zone에 허용된 서비스 리스트 확인 (서비스 추가 전)
      [root@localhost ~]# firewall-cmd --list-service --zone=public
      cockpit dhcpv6-client ssh
      
      # 특정 zone에 서비스 추가 (http, https, dns, telnet)
      [root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=http
      [root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=https
      [root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=dns
      [root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=telnet
      
      # 특정 zone에 서비스 삭제 (telnet)
      [root@localhost ~]# firewall-cmd --permanent --zone=public --remove-service=telnet
      
      # 서비스 추가 후 서비스 적용을 위해 방화벽 재시작
      [root@localhost ~]# firewall-cmd --reload
      
      # 특정 zone에 허용된 서비스 리스트 확인 (서비스 추가 후)
      [root@localhost ~]# firewall-cmd --list-service --zone=public
      cockpit dhcpv6-client dns http https ssh
      

      firealld 포트(port) 관리

      ▷ firewalld 포트(port)는 위에서 설명한 firewalld 서비스에서 언급되지 않은 서비스의 포트를 등록할 때 사용합니다.

      
      # 허용 포트 리스트 확인 (추가 전)
      [root@localhost ~]# firewall-cmd --list-port --zone=public
      
      # 특정 포트 TCP 8080, 8081 추가
      [root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=8080/tcp
      [root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=8081/tcp
      
      # 특정 포트 TCP 8081 삭제
      [root@localhost ~]# firewall-cmd --permanent --zone=public --remove-port=8081/tcp
      
      # 포트 적용을 위한 방화벽 재시작
      [root@localhost ~]# firewall-cmd --reload
      
      # 허용 포트 리스트 확인 (추가 후)
      [root@localhost ~]# firewall-cmd --list-port --zone=public
      8080/tcp
      

      firewalld IP 관리

      ▷ firewalld IP는 특정 IP나 IP 대역을 허용할 때 사용 합니다.

      
      # 허용 IP 리스트 확인 (추가 전)
      [root@localhost ~]# firewall-cmd --list-sources --zone=public
      
      # 허용 IP 추가
      [root@localhost ~]# firewall-cmd --permanent --zone=public --add-source=10.0.2.0/24
      [root@localhost ~]# firewall-cmd --permanent --zone=public --add-source=10.0.3.0/24
      
      # 허용 IP 삭제
      [root@localhost ~]# firewall-cmd --permanent --zone=public --remove-source=10.0.3.0/24
      
      # 허용 IP 적용을 위한 방화벽 재시작
      [root@localhost ~]# firewall-cmd --reload
      
      # 허용 IP 리스트 확인 (추가 후)
      [root@localhost ~]# firewall-cmd --list-sources --zone=public
      10.0.2.0/24
      

      firewalld 정책(rule) 현황 확인

      ▷ firewalld 에서 생성한 정책(rule)은 존(zone)별로 관리되며, 아래 경로에서 확인할 수 있습니다.

       → 정책 경로 : /etc/firewalld/zones

      
      # firewalld zone 경로 확인
      [root@localhost ~]# ls -al /etc/firewalld/zones
      total 20
      drwxr-x---. 2 root root 110 Jan 10 08:29 .
      drwxr-x---. 7 root root 159 Jan 10 08:25 ..
      -rw-r--r--. 1 root root 304 Jan 10 07:53 external.xml
      -rw-r--r--. 1 root root 328 Jan 10 07:53 external.xml.old
      -rw-r--r--. 1 root root 489 Jan 10 08:28 public.xml
      -rw-r--r--. 1 root root 523 Jan 10 08:28 public.xml.old
      -rw-r--r--. 1 root root  54 Jan 10 07:30 test.xml.old
      
      # public zone 정책 확인
      [root@localhost ~]# cat /etc/firewalld/zones/public.xml
      

      firewalld 로깅(logging) 설정

      ▷ firewalld 로깅(logging)은 방화벽에 접근한 로그를 남기는 것입니다. 로깅(lgging) 설정 방법은 아래와 같습니다.

      
      # firewalld.conf에서 로깅 설정 변경
      [root@localhost ~]# vi /etc/firewalld/firewalld.conf
      LogDenied=off
      ->
      LogDenied=all
      
      # 서비스 재시작
      [root@localhost ~]# systemctl restart firewalld
      
      # 설정 확인
      [root@localhost ~]# firewall-cmd --get-log-denied
      
      # 로그 보기
      [root@localhost ~]# dmesg | grep -i REJECT
      
      # 로그 파일 생성 후 로깅 설정 (신규 파일 생성 후 아래 내용 추가)
      [root@localhost ~]# vi /etc/rsyslog.d/firewalld-droppd.conf
      
      :msg,contains,"_DROP" /var/log/firewalld-droppd.log
      :msg,contains,"_REJECT" /var/log/firewalld-droppd.log
      & stop
      
      # rsyslog 서비스 재시작
      [root@localhost ~]# systemctl restart rsyslog.service
      
      # deny log 확인
      [root@localhost ~]# tail -f /etc/firewalld-droppd.log
      

      Iftop을 사용하여 Linux 네트워크 및 대역폭을 실시간으로 모니터링

      서버에서 대역폭 및 분석가 네트워크 사용량을 모니터링해야 하는 경우가 있습니다.

      이를 수행할 수 있는 많은 도구가 있습니다. 가장 간단하고 빠른 도구는 Linux에서만 명령 줄을 사용하는 것입니다.

      Iftop은 가장 간단한 도구 중 하나이지만 서버 대역폭 사용량을 모니터링하는 데 유용합니다.

      가장 높은 요청, 전송 및 수신 대역폭을 실시간으로 볼 수 있습니다.

      top, htop 또는 iostat와 같습니다.

      Iftop을 설치하는 방법

      Epel 리포지토리 설치, 필요한 종속성 업데이트 및 설치

      ## Centos / RHEL 6 / 7
      # yum install epel-release
      # yum update
      # yum install libpcap libpcap-devel ncurses ncurses-devel
      # yum install iftop
      ## Centos / RHEL 8 / Fedora 22+
      # dnf install iftop
      ## Ubuntu / Debian
      # sudo apt-get install iftop

      Iftop 사용 방법

      Iftop의 기본 사용법은 iftop 명령을 실행하면 모든 인터페이스를 모니터링하고 호스트 이름을 조회하므로 IP 주소가 호스트 이름으로 변환됩니다.

      # iftop

      호스트 이름 조회를 끄려면 다음 명령을 사용하십시오.

      # iftop -n

      호스트 이름 조회가 없는 Iftop 네트워크 모니터링

      특정 인터페이스에서 모니터링하려면 -i 옵션을 사용합니다. ifconfig 명령을 사용하여 네트워크 인터페이스를 확인합니다.

      # ifconfig
      # iftop -i enp4s0 -n

      Fail2ban을 사용하여 나쁜 봇 LieBaoFast, MQQBrowser 및 Mb2345Browser를 차단하는 방법

      Modsecurity를 사용하여 LieBaoFast, MQQBrowser 및 Mb2345Browser 차단

      Nginx에는 모듈 modsecurity가 있으며 차단 목록 사용자 에이전트에 LieBaoFast, MQQBrowser 및 Mb2345Browser를 추가하려고합니다.

      그런 다음 다음과 같이 테스트합니다.

      curl -A "Mozilla/5.0 (Linux; Android 7.0; FRD-AL00 Build/HUAWEIFRD-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043602 Safari/537.36 MicroMessenger/6.5.16.1120 NetType/WIFI Language/zh_CN" -I "https://serverdiary.com"

      결과는 다음과 같습니다.

      HTTP/2 403
       server: nginx
       date: Fri, 24 Jan 2020 13:21:18 GMT
       content-type: text/html
       content-length: 548
       vary: Accept-Encoding

      그러나 Nginx 액세스 로그를 확인하면 여전히 액세스 할 수 있으며 여전히 200을 얻을 수 있습니다. Google 애널리틱스에 요청이 여전히 실시간으로 존재합니다.

      결과가 403 또는 금지되어 있어도 modsecurity를 전달할 수 있는 이유를 알 수 없습니다.

      Nginx 구성을 사용하여 LieBaoFast, MQQBrowser 및 Mb2345Browser 차단

      두 번째 옵션은 Nginx 구성을 사용하여 해당 사용자 에이전트를 차단하는 것입니다.

      Nginx if is Evil, Nginx 웹 사이트에서 If를 사용하지 않는 것이 좋습니다.

      그러나 사용하고 싶다면 아래는 사용자 에이전트 LieBaoFast, MQQBrowser 및 Mb2345Browser를 차단하는 Nginx 구성입니다. 이것을 서버 블록에 넣으십시오.

      if ($http_user_agent ~* (liebaofast|mqqbrowser|mb2345browser|zh-cn|zh_cn|micromessenger) ) {
          return 403;
      }

      또는 Nginx 맵을 사용하여 나쁜 봇을 차단할 수 있습니다

      ## Write your bad User agents want to block
      map $http_user_agent $bad_bots {
              default           0;
              ~*scrapyproject   1;
              ~*nmap            1;
      	~*sqlmap	  1;
      	~*slowhttptest	  1;
      	~*nikto		  1;
      	~*magpie-crawler  1;
      	~*python-requests 1;
      	~*redback	  1;
              ~*liebaofast      1;
              ~*mqqbrowser      1;
              ~*micromessenger  1;
              ~*zh-cn           1;
              ~*zh_cn           1;
      }
      if ($bad_bots) {
          return 403;
      }

      위의 Nginx 구성은 최적이 아닙니다. 우리의 Nginx는 여전히 DDOS 요청을 받고 있으며, 이를 처리하고 요청을 거부하며, Nginx if가 권장되지 않는다는 것을 잊지 마십시오.

      Fail2ban을 사용하여 LieBaoFast, MQQBrowser 및 Mb2345Browser 차단

      최선의 선택은 File2ban을 사용하는 것입니다. 우리 nginx는이 중국 나쁜 봇으로부터 요청을받지 못했습니다.

      # yum install epel-release
      # yum install fail2ban fail2ban-systemd

      /etc/fail2ban/filter.d/nginx-badbots.conf를 만들고 다음 구성을 붙여넣습니다.

      [Definition]
      mybadbots = Mb2345Browser|LieBaoFast|MQQBrowser|micromessenger|zh_CN|zh-CN|SeznamBot|trendictionbot|magpie-crawler
      failregex  = ^<HOST> .*(GET|POST|HEAD).*(%(mybadbots)s).*$
      ignoreregex =
      datepattern = ^[^\[]*\[({DATE})
                    {^LN-BEG}

      /etc/fail2ban/jail.conf를 /etc/fail2ban/jail.local에 복사합니다.

      # cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

      이 코드를 /etc/fail2ban/jail.local의 맨 아래에 추가하십시오.

      #CUSTOM
      #[DEFAULT]
      # Ban hosts for one hour:
      bantime = 3600
      
      # Override /etc/fail2ban/jail.d/00-firewalld.conf:
      banaction = iptables-multiport
      
      [nginx-badbots]
      enabled   = true
      port      = http,https
      filter    = nginx-badbots
      logpath   = /var/log/nginx/*.access.log
      findtime  = 43200
      maxretry  = 1
      bantime   = 86400
      action 	  = iptables-multiport[name=BadBots, port="http,https"]

      자동 시작 Fail2ban 활성화 및 서비스 시작

      # systemctl enable fail2ban
      # systemctl start fail2ban

      로그온 /var/log/fail2ban.log 확인

      # tail -f /var/log/fail2ban.log
      
      Example output
      
      2020-01-24 15:07:10,869 fail2ban.actions        [11121]: NOTICE  [nginx-badbots] Ban 27.209.165.186
      2020-01-24 15:07:10,936 fail2ban.actions        [11121]: NOTICE  [nginx-badbots] Ban 60.168.87.136
      2020-01-24 15:07:11,002 fail2ban.actions        [11121]: NOTICE  [nginx-badbots] Ban 27.38.49.133
      2020-01-24 15:07:11,213 fail2ban.filter         [11121]: INFO    [nginx-badbots] Found 122.232.219.148 - 2020-01-24 15:07:11
      2020-01-24 15:07:11,250 fail2ban.filter         [11121]: INFO    [nginx-badbots] Found 223.98.64.36 - 2020-01-24 15:07:11
      2020-01-24 15:07:11,264 fail2ban.actions        [11121]: NOTICE  [nginx-badbots] Ban 122.232.219.148
      2020-01-24 15:07:11,327 fail2ban.actions        [11121]: NOTICE  [nginx-badbots] Ban 223.98.64.36

      다음 명령을 사용하여 Fail2ban에 의해 차단된 IP를 확인합니다.

      # fail2ban-client status nginx-badbots
      
      example output
      Status for the jail: nginx-badbots
      |- Filter
      |  |- Currently failed: 0
      |  |- Total failed:     28146

      SELinux에서 Apache 또는 PHP-FPM이 원격 MySQL에 연결하도록 허용하는 방법

      아파치 또는 PHP-FPM이 원격 MySQSL 서버에 연결할 수 없는 문제가 있는 경우, 아래와 같이 원격 서버의 PDO 연결 오류의 예시

      SQLSTATE[HY000] [2002] Permission denied

      먼저 다음 명령으로 SELinux가 활성화되어 있는지 확인해야 합니다.

      [root@serverdiary ~]# sestatus
      SELinux status:                 enabled
      SELinuxfs mount:                /sys/fs/selinux
      SELinux root directory:         /etc/selinux
      Loaded policy name:             targeted
      Current mode:                   permissive
      Mode from config file:          disabled
      Policy MLS status:              enabled
      Policy deny_unknown status:     allowed
      Max kernel policy version:      31

      또는 /etc/selinux/config 에서 볼 수 있습니다.

      SELINUX=enforcing

      SELinux에는 3가지 옵션이 있습니다.

      1. enforcing – SELinux 보안 정책이 적용됩니다.
      2. permissive – SELinux는 시행하는 대신 경고를 인쇄합니다.
      3. disabled – SELinux 정책이 로드되지 않습니다.

      허용으로 변경할 수 있으므로 SELinux는 시행하는 대신 경고만 인쇄합니다.

      [root@serverdiary ~]# setenforce 0
      [root@serverdiary ~]# sestatus
      SELinux status:                 enabled
      SELinuxfs mount:                /sys/fs/selinux
      SELinux root directory:         /etc/selinux
      Loaded policy name:             targeted
      Current mode:                   permissive
      Mode from config file:          disabled
      Policy MLS status:              enabled
      Policy deny_unknown status:     allowed
      Max kernel policy version:      31

      또는 SElinux 설정에서 옵션을 계속 사용하려면 이 명령을 루트로 적용하고 apache 또는 php-fpm을 다시 시작하십시오.

      setsebool -P httpd_can_network_connect 1
      setsebool -P httpd_can_network_connect_db 1

      P 옵션은 영구적임을 의미하므로 재부팅 후에도 이 옵션이 계속 적용됩니다.

      Google Two Factor Authenticator 2FA로 Cockpit 로그인을 보호하는 방법

      콕핏 로그인 페이지
      Cockpit 로그인 페이지

      Cockpit은 서버용 웹 기반 그래픽 인터페이스로, 모든 사람, 특히 다음과 같은 사용자를 대상으로 합니다.

      • Linux를 처음 사용하는 사용자(Windows 관리자 포함)
      • Linux에 익숙하고 서버를 그래픽으로 쉽게 관리할 수 있는 방법을 원합니다.
      • 주로 다른 도구를 사용하지만 개별 시스템에 대한 개요를 원하는 전문 관리자

      Cockpit을 보호하기 위해 Google Two Factor Authenticator를 설치하는 방법

      # dnf install google-authenticator qrencode-libs

      Libqrencode는 CCD가 있는 휴대폰과 같은 편리한 단말기로 스캔할 수 있는 2D 기호인 QR 코드 기호로 데이터를 인코딩하기 위한 빠르고 컴팩트한 라이브러리입니다. QR Code의 용량은 최대 7000자리 또는 4000자이며 견고성이 높습니다.

      CentOS에서 Libqrencode는 qrencode-libs 패키지에서 사용할 수 있습니다.

      # google-authenticator -t -d -f -r 3 -R 30 -W

      그런 다음 /etc/pam.d/cockpit을 편집하십시오.

      # vi /etc/pam.d/cockpit

      그리고 파일 끝에 다음 코드를 추가하십시오.

      auth required pam_google_authenticator.so nullok

      nullok 은 HOME 에 2FA가 없어도 계속 로그인 할 수 있음을 의미합니다.

      다음 명령으로 Cockpit을 다시 시작합니다.

      # systemctl restart cockpit.socket

      이제 Cockpit은 Google Authenticator 2FA로 보호되었습니다.

      비밀 키와 5개의 복구 코드가 포함된 홈 디렉토리 .google_authenticator 파일에서 코드를 확인할 수 있습니다.

      6RJYXWAV3QO3PVWSTVEW7MA4TE
      " RATE_LIMIT 3 30 1693590532
      " WINDOW_SIZE 3
      " DISALLOW_REUSE 56483718
      " TOTP_AUTH
      16286074
      83920070
      30194106
      64370332
      42120293