25/09/01 리눅스

344th·2025년 12월 11일

AWS AI

목록 보기
10/48

실습 7

"manager1" 사용자가 패스워드 없이 모든 sudo 명령을 실행할 수 있도록 "/etc/sudoers.d/managers" 파일을 생성하여 설정하세요.

# "/etc/sudoers.d/managers" 파일을 생성하여 설정
**$ sudo vi /etc/sudoers.d/managers**
manager1 ALL=(ALL) NOPASSWD
# 권한 설정 필수!!
**$ sudo chmod 440 /etc/sudoers.d/managers**
# sudo -u manager1 로 manager1 유저로 들어가서 sudo whoami 명령 사용
# sudo 로 root 권한을 빌려썼으므로 root 가 나옴
**$ sudo -u manager1 sudo whoami**
root
**$ sudo -u manager1 whoami**
manager1

실습 8

현재 시스템에 생성된 모든 사용자 중 UID가 1000 이상인 사용자들의 정보를 확인하는 명령어를 실행하세요.

# -F: == : 를 구분자로 사용하겠다
# : 로 구분한 세번째 필드가 1000보다 크면 출력
**$ awk -F: '$3 >= 1000' /etc/passwd**
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
vagrant:x:1000:1000::/home/vagrant:/bin/bash
manager1:x:1001:1001::/home/managers/manager1:/bin/bash
manager2:x:1002:1001::/home/managers/manager2:/bin/bash
developser:x:1003:1001::/home/developser:/bin/bash
guest123:x:1004:1004::/home/guest123:/sbin/nologin
student_a:x:1005:1005::/home/student_a:/bin/bash
student_b:x:1006:1005::/home/student_b:/bin/bash
student_c:x:1007:1005::/home/student_c:/bin/bash
intern:x:1008:1005::/home/intern:/bin/bash
testuser:x:1009:1009::/home/testuser:/bin/bash

# 그중에서 첫번째 필드만 출력
**$ awk -F: '$3 >= 1000 {print $1}' /etc/passwd**
nobody
vagrant
manager1
manager2
developser
guest123
student_a
student_b
student_c
intern
testuser

방화벽 관리

방화벽

: 내부의 트래픽을 모니터링하고 사전에 정의된 보안 규칙에 따라 특정 트래픽을 허용하거나 차단하는 시스템

: 외부의 네트워크에서 내부의 시스템으로 접근하는 네트워크 패킷을 차단하는 서비스

→ 필요한 포트만 열어둠

방화벽이 없다면?

  • 접근통제가 되지 않아 서비스에 과부하 발생
  • 공격 의도를 가진 인가되지 않은 접근으로 인해 시스템 마비
  • 중요한 정보 유출

iptables vs. firewalld

iptables

: 오랫동안 리눅스의 방화벽 시스템으로 이용됨

: 실질적으로 네트워크 패킷을 필터링하는 것은 Netfilter

  • 단점:
    • 방화벽 규칙을 변경할 때마다 서비스를 중지 후 재시작해야 함 → 번거로움 → 오픈스택이나 가상화와 같은 환경에서는 제약이 따름

firewalld

: systemd 와 함께 도입된 방화벽 서비스

: iptables 의 한계와 단점을 보완하는 방화벽 서비스

  • 장점:
    • 동적으로 방화벽 설정 변경 가능
  • 특징
    • XML 파일 형태로 보관
    • Runtime(실행 중) 및 Permanent(영구) 설정 → 동적으로 방화벽 설정 변경 가능 → 시스템을 재시작하지 않고도 설정 변경 및 적용 가능
    • 사전에 정의된 영역(Pre-defined Zone)
    • 사전에 정의된 서비스(Pre-defined Service) 포트 22 = ssh 80 = http 443 = https
    • D-Bus 사용 : 애플리케이션이 방화벽 설정을 동적으로 변경할 수 있음 : 서버 열 때 3000, 8080 포트 열리는 게 D-Bus 사용 : 컨테이너와 앱을 매핑?할 때 사용?

실행중(runtime)설정과 영구(permanent)설정

