CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
리눅스마스터 1급 · 1급리눅스마스터 1급
  • Week 1
    • 1.운영체제와 리눅스: 커널이 하는 일
    • 2.자유 소프트웨어와 배포판: 라이선스가 만든 생태계
    • 3.설치와 부팅: 전원을 켜는 순간부터
    • 4.파일시스템 구조와 파일의 종류: 모든 것은 파일이다
    • 5.Week 1 종합 복습: 개념을 꿰뚫는 시간
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
  • Week 12
  • Week 13
    • 1.네트워크 설정·진단 작업형: 손으로 IP를 세우고 길을 뚫는다
    • 2.서비스 설정파일 단답: 지시어 하나가 합격을 가른다
    • 3.셸 스크립트 작성형: 조건·반복·함수로 실무를 자동화한다
    • 4.보안·방화벽·로그 작업형: 규칙을 쓰고 컨텍스트를 바로잡는다
    • 5.네트워크·서비스 작업형 모의 + 오답노트
  • Week 14
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 1급/Week 13/Day 4

기준: 리눅스마스터 1급 출제 기준·오류 제보

리눅스마스터 1급· AssociateWeek 13 · Day 4읽기 약 9분
핵심 정리
  • 보안 작업형은 규칙과 설정을 직접 작성하게 한다. 방향·타깃·zone·type·facility.priority가 한 글자도 틀리면 안 된다.
  • iptables는 테이블→체인→규칙. 규칙은 위→아래 첫 매칭에서 멈추므로 -A(끝)와 -I(앞)의 위치가 결과를 바꾼다.
  • 원격 작업의 철칙: -P INPUT DROP 전에 SSH(22) 허용 규칙을 먼저 넣는다. 안 그러면 자기 자신이 끊긴다.
  • 휘발 방지: iptables는 service iptables save, firewalld는 --permanent + --reload.
  • SELinux는 컨텍스트의 type이 핵심. chcon(임시) / restorecon(정책 기준 복원) / semanage fcontext(영구 등록)를 구분한다.
  • rsyslog는 facility.priority로 분배하며 지정 수준 이상을 기록한다. .none은 제외, .=는 그 수준만.
  • logrotate는 주기 + rotate N + compress가 뼈대. TCP Wrapper는 allow 우선, 둘 다 없으면 허용이다.

Day 4 - 보안·방화벽·로그 작업형: 규칙을 쓰고 컨텍스트를 바로잡는다

iptables — netfilter를 손으로 제어

  • iptables는 커널 netfilter를 테이블→체인→규칙 구조로 제어한다.
  • filter 테이블의 세 체인은 방향으로 외운다.
체인방향예
INPUT들어옴(서버로)외부→내 80 포트
OUTPUT나감(서버에서)내→외부 DNS
FORWARD통과(라우팅)게이트웨이 경유
  • 주요 옵션과 타깃은 다음과 같다.
옵션의미타깃의미
-A체인 끝에 추가ACCEPT허용
-I앞에 삽입DROP응답 없이 버림
-D삭제REJECT거부 응답 보냄
-P기본 정책LOG로그 남기고 통과
-j타깃 지정
-p프로토콜(tcp/udp)--dport목적지 포트
-s출발지 IP--sport출발지 포트
# 규칙 조회
iptables -L -n -v --line-numbers     # 줄 번호 포함 상세 조회
 
# 80(HTTP), 22(SSH) 들어오는 TCP 허용
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
 
# 특정 IP만 허용
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
 
# 나머지 INPUT은 모두 차단(기본 정책)
iptables -P INPUT DROP
 
# 규칙 삭제 / 초기화
iptables -D INPUT 3                   # 3번 규칙 삭제
iptables -F                           # 전체 규칙 플러시
 
# 저장(재부팅 후 유지) — 메모리에만 있으므로 필수
service iptables save                 # 또는 iptables-save > /etc/sysconfig/iptables

