포트가 열려있다 = 문이 잠기지 않은 집
실제 모의해킹을 해보면 포트 스캔 결과로 공격 진입점을 찾는 데 5분도 안 걸린다. 특히 개발 편의를 위해 열어둔 DB 포트, 잊어버린 개발 서버 포트 — 이런 게 사고의 시작이다.
Shodan 같은 서비스는 인터넷에 노출된 서버 포트를 자동으로 인덱싱한다. 내 서버 IP를 Shodan에 검색해보면 외부에서 어떻게 보이는지 바로 확인할 수 있다.
반드시 외부 접근을 차단해야 할 포트
- 3306 — MySQL/MariaDB: DB 포트가 외부에 열리면 직접 접속 공격 가능
- 5432 — PostgreSQL: 동일
- 27017 — MongoDB: 인증 미설정 상태로 오픈되면 DB 전체 공개
- 6379 — Redis: 기본 설정에 인증이 없고, 열려있으면 서버 권한 탈취 가능
- 8080, 8443 — 개발 서버: 개발 환경에서만 사용하고 프로덕션에서 닫기
- 9200 — Elasticsearch: 인증 없이 열리면 전체 데이터 조회 가능
AWS Security Group 기본 설정
# 현재 열린 포트 확인 (AWS CLI)
aws ec2 describe-security-groups --filters "Name=group-id,Values=sg-xxxx" --query 'SecurityGroups[*].IpPermissions'
# 특정 포트 닫기
aws ec2 revoke-security-group-ingress --group-id sg-xxxx --protocol tcp --port 3306 --cidr 0.0.0.0/0
SSH 포트 보안 강화
# /etc/ssh/sshd_config 권장 설정
Port 22 # 변경 권장 (22 대신 다른 포트)
PermitRootLogin no # root 직접 로그인 차단
PasswordAuthentication no # 키 기반 인증만 허용
MaxAuthTries 3
AllowUsers ubuntu # 특정 유저만 허용
sudo systemctl restart sshd
Nginx로 불필요한 경로 차단
# .env, .git 등 민감 파일 접근 차단
location ~ /\.env {
deny all;
return 404;
}
location ~ /\.git {
deny all;
return 404;
}
# 알려진 취약 경로 차단
location ~* /(wp-admin|wp-login|phpmyadmin|adminer) {
deny all;
return 404;
}
포트 점검은 CodeScan에서 자동으로 해준다. 자주 열려있는 위험 포트를 스캔해서 리포트로 정리해준다.