1. SELinux란?
SELinux는 프로세스와 파일 접근을 제어하여 내부 보안을 강화하며, 시스템 내에서 권한 상승 공격을 방지하는 데 중요한 역할을 합니다.
1.1 SELinux 의 주요 개념
- MAC(Mandatory Access Control): 모든 파일, 프로세스, 포트에 대해 보안 정책을 적용하여 사용자의 권한을 제한함.
- 보안 컨텍스트(Security Context): 파일과 프로세스에 부여되는 보안 속성으로, ls -Z 명령어로 확인 가능.
- 모드(Mode):
- Enforcing: SELinux 정책을 강제 적용 (기본 설정)
- Permissive: 정책을 적용하지 않지만 로그를 기록하며, SELinux 정책 위반을 감지한 AVC(Access Vector Cache) Denials 로그를 남깁니다.
- Disabled: SELinux 기능 비활성화
1.2 SELinux 관리 명령어
SELinux 설정 파일
SELinux의 설정은 /etc/selinux/config 파일을 통해 관리됩니다. 주요 항목은 다음과 같습니다:
# SELinux 상태 설정 (SELINUX=)
# enforcing - SELinux 정책을 강제 적용
# permissive - SELinux 정책을 적용하지 않지만 로그를 기록
# disabled - SELinux 비활성화
SELINUX=disabled
# SELinux 정책 유형 설정 (SELINUXTYPE=)
# targeted - 특정 프로세스만 보호
# minimum - 일부 선택된 프로세스만 보호
# mls - 다중 레벨 보안(MLS) 적용
SELINUXTYPE=targeted
SELinux 보안 정책
- Enforcing: SELinux 정책이 강제 적용되며, 위반하는 접근이 차단됩니다.
- Permissive: 정책 위반을 기록하지만 차단하지 않으며, 로그 분석을 통해 정책 설정을 조정하는 데 유용합니다.
- Disabled: SELinux가 비활성화되어 보안 정책이 적용되지 않습니다.
SELinux 정책 유형
SELinux는 보호할 프로세스의 범위에 따라 세 가지 정책 유형을 제공합니다.
- Targeted: 기본적으로 설정되는 정책으로, 주요 시스템 프로세스(예: Apache, SSH 등)만 보호합니다.
- Minimum: Targeted 정책을 기반으로 보호할 프로세스를 최소화한 버전이며, 사용자가 특정 보호 대상을 선택할 수 있습니다.
- MLS (Multi-Level Security): 다중 레벨 보안 모델을 적용하며, 높은 보안이 요구되는 환경에서 사용됩니다.
이러한 설정은 /etc/selinux/config 파일에서 직접 수정할 수 있으며, 적용을 위해서는 시스템 재부팅이 필요합니다.
SELinux 상태 설정
SELinux의 현재 상태를 확인하려면 다음 명령어를 사용할 수 있습니다:
getenforce # 현재 SELinux 모드 확인
sestatus # SELinux 상태 및 정책 유형 확인
2. 리눅스 방화벽
리눅스에서 네트워크 보안을 강화하기 위해 방화벽을 설정합니다. 대표적인 방화벽 도구로는 iptables와 firewalld가 있습니다.
방화벽은 네트워크 트래픽을 필터링하여 외부 공격을 차단합니다.
iptables는 리눅스에서 네트워크 패킷을 필터링하고 관리하는 방화벽 도구입니다.
2.1 iptables
iptables는 패킷 필터링 및 NAT(Network Address Translation) 기능을 제공하는 방화벽 도구로, 정적 규칙 기반의 네트워크 보안 관리를 제공합니다.
- 규칙 확인: iptables -L -v
- 포트 개방: iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- 규칙 저장: service iptables save
- iptables 재시작: systemctl restart iptables
2.2 firewalld
firewalld는 iptables보다 유연하며, 동적 방화벽 관리를 제공합니다.
- 방화벽 상태 확인: firewall-cmd --state
- 특정 포트 개방:
firewall-cmd --add-port=80/tcp --permanent firewall-cmd --reload
- 서비스별 허용:
firewall-cmd --add-service=http --permanent firewall-cmd --reload
- 방화벽 서비스 관리:
systemctl status firewalld # 방화벽 상태 확인
systemctl enable firewalld # 부팅 시 firewalld 자동 시작 설정
systemctl disable firewalld # 부팅 시 firewalld 자동 시작 해제
systemctl start firewalld # firewalld 시작
systemctl stop firewalld # firewalld 중지

3. SELinux와 방화벽의 관계
SELinux는 내부 시스템 보호를 위해 프로세스 및 파일 접근을 제어하고, 방화벽은 네트워크 트래픽을 필터링하여 외부 위협을 차단합니다.
- SELinux는 내부 시스템 보호에 중점을 두어 프로세스와 파일에 대한 접근을 제한하며, 시스템 내 권한 상승 공격을 방지합니다.
- 방화벽은 외부 트래픽을 필터링하여 불필요한 연결을 차단하고, 허용된 서비스만 접근할 수 있도록 제어합니다.
예를 들어, SELinux가 활성화된 상태에서 방화벽을 설정할 때 httpd 같은 서비스가 차단될 수 있습니다. 이 경우 SELinux 정책을 조정해야 합니다:
setsebool -P httpd_can_network_connect 1
서버 보안을 강화하기 위해 SELinux와 방화벽을 조합하여 운영하는 것이 중요합니다.
4. 결론
SELinux와 방화벽은 리눅스 시스템 보안을 강화하는 핵심 요소입니다. SELinux는 내부 프로세스와 파일 접근을 제한하여 시스템을 보호하며, 방화벽은 외부 트래픽을 필터링하여 네트워크 보안을 유지합니다. 서버 운영 시 SELinux와 방화벽을 함께 구성하면 더욱 안전한 환경을 구축할 수 있습니다.
'보안 엔지니어링 > 리눅스 관리' 카테고리의 다른 글
리눅스 마운트 옵션 : 성능 튜닝 방법 (0) | 2025.03.21 |
---|---|
Oracle Linux vs Rocky Linux: 차이점과 선택 가이드 (0) | 2025.02.12 |
리눅스 파일 시스템 완벽 가이드: 저널링부터 ext4까지 한눈에 (0) | 2025.02.11 |