실행중(runtime)설정

: 시스템이 운영 중인 상태일 때 서비스 재시작을 하지 않아도 적용되는 설정

: 이 설정은 파일에 저장되지 않으므로 시스템이 재부팅되거나 firewalld.service가 재시작되면 삭제됨

영구설정

: 방화벽 규칙을 설정 파일에 저장하여 시스템이 부팅되거나 혹은 서비스가 재시작되어도 방화벽 규칙을 유지시켜주는 설정

: 영구설정을 변경한 후 변경된 내용을 실행중인 환경에 적용하기 위해서는 서비스가 다시 읽어지거나(reload) 또는 재시작(restart) 되어야 실제 규칙에 반영됨

사전에 정의된 영역(Pre-defined Zone)

: 네트워크 연결에 대한 신뢰도를 정의한 것

: 패킷을 카테고리처럼 분류해서 처리하는 메커니즘

firewalld 동작 원리

  • 사전에 정의된 영역이 제공
  • 활성화된 영역(Active Zone)만 사용
  • 활성화 영역의 조건
    • 출발지의 주소(Source Address) 규칙 존재
    • 연결되어 있는 인터페이스 존재
  • /etc/firewalld/services
    • firewalld 서비스의 설정을 변경하지 않은 처음 상태에는 해당 디렉토리에 public.xml 만 존재 → 따라서 처음에는 public 영역만 활성화된 영역

동작 원리

  1. 패킷의 소스 주소를 확인하여, 해당 주소가 할당된 영역이 있는지 확인
  2. 소스 주소가 맞는 영역이 없으면, 패킷이 들어온 인터페이스가 할당된 영역이 있는지 확인
  3. 할당된 영역이 없으면 기본영역(일반적으로 ‘public’)의 규칙을 적용

firewall-cmd

# **firewalld.service** 의 상태 확인
**$ sudo systemctl status firewalld.service**
● firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; pr>
     Active: active (running) since Mon 2025-09-01 01:45:47 UTC; 42min ago
       Docs: man:firewalld(1)
   Main PID: 599 (firewalld)
      Tasks: 2 (limit: 5769)
     Memory: 44.6M
        CPU: 1.266s
     CGroup: /system.slice/firewalld.service
             └─599 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid

Sep 01 01:45:46 client systemd[1]: Starting firewalld - dynamic firewall da>
Sep 01 01:45:47 client systemd[1]: Started firewalld - dynamic firewall dae>
lines 1-13/13 (END)

# firewall-cmd 의 실행 상태 확인(돌아가고 있는지)
**$ sudo firewall-cmd --state**
running

# 활성화된 영역 확인
**$ sudo firewall-cmd --get-active-zones**
public
  interfaces: enp0s3 enp0s8
  
# 기본 영역(default zone) 확인
**$ firewall-cmd --get-default-zone**
public

# 기본 영역에 설정된 규칙 확인
**$ sudo firewall-cmd --list-all --zone=public**
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
# 기본영역 규칙에 http 서비스 규칙 추가
**$ sudo firewall-cmd --zone=public --add-service=http**
success

# 기본 영역 규칙에 http 서비스 추가됐음을 확인 가능
**$ sudo firewall-cmd --list-all --zone=public**
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: cockpit dhcpv6-client http ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

# 기본 영역에 http 서비스 규칙 추가를 영구적으로 설정
**$ sudo firewall-cmd --zone=public --add-service=http --permanent**
success
# 영구설정 적용을 위해 리로드
**$ sudo firewall-cmd --reload**
success

# https 를 기본영역 규칙에 추가
**$ sudo firewall-cmd --add-service=https**
success
**$ sudo firewall-cmd --list-all --zone=public**
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: cockpit dhcpv6-client http https ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
# 기본 영역 규칙에서 http 서비스 삭제
**$ sudo firewall-cmd --remove-service=http**
success
# 삭제됐음을 확인 가능
**$ sudo firewall-cmd --list-all --zone=public**
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: cockpit dhcpv6-client https ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
  
