하드닝 스크립트 직접 짜지 마세요. 그 쉘 스크립트 때문에 당신의 주말은 사라질 겁니다.

하드닝 스크립트 직접 짜지 마세요. 그 쉘 스크립트 때문에 당신의 주말은 사라질 겁니다.

James·2026년 1월 17일·3

서버 보안 하드닝을 위해 수동으로 쉘 스크립트를 짜는 것은 위험합니다. 검증된 오픈소스 도구인 dev-sec Ansible 컬렉션을 통해 시스템 안정성과 주말을 지키는 방법을 소개합니다.

네이버 인프라팀에 있을 때나 AWS EC2 코어 팀에 있을 때나, 언제나 똑같은 유형의 '열정적인' 주니어를 만납니다. 보안 규정을 준수하겠다며 밤새워 수백 줄짜리 쉘 스크립트를 짜는 친구들 말이죠. 리눅스 커널 파라미터를 건드리고, SSH 설정을 한 줄 한 줄 sed 명령어로 고치는 걸 보며 그들은 뿌듯해합니다.

하지만 저는 그 모습을 볼 때마다 등골이 서늘합니다. 6개월 뒤, 그 스크립트를 짠 사람이 퇴사하고 나면 그 거대한 '레거시 덩어리'는 고스란히 제 몫이 되기 때문입니다. 그리고 높은 확률로, 그 스크립트는 어느 금요일 밤 OS 버전 업데이트와 충돌하며 전체 시스템을 마비시킵니다.

시스템 가용성 99.999%를 지키려다 제 수명의 가용성을 깎아먹은 경험으로 조언합니다. 바퀴를 다시 발명하지 마세요. 특히 보안(Security) 영역에서는 더욱 그렇습니다. 오늘은 당신의 칼퇴근과 정신 건강을 지켜줄 검증된 도구, dev-sec/ansible-collection-hardening을 소개합니다.

왜 '수동 하드닝'이 자살행위인가

서버 보안 설정, 즉 하드닝(Hardening)은 단순히 방화벽 하나 켜는 수준이 아닙니다. CIS 벤치마크 같은 보안 규정집은 수백 페이지에 달합니다. 이걸 사람이 일일이 적용한다? 불가능합니다.

1. 파편화된 OS 환경: Ubuntu 20.04에서 잘 돌아가던 스크립트가 Rocky Linux 9에서는 에러를 뱉습니다. sysctl 파라미터 이름이 바뀌거나, 패키지 매니저가 다르기 때문입니다.

2. 관리의 지속성 부재: Nginx 버전이 올라가면서 보안 옵션이 바뀌었습니다. 수동으로 설정한 서버 100대를 언제 다 확인하시겠습니까?

3. 휴먼 에러: sshd_config 파일에서 오타 하나 내서 원격 접속이 막혀보신 분들은 아실 겁니다. 데이터센터로 직접 뛰어가야 하는 그 공포를요.

정답은 'DevSec Hardening Framework'

실리콘밸리에서 엔지니어들이 밥 먹듯 쓰는 말이 있습니다. "Don't Roll Your Own Crypto(암호화 기술 직접 만들지 마라)." 하드닝도 마찬가지입니다. 이미 전 세계 수천 명의 엔지니어들이 검증하고, 별(Star) 4,700개를 받은 Ansible 컬렉션이 있습니다.

GitHub의 dev-sec/ansible-collection-hardening 리포지토리는 다음과 같은 핵심 컴포넌트들을 자동으로, 그리고 안전하게 잠가줍니다.

  • OS Hardening: 리눅스 커널 파라미터 최적화, 불필요한 패키지 제거, 파일 권한 설정.
  • SSH Hardening: 취약한 암호화 알고리즘 비활성화, 루트 로그인 차단, 아이들(Idle) 타임아웃 설정.
  • Nginx Hardening: 버퍼 오버플로우 방지, 헤더 숨김, SSL/TLS 최신 프로토콜 강제.
  • MySQL/MariaDB Hardening: 익명 사용자 제거, 테스트 DB 삭제, 안전한 패스워드 정책 수립.

