27일차

장민우·2024년 5월 3일

방화벽(Firewalld)


  • 방화벽 : 비 인가된 외부의 접근을 차단하는 네트워크 보안 장비/소프트웨어

  • 방화벽 종류

    • 네트워크 방화벽
    • 호스트 방화벽
  • Firewalld 특징 : RHEL7부터 도입된 기본 방화벽 서비스로 채택된 방화벽 서비스. 네트워크 트래픽을 영역(Zone)으로 분류하여 방화벽 관리를 편리하게 할 수 있음.
    NetworkManager와 연동됨.

  • Firewalld 방화벽 설정 도구

    • firewall-cmd : CLI 인터페이스의 방화벽 설정 도구
    • firewall-config : GUI 인터페이스의 방화벽 설정 도구
  • Firewalld 방화벽 설정

    • Runtime Configuration : 현재 설정
    • Permanent Configuration : 영구적으로 저장되는 설정
  • 사전에 정의된 영역(Pre-defined Zone)

영역설명
trusted*           들어오는 모든 트래픽 허용
home나가는 트래픽과 관련이 없는 경우 트래픽을 거부함.
(ssh,mdns,ipp-client,dhcpv6-client는 허용)
internal나가는 트래픽과 관련이 없는 경우 트래픽을 거부함.
(ssh,mdns,ipp-client,dhcpv6-client는 허용)
work나가는 트래픽과 관련이 없는 경우 트래픽을 거부함.
(ssh,mdns,ipp-client,dhcpv6-client는 허용)
external나가는 트래픽과 관련이 없는 경우 트래픽을 거부함. 외부로의 연결, SSH서비스 허용, IP Masquerading 기능 활성화
publicDefault Zone. 시스템에 새로운 네트워크 카드 추가시 인터페이스 규칙이 추가됨. 나가는 트래픽과 관련이 없는 경우 트래픽을 거부함.(ssh, dhcpv6-client는 허용)
dmz나가는 트래픽과 관련이 없는 경우 트래픽을 거부함.(ssh는 허용)
block*나가는 트래픽과 관련이 없는 경우 모든 트래픽을 거부함.
drop*나가는 트래픽과 관련이 없는 경우 모든 트래픽을 Drop함.

drop을 제외한 나머지는 reject임.

  • firewalld 룰 정책 저장 경로
    • /usr/lib/firewalld : firewalld 설치시 영역 설정 기본값이 저장된 경로.
    • /etc/firewalld : 관리자가 설정한 방화벽 정책이 저장되는 경로.

  • firewalld의 룰 종류
    • 일반 룸(normal rule) : firewalld에서 간단히 정의할 수 있는 방화벽 룰. 특정 포트, 특정 서비스 허용.
    • 직접 룰 (direct rule) : iptables 룰 설정 방식으로 방화벽 룰을 정의할 수 있는 룰
    • 리 치 룰(rich rule) : firewalld에서 정교한 룰을 정의할 수 있는 방화벽 룰. 특정 포트, 특정 서비스를 허용/차단/로깅/포트포워딩 등

  • 방화벽 룰 확인(Runtime)
    $ firewall-cmd --list-all
  • 방화벽 룰 확인(Permanent)
    $ firewall-cmd --list-all --permanent
  • 방화벽에서 특정 서비스 허용 (Runtime)
    $firewall-cmd --add-service=SERVICE

  • 방화벽에서 특정 서비스 허용(Permanent)
    $firewall-cmd --add-service=SERVICE --permanent

  • 방화벽에서 특정 포트 허용 (Runtime)
    $firewall-cmd --add-port=PORT/PROTOCOL

  • 방화벽에서 특정 포트 허용 (Permanent)
    $firewall-cmd --add-port=PORT/PROTOCOL --permanent


리치규칙(Rich Rule)


rule
[family=ipv4|ipv6][source]
[destination]
service | port | protocol |icmp-block | icmp-type |masquerade | forward-port | source-port
[log|nflog][audit]
[accept | reject | drop | mark]

  • 기본 문법