# 그러나 아까 추가할 때 영구설정으로 추가했으므로 리로드하면
**$ sudo firewall-cmd --reload**
success
# 다시 추가돼있는 걸 확인 가능
**$ sudo firewall-cmd --list-all --zone=public**
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: cockpit dhcpv6-client http ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
# 그러므로 제거도 영구설정하면 됨
**$ sudo firewall-cmd --remove-service=http --permanent**
success
**$ sudo firewall-cmd --reload**
success
**$ sudo firewall-cmd --list-all --zone=public**
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
# 포트 추가
**$ sudo firewall-cmd --add-port=443/tcp**
success
# 포트 규칙 추가됐음을 확인
**$ sudo firewall-cmd --list-ports**
443/tcp

# 영구설정으로 포트 추가
**$ sudo firewall-cmd --add-port=443/tcp --permanent**
success
# 영구설정 변경사항 적용을 위해 리로드
**$ sudo firewall-cmd --reload**
success

# 기본 영역에 포트 규칙 추가됐음을 확인 가능
**$ sudo firewall-cmd --list-all --zone=public**
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: cockpit dhcpv6-client ssh
  **ports: 443/tcp**
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
# httpd 패키지 설치
**$ sudo dnf install httpd -y**

# 서비스 시작
**$ sudo systemctl start httpd**

**$ sudo vi /var/www/html/index.html
#** <h1>방화벽 테스트</h1>

# Apache 웹 서버가 돌고 있기 때문에 응답 돌아옴
**$ curl localhost**
<h1>방화벽 테스트</h1>

# stop 하면 fail
**$ sudo systemctl stop httpd**
**$ curl localhost**
curl: (7) Failed to connect to localhost port 80: Connection refused

**$ ip a
...**
    inet **192.168.56.77/24** brd 192.168.56.255 scope global noprefixroute enp0s8
...

**$ sudo firewall-cmd --list-services**
cockpit dhcpv6-client ssh
**$ sudo firewall-cmd --list-ports**
443/tcp
**$ sudo firewall-cmd --add-service=http**
success
**$ sudo firewall-cmd --list-services**
cockpit dhcpv6-client **http** ssh

→ 기본 영역에 http 서비스 규칙을 추가함으로써 해당 영역(현재 네트워크 인터페이스 enp0s3)에서 내부로의 진입 허용


네트워크

유니캐스트

: 네트워크에서 가장 일반적으로 사용되는 방식

: 서버와 클라이언트 간의 일대일(1:1) 통신방식을 말한다

  • 데이터는 목적지 주소를 가진 단일 수신자에게 보내진다
  • 자신의 MAC 주소와 목적지 MAC 주소가 동일하다면 전송된 데이터를 수신하고, 일치하지 않으면 해당 프레임을 버린다

멀티캐스트

: 그룹 내의 여러 수신자에게 동시에 데이터를 전송하는 방식

  • 유니캐스트처럼 반복해서 보낼 필요가 없고, …

브로드캐스트

: LAN 네트워크 상이 모든 수신자에게 데이터를 전송하는 방식

: 서버와 클라이언트 간의 일대 모두 통신방식

  • 브로트캐스트 주소는 FF:FF:FF:FF:FF:FF 로 미리 정해져 있다
  • 서브넷팅을 하는 이유 중 큰 부분을 차지함
    • 브로드캐스트 영역을 정하기 위해

프로토콜

: 컴퓨터 및 네트워크 간에 통신하기 위해 정의된 규칙과 규약의 집합

: 데이터 전송, 통신의 규칙, 에러 처리, 보안 등의 다양한 측면을 다루며, 컴퓨터 네트워크, 웹 통신, 인터넷 프로토콜, 응용 프로그램 간 통신 등의 환경에서 사용됨

  • 문법(Syntax), 의미(Semantic), 타이밍(Timing) 3가지 구성요소로 이루어짐

