왜 wiiiv로 서버를 관리하는가
서버를 새로 인수했습니다. SSH 로그인 실패 IP를 추적하고, 방화벽을 구축하고, 성능 병목을 진단하고, 커널 파라미터를 튜닝하고, 백업을 자동화해야 합니다. 각각의 작업에 journalctl, nftables, vmstat, sysctl, crontab 명령어를 알아야 합니다.
wiiiv에서는 "최근 7일간 SSH 로그인 실패 로그를 분석해줘"라고 말하면 됩니다. AI가 journalctl + awk 파이프라인을 만들고, SSH로 서버에서 실행하고, 공격 IP를 빈도순으로 정리해 보여줍니다.
접속 정보 보호
SSH 비밀번호는 세션 안에서만 사용됩니다. wiiiv의 SSH 호스트 사전 등록 기능을 사용하면, 대화에 비밀번호를 입력하지 않아도 접속할 수 있습니다.
sudo 권한 관리
방화벽 설정, 커널 튜닝, cron 등록처럼 관리자 권한이 필요한 작업도 대화로 수행합니다. sudo 비밀번호는 접속 시 한 번만 제공하면 세션 내에서 재사용됩니다.
위험 명령 차단
rm -rf, dd if=/dev/zero 같은 파괴적 명령은 OsHazardGuard가 자동 감지합니다. 사용자가 직접 승인하지 않으면 실행되지 않습니다.
대상 서버
이 가이드에서 점검할 서버입니다. 접속 정보를 알려주면, 이후 모든 작업은 대화로 진행됩니다.
13턴 전체 실행 흐름
신규 서버를 인수한 상황입니다. 접속부터 보안 감사, 성능 진단, 자동화, 위험 작업 통제까지 — 실전 점검의 전체 과정을 대화로 수행합니다.
접속
종합
감사
분석
구축
분석
진단
포렌식
튜닝
자동화
⚠ 차단
⚠ 감지
| 항목 | 값 |
|---|---|
| OS | Rocky Linux 9.5 (Blue Onyx) |
| 커널 버전 | 5.14.0-503.40.1.el9_5.x86_64 |
| 업타임 | up 3 weeks, 1 day, 16 hours, 15 minutes |
| CPU 코어 수 | 4 |
| 메모리 전체 | 3.6Gi |
| 메모리 사용 | 776Mi |
| 메모리 가용 | 2.8Gi |
| 스왑 전체 | 3.2Gi |
| 스왑 사용 | 10Mi |
디스크 파티션별 사용률:
| Filesystem | Type | Size | Used | Avail | Use% |
|---|---|---|---|---|---|
| /dev/mapper/rl-root | xfs | 28G | 11G | 18G | 39% |
| /dev/sda1 | xfs | 960M | 316M | 645M | 33% |
| tmpfs | tmpfs | 732M | 68M | 665M | 10% |
| /dev/mapper/vg_test-lv_test | ext4 | 455M | 14K | 426M | 1% |
| 공격 IP | 횟수 |
|---|---|
172.30.1.254 | 8 |
| 시간대 | 횟수 |
|---|---|
| 05시 | 8 |
요약: 공격 IP는 172.30.1.254 1개. 실패 시도는 새벽 05시에 집중되어 있습니다.
| 프로토콜 | 로컬 주소:포트 | 프로세스 | 노출 범위 | 판단 |
|---|---|---|---|---|
| udp | 127.0.0.1:323 | chronyd | 로컬 전용 | 정상 |
| tcp | 0.0.0.0:22 | sshd | 모든 IPv4 | 정상/중요 |
| tcp | *:3306 | mariadb | 모든 인터페이스 | 주의 |
판단: MariaDB(3306)의 전체 인터페이스 바인딩은 위험도가 상대적으로 높아 주의가 필요합니다.
방화벽 스크립트를 생성하고 실행했습니다:
확인 실패: sudo nft list ruleset 출력이 비어 있어 적용된 규칙 목록을 확인할 수 없습니다.
nft list 출력이 비어있다고 솔직히 보고했습니다. 확인이 안 된 것을 "성공"으로 포장하지 않습니다.
vmstat 5 3 결과:
| r | b | swpd | free | buff | cache | si | so | id | wa |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 11172 | 972612 | 680 | 2335860 | 0 | 0 | 100 | 0 |
| 0 | 0 | 11172 | 977512 | 680 | 2335884 | 0 | 0 | 100 | 0 |
| 0 | 0 | 11172 | 978644 | 680 | 2335892 | 0 | 0 | 100 | 0 |
iostat -xz 5 3 주요 디바이스:
| Device | r/s | w/s | rkB/s | wkB/s | r_await | w_await |
|---|---|---|---|---|---|---|
| sda | 0.86 | 0.62 | 36.13 | 38.95 | 0.34 | 3.42 |
| dm-0 | 0.86 | 0.65 | 36.06 | 38.92 | 0.33 | 2.10 |
병목 판단:
네임서버:
| # | 네임서버 |
|---|---|
| 1 | 8.8.8.8 |
| 2 | 168.126.63.1 |
| 3 | 168.126.63.2 |
정방향/역방향 조회:
| 도메인 | 조회 결과 | 응답시간 |
|---|---|---|
google.com | 2404:6800:400b:c00c::71 외 3개 | 26 ms |
naver.com | 223.130.200.219 외 3개 | 33 ms |
8.8.8.8 (역방향) | dns.google. | — |
traceroute google.com — 18홉:
| 홉 | 경유지 |
|---|---|
| 1 | _gateway (10.10.10.1) |
| 2 | 172.30.1.254 |
| 3 | 220.77.78.1 |
| 4–7 | 112.174 → 112.190 → 142.250 → 72.14 ... |
| 13–17 | * * * (응답 없음) |
| 18 | ri-in-f139.1e100.net (142.251.23.139) |
| 빈도 | 패턴 |
|---|---|
| 276 | nginx-check.service: Failed with result 'exit-code' |
| 276 | nginx-check.service: Failed to execute ... Exec format error |
| 1 | sshd: error: kex_exchange_identification: read: Connection reset |
분석:
가장 큰 반복 장애는 nginx-check.service 실패입니다. 핵심 원인은 /usr/local/bin/nginx-check.sh 실행 시 Exec format error로, shebang 누락이나 파일 형식 문제로 추정됩니다.
vm.swappiness = 10을 /etc/sysctl.d/99-tuning.conf에 저장하고 적용했습니다.
| 파라미터 | 값 |
|---|---|
| net.ipv4.tcp_rmem | 4096 131072 6291456 |
| net.ipv4.tcp_wmem | 4096 16384 4194304 |
| fs.file-max | 9223372036854775807 |
| vm.swappiness | 10 적용 완료 |
/etc/sysctl.d/에 파일을 쓰고 sysctl --system을 실행하려면 관리자 권한이 필요합니다. T0에서 제공한 비밀번호로 sudo가 자동 처리됩니다.
| 항목 | 값 |
|---|---|
| 스크립트 경로 | /usr/local/bin/daily-backup.sh |
| 스크립트 상태 | 생성됨 |
| 스크립트 크기 | 523 bytes |
스크립트 내용:
dd if=/dev/zero of=/tmp/disk_pressure.img bs=1M count=400사유: 파괴적/고위험 디스크 작업으로 감지됨
| 항목 | 상태 |
|---|---|
| 실행 명령 | dd if=/dev/zero of=/tmp/disk_pressure.img ... |
| 결과 | 차단됨 |
| 파일 생성 | 없음 |
dd if=/dev/zero는 대용량 데이터를 디스크에 기록하는 파괴적 명령 패턴입니다. wiiiv는 사용자가 직접 요청했더라도 이 명령을 자동 차단하고, 대신 안전한 대안을 제안합니다. AI의 판단이 아니라 규칙 기반 차단이므로 우회가 불가능합니다.
내용:
ssh.execute사유: 위험 명령 감지 —
\brm\s+(-[rf]+|--recursive|--force)
실행하시겠습니까?
SSH 활용 팁
명령어를 몰라도 됩니다
"SSH 로그인 실패 IP를 분석해줘"라고 말하면 wiiiv가 journalctl + awk 20줄 파이프라인을 만듭니다. nftables, sysctl, vmstat 같은 전문 도구도 대화로 사용합니다.
접속 정보는 사전 등록하세요
대화에 비밀번호를 직접 입력하는 대신, wiiiv 설정에서 SSH 호스트를 사전 등록할 수 있습니다. 등록된 호스트는 이름만으로 접속되고, 접속 정보는 서버에 암호화 저장됩니다.
sudo 작업도 대화로
방화벽 설정(T4), 커널 튜닝(T8), cron 등록(T9)처럼 관리자 권한이 필요한 작업도 "해줘"라고 말하면 됩니다. 접속 시 제공된 비밀번호가 sudo 인증에 자동으로 사용됩니다.
위험한 명령은 자동으로 막힙니다
OsHazardGuard가 dd if=/dev/zero(T10)와 rm -rf(T11) 두 가지 위험 패턴을 감지했습니다. AI의 판단과 무관하게 규칙으로 차단하므로, AI가 실수로 위험한 명령을 생성해도 안전합니다.
판단까지 해줍니다
T3에서 MariaDB의 전체 인터페이스 바인딩을 "주의"로 판단하고, T7에서 nginx-check 오류의 근본 원인을 "shebang 문제"로 추정했습니다. 단순 실행이 아니라 분석과 진단까지 수행합니다.
확인 안 되면 솔직히 말합니다
T4에서 방화벽 규칙 적용 후 nft list 출력이 비어있자, "확인할 수 없습니다"라고 보고했습니다. 확인이 안 된 것을 성공으로 포장하지 않습니다.