⚠️ 치명적 함정: 원격 SSH 중에 iptables -P INPUT DROP을 먼저 하면 자기 자신이 끊긴다. 반드시 22번 ACCEPT 규칙을 먼저 넣고 정책을 바꿔야 한다.

순서가 전부: 규칙은 위→아래로 매칭되고 첫 매칭에서 멈춘다. "모두 DROP"이 위에 있으면 뒤(-A)의 ACCEPT는 도달 못 한다 → -I로 앞에 삽입해야 효과.

firewall-cmd — firewalld의 zone 기반 방화벽

  • firewalld는 신뢰 수준을 zone으로 묶어 관리한다.
  • 런타임과 영구 설정이 분리돼 있다는 점이 핵심이다.
# 상태·기본 정보
firewall-cmd --state                       # 동작 여부
firewall-cmd --get-default-zone            # 기본 zone
firewall-cmd --list-all                    # 현재 zone 전체 규칙
 
# 서비스/포트 허용 (영구 + 즉시 적용)
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload                      # permanent를 현재에 반영
 
# 특정 IP만 허용 (rich rule)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
 
# 제거
firewall-cmd --permanent --remove-service=http
firewall-cmd --reload
옵션의미
--add-service / --add-port서비스명/포트 허용
--permanent영구 저장(즉시 적용 X)
--reloadpermanent를 현재 세션에 반영
--list-all현재 규칙 전체 확인
--get-default-zone기본 zone 조회

⚠️ 핵심 함정: --permanent만 쓰면 지금은 적용 안 된다. --reload를 해야 현재 세션에 반영된다. 반대로 --reload 없이 --add-service만 하면 재부팅 시 사라진다. "영구 + 즉시" = --permanent 후 --reload.

iptables vs firewalld 저장: iptables는 service iptables save, firewalld는 --permanent. 둘 다 "메모리 규칙은 휘발된다"는 같은 문제를 다르게 해결.

SELinux — DAC 위의 강제 접근 제어

  • SELinux는 전통 권한(DAC) 위에 type 기반 강제 제어(MAC)를 얹는다.
  • 세 모드와 컨텍스트가 핵심이다.
getenforce                    # 현재 모드 (Enforcing/Permissive/Disabled)
setenforce 0                  # Permissive로 일시 전환
setenforce 1                  # Enforcing로 일시 전환
# 영구 변경(disabled 포함)은 /etc/selinux/config의 SELINUX= 수정 후 재부팅
모드동작
Enforcing정책 위반 차단 + 로그
Permissive위반 허용하되 로그만
DisabledSELinux 완전 비활성
  • 컨텍스트는 user:role:type:level 형식이며 type이 핵심이다.
ls -Z /var/www/html           # 파일 컨텍스트 확인 (-Z)
ps -eZ                         # 프로세스 컨텍스트
 
# 컨텍스트 변경
chcon -t httpd_sys_content_t /web/index.html      # 즉시 변경(임시)
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"   # 정책에 영구 등록
restorecon -Rv /web           # 정책 기준으로 기본 컨텍스트 복원
 
# 불리언(기능 on/off)
getsebool -a | grep httpd
setsebool -P httpd_can_network_connect on    # -P=영구
명령역할
ls -Z컨텍스트 조회
chcon -t type컨텍스트 임시 변경
restorecon기본 컨텍스트 복원
semanage fcontext컨텍스트 영구 정책 등록
setsebool -P불리언 영구 변경

진단 신호: "권한(rwx)은 맞는데 접근이 안 된다" → SELinux 의심. setenforce 0으로 되면 SELinux 문제(운영에선 끄지 말고 restorecon/chcon으로 컨텍스트 수정).

chcon vs restorecon: chcon은 직접 지정(재라벨링 시 사라질 수 있음), restorecon은 정책 기준 복원, semanage fcontext+restorecon이 영구적인 정석. setenforce로는 Disabled로 못 간다(영구는 config 파일).