OSI 7 계층

  • 7 application layer
  • 6 presentation layer
  • 5 session layer
  • 4 trasnport layer
    • TCP, UDP
    • 포트
    • 데이터의 신뢰성을 보장
  • 3 network layer
    • IP 주소, 라우팅
    • 패킷이 최종 목적지까지 도달할 수 있도록 경로 설정
  • 2 data link layer
    • MAC 주소
  • 1 physical layer
    • 전선, 하드웨어 장비

아래 3계층은 신뢰성 보장 x?

TCP/IP 모델

→ osi 7계층은 개념적인 느낌이고, 실제로 많이 쓰이는 건 이거

캡슐화(Encapsulation)

: 데이터의 앞부분에 전송하는 데 필요한 정보를 붙여서 다음 계층으로 보내는 과정

역캡슐화

: 데이터를 받는 과정에서 헤더를 하나씩 제거하는 과정

NIC(네트워크 인터페이스 카드)

== LAN 카드

: 네트워크와 컴퓨터 사이의 물리적 연결을 담당하는 장치로, 네트워크에서 데이터를 전송하고 수신하는 역할을 수행한다

허브

: 여러 컴퓨터 또는 네트워크 장치를 연결하여 네트워크를 형성하는데 사용됨

: 데이터를 받으면 그 데이터를 모든 연결된 장치로 브로드캐스트하여 전송

: 수신한 신호를 모든 포트로 그대로 송출해 네트워크에 연결된 모든 단말이 동시에 경쟁하게 만들기 때문에, 전체 네트워크 성능을 저하시킨다. 이로 인해 현재는 거의 사용되지 않는다

허브 vs. 스위치

스위치는 허브와 달리 데이터 충돌이 발생하지 않음

이는 스위치가 각 포트를 독립적인 충돌 도메인으로 관리하며, 한 번에 여러 통신을 동시에 처리할 수 있기 때문이다

스위치는 모두에게 보내지 않음. 누가 누군지 알고 있음.

MAC 주소 테이블

: 스위치는 연결된 장치들의 MAC 주소를 MAC 주소 테이블에 저장한다

: 이 테이블은 스위치가 프레임을 더 빠르고 효율적으로 전달할 수 있게 돕는다

: 메모리에 저장됨(휘발성)

플러딩(Flooding)

스위치는 처음 부팅할 때 네트워크 관련 정보가 없다. 이 상태에서 패킷이 들어오면 스위치는 허브와 같이 모든 포트로 패킷을 전송한다

→ 이를 플러딩이라고 한다

  • 스위치는 LAN 에서 동작하므로, 자신이 정보를 가지고 있지 않더라도 어딘가에 장비가 있을 수 있다고 가정하고 이와 같은 작업을 수행한다

어드레스 러닝(Address Learning)

: 패킷이 특정 포트에 들어오면 스위치는 해당 패킷의 출발지 MAC 주소와 포트 번호를 MAC 주소 테이블에 기록한다

포워드/필터링

: 패킷이 스위치에 들어온 경우, 스위치는 도착지 MAC 주소를 확인하고 자신이 갖고 있는 MAC 테이블과 비교한다

: 매치되는 정보가 있으면 해당 포트로 패킷을 전달(Forwarding)하고 다른 포트로는 패킷을 보내지 않는다(Filtering).


네트워크 티밍

일반적인 네트워크 구성은 하나의 인터페이스에 하나의 ip 주소를 설정

티밍

: 여러 개의 물리 인터페이스를 묶어 하나의 논리 인터페이스로 구성하고,

: 이 논리 인터페이스에 IP 주소를 부여하는 방식

why?

: 대역폭을 늘려 데이터 처리량을 높여주거나,

: 부하분산을 통해 효율성을 높이고

: 트래픽 처리 속도를 향상시킬 수 있고 ← 병렬 처리 가능

: 네트워크 인터페이스에 장애가 발생했을 때 좀 더 안전한 네트워크 구성을 위해 설정

⇒ 1G 랜카드 두개를 논리 인터페이스로 묶으면 2G 의 속도를 낼 수 있음

