개발노트
고즐의 개발 및 서버 개발 노트![]()
Rocky Linux 서버 보안 필수 설정 가이드
Rocky Linux 서버를 운영할 때 가장 중요한 요소는 보안입니다. 해킹 시도, 무차별 로그인 공격, 취약한 서비스 설정 등은 실제 운영 환경에서 흔하게 발생합니다. 이 문서는 실전에서 효과가 입증된 보안 설정만 정리하여, 초기 구축부터 운영 단계까지 안정적으로 서버를 보호할 수 있도록 구성했습니다.
1. SSH 보안 강화: root 로그인 차단 및 포트 변경
1-1. root SSH 직접 로그인 차단
서버 해킹의 대부분은 root 계정으로 직접 침투하려는 시도로부터 시작됩니다. 이를 막기 위해 root 계정의 SSH 직접 로그인을 비활성화해야 합니다.
vi /etc/ssh/sshd_config PermitRootLogin no systemctl restart sshd
설정 변경 전에 sudo 사용이 가능한 일반 계정을 반드시 만들어 놓아야 합니다.
1-2. SSH 포트 변경
기본 SSH 포트 22번은 전 세계적으로 가장 많이 스캔되는 포트입니다. 공격 빈도를 낮추기 위해 다른 포트로 변경하는 것이 효과적입니다.
vi /etc/ssh/sshd_config Port 2222 systemctl restart sshd
firewalld에도 새 포트를 등록해야 접속이 가능합니다.
firewall-cmd --permanent --add-port=2222/tcp firewall-cmd --reload
1-3. 패스워드 로그인 차단 + SSH Key 인증
비밀번호 기반 로그인을 완전히 차단하고, SSH Key 인증만 허용하면 보안 수준이 크게 향상됩니다.
vi /etc/ssh/sshd_config PasswordAuthentication no PubkeyAuthentication yes systemctl restart sshd
반드시 Key 인증이 정상적으로 작동하는지 먼저 테스트하고 비밀번호 로그인을 끄는 것이 안전합니다.
2. 무차별 로그인 방지: fail2ban 설정
2-1. fail2ban 설치 및 활성화
fail2ban은 SSH 로그인을 반복적으로 실패하는 IP를 자동 차단하여 무차별 대입 공격을 효과적으로 막아줍니다.
dnf install fail2ban -y systemctl enable --now fail2ban
2-2. SSH 보호용 jail 설정
로그 분석 기반으로 공격 IP를 차단하도록 SSH용 jail을 설정합니다.
vi /etc/fail2ban/jail.local [sshd] enabled = true port = 2222 filter = sshd logpath = /var/log/secure maxretry = 3 bantime = 3600
위 설정은 3회 실패 시 1시간 동안 해당 IP를 차단하도록 구성되어 있습니다.
3. 방화벽 설정: 필요한 포트만 허용
3-1. firewalld 기본 상태 확인
방화벽은 보안의 첫 관문이므로 열린 포트를 정기적으로 점검하는 것이 중요합니다.
firewall-cmd --list-all
3-2. 불필요한 포트 제거
업무에 필요하지 않은 포트는 즉시 차단하는 것이 좋습니다.
firewall-cmd --permanent --remove-port=8080/tcp firewall-cmd --reload
기본적으로 열려 있어야 할 포트는 SSH, 80, 443 정도입니다.
3-3. 특정 IP만 SSH 허용 (강력한 보안)
가능하다면 SSH 접속을 특정 IP로 제한하여 외부 공격을 근본적으로 차단할 수 있습니다.
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4" port protocol="tcp" port="2222" accept' firewall-cmd --reload
이 설정은 특정 IP만 SSH 접속을 허용하고, 나머지는 차단하는 강력한 보안 방식입니다.
4. SELinux와 시스템 업데이트
4-1. SELinux 확인 및 필요 시 Permissive
SELinux는 보안을 강화하지만, 설정 문제로 예상치 못한 접근 차단이 발생할 수 있습니다. 문제 확인을 위해 일시적으로 Permissive로 변경하기도 합니다.
getenforce setenforce 0
근본적으로는 SELinux 정책을 이해하고 조정하는 것이 가장 안전합니다.
4-2. 자동 업데이트(dnf-automatic) 설정
보안 취약점의 상당수는 업데이트가 되지 않아 발생합니다. 자동 업데이트를 통해 주기적으로 패치를 적용할 수 있습니다.
dnf install dnf-automatic systemctl enable --now dnf-automatic.timer
5. Apache/PHP/MariaDB 보안 기본 설정
5-1. Apache 서버 정보 감추기
서버 버전 정보는 공격자에게 유용한 정보가 될 수 있으므로 숨기는 것이 좋습니다.
vi /etc/httpd/conf/httpd.conf ServerSignature Off ServerTokens Prod
5-2. DirectoryIndex 보호
Apache에서 디렉토리 목록이 노출되지 않도록 옵션을 제한합니다.
Options -Indexes
5-3. PHP 위험 함수 비활성화
서버 쉘 실행과 관련된 PHP 함수는 보안상 사용할 일이 거의 없으므로 비활성화하는 것이 좋습니다.
vi /etc/php.ini disable_functions = exec,passthru,shell_exec,system,proc_open,popen
5-4. MariaDB 기본 보안 설정
root 외부 접속 차단 및 초기 보안 절차는 필수입니다.
mysql_secure_installation
root 계정의 Host 제한도 함께 적용하면 더 안전합니다.
UPDATE mysql.user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES;
6. 실전용 Rocky Linux 보안 요약 체크리스트
6-1. 핵심만 모은 보안 설정 요약
아래 설정만 해도 서버 보안 수준이 한 단계 업그레이드됩니다.
# SSH 보안 PermitRootLogin no Port 2222 PasswordAuthentication no # 자동 차단 fail2ban # 방화벽 firewall-cmd --list-all firewall-cmd --permanent --add-service=http/https # 시스템 업데이트 dnf-automatic # 웹/DB 보안 ServerTokens Prod Options -Indexes mysql_secure_installation
위 설정을 적용하면 해킹 시도, 비정상 접속, 취약점 공격 등 대부분의 기본적인 위협을 방어할 수 있으며, 실제 운영 환경에서도 안정적인 서버 운영이 가능합니다.