Linux(Ubuntu) 서버에서 root 계정 및 sudo 권한 접근 로그를 감시하여 침입 탐지, Slack 보안 알림, iptables 기반 자동 차단 기능을 Crontab 설정으로 자동화한 시스템입니다.
- 운영 환경: Ubuntu 24.04+
- 필수 패키지: curl, iptables, systemd-journald
- 외부 연동: Slack Incoming Webhook URL 1개
- 구현 방식: Shell Programming 기반 자동화 스크립트
- 프로젝트 이름: Ubuntu 기반 root 계정 & sudo 권한 탈취 모니터링 시스템
- 프로젝트 설명:
- root 계정에 대한 비정상 로그인 시도 탐지
- 일반 사용자(user)의
sudo/su사용 실패 이벤트 감지 - Slack으로 실시간 알림 전송
- 비인가 원격 IP 자동 차단 (iptables 기반)
| Ubuntu | MobaXterm |
|---|---|
![]() |
![]() |
| Git | Notion | Slack |
|---|---|---|
![]() |
![]() |
| 박여명 | 신준수 |
|---|---|
| GitHub | GitHub |
| 구분 | 기능 설명 | 탐지 방법 | 추가 동작 |
|---|---|---|---|
| Root 접근 시도 | 허용되지 않은 IP의 root 접근 시도 탐지 및 차단 | journalctl -u sshd → Accepted, Failed password 패턴 분석 |
3회 이상 실패 시 자동 차단 / 허용 IP(화이트리스트)는 알림만 전송 |
| Root 로그인 이벤트 | root 로그인 성공/실패 이벤트 감지 | journalctl -u sshd 분석 |
Slack 알림 전송 |
| Sudo 사용/시도 | sudo 권한 사용/시도 감지 | journalctl SYSLOG_IDENTIFIER=sudo 분석 → user NOT in sudoers, authentication failure, COMMAND=... 구분 |
Slack 알림 전송 |
| Su 사용/시도 | su 권한 전환 감지 | journalctl -t su 분석 → authentication failure, session opened 구분 |
Slack 알림 전송 |
| Slack 알림 | 호스트명, 시간, 사용자, 명령, 원본 로그 조각 전달 | JSON 이스케이프 처리 적용 | 안정적인 메시지 전송 |
plaintext
systemd-journald ──┐
(sshd/sudo/su) │ journalctl (최근 N분)
├── 패턴 필터링 (awk/grep/sed)
│
├── Slack Webhook 알림 (curl)
│
└── 비인가 IP 자동 차단 (iptables)
Linux_Root-Monitoring/
├── scripts/
│ ├── monitor.sh # root 로그인 시도 감지 + IP 차단 + Slack 알림
│ └── watch_sudo.sh # sudo/su 사용 실패 감지 + Slack 알림
└── allow_ips.txt # 허용(화이트리스트) IP
bash scripts/monitor.sh
bash scripts/watch_sudo.sh
crontab -e
아래 내용 추가:
cron
* * * * * /usr/bin/bash /home/ubuntu/Linux_Root-Monitoring/scripts/monitor.sh
* * * * * /usr/bin/bash /home/ubuntu/Linux_Root-Monitoring/scripts/watch_sudo.sh
시스템 설정 파일에서 root 권한을 부여했음에도 즉시 적용되지 않아 root 계정 접근 불가 현상이 발생.
서비스 단순 재시작만으로는 반영되지 않는 경우가 있었으며, 최종적으로 시스템 재부팅(restart)으로 변경 사항이 정상 적용됨을 확인.
👉 권한 및 보안 설정 변경 시 즉각적인 반영 여부를 반드시 점검.
테스트 중 본인의 IP가 iptables에 의해 차단되어 접속 불가 상황이 발생.
확인 명령어:
sudo iptables -L INPUT -n --line-numbers차단 해제:
sudo iptables -D INPUT <번호>
sudo netfilter-persistent save👉 운영 시 관리자 본인 IP는 반드시 화이트리스트(allow_ips.txt)에 추가 필요.
Slack Webhook URL 오류, 네트워크 차단, JSON escape 문제로 인해 알림 전송이 실패할 수 있음.
- Webhook URL 유효성 재확인
curl테스트:
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"테스트 메시지"}' https://hooks.slack.com/services/XXX/YYY/ZZZ- 메시지 본문에
",\포함 시 JSON escape 필수
`sshd_config` 또는 `/etc/ssh/sshd_config.d/*.conf` 설정 오류 시 SSH 연결 차단 발생.
해결:
- 변경 전 문법 검사:
sudo sshd -t- 문제 발생 시 콘솔 접속 후 설정 복구
- 임시 조치:
PermitRootLogin yes, 최소한의AllowUsers허용
스크립트는 수동 실행 시 정상 동작하나 cron 등록 후 실행 실패 상황 발생.
원인:
- PATH/환경변수 부족
journalctl실행 시 sudo 권한 문제
해결:
- cron에 절대 경로 지정:
* * * * * /usr/bin/bash /home/ubuntu/Linux_Root-Monitoring/scripts/monitor.sh- 스크립트 내 sudo 사용 시:
sudo visudo
ubuntu ALL=(ALL) NOPASSWD:ALL