불리는 여러 이름

  • 포트 트렁킹(Port Trunking)
  • 링크 집계(Link Aggregation)
  • 채널 본딩(Channel Bonding)
  • 이더넷 본딩(Ethernet Bonding)
  • NIC 티밍(NIC Teaming)
  • 등으로 불림 ⇒ 다 동일한 개념
# -*- mode: ruby -*-
# vi: set ft=ruby :
vm_image = "nobreak-labs/rocky-9"
vm_subnet = "192.168.56."

Vagrant.configure("2") do |config|
  config.vm.synced_folder ".", "/vagrant", disabled: true

  config.vm.define "teaming" do |node|
    node.vm.box = vm_image
    node.vm.provider "virtualbox" do |vb|
      vb.name = "teaming"
      vb.cpus = 2
      vb.memory = 1024
    end

    node.vm.network "private_network", ip: vm_subnet + "21", nic_type: "virtio"
    node.vm.network "private_network", ip: vm_subnet + "22", nic_type: "virtio"
    node.vm.hostname = "teaming"
  end
end
**$ ip a**
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: **enp0s3**: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:ed:ab:98 brd ff:ff:ff:ff:ff:ff
    inet **10.0.2.15/24** brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
       valid_lft 86247sec preferred_lft 86247sec
    inet6 fd17:625c:f037:2:a00:27ff:feed:ab98/64 scope global dynamic mngtmpaddr
       valid_lft 86249sec preferred_lft 14249sec
    inet6 fe80::a00:27ff:feed:ab98/64 scope link
       valid_lft forever preferred_lft forever
3: **enp0s8**: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:8d:78:34 brd ff:ff:ff:ff:ff:ff
    inet **192.168.56.21/24** brd 192.168.56.255 scope global noprefixroute enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe8d:7834/64 scope link
       valid_lft forever preferred_lft forever
4: **enp0s9**: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:46:b4:a0 brd ff:ff:ff:ff:ff:ff
    inet **192.168.56.22/24** brd 192.168.56.255 scope global noprefixroute enp0s9
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe46:b4a0/64 scope link
       valid_lft forever preferred_lft forever

티밍의 구성요소

  • 팀 인터페이스 : 가상의 논리적 인터페이스
    • 외부에서는 하나의 인터페이스로 보이도록 함
    • 데이터의 처리 방식과 통신에 사용할 IP 주소와 같은 논리적인 구성이 포함
  • 포트 인터페이스 == 슬레이브 : 물리적 인터페이스 : 팀 인터페이스에 연결됨 : 실질적으로 데이터가 이동하는 통로 역할을 수행

러너

: 데이터(트래픽) 처리 방식. 규칙.

: 포트 인터페이스를 어떤 방식으로 사용할지 결정하는 규칙

  • broadcast : 모든 포트로 데이터 전송 : 가장 간단한 동작 방식
    • 장점: 한쪽에 장애가 생겨도 네트워크 송수신에 문제 발생 x
    • 단점: 대역폭 증가 효과 X
  • roundrobin : 각 포트로 순차적 데이터 전송 : 부하분산을 위한 연결 방식 중 하나로 하나의 팀 인터페이스에 연결된 여러 포트 인터페이스들이 한 번씩 순차적으로 데이터를 전송하는 방식 : 분배 기준 = 전송 횟수
    • 장점: 부하분산 효과 O
    • 단점: 패킷의 크기를 고려 x, 효율적인 분배 x
  • loadbalance : 부하분산 방식의 패킷 전송 : 분배 기준 = 데이터 전송량
    • 장점: 가장 효율적인 부하 분산
    • 단점: 컴퓨팅 리소스를 많이 잡아먹음.
  • activebackup : 장애조치를 위한 설정 : 하나의 포트 인터페이스만 지속적으로 사용 : 해당 인터페이스에 문제가 발생하면 대기 상태에 있던 다른 포트 인터페이스가 즉시 활성화되고 작업이 재개되는 방식
    • active standby
    • 장점: 간단함. 안정적임.
    • 단점: 대역폭 증가 효과 x
  • lacp

티밍 vs. 본딩

본딩

  • 커널 레벨에서의 드라이버 제어
  • 예전

