13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] 서버 하드닝

  • [보안] OPNsense 보안 강화 체크리스트: 홈랩부터 소규모 오피스까지

    [보안] OPNsense 보안 강화 체크리스트: 홈랩부터 소규모 오피스까지

    [보안] OPNsense 보안 강화 체크리스트: 홈랩부터 소규모 오피스까지

    홈랩이나 소규모 오피스를 운영하다 보면, 방화벽 한 대가 사실상 네트워크 전체의 신뢰 경계선이 되더라고요. 그래서 OPNsense 보안 강화는 그냥 있으면 좋은 옵션이 아니라, 사고를 줄이기 위한 기본 작업에 가깝습니다. 저도 처음엔 인터넷만 잘 되면 된다고 생각했는데, 실제로 써보니 관리 GUI가 외부에 너무 쉽게 열려 있거나, 불필요한 포트가 남아 있거나, 로그를 확인하지 않는 상태가 생각보다 흔했습니다. 이 글에서는 제가 홈랩과 소규모 환경에서 반복적으로 적용하는 체크리스트 중심의 방법을 정리해보겠습니다.

    특히 네트워크 보안, 서버 하드닝, 방화벽 설정 관점에서 바로 적용할 수 있게 구성했습니다. 복잡한 이론보다, “지금 당장 뭘 확인해야 하나?”에 초점을 맞췄습니다.

    OPNsense 방화벽 보안 강화 전체 아키텍처 다이어그램

    홈랩과 소규모 오피스 환경에서 WAN, LAN, 관리망, VPN 구간이 분리된 OPNsense 보안 강화 아키텍처 예시입니다.

    1. 왜 OPNsense 보안 강화가 중요한가

    쉽게 말해 방화벽은 외부 진입(Ingress)과 내부 전송(Egress)을 통제하는 문지기입니다. 이 문지기 설정이 느슨하면 내부 서버를 아무리 잘 꾸며도 의미가 반쯤 사라지거든요.

    제가 직접 해보니 홈랩은 특히 더 방심하기 쉽습니다. 테스트용 포트를 잠깐 열어뒀다가 그대로 두거나, 관리자 페이지를 편하다고 아무 대역에서나 접속 가능하게 두는 경우가 많았습니다. 소규모 오피스도 비슷합니다. 사람이 적다고 위협이 적은 건 아니더라고요. 오히려 장비 수는 적은데 운영자가 바빠서 기본 점검이 밀리는 경우가 많았습니다.

    • 관리 인터페이스 노출 최소화
    • 기본 허용보다 명시적 허용
    • 로그와 알림 체계 확보
    • 원격 접속은 VPN 중심으로 전환

    이 네 가지만 잡아도 체감 보안 수준이 꽤 올라갑니다.

    2. OPNsense 보안 강화 핵심 개념

    여기서 중요한 포인트! OPNsense를 잘 쓴다는 건 기능을 많이 켜는 게 아니라, 공격면(Attack Surface, 공격 가능한 노출 지점)을 줄이는 쪽으로 생각하는 겁니다.

    2-1. 기본 거부(Default Deny, 기본 차단)

    필요한 것만 열고 나머지는 막는 방식입니다. 처음엔 답답해 보이는데, 장기적으로는 이게 훨씬 편합니다. 규칙이 왜 존재하는지 설명이 가능해지거든요.

    2-2. 최소 권한(Least Privilege, 최소 권한)

    관리자 계정도 꼭 필요한 사람만, 꼭 필요한 네트워크에서만 접근하게 해야 합니다. 관리자 GUI, SSH, API 모두 같은 원칙으로 보시면 됩니다.

    2-3. 구간 분리(Segmentation, 네트워크 분리)

    서버, 사용자 단말, IoT, 게스트 Wi-Fi를 한 대역에 몰아넣으면 문제 생겼을 때 옆으로 전파되기 쉽습니다. VLAN(가상 LAN, 논리적 네트워크 분리)이나 별도 인터페이스로 나누는 이유가 바로 이겁니다.

    2-4. 가시성(Visibility, 가시성 확보)

    막는 것도 중요하지만, 무엇이 막혔고 무엇이 통과했는지 보이는 게 더 중요할 때가 많습니다. 실제로 장애인지 공격인지 구분하려면 로그가 있어야 하거든요.

    항목 개선 전 권장 구성
    관리 GUI 접근 LAN 전체 허용 관리용 대역 또는 관리 호스트만 허용
    원격 관리 포트포워딩으로 직접 노출 VPN 뒤에서만 접근
    규칙 작성 Any to Any 다수 사용 출발지/목적지/포트 명시
    로그 문제 생길 때만 확인 상시 점검 및 중요 이벤트 알림

    3. 실전 체크리스트: 초기 하드닝 순서

    이제 실제로 적용해보겠습니다. 아래 순서는 제가 새로 구축할 때 거의 그대로 따르는 흐름입니다.

    1. 관리자 계정 비밀번호 재설정과 불필요한 계정 제거
    2. 관리 GUI 포트와 접근 대역 제한
    3. SSH 비활성화 또는 관리망으로 제한
    4. WAN 측 불필요 서비스 비노출 확인
    5. 방화벽 규칙 정리와 Any 규칙 제거
    6. 아웃바운드 정책 검토
    7. VPN 우선 원격 접속 구조로 변경
    8. 로그, 백업, 업데이트 절차 정착

    3-1. 관리 접근 제한

    가장 먼저 볼 부분입니다. OPNsense 웹 관리 화면은 편하지만, 그만큼 노출되면 위험합니다. 가능하면 관리용 VLAN 또는 특정 관리 PC에서만 붙게 만드세요.

    # 예시 점검 항목 메모
    # 1) 관리 GUI는 내부 관리망에서만 접속 가능해야 함
    # 2) WAN 인터페이스에서 GUI/SSH 응답이 없어야 함
    # 3) 관리자 계정은 강한 비밀번호 또는 추가 인증 사용
    
    # 외부에서 포트 응답 여부 확인 예시
    nc -zv firewall.example.local 443
    nc -zv firewall.example.local 22

    실제로 써보니까 “관리 편의성” 때문에 예외를 하나씩 열다 보면 나중엔 왜 열었는지 기억도 안 나는 규칙이 생기더라고요. 그래서 규칙 설명(Description)을 꼭 남기는 습관이 중요합니다.

    3-2. 네트워크 분리와 별도 존(Zone) 운영

    저는 최소한 아래처럼 나누는 편입니다.

    • Management: 방화벽, 스위치, 하이퍼바이저 관리망
    • Server: NAS, VM, 컨테이너 호스트
    • User: 노트북, 데스크톱
    • IoT: 카메라, 스마트홈 장비
    • Guest: 방문자 네트워크

    혹시 이런 경험 있으신가요? IoT 장비 하나 붙였는데 내부 NAS까지 보여서 깜짝 놀란 적이요. 저도 처음엔 헷갈렸는데, 분리만 해도 마음이 훨씬 편해집니다.

    관리망과 사용자망, IoT망이 분리된 OPNsense 인터페이스 구성 화면 또는 네트워크 세그먼트 다이어그램

    관리망, 서버망, 사용자망, IoT망을 분리해 방화벽 정책을 다르게 적용하는 구성 예시입니다.

    3-3. 규칙은 좁게, 설명은 자세히

    OPNsense 베스트 프랙티스 중 하나는 규칙을 좁게 쓰는 겁니다. Any to Any는 테스트 순간엔 편한데, 운영 단계로 넘어가면 빚이 됩니다.

    # 클라이언트에서 특정 서비스 연결 확인
    curl -I http://192.168.10.20
    curl -k https://192.168.10.30
    
    # DNS 확인
    dig example.com @192.168.10.1
    
    # 라우팅/연결성 확인
    traceroute 8.8.8.8

    규칙 예시는 이런 식으로 생각하시면 됩니다.

    1. 출발지(Source): User VLAN의 특정 대역
    2. 목적지(Destination): 내부 DNS 또는 프록시 서버
    3. 포트(Port): 53, 80, 443 등 필요한 포트만
    4. 설명(Description): 왜 필요한지 기록

    4. 원격 접속은 포트포워딩보다 VPN 우선

    여기서 많이 갈립니다. 집 밖에서 관리해야 하니까 포트포워딩으로 관리자 페이지를 바로 여는 경우가 있는데, 저는 권장하지 않습니다. 가능하면 WireGuard(경량 VPN)나 OpenVPN(가상사설망) 뒤에서 접근하는 구조가 낫습니다.

    제가 홈랩에서 여러 번 바꿔보니, 초반엔 귀찮아도 장기적으로는 VPN 방식이 훨씬 덜 불안합니다. 외부에 보이는 건 VPN 포트 하나로 줄고, 관리 GUI는 내부 대역에서만 열리게 유지할 수 있거든요.

    # VPN 연결 후 관리 GUI 접근 확인 예시
    ping 192.168.50.1
    curl -k https://192.168.50.1
    
    # VPN 연결 상태에서만 관리자 대역 접근 허용 여부 점검
    ssh [email protected]

    물론 VPN도 설정이 허술하면 의미가 없습니다. 계정 관리, 키 관리, 불필요한 사용자 제거는 꼭 같이 보셔야 합니다.

    5. 로그, 알림, 백업까지 묶어야 진짜 운영입니다

    방화벽 설정은 해놓고 끝이 아니더라고요. 시간이 지나면 규칙이 누적되고, 누가 뭘 바꿨는지 흐려집니다. 그래서 저는 보안 강화를 할 때 운영 체크리스트까지 한 묶음으로 봅니다.

    • 로그 확인 주기를 정합니다
    • 중요 규칙 차단 로그는 남기되, 과도한 로그 폭주는 피합니다
    • 설정 백업을 정기화합니다
    • 업데이트 전 백업을 습관화합니다
    • 변경 기록을 남깁니다

    특히 소규모 오피스는 “누가 마지막으로 바꿨는지”가 진짜 중요합니다. 저도 예전에 규칙 하나 바뀐 걸 놓쳐서 반나절을 본 적 있습니다. 그때 느꼈죠. 로그 없으면 감입니다, 운영이 아니라.

    OPNsense 로그 모니터링과 방화벽 이벤트 대시보드 화면 스타일의 시각화

    차단 로그, 허용 로그, VPN 접속 이벤트를 한눈에 보는 검증용 대시보드 이미지 위치입니다.

    6. ⚠️ 실제로 자주 겪는 문제와 해결법

    이 섹션은 경험담 중심으로 작성했습니다. 처음엔 이게 뭔가 싶었는데, 결국 반복되는 패턴이 있더라고요.

    6-1. 관리 GUI가 갑자기 안 열리는 경우

    원인: 관리 대역 제한 규칙을 너무 빡빡하게 걸었거나, 적용 순서가 꼬인 경우가 많습니다.

    해결: 콘솔 접근 경로를 미리 확보해두세요. 물리 콘솔이나 하이퍼바이저 콘솔이 있으면 복구가 훨씬 빠릅니다. 원격에서만 작업하면 진짜 식은땀 납니다.

    6-2. DNS는 되는데 웹 접속이 이상한 경우

    원인: 아웃바운드 규칙, MTU 관련 이슈, 프록시 또는 업스트림 DNS 정책 충돌일 수 있습니다.

    해결: DNS, ICMP, TCP 443 순으로 단계적으로 확인하세요. 한 번에 전체를 보려고 하면 더 헷갈립니다.

    6-3. IoT 분리 후 앱 연동이 깨지는 경우

    원인: 멀티캐스트, 브로드캐스트 탐색, 제조사 앱의 로컬 검색 방식 때문입니다.

    해결: 무조건 다 열지 말고, 필요한 프로토콜만 예외로 두는 방향이 좋습니다. 여기서 성급하게 Any 허용 넣으면 다시 원점입니다.

    6-4. 차단 로그가 너무 많아 못 보는 경우

    원인: 인터넷 백그라운드 스캔, 잡음 많은 클라이언트, 과도한 로깅 설정

    해결: 모든 규칙을 다 로깅하지 말고, 의미 있는 구간만 남기세요. WAN 인바운드 차단, VPN 인증 실패, 관리망 접근 시도 같은 이벤트가 우선입니다.

    7. 검증 방법: 설정 후 꼭 확인할 것

    OPNsense 보안 강화는 설정 자체보다 검증이 더 중요합니다. 제가 실제로 점검할 때 보는 항목은 아래와 같습니다.

    1. WAN에서 관리자 페이지가 보이지 않는지 확인
    2. 허용한 내부 서비스만 통신되는지 확인
    3. VLAN 간 불필요한 횡적 이동이 막히는지 확인
    4. VPN 연결 후에만 관리망 접근이 되는지 확인
    5. 차단 로그와 허용 로그가 의도대로 남는지 확인
    # 포트 스캔 예시
    nmap -Pn -p 22,53,80,443,1194,51820 firewall.example.local
    
    # 내부 구간 접근 테스트 예시
    curl http://192.168.20.10:8080
    curl http://192.168.30.10:8080
    
    # 외부에서 차단 여부 확인
    nc -zv public.example.com 443
    nc -zv public.example.com 22

    이거 진짜 편하더라고요. 한 번 체크리스트로 정리해두면 다음 구축 때 속도가 훨씬 빨라집니다. 감으로 보던 걸 재현 가능한 절차로 바꾸는 셈이니까요.

    OPNsense 보안 강화 전후 비교표와 체크리스트 요약 인포그래픽

    보안 강화 전후의 관리 노출 범위, 규칙 수, 접근 방식 차이를 요약한 인포그래픽 이미지 위치입니다.

    8. 정리: 홈랩과 소규모 오피스에서 먼저 할 일

    마무리해보겠습니다. OPNsense 보안 강화는 거창한 기능 추가보다, 기본을 지키는 작업에 가깝습니다. 관리 노출 줄이고, 네트워크 분리하고, 규칙을 좁게 쓰고, VPN 뒤에서 관리하고, 로그와 백업을 운영 절차에 넣는 것. 이 다섯 가지가 핵심입니다.

    • 관리 GUI와 SSH는 가능한 한 제한하세요
    • 서버망, 사용자망, IoT망은 분리하세요
    • Any 규칙은 테스트 후 반드시 정리하세요
    • 원격 관리는 VPN 우선으로 바꾸세요
    • 로그, 백업, 업데이트 절차를 같이 운영하세요

    저도 처음엔 방화벽 설정을 “인터넷만 되면 끝” 정도로 생각했었는데, 시간이 지나고 나니 결국 서버 하드닝과 방화벽 설정은 함께 가야 한다는 걸 많이 느꼈습니다. 다음 글에서는 VLAN 분리 이후 실제 서비스별 허용 규칙 설계, 예를 들면 NAS, Proxmox, Docker 호스트 같은 장비를 어떻게 안전하게 묶을지 다뤄볼 예정입니다. 이전 글에서 다뤘던 홈랩 네트워크 분리 내용이 있다면 함께 보셔도 흐름이 잘 이어질 겁니다.

    9. 자주 묻는 질문

    Q1. 홈랩에도 이렇게까지 해야 하나요?

    제 경험상, 오히려 홈랩이라서 더 기본기를 잡아두는 게 좋았습니다. 실험이 많아 예외 규칙이 늘기 쉽거든요.

    Q2. 관리자 페이지를 외부에서 바로 열면 정말 안 되나요?

    아예 불가능하다고 단정하긴 어렵지만, 저는 권장하지 않습니다. VPN 뒤로 숨기는 쪽이 훨씬 보수적이고 운영도 깔끔했습니다.

    Q3. 로그는 얼마나 남겨야 하나요?

    모든 걸 다 남기기보다, 보안적으로 의미 있는 이벤트 위주가 낫습니다. 차단 이벤트, 원격 접속, 관리 접근 시도부터 시작해보세요.

    결국 체크리스트가 답입니다. 한 번 잘 만들어두면 다음 구축이 쉬워지고, 장애나 보안 이슈가 생겨도 어디부터 볼지 명확해지거든요. 그게 제일 큰 차이였습니다. 🎉

  • [보안] 리눅스 서버 보안 강화 체크리스트: SSH부터 시스템까지 10가지 필수 점검

    [보안] 리눅스 서버 보안 강화 체크리스트: SSH부터 시스템까지 10가지 필수 점검

    [보안] 리눅스 서버 보안 강화 체크리스트: SSH부터 시스템까지 10가지 필수 점검

    리눅스 서버 보안은 서버를 한두 대 운영할 때보다, 서비스가 붙고 계정이 늘어나기 시작할 때 더 절실해집니다. 저도 처음엔 “일단 서비스부터 띄우자” 모드로 달렸었는데요. 그러다가 SSH(에스에스에이치, 원격 접속 프로토콜) 설정 하나 느슨했던 탓에 로그가 지저분하게 쌓이고, 괜히 마음까지 불안해졌던 적이 있습니다. 그 뒤로는 새 서버를 올릴 때마다 꼭 보는 리눅스 서버 보안 체크리스트를 따로 만들어서 관리하고 있습니다. 오늘은 그 체크리스트를 기준으로 서버 하드닝, SSH 보안 강화, 그리고 시스템 전반에서 꼭 확인해야 할 10가지를 한 번에 정리해보겠습니다.

    새 서버 구축 시 SSH, 방화벽, 계정, 로그, 업데이트 순서로 점검하는 전체 흐름을 보여주는 개요 이미지입니다.

    1. 왜 리눅스 서버 보안 체크리스트가 필요한가

    쉽게 말해 체크리스트는 “내가 뭘 빼먹었는지”를 막아주는 안전장치입니다. 보안 사고가 꼭 대단한 취약점 때문에만 나는 건 아니거든요. 실제로는 기본 계정 방치, 불필요한 포트 오픈, 로그 미확인, 패키지 업데이트 누락 같은 아주 평범한 실수에서 시작되는 경우가 많습니다. 저도 홈랩에서 VM(버추얼 머신, 가상 머신)을 자주 갈아엎다 보니, 사람이 하는 일은 결국 반복 실수가 나오더라고요. 그래서 설정을 잘 아는 것보다 항상 같은 기준으로 확인하는 습관이 더 중요했습니다.

    특히 리눅스 보안 체크리스트는 아래 같은 상황에서 힘을 발휘합니다.

    • 새 VPS나 클라우드 인스턴스를 처음 올렸을 때
    • 운영 중인 서버를 다른 사람이 함께 관리하게 됐을 때
    • 서비스는 커졌는데 초기 설정이 그대로 남아 있을 때
    • 문제 없던 서버를 장기간 방치했다가 다시 점검할 때

    2. 서버 하드닝, 어디까지 해야 하나

    서버 하드닝(Server Hardening, 시스템을 더 단단하게 만드는 작업)은 무조건 복잡하게 가는 게 정답은 아닙니다. 과한 보안은 운영 피로도를 높이고, 반대로 너무 느슨하면 공격 표면(Attack Surface, 공격 가능한 면적)이 넓어집니다. 여기서 중요한 포인트! 운영 가능한 수준에서 꾸준히 유지되는 보안이 제일 현실적입니다.

    제가 실무와 홈랩에서 기준으로 삼는 우선순위는 이렇습니다.

    1. 원격 접속 통제
    2. 계정과 권한 최소화
    3. 네트워크 노출 최소화
    4. 업데이트와 취약점 패치
    5. 로그와 감사(Audit, 추적 기록) 확보
    6. 자동 차단과 복구 준비

    즉, 리눅스 서버 보안은 좋은 툴을 많이 붙이는 것보다, 기본기를 빠짐없이 닫아주는 쪽이 먼저입니다.

    3. 리눅스 서버 보안 체크리스트 10가지

    아래 10가지는 제가 새 서버를 만들 때 거의 습관처럼 점검하는 항목입니다. 배포판마다 명령은 조금 다를 수 있지만 원리는 같습니다.

    항목 왜 중요한가 우선도
    1. 패키지 업데이트 기본 취약점 패치 매우 높음
    2. SSH 포트/접속 정책 무차별 대입 공격 감소 매우 높음
    3. root 직접 로그인 차단 고위험 계정 보호 매우 높음
    4. 비밀번호 대신 키 인증 인증 강도 향상 매우 높음
    5. sudo 최소 권한 권한 오남용 방지 높음
    6. 방화벽 기본 정책 불필요한 포트 차단 매우 높음
    7. 불필요한 서비스 비활성화 공격 표면 축소 높음
    8. 로그/감사 활성화 이상 징후 추적 높음
    9. Fail2ban 등 자동 방어 반복 공격 완화 중간 이상
    10. 백업과 복구 점검 사고 이후 복원 가능 매우 높음

    4. 실전 구현: SSH 보안 강화부터 시스템 보안까지

    이제 실제로 손대는 순서입니다. Ubuntu 계열 기준으로 예시를 들겠지만, Debian이나 Rocky Linux 계열도 큰 흐름은 비슷합니다.

    4-1. 패키지 최신 상태 유지

    가장 먼저 하는 작업입니다. 별거 아닌 것 같아도 이걸 미루면 뒤에 하는 설정이 다 무색해질 수 있습니다.

    sudo apt update
    sudo apt upgrade -y
    sudo apt autoremove -y

    RHEL 계열이면 dnf update -y 또는 yum update -y 형태로 하시면 됩니다.

    4-2. SSH 설정 파일 점검

    /etc/ssh/sshd_config는 진짜 자주 봅니다. 처음엔 옵션 이름이 낯설어서 저도 헷갈렸는데, 몇 번 손으로 바꿔보니까 감이 오더라고요.

    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
    sudo editor /etc/ssh/sshd_config
    Port 2222
    PermitRootLogin no
    PasswordAuthentication no
    PubkeyAuthentication yes
    ChallengeResponseAuthentication no
    UsePAM yes
    X11Forwarding no
    MaxAuthTries 3
    LoginGraceTime 30
    AllowUsers adminuser

    Port 변경은 보안의 전부가 아닙니다. 하지만 자동 스캔 로그를 줄이는 데는 체감이 꽤 됩니다. 다만 포트만 바꾸고 방심하면 안 됩니다. 핵심은 root 직접 로그인 차단과 키 기반 인증입니다.

    리눅스 서버 보안에서 SSH 보안 강화를 설명하는 키 기반 인증 구성 이미지

    sshd_config 핵심 옵션과 공개키 인증 흐름을 한눈에 보여주는 설명 이미지입니다.

    4-3. SSH 키 인증 적용

    로컬 PC에서 키를 만들고 서버에 공개키를 넣어줍니다.

    ssh-keygen -t ed25519 -C "admin@homelab"
    ssh-copy-id -p 2222 adminuser@server-ip

    서버에서 권한도 꼭 맞춰주세요.

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

    여기서 많이 하는 실수가 하나 있습니다. 키 로그인 테스트 전에 기존 세션을 끊어버리는 거예요. 저도 예전에 자신 있게 설정 저장했다가 접속 끊겨서 콘솔로 복구한 적 있습니다. 삽질 좀 했습니다 ㅎㅎ 기존 SSH 세션은 유지한 채로 새 터미널에서 먼저 접속 테스트하세요.

    4-4. sudo 권한 최소화

    모든 사용자를 관리자처럼 쓰는 순간, 사고 나면 추적도 어렵고 범위도 커집니다. 운영 계정은 분리하고, 필요한 사용자만 sudo 그룹에 넣습니다.

    sudo adduser adminuser
    sudo usermod -aG sudo adminuser
    id adminuser

    가능하면 공용 계정보다는 개인별 계정을 두는 게 좋습니다. 누가 어떤 작업을 했는지 남기기 쉽거든요.

    4-5. 방화벽(UFW 또는 firewalld) 적용

    리눅스 서버 보안에서 방화벽은 기본 중의 기본입니다. 외부에 꼭 필요한 포트만 열어두세요.

    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    sudo ufw allow 2222/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable
    sudo ufw status verbose

    웹 서버가 아니라면 80, 443도 열 필요가 없겠죠. 제가 직접 해보니, “나중에 쓸 수도 있으니 열어두자”가 제일 위험한 생각이더라고요.

    4-6. 불필요한 서비스 정리

    열려 있지 않아야 할 서비스는 생각보다 많습니다. 먼저 현재 리스닝(Listening, 포트 대기) 상태를 확인합니다.

    sudo ss -tulpn
    sudo systemctl list-unit-files --type=service | grep enabled

    사용하지 않는 서비스는 비활성화합니다.

    sudo systemctl disable --now avahi-daemon
    sudo systemctl disable --now cups

    물론 어떤 서비스가 필요한지는 서버 역할에 따라 다릅니다. 그래서 무조건 지우기보다 “왜 필요한가”를 먼저 확인해야 합니다.

    4-7. 로그와 감사 설정

    보안은 막는 것도 중요하지만, 나중에 되짚어볼 수 있어야 합니다. 최소한 인증 로그와 시스템 로그는 꾸준히 확인해야 합니다.

    sudo journalctl -p warning -b
    sudo journalctl -u ssh --since today
    sudo tail -f /var/log/auth.log

    auditd(Audit Daemon, 감사 로그 데몬)를 쓰는 환경이라면 주요 파일 변경까지 추적할 수 있습니다.

    sudo apt install auditd -y
    sudo systemctl enable --now auditd
    리눅스 서버 보안 모니터링 화면, 방화벽 규칙과 로그 확인 예시 이미지

    허용 포트, 차단 트래픽, SSH 로그인 시도 로그를 함께 보여주는 운영 관점의 보안 모니터링 이미지입니다.

    4-8. Fail2ban으로 반복 공격 완화

    Fail2ban은 로그를 보고 반복 실패한 IP를 자동 차단하는 도구입니다. 엄청 화려한 건 아닌데, 실무적으로 꽤 든든합니다.

    sudo apt install fail2ban -y
    sudo systemctl enable --now fail2ban
    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    sudo editor /etc/fail2ban/jail.local
    [sshd]
    enabled = true
    port = 2222
    logpath = %(sshd_log)s
    maxretry = 5
    findtime = 10m
    bantime = 1h

    설정 후 상태를 확인합니다.

    sudo fail2ban-client status
    sudo fail2ban-client status sshd

    4-9. 자동 업데이트 검토

    운영 정책에 따라 다르지만, 보안 업데이트 자동 적용은 꽤 유용합니다. 다만 서비스 영향도를 꼭 고려하세요.

    sudo apt install unattended-upgrades -y
    sudo dpkg-reconfigure -plow unattended-upgrades

    저는 인터넷에 직접 노출된 소규모 서버는 자동 보안 업데이트를 선호하고, 민감한 서비스는 점검 창구를 따로 둡니다.

    4-10. 백업과 복구 테스트

    여기서 진짜 많이 놓칩니다. 백업이 있는 것과 복구가 되는 것은 다릅니다. 설정 파일, 애플리케이션 데이터, 데이터베이스 덤프를 분리해서 챙기고, 실제로 복원 테스트까지 해보셔야 합니다.

    sudo tar czf /backup/etc-$(date +%F).tar.gz /etc
    sudo rsync -av /backup backupuser@backup-host:/data/server1/

    시스템 보안은 사고를 막는 것만이 아니라, 사고 이후 버틸 수 있는 상태를 만드는 일입니다.

    5. ⚠️ 실제로 자주 겪는 문제와 해결 방법

    여기서는 제가 많이 겪었거나 주변에서 자주 보는 함정을 정리해보겠습니다.

    • SSH 포트만 바꾸고 방화벽에 새 포트를 안 열어둠: 설정 반영 후 바로 접속 불가가 납니다. SSH 재시작 전에 방화벽부터 먼저 수정하세요.
    • PasswordAuthentication no를 너무 빨리 적용: 공개키 권한이 틀리면 바로 잠깁니다. 새 세션으로 키 로그인 테스트 후 적용하세요.
    • Fail2ban이 로그 경로를 못 읽음: 배포판마다 SSH 로그 위치가 다를 수 있습니다. journalctl 기반인지 파일 기반인지 확인해야 합니다.
    • 불필요한 서비스라고 생각하고 무작정 disable: 의존 서비스까지 영향을 줄 수 있습니다. systemctl status와 사용 목적을 먼저 보세요.
    • 백업만 있고 복구 절차 문서가 없음: 복원 명령, 순서, 인증 정보 위치를 적어두지 않으면 실제 장애 때 더 혼란스럽습니다.

    혹시 이런 경험 있으신가요? 저는 예전에 원격지 장비에서 SSH와 UFW를 한 번에 바꾸다가, 접속이 안 돼서 콘솔 접속권 있는지부터 확인했던 적이 있습니다. 그 뒤로는 꼭 “현재 세션 유지, 새 세션 테스트, 그 다음 재시작” 순서를 지킵니다.

    6. 검증: 설정이 제대로 적용됐는지 확인하는 방법

    보안 설정은 했다고 끝이 아닙니다. 검증이 빠지면 체크리스트가 아니라 희망사항이 되거든요. 아래 명령으로 확인해보세요.

    1. SSH가 원하는 포트로만 열려 있는지 확인
    2. root 직접 로그인 차단 여부 확인
    3. 비밀번호 로그인 차단 여부 확인
    4. 방화벽 허용 포트 목록 확인
    5. Fail2ban 차단 상태 확인
    6. 로그에 반복 실패 흔적이 줄었는지 확인
    sudo ss -tulpn | grep ssh
    sudo sshd -t
    sudo ufw status numbered
    sudo fail2ban-client status sshd
    sudo grep "Failed password" /var/log/auth.log | tail

    외부 호스트에서 포트 스캔을 점검할 수도 있습니다.

    nmap -Pn server-ip

    정상이라면 꼭 필요한 포트만 보이고, 인증 실패 로그가 과하게 쌓이지 않으며, root 직접 로그인은 막혀 있어야 합니다. 이런 상태가 되면 드디어 됐다! 싶은 순간이 옵니다. 눈에 띄는 성능 향상은 없지만, 운영자 마음은 훨씬 편해집니다.

    리눅스 서버 보안 점검 완료 후 검증 결과를 보여주는 이미지

    포트 점검, Fail2ban 상태, 인증 로그 확인 결과가 정리된 검증 완료 이미지입니다.

    7. 리눅스 서버 보안 운영 팁

    한 번 설정해두고 끝나는 보안은 거의 없습니다. 운영하면서 계속 봐야 합니다.

    • 월 1회 이상 보안 점검 루틴 만들기
    • 사용하지 않는 계정 즉시 잠금 또는 삭제
    • 새 서비스 배포 시 포트와 권한부터 검토
    • 로그 보관 기간과 백업 정책 분리
    • 가능하면 테스트 서버에서 설정 검증 후 운영 반영

    이전 글에서 다뤘던 Docker 격리와 reverse proxy 구성도 함께 보면 더 도움이 됩니다. 다음 글에서는 리눅스 서버 보안의 연장선으로 침입 탐지(IDS, Intrusion Detection System)와 로그 중앙화 쪽도 다뤄볼 예정입니다.

    8. 자주 묻는 질문 FAQ

    SSH 포트 변경만으로 충분한가요?

    아닙니다. 포트 변경은 소음 감소에는 도움이 되지만 본질적인 인증 강화를 대신하진 못합니다. 공개키 인증, root 로그인 차단, 방화벽 정책이 함께 가야 합니다.

    비밀번호 로그인을 꼭 꺼야 하나요?

    가능하면 그렇습니다. 특히 외부 공개 서버라면 더 그렇고요. 다만 운영 절차상 필요한 경우엔 MFA(다중 인증)나 IP 제한 같은 추가 통제가 필요합니다.

    소규모 홈서버도 이렇게까지 해야 하나요?

    인터넷에 노출된다면 규모와 상관없이 기본 점검은 필요합니다. 실제로 홈랩이 더 느슨해지기 쉬워서 오히려 체크리스트가 더 유용합니다.

    9. 마무리: 기본기만 잘 지켜도 보안 수준이 달라집니다

    오늘 정리한 리눅스 서버 보안 체크리스트 10가지는 화려한 고급 기술이 아닙니다. 그런데 신기하게도, 사고 예방에는 이런 기본기가 제일 오래 갑니다. 저도 처음엔 서버 하드닝이 너무 번거롭게 느껴졌는데, 한 항목씩 루틴으로 만들고 나니까 운영이 훨씬 안정적이더라고요. 특히 SSH 보안 강화, 방화벽 정책, 로그 확인, 백업 검증 이 네 가지는 체감 효과가 큽니다.

    처음부터 완벽하게 다 하려고 하기보다, 오늘 바로 할 수 있는 것부터 적용해보세요. 공개키 로그인 전환, root 차단, UFW 기본 deny, 이 세 가지만 해도 출발은 충분합니다. 그리고 마지막으로, 꼭 기억하셔야 할 건 하나입니다. 보안은 설정이 아니라 습관입니다.

    리눅스 서버 보안 체크리스트 10가지를 요약한 인포그래픽 이미지

    10가지 필수 점검 항목을 한 장으로 정리한 요약 인포그래픽 이미지입니다.