rsyslog — 로그를 facility.priority로 분류

  • /etc/rsyslog.conf(또는 /etc/rsyslog.d/*.conf)가 로그를 분배한다.
  • 형식은 facility.priority 대상이다.
# facility.priority         대상파일
*.info;mail.none;authpriv.none;cron.none   /var/log/messages
authpriv.*                                  /var/log/secure
mail.*                                      /var/log/maillog
cron.*                                      /var/log/cron
*.emerg                                     :omusrmsg:*
kern.*                                      /var/log/kern.log
local7.*                                    /var/log/boot.log
facility의미priority(낮→높)
auth/authpriv인증·보안debug
cron크론info
kern커널notice
mail메일warning/warn
daemon데몬err/error
local0~7사용자 정의crit, alert, emerg
  • priority는 지정 수준 이상을 기록한다. 특수 표기는 다음과 같다.
표기의미
mail.infomail의 info 이상 전부
mail.=info정확히 info 수준만
mail.nonemail은 제외
*.info모든 facility의 info 이상
# 수정 후 적용
systemctl restart rsyslog

보안 인증 로그를 /var/log/secure에 모으는 설정은 authpriv.* /var/log/secure. .none은 제외, .=는 정확히 그 수준만.

logrotate — 로그 순환·압축·보존

  • /etc/logrotate.conf와 /etc/logrotate.d/*가 로그가 무한히 커지는 것을 막는다.
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    weekly                  # 순환 주기: daily/weekly/monthly
    rotate 4                # 보관 개수(4개=약 4주치), 초과분 삭제
    compress                # 순환된 로그 gzip 압축
    delaycompress           # 한 세대는 압축 지연(직전 로그 가독)
    missingok               # 파일 없어도 오류 안 냄
    notifempty              # 비어 있으면 순환 안 함
    create 0640 root root   # 새 로그 파일 권한·소유자
    size 100M               # (선택) 크기 기준 순환
    postrotate              # 순환 후 실행할 명령
        systemctl reload rsyslog > /dev/null 2>&1 || true
    endscript
}
지시어의미
daily/weekly/monthly순환 주기
rotate N보관할 세대 수
compressgzip 압축
size크기 기준 순환
create새 파일 권한·소유
postrotate...endscript순환 후 명령
logrotate -d /etc/logrotate.d/myapp   # 디버그(실제 실행 X, 동작 예측)
logrotate -f /etc/logrotate.d/myapp   # 강제 즉시 순환

시험 해석: weekly + rotate 4 + compress = 매주 순환, 최근 4개(약 4주치)를 압축 보관, 초과분 삭제. 크기 기준은 size, 주기 기준은 daily/weekly.

TCP Wrapper — 서비스 단위 접근 제어

  • 방화벽보다 상위 계층에서, libwrap을 쓰는 서비스(sshd, vsftpd 등)는 두 파일로 접근을 통제한다.
# /etc/hosts.allow  (먼저 검사, 일치하면 허용)
sshd: 192.168.1.0/24
vsftpd: 192.168.1.10
 
# /etc/hosts.deny   (그 다음 검사, 일치하면 거부)
ALL: ALL
  • 검사 순서는 hosts.allow(허용) → hosts.deny(거부) → 둘 다 없으면 기본 허용이다.
  • 문법은 서비스 : 호스트이며 ALL/LOCAL/EXCEPT 키워드를 쓴다.
키워드의미
ALL모든 서비스/호스트
LOCAL점(.)이 없는 로컬 호스트
EXCEPT예외 지정

순서가 결과를 바꾼다: allow가 deny보다 우선. hosts.deny에 ALL: ALL을 두고 hosts.allow에 허용할 대상만 화이트리스트로 적는 것이 보안 정석. 둘 다 비면 모두 허용된다.

방화벽·보안 작업형 한눈에

작업iptablesfirewalld주의
포트 허용-A INPUT -p tcp --dport N -j ACCEPT--permanent --add-port=N/tcp방향·프로토콜
차단-j DROP/REJECT--remove-serviceDROP=무응답
저장service iptables save--permanent --reload휘발 방지
정책-P INPUT DROPzone 기본값SSH 먼저 허용

직접 쳐보기

# 현재 방화벽 상태 한눈에
iptables -L -n -v --line-numbers
firewall-cmd --list-all
 
# SELinux 상태와 컨텍스트
getenforce
ls -Z /var/www/html 2>/dev/null
 
# 로그 설정 미리보기(실제 순환 X)
logrotate -d /etc/logrotate.conf 2>&1 | head -20

작업형은 결국 정확한 옵션과 지시어를 묻는다 — 방향 하나, type 하나, --reload 하나가 합격을 가른다.

📖 용어

  • netfilter : 커널에 내장된 패킷 필터링 엔진. iptables와 firewalld 모두 이것을 조작한다.
  • 체인(INPUT/OUTPUT/FORWARD) : 각각 서버로 들어오는·서버에서 나가는·서버를 통과하는 패킷에 적용되는 규칙 묶음.
  • -A / -I : 규칙을 체인 끝에 추가 / 맨 앞에 삽입. 첫 매칭에서 멈추므로 위치가 결과를 바꾼다.
  • DROP / REJECT : 응답 없이 조용히 버리기 / 거부 응답을 보내 즉시 알리기.
  • zone : firewalld가 신뢰 수준별로 묶어 둔 규칙 세트. 인터페이스나 출발지를 여기에 배정한다.
  • --permanent / --reload : 설정을 파일에 영구 저장하는 옵션 / 그 영구 설정을 현재 세션에 반영하는 명령.
  • rich rule : firewalld에서 출발지·서비스·동작을 조합해 세밀하게 지정하는 확장 규칙.
  • SELinux 컨텍스트 : 파일·프로세스에 붙는 user:role:type:level 라벨. 판정은 type이 좌우한다.
  • chcon / restorecon / semanage fcontext : 컨텍스트 임시 변경 / 정책 기준 복원 / 정책에 영구 등록.
  • SELinux 불리언 : 특정 기능을 켜고 끄는 on/off 스위치. setsebool -P로 영구 변경한다.
  • facility / priority : 로그를 낸 출처 분류 / 메시지의 심각도. rsyslog는 이 짝으로 로그를 나눈다.
  • .none / .= : 그 facility를 기록에서 제외 / 정확히 그 수준만 기록하라는 rsyslog 표기.
  • rotate N : logrotate가 보관할 이전 로그 세대 수. 초과분은 삭제된다.
  • hosts.allow / hosts.deny : TCP Wrapper의 허용·거부 목록. allow를 먼저 검사하며, 둘 다 없으면 허용된다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

외부에서 들어오는 22번 포트(SSH) TCP 접속을 허용하는 iptables 명령으로 옳은 것은?

문제 2

원격 SSH로 서버를 관리하던 중 방화벽 기본 정책을 DROP으로 바꾸려 한다. 올바른 작업 순서는?

문제 3

firewalld에서 http 서비스를 재부팅 후에도 유지되게 허용하고 즉시 반영하려면?

문제 4

SELinux의 동작 모드 중 정책 위반을 차단하지 않고 로그만 남기는 모드는?

문제 5

파일의 SELinux 컨텍스트를 정책 기준의 기본값으로 복원하는 명령은?

문제 6

rsyslog.conf에서 mail.none의 의미로 옳은 것은?

문제 7

logrotate 설정 weekly, rotate 4, compress의 동작으로 옳은 것은?

이전셸 스크립트 작성형: 조건·반복·함수로 실무를 자동화한다Week 13 · Day 3다음 네트워크·서비스 작업형 모의 + 오답노트Week 13 · Day 5

참고 공식 자료

  • 리눅스마스터 1급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • iptables — netfilter를 손으로 제어
  • firewall-cmd — firewalld의 zone 기반 방화벽
  • SELinux — DAC 위의 강제 접근 제어
  • rsyslog — 로그를 facility.priority로 분류
  • logrotate — 로그 순환·압축·보존
  • TCP Wrapper — 서비스 단위 접근 제어
  • 방화벽·보안 작업형 한눈에
  • 직접 쳐보기
  • 용어
  • 연습 문제