티밍

  • 사용자 레벨에서의 동작 제어와 설정
  • 최근

네트워크 티밍 구성

생성

# 현재 네트워크 장치 목록 확인
**$ nmcli device status**
DEVICE  TYPE      STATE                   CONNECTION
enp0s3  ethernet  connected               enp0s3
enp0s8  ethernet  connected               System enp0s8
enp0s9  ethernet  connected               System enp0s9
lo      loopback  connected (externally)  lo

# 팀 인터페이스 생성
**$ sudo nmcli connection add type team ifname team0 
con-name cli-team ip4 192.168.56.100/24 gw4 192.168.56.1 
config '{"runner": {"name": "broadcast"}}'**
Connection 'cli-team' (49f77783-227b-4424-8768-bc717055c081) successfully added.
  • type team : 이전에는 ethernet 을 주로 사용했지만 팀 인터페이스에서는 team 사용 *type
    • ethernet
    • wifi
    • bridge
  • ifname : 인터페이스 이름을 지정해주는 항목 : 일반적으로 실제 사용할 물리적 인터페이스를 지정 : 팀 인터페이스를 생성하는 경우에는 논리적인 가상의 인터페이스 사용
  • con-name : 연결 이름을 지정해주는 항목 : 생략 가능하지만 설정 내용을 수정하거나 확인할 때 사용하므로 지정하는 것을 권장함
  • ip4 , gw4== ipv4.addresses , ipv4.gateway
  • config : 티밍에서 사용할 러너를 지정하는 항목 : JSON 문법
# 생성된 팀 인터페이스 확인
**$ nmcli device status**
DEVICE  TYPE      STATE                   CONNECTION
enp0s3  ethernet  connected               enp0s3
enp0s8  ethernet  connected               System enp0s8
enp0s9  ethernet  connected               System enp0s9
**team0   team      connected               cli-team**
lo      loopback  connected (externally)  lo
**$ ip addr show team0**
5: team0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 16:b8:76:9b:b5:65 brd ff:ff:ff:ff:ff:ff
    inet **192.168.56.100/24** brd 192.168.56.255 scope global noprefixroute team0
       valid_lft forever preferred_lft forever
**$ nmcli con show cli-team  
...**
team.config:                            {"runner": {"name": "broadcast"}}
...
# 포트 인터페이스(팀 구성원) 생성
# 팀 인터페이스에 연결될 물리적 인터페이스

# 하나의 네트워크 인터페이스에는 하나의 IP주소만 들어갈 수 있으므로
# 현재 활성화돼있는 사용할 인터페이스를 정리해줘야 함
**$ nmcli con show --active**
NAME           UUID                                  TYPE      DEVICE
enp0s3         53663641-fc96-4c9b-a390-fdc1aa6967cd  ethernet  enp0s3
**System enp0s8  00cb8299-feb9-55b6-a378-3fdc720e0bc6  ethernet  enp0s8
System enp0s9  93d13955-e9e2-a6bd-df73-12e3c747f122  ethernet  enp0s9**
cli-team       49f77783-227b-4424-8768-bc717055c081  team      team0
lo             f38351d6-6935-4f09-a541-8b95b9665795  loopback  lo

**$ sudo nmcli con down "System enp0s8"**
Connection 'System enp0s8' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
**$ sudo nmcli con down "System enp0s9"**
Connection 'System enp0s9' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
**$ nmcli con show --active**
NAME      UUID                                  TYPE      DEVICE
enp0s3    53663641-fc96-4c9b-a390-fdc1aa6967cd  ethernet  enp0s3
cli-team  49f77783-227b-4424-8768-bc717055c081  team      team0
lo        f38351d6-6935-4f09-a541-8b95b9665795  loopback  lo

# 사전 준비 완료
# 포트 인터페이스 생성
**$ sudo nmcli con add type team-slave con-name cli-port1 
ifname enp0s8 master team0**
Connection 'cli-port1' (f349b831-b17a-4dd0-bc91-dbd690012c7d) successfully added.
**$ sudo nmcli con add type team-slave con-name cli-port2 
ifname enp0s9 master team0**
Connection 'cli-port2' (7c5c9760-c551-4bf1-96e7-bd08db89dee3) successfully added.