속성설명문법
familyIPv4와 IPv6 결정family=[ipv4 |ipv6]
source출발지 주소 설정source address=IP/MASK
destination도착지 주소 설정detination address=IP/MASK
service서비스 규칙 설정service name="SERVICE"
port포트 설정port port="PORT" protocol="TCP|UDP"
protocol프로토콜 설정protocol value="PROTOCOL"
foward-port포트포워딩 설정forward-port port="PORT" protocol="TCP
logsyslog기록log PREFIX="TEXT" level="PRIORITY" [limit value="RATE/DURATION"]
auditaudit log 기록audit[limit value="RATE/DURATION"]
accept허용accept
reject거부(명시적 거절)reject
drop폐기drop

Rich Rule 추가
$firewall-cmd --add-rich-rule='RICH_RULE'

Rich Rule 제거
$firewall-cmd --remove-rich-rule='RICH_RULE'

Rich Rule 목록 확인
$firewall-cmd --list-rich-rules


SELinux


SELinux(Secure Enhanced Linux)
Linux의 보안을 강화하기 위한 Linux Kernel Module

  • Access Control

    • DAC(Discretionary Access Control)

      1. 객체를 소유한 소유자가 객체에 대한 접근 권한을 관리하는 접근 제어 방식
      2. SELinux를 사용하지 않는 Unix, Linux 시스템의 접근 제어 방식
    • MAC(Mandatory Access Control)

      1. 시스템의 관리자가 미리 정의된 보안 정책에 따라 접근 권한을 부여하는 접근 제어 방식
      2. SELinux가 동작하는 시스템의 경우 MAC 방식으로 접근 제어를 구현함. (Permission + 보안 정책)
    • RBAC(Role Based Access Control)

      1. 사용자의 역할에 따라 접근 권한을 부여하는 접근 제어 방식


  • 주체(Subject) : 객체(Object)에 접근하는 사용자(User), 프로세스(Process)

  • 객체(Object) : 주체(Subject)가 접근하는 시스템의 자원(파일, 디렉터리, 포트)

  • SELinux 작동 모드

    • Enforcing : 커널에 SELinux가 로드된 상태로 SELinux의 보안 정책을 강제하고 SELinux 보안 로그를 기록하는 모드,

    • Permissive : 커널에 SELinux가 로드된 상태로 SELinux의 보안 정책을 강제하지 않고 SELinux 보안 로그를 기록하는 모드

    • Disabled : 커널에 SELinux가 로드되지 않은 상태(완전한 비활성화)

  • 현재 SELinux 작동 모드 확인
    $ getenforce

  • SELinux 작동 모드 전환 (Runtime)
    $ setenforce 0 | 1
    $ setenforce Enforcing | Permissive

  • SELinux 설정 파일 : /etc/selinux/config

    • SELINUX : SELinux 기본 작동모드
    • SELINUXTYPE : SELinux 작동 방식
    • targeted : 특정 대상의 프로세스만 보호
    • minimum : 최소한의 프로세스만 보호 (targeted의 변형)
    • mls : 다중 단계 보호(Multi Level Security)
  • SELinux 비활성화 및 활성화(영구 설정)

    • RHEL8이전의 리눅스 : SELinux 설정 파일(/etc/selinux/config) 설정
      SELinux 보안 모듈 비활성화
      $ vim /etc/selinux/config
      SELINUX=Disabled

      SELinux 보안 모듈 활성화
      $ vim /etc/selinux/config
      SELINUX=Enforcing

      * 주의 : 위의 명령어 실행 후 재부팅 후 적용됨.

  • RHEL8 이후의 Linux의 SELinux 기본 작동 모드 설정

    • SELinux 보안 모듈 비활성화
      $ grubby --update-kernel ALL --args selinux=0

    • SELinux 보안 모듈 활성화
      $ grubby --update-kernel ALL --remove-args selinux

    * 주의 : 위의 명령어 실행 후 재부팅 후 적용됨.


SELinux 보안 컨텍스트


