방화벽인 ufw(Uncomplicated Firewall)에서 너무 많은 포트를 개방해 놓으면 보안상 여러 가지 문제가 발생할 수 있다.
왜냐하면 불필요한 포트를 열어두면 공격자가 시스템의 취약점을 노려 공격할 수 있는 가능성이 높아지기 떄문이다. 그렇기 때문에 최소한의 포트(22, 443, 80)만 열어두어야만한다.
요약하자면, 불필요한 포트를 닫고 필요한 포트만 열어두는 것은 서버의 보안을 유지하는 데 필수적이라고 생각한다.
이렇게 함으로써 공격에 노출될 수 있는 가능성을 줄이고, 시스템의 안정성과 신뢰성을 높일 수 있기 때문이다.
이전에 DB가 암호화된 상태로 잠겨져 있으며 거기에 비트코인을 보내면 풀어주겠다라는 다른 팀원들의 소식이 전해졌었다.
이전에도 ufw 22,443,80 만을 최소 권장하고 있다라는 이야기를 팀원들에게 알렸지만 현재 팀원들이 많은 포트를 개방해 두었다.. ㅠ
- 데이터베이스에 접근하기 위해 ssh 터널링으로 원격 DB에 접속할 수 있음에 불구하고 3306또한 열어져있다.. ㅠ
before

after

>> sudo ufw delete ${status} ${port_number}
위 명령어로 포트가 안지워지는 문제가 발생하여 목록표 인덱스 기준으로 지우는 방식도 일부 동원하여 최소한의 포트번호만 열어놓도록 하였다.
>> sudo ufw status numbered #ufw list up 되며 맨 왼쪽에 번호가 쓰여져 있다. >> sudo ufw delete 3
특정 대역 또는 IP 망으로 차단할 수 있었지만 사내 또는 개인집 네트워크, 그리고 외부에서 작업하는 경우를 대비하여 22포트를 상세하게 설정할 수 없었습니다.
문제점
포트를 과도하게 열어둘 때의 문제점
보안 취약점 노출 증가
- 서비스 탐색 및 취약점 공격
공격자는 열린 포트를 스캔하여 어떤 서비스가 실행 중인지 파악하고, 해당 서비스의 알려진 취약점을 이용해 시스템에 침투하려고 시도함
- 미사용 서비스 노출: 사용하지 않는 포트나 서비스가 열려 있다면, 업데이트되지 않은 오래된 소프트웨어로 인해 취약점이 발생할 수 있다.
공격 표면 확대
- DDoS 공격 위험 증가
많은 포트가 열려 있으면 공격자가 여러 포트를 대상으로 DDoS 공격을 시도하여 서버의 자원을 고갈시킬 수 있다.
- 브루트 포스 공격 대상 증가
인증이 필요한 서비스가 여러 포트에서 실행 중이라면, 비밀번호 추측 등의 브루트 포스 공격에 노출될 가능성이 높아진다.
관리 복잡성 증가
- 모니터링 어려움:
열려 있는 포트가 많으면 모든 포트와 서비스를 지속적으로 모니터링하기 어려워지며 다양한 로그를 포함해서 보기 때문에 더 로그분석이 복잡해진다.
- 규칙 관리 부담
방화벽 규칙이 복잡해져 관리상의 실수가 발생할 수 있으며, 이는 보안 취약으로 이어질 수 있다.
최소한의 포트만 열어두는 이유 (22, 443, 80)
22번 포트 (SSH) - .pem 키를 소유한 인증된 사용자만의 접근 (협업)
- 원격 관리: 서버에 원격으로 접속하여 관리 작업을 수행하기 위해 필요합니다.
- 보안 조치 가능: SSH 키 기반 인증, 비밀번호 로그인 비활성화 등 추가적인 보안 설정을 적용할 수 있다
80번 포트 (HTTP) - 불특정 사용자들이 웹 서비스를 이용하기 위한 접근
- 웹 서비스 제공: HTTP 프로토콜을 통해 웹 페이지와 리소스를 제공하기 위해 필요합니다.
- 리디렉션 사용: 모든 HTTP 요청을 HTTPS로 리디렉션하여 보안을 강화할 수 있습니다.
443번 포트 (HTTPS) - 불특정 사용자들이 안전하게 정보 교환을 위한 접근
암호화된 통신: SSL/TLS를 사용하여 클라이언트와 서버 간 통신을 암호화하여 데이터의 기밀성과 무결성을 보장합니다.
신뢰성 향상: 인증서를 통해 사용자에게 신뢰할 수 있는 사이트임을 알릴 수 있습니다.
최소한의 포트 개방으로 보안 강화
- 공격 표면 축소: 필요한 포트만 열어두어 공격자가 이용할 수 있는 진입점을 최소화
- 관리 용이성: 모니터링해야 할 포트와 서비스가 줄어들어 관리가 수월
- 규칙 간소화: 방화벽 규칙이 단순해져 설정 오류를 줄임
추가적인 보안 강화 방안
서비스 별도 포트 사용 제한: 필요하지 않은 서비스는 비활성화하거나 내부 네트워크로만 접근 가능하도록 설정
SSH 보안 강화: SSH 포트 포워딩, 2단계 인증, 접근 제어 목록(ACL) 등을 통해 보안을 향상
정기적인 보안 업데이트: 운영체제와 모든 소프트웨어를 최신 상태로 유지하여 알려진 취약점을 제거
침입 탐지 및 로그 분석: 시스템 로그를 주기적으로 확인하여 의심스러운 활동을 조기에 발견하고 대응