**$ nmcli con show**
NAME           UUID                                  TYPE      DEVICE
enp0s3         53663641-fc96-4c9b-a390-fdc1aa6967cd  ethernet  enp0s3
**cli-team       49f77783-227b-4424-8768-bc717055c081  team      team0
cli-port1      f349b831-b17a-4dd0-bc91-dbd690012c7d  ethernet  enp0s8
cli-port2      7c5c9760-c551-4bf1-96e7-bd08db89dee3  ethernet  enp0s9**
lo             f38351d6-6935-4f09-a541-8b95b9665795  loopback  lo
System enp0s8  00cb8299-feb9-55b6-a378-3fdc720e0bc6  ethernet  --
System enp0s9  93d13955-e9e2-a6bd-df73-12e3c747f122  ethernet  --
  • type team-slave : 팀 구성원으로 타입 지정
  • con-name : 연결 이름은 팀 인터페이스와 포트 인터페이스가 별도로 설정되기 때문에 구분 지음
  • ifname : 실제 존재하는 물리 인터페이스 사용
  • master : 어떤 팀에 속할지를 옵션할지를 지정 : 포트 인터페이스는 팀 인터페이스에 종속되므로 어떤 팀 인터페이스에 포함되는지를 명시해야 함 : 하나의 포트 인터페이스는 하나의 팀 인터페이스에만 포함될 수 있음
# 내 윈도우 컴퓨터에서 가상머신의 팀 인터페이스에 ping 을 보냄
# 정상적으로 작동
# 우리가 설정한 팀 인터페이스(가상 인터페이스)가
# 정상적으로 작동함을 알 수 있음
**PS C:\Users\DS 14> ping 192.168.56.100**

Ping 192.168.56.100 32바이트 데이터 사용:
192.168.56.100의 응답: 바이트=32 시간<1ms TTL=64
192.168.56.100의 응답: 바이트=32 시간<1ms TTL=64
192.168.56.100의 응답: 바이트=32 시간<1ms TTL=64
192.168.56.100의 응답: 바이트=32 시간<1ms TTL=64

192.168.56.100에 대한 Ping 통계:
    패킷: 보냄 = 4, 받음 = 4, 손실 = 0 (0% 손실),
왕복 시간(밀리초):
    최소 = 0ms, 최대 = 0ms, 평균 = 0ms

→ 원래는 하나는 정상적으로 패킷 응답, 하나는 DUP! 가 반복적으로 떠야 함

→ 팀 인터페이스에 있는 두개의 포트 인터페이스(s8, s9)가 똑같은 응답을 보내기 때문에 중복되는 응답(DUP!) 가 뜨는 것

설정 수정

**$ sudo nmcli connection mod cli-team ipv4.addresses 192.168.56.110/24
$ nmcli con show cli-team | grep address**
ipv4.addresses:                         192.168.56.110/24
ipv6.addresses:                         --
**$ nmcli con show cli-team | grep team.config**
team.config:                            {"runner": {"name": "**broadcast**"}}

# 러너 수정
**$ sudo nmcli connection modify cli-team team.config '{"runner":
{"name": "activebackup"}}'**

# 바뀐 거 확인 가능
**$ nmcli con show cli-team | grep team.config**
team.config:                            {"runner": {"name": "**activebackup**"}}
# 팀 인터페이스 비활성화
**$ sudo nmcli con down cli-team**
Connection 'cli-team' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
# 다시 활성화
**$ sudo nmcli con up cli-team**
Connection successfully activated (controller waiting for ports) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8)
# 팀 인터페이스만 활성화한다고 포트 인터페이스도 함께 활성화되지 않음
$ nmcli con show
NAME           UUID                                  TYPE      DEVICE
**enp0s3         53663641-fc96-4c9b-a390-fdc1aa6967cd  ethernet  enp0s3
cli-team       49f77783-227b-4424-8768-bc717055c081  team      team0**
lo             f38351d6-6935-4f09-a541-8b95b9665795  loopback  lo
**cli-port1      f349b831-b17a-4dd0-bc91-dbd690012c7d  ethernet  --
cli-port2      7c5c9760-c551-4bf1-96e7-bd08db89dee3  ethernet  --**
System enp0s8  00cb8299-feb9-55b6-a378-3fdc720e0bc6  ethernet  --
System enp0s9  93d13955-e9e2-a6bd-df73-12e3c747f122  ethernet  --

