← 전체 목록
병원홈페이지보안

보안 점검 자동화 스크립트로 매주 1시간을 절약합니다

ℹ️ 본 글은 정보 제공 목적이며, 광고·제휴 링크가 포함될 수 있습니다.

보안 점검 자동화 스크립트 만들기는 관리하는 사이트가 하나에서 세 곳으로 늘어나면서 필요해졌습니다. 매주 수동으로 로그 확인, SSL 만료 점검, 파일 변경 확인을 반복하는 것이 비효율적이었고, 바쁜 날에는 건너뛰게 됐습니다. 간단한 bash 스크립트와 cron을 조합해서 매주 월요일 아침에 점검 결과를 이메일로 받는 시스템을 만들었습니다.

기본 보안 점검 스크립트

#!/bin/bash
# /usr/local/bin/security-check.sh
# 매주 월요일 실행, 결과를 이메일로 전송

SITE="병원사이트.com"
EMAIL="admin@병원사이트.com"
REPORT="/tmp/security-report-$(date +%Y%m%d).txt"

echo "=== 보안 점검 보고서 $(date) ===" > $REPORT

# 1. SSL 만료일 확인
echo "" >> $REPORT
echo "## SSL 인증서 만료일" >> $REPORT
echo | openssl s_client -servername $SITE -connect $SITE:443 2>/dev/null \
    | openssl x509 -noout -dates >> $REPORT

# 2. 최근 7일 변경된 PHP 파일
echo "" >> $REPORT
echo "## 최근 7일 변경된 PHP 파일" >> $REPORT
find /var/www/html -name "*.php" -mtime -7 >> $REPORT

# 3. fail2ban 차단 현황
echo "" >> $REPORT
echo "## fail2ban SSH 차단 현황" >> $REPORT
fail2ban-client status sshd 2>/dev/null | grep "Banned IP list" >> $REPORT

# 4. 디스크 사용량
echo "" >> $REPORT
echo "## 디스크 사용량" >> $REPORT
df -h >> $REPORT

# 5. 최근 1주일 로그인 실패 횟수
echo "" >> $REPORT
echo "## 최근 SSH 로그인 실패 (상위 10 IP)" >> $REPORT
grep "Failed password" /var/log/auth.log | awk '{print $11}' | \
    sort | uniq -c | sort -rn | head -10 >> $REPORT

# 이메일 발송
mail -s "[보안점검] $SITE $(date +%Y-%m-%d)" $EMAIL < $REPORT
rm $REPORT

cron 등록

chmod +x /usr/local/bin/security-check.sh
sudo crontab -e
# 매주 월요일 오전 9시 실행
0 9 * * 1 /usr/local/bin/security-check.sh

알림 임계값 추가

단순 보고에서 더 나아가 이상 징후 시 즉시 알림을 보내도록 개선할 수 있습니다.

# SSL 30일 미만 남으면 긴급 알림
EXPIRY=$(openssl x509 -noout -enddate -in /etc/letsencrypt/live/$SITE/cert.pem | cut -d= -f2)
DAYS=$(($(date -d "$EXPIRY" +%s) - $(date +%s)) / 86400)
if [ $DAYS -lt 30 ]; then
    echo "SSL 만료 $DAYS일 남음 — 긴급!" | mail -s "🚨 SSL 만료 경고" $EMAIL
fi

스크립트를 점진적으로 확장하면서 관리에 필요한 점검 항목을 추가해가는 것이 좋습니다. 처음부터 완벽한 시스템보다 일단 돌아가는 것이 중요합니다.

편집 정책

AI가 초안을 생성하고, 의료기관 인프라 운영자가 1차 데이터 기반으로 최종 검수·승인합니다.

작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)