서버 보안의 기본은 필요한 포트만 열고 나머지는 모두 차단하는 것입니다.
이를 간단하게 도와주는 도구가 UFW(Uncomplicated Firewall) 입니다.
sudo apt update
sudo apt install ufw -y
(들어오는 건 모두 차단, 나가는 건 허용)
sudo ufw default deny incoming
sudo ufw default allow outgoing
SSH(22번 포트)를 막으면 서버에 접속할 수 없으니 반드시 허용해야 합니다.
sudo ufw allow OpenSSH
sudo ufw allow 80 # HTTP
sudo ufw allow 443 # HTTPS
sudo ufw allow 3000 # 개발용 포트 (Next.js 등)
sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? → y
sudo ufw status verbose
예시 출력:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
80 ALLOW IN Anywhere
443 ALLOW IN Anywhere
3000 ALLOW IN Anywhere
80 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
3000 (v6) ALLOW IN Anywhere (v6)
✅ 이렇게 설정하면
필요한 포트만 열고, 나머지 모든 외부 접근은 자동으로 차단됩니다.
Fail2Ban은 반복된 로그인 실패나 의심스러운 접근을 자동으로 차단하는 보안 도구입니다.
UFW가 “포트 단위의 보안” 이라면, Fail2Ban은 “행동 기반 보안”에 가깝습니다.
/var/log/auth.log 등의 시스템 로그 감시iptables, ufw 등과 연동sudo apt update
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo cat /etc/fail2ban/jail.d/defaults-debian.conf
기본 예시:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
⚠️ 원본(
jail.conf)은 직접 수정하지 말고,
local파일을 새로 만들어서 관리합니다.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
예시 설정:
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 5 # 5회 실패
findtime = 10m # 10분 내에
bantime = 1h # 1시간 차단
sudo systemctl restart fail2ban
sudo fail2ban-client status
예시 출력:
Status
|- Number of jail: 1
`- Jail list: sshd
sudo fail2ban-client status sshd
| 항목 | 역할 |
|---|---|
| UFW | 기본 방화벽, 포트 기반 접근 제어 |
| Fail2Ban | 비정상 로그인 시도 자동 차단 |
| 조합 사용 시 효과 | 외부 침입 차단 + 공격 IP 자동 차단 |
이제 Contabo 서버는
✅ 필수 포트만 열리고
✅ 반복 로그인 공격도 자동 차단되는
안전한 보안 환경이 완성되었습니다.