# 포트 인터페이스들 활성화
**$ sudo nmcli con up cli-port1**
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)
**$ sudo nmcli con up cli-port2**
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)
**$ nmcli con show**
NAME           UUID                                  TYPE      DEVICE
**enp0s3         53663641-fc96-4c9b-a390-fdc1aa6967cd  ethernet  enp0s3
cli-team       49f77783-227b-4424-8768-bc717055c081  team      team0
cli-port1      f349b831-b17a-4dd0-bc91-dbd690012c7d  ethernet  enp0s8
cli-port2      7c5c9760-c551-4bf1-96e7-bd08db89dee3  ethernet  enp0s9**
lo             f38351d6-6935-4f09-a541-8b95b9665795  loopback  lo
System enp0s8  00cb8299-feb9-55b6-a378-3fdc720e0bc6  ethernet  --
System enp0s9  93d13955-e9e2-a6bd-df73-12e3c747f122  ethernet  --

# 하나의 포트 인터페이스만 비활성화 가능
# 팀 인터페이스와 상관 x
**$ sudo nmcli con down cli-port1**
Connection 'cli-port1' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)

**$ nmcli con show**
NAME           UUID                                  TYPE      DEVICE
**enp0s3         53663641-fc96-4c9b-a390-fdc1aa6967cd  ethernet  enp0s3
cli-team       49f77783-227b-4424-8768-bc717055c081  team      team0
cli-port2      7c5c9760-c551-4bf1-96e7-bd08db89dee3  ethernet  enp0s9**
lo             f38351d6-6935-4f09-a541-8b95b9665795  loopback  lo
cli-port1      f349b831-b17a-4dd0-bc91-dbd690012c7d  ethernet  --
System enp0s8  00cb8299-feb9-55b6-a378-3fdc720e0bc6  ethernet  --
System enp0s9  93d13955-e9e2-a6bd-df73-12e3c747f122  ethernet  --

리눅스 보안-SELinux

  • 기업에서 잘 사용되지 않음
  • 보안적 측면에서 매우 우수하지만, 복잡성이 매우 올라감
  • 보안이 매우 중요한 국방, 은행권 정도에서나 사용

SELinux

: 커널에 통합되어 있는 보안 모듈

: 강제 접근 제어 모델인 MAC 모델을 사용하여 시스템의 보안을 강화하는 리눅스 커널 모듈

  • 레드햇 계열에서만 사용 가능한 것 x
  • 우분투에서도 설치해서 사용 가능
  • 우분투에서는 기본적으로 AppArmor 라는 보안 모듈을 사용

누가 무엇에 접근할 수 있는가?

접근 제어 모델

DAC(Discretionary Access Control) 모델

: 우리가 일반적으로 사용한 rwx 가 여기에 해당

: 사용자가 임의로 객체에게 권한을 부여하여 객체에 대한 접근을 제어함

MAC(Mandatory Access Control) 모델

: SELinux 에서 사용하는 모델

: 강제 접근 제어 모델

  1. 관리자가 설정한 정책에 따라 접근 제어
  2. 프로세스가 필요한 최소한의 권한만 가지도록 함으로써 보안을 강화

RBAC(Role Based Access Control) 모델

: 사용자의 역할에 따라 접근 권한이 결정됨

: SELinux 도 해당 모델을 부분적으로 사용

SELinux 동작 원리

: 모든 것이 기본적으로 차단됨

: 컨텍스트 기반 접근 제어

: 최소 권한 원칙

profile
새싹 개발자

0개의 댓글