SELINUX_USER:SELINUX_ROLE:SELINUX_TYPE:LEVEL

  • SELINUX_USER : SELinux 보안 정책에서 사용하는 사용자
  • SELINUX_ROLE : SELinux 보안 정책에서 사용하는 역할(SELinux 사용자 권한 부여)
  • SELINUX_TYPE : SELinux 보안 정책에서 접근할 수 있는 객체를 결정하기 위해 사용하는 유형
  • SELINUX_LEVEL : SELinux 정책 유형이 mls인 경우 각 객체마다 가지는 보안 등급(민감도)를 정의

[user@host2 ~]$ id uid=1000(user) gid=1000(user) groups=1000(user),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[user@host2 ~]$ ls -lZ -rw-r--r--. 1 user user unconfined_u:object_r:user_home_t:s0 16 May 2 15:58 userfile1

[user@host2 ~]$ ps -efZ system_u:system_r:NetworkManager_t:s0 root 1864 1 0 14:57 ? 00:00:00 /usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -u -s


  • 파일의 초기 SELinux 보안 컨텍스트
    일반적으로 파일을 만드는 상위 디렉터리의 컨텍스트에 따라 초기 컨텍스트가 결정됨.

  • 파일의 보안 컨테스트 변경(임시)
    $chcon -t TYPE_CONTEXT FILE

  • 파일의 보안 컨텍스트 변경(영구)
    (1) SELinux 보안 컨텍스트 정책 선언
    $ semanage fcontext -a -t TYPE PATH
    (2) 파일에 SELinux 보안 컨텍스트 반영
    $ restorecon -v FILE

  • SELinux 보안 컨텍스트 정책 목록 확인
    $ semanage fcontext -l

  • SELinux 보안 컨텍스트 정책 선언
    $ semanage fcontext -a -t TYPE PATH

  • SELinux 보안 컨텍스트 정책 수정
    $ semanage fcontext -m -t TYPE PATH

  • SELinux 보안 컨텍스트 정책
    $ semanage fcontext -d -t TYPE PATH

파일 경로 지정시 디렉터리 및 디렉터리 하위 파일에 대해 정책 선언
예) /test
"/test(/.*)?"

파일에 SELinux 보안 컨텍스트 반영
$ restorecon -v FILE
-F : force
-R : recursive

SELinux 부울


SELinux에서 사용자 또는 프로세스가 시스템에서 어떤 행위를 할 수 있도록 허용/차단하는 정책을 설정하는 SELinux 객체
SELinux 부울은 정책에 대한 On/Off 스위치와 같은 역할을 수행함.

SELinux 부울 확인
$ getsebool -a
$ getsebool SELINUX_BOOL

$ semanage boolean -l

현재 SELinux 부울 설정
$ setsebool SELINUX_BOOL VALUE

영구 SELinux 부울 영구 설정
$ setsebool -P SELINUX_BOOL VALUE

현재 SELinux 부울 설정
$ semanage boolean -m --on SELNUX_BOOL
$ semanage boolean -m --off SELINUX_BOOL


SELinux 포트 레이블


SELinux에서 네트워크 프로토콜, 애플리케이션이 사용하는 기본 포트 번호에 대한 보안 레이블
SELinux가 실행 중인 시스템에서는 이미 정해진 포트 이외의 다른 포트 사용시 기본적으로 해당 포트를 통한 통신을 차단함

  • SELinux 포트 레이블 목록 확인
    $ semanage port -l

  • SELinux 포트 레이블 추가
    $ semanage port -a -t SELINUX_PORT_TYPE -p PROTOCOL PORT_NUMBER

$ semange port -a -t "http_port_t" -p tcp 10000
$ semange port -a -t "http_port_t" -p udp 10000

  • SELinux 포트 레이블 수정
    $ semanage port -m -t SELINUX_PORT_TYPE -p PROTOCOL PORT_NUMBER

  • SELinux 포트 레이블 제거
    $ semanage port -d -t SELINux_PORT_TYPE -p PROTOCOL PORT_NUBMER

0개의 댓글