어떻게 사용하는가 (ft. Ansible)

이 도구의 핵심은 Ansible입니다. 쉘 스크립트처럼 명령을 나열하는 게 아니라, "이 서버는 이런 상태여야 한다"고 선언(Declarative)하는 방식입니다.

1. 설치 간단합니다. 앤서블 갤럭시(Ansible Galaxy)를 통해 컬렉션을 내려받으십시오.

ansible-galaxy collection install devsec.hardening

2. 플레이북 작성 복잡한 로직은 필요 없습니다. 그저 역할을 불러오기만 하면 됩니다. 다음은 제가 실제 현업에서 베이스라인으로 사용하는 구성의 예시입니다.

- hosts: all
  roles:
    - devsec.hardening.os_hardening
    - devsec.hardening.ssh_hardening
    - devsec.hardening.nginx_hardening

이렇게만 작성해두면, 이 플레이북이 실행될 때마다 수백 가지의 보안 체크리스트가 자동으로 적용됩니다. 이미 설정되어 있다면 건너뛰고, 벗어난 설정이 있다면 다시 원복 시킵니다. 이것이 바로 멱등성(Idempotency)의 힘입니다. 새벽 3시에 장애 복구하면서 스크립트 꼬일 걱정을 할 필요가 없다는 뜻입니다.

이 도구가 특별한 이유

단순히 설정을 바꾸는 게 아닙니다. 이 컬렉션은 Inspec DevSec Baseline을 준수합니다.

보안 감사를 받아보신 분들은 아실 겁니다. "이 서버가 규정을 준수하는지 증명하라"는 요구를 받으면 막막해집니다. 이 Ansible 컬렉션은 애초에 Inspec이라는 자동화된 보안 감사 도구의 기준에 맞춰 개발되었습니다. 즉, 하드닝을 적용하고 Inspec을 돌리면 바로 'Pass'가 뜬다는 이야기입니다. 감사 대응을 위해 엑셀 파일을 만들던 시간을 아껴서 잠을 더 잘 수 있습니다.

지원하는 OS 범위도 넓습니다. Debian, Ubuntu, CentOS Stream, AlmaLinux, Rocky Linux는 물론이고 심지어 Amazon Linux까지 커버합니다. AWS 환경에서 작업하는 저 같은 사람에게는 필수품이나 다름없습니다.

뼈 때리는 조언

솔직히 말해봅시다. 여러분이 아무리 뛰어난 엔지니어라도, 전 세계 수백 명의 오픈소스 기여자들이 실시간으로 업데이트하는 보안 트렌드를 혼자서 따라잡을 순 없습니다.

어설픈 완벽주의를 버리십시오. 보안은 '내가 얼마나 고생했는지'를 보여주는 영역이 아닙니다. '얼마나 실수 없이 표준을 지켰는지'가 중요한 영역입니다.

여러분의 "열정"은 비즈니스 로직을 짜거나, 더 효율적인 아키텍처를 고민하는 데 쓰세요. 리눅스 파일 권한 설정 따위는 기계와 집단지성에 맡기십시오. 그래야 시스템도 살고, 여러분의 주말도 삽니다.

기억하세요. 최고의 보안 전문가는 밤새워 로그를 보는 사람이 아니라, 애초에 로그 볼 일을 만들지 않는 사람입니다.

James
James실리콘밸리 15년차 Staff SRE

연봉 3억과 캘리포니아의 햇살, 그리고 공황장애. 화려한 빅테크 간판 뒤에 가려진 '생존의 청구서'를 정산해드립니다. 기술적 탁월함만큼 중요한 건 엔지니어로서의 지속 가능성임을 병상에서 깨달았습니다.

James님의 다른 글

댓글 0

첫 번째 댓글을 남겨보세요!