자격증 취득 준비할 겸 포스팅을 합니다.
해당 게시글에 문제가 있을 경우 댓글 달아주세요. (수정이 필요한 문구가 있거나, 문제 공유가 불가한 경우 등)
설명을 못 쓴 문제가 있으니 참고해주세요.
[1번 답안]

① -g kait
② -d /home/kait/ihdman 또는 -b /home/kait
③ -d /home/kait/ihdgirl (3번과 4번은 순서 무관)
④ -m
🎯답안해석
유저 및 그룹을 만들고 홈디렉토리를 설정하는 문제
✅ 예상문제
ihdman 계정을 생성할때, 그룹을 kait로 설정하고 홈 디렉토리를 직접 지정하려면 다음 중 어떤 옵션을 사용할 수 있는가?
useradd ① ② ihdman
ihdgirl 계정도 별도로 생성하려고 한다. 홈디렉토리를 /home/kait/ihdgirl로 지정하고 홈 디렉토리를 자동으로 생성하는방법?
useradd ③ ④ ihdgirl
📝 useradd 주요 옵션
-g: 기본 그룹 지정(gid 또는group명)
-u: uid 지정
-d: 홈 디렉터리 지정
-b: 홈 디렉터리 기준 경로 지정 (보통 -d와 함께는 사용 안 함, 상황에 따라 선택적)
-m: 홈 디렉터리 자동 생성
[2번 답안]

① -x -c"limit bsoft=100m bhard=110m ihduser"
② -x -c "limit isoft=1000 ihard=1100 ihduser" (큰따옴표대신에 작은따옴표도 가능)
🎯답안해석
디스크quota 문제. 특히xfs_quota 임. xfs 이하 fs타입 문제는안나오길 기도합니다.
✅ 예상문제
다음은 사용자 ihduser에 대해 XFS 파일 시스템 상에서 블록과 inode 사용량 제한을 설정하는 과정이다.
각 단계에서 빈칸에 들어갈 알맞은 명령어를 쓰시오.
사용자 ihduser에게 soft 제한 100MB, hard 제한 110MB의 블록 사용량 제한을 설정한다.
xfs_quota ① /home
이어서, 사용자 ihduser에게 inode 수 제한을 soft 1000개, hard 1100개로 설정한다.
xfs_quota ② /home
📝 옵션 설명
-x: XFS 전용 옵션. xfs_quota 명령으로사용해야함. project 기반
-c: 명령어를 직접 인자로 전달
bsoft, bhard: 디스크 용량(블록 단위) 제한
isoft, ihard: 파일 개수(inode 개수) 제한
➕ (추가) 옵션을 그냥 쓴다고 쿼터가 지정되는게 아니라 미리 설정을 해야함.
1) 마운트 옵션 추가
/home 디렉토리는지정하려면재부팅해야함



2) 프로젝트 ID 지정
프로젝트ID는 아무거나 상관없지만 관리편의를 위해 uid와 동일하게함

3) 이제 xfs_quota 명령 사용가능
(참고) 쿼터지정안했을때오류메시지

[3번 답안]

① crontab
② -r -u 또는 -ru
③ 0 * * * * 또는 0 */1 * * *
④ 1 3 * * 1,4,5
🎯답안해석
사실 문제에서 분명 스케쥴이라는 키워드가 포함되었을 것. crontab 또는 at이 등장하겠지만, 높은 확률로 crontab.
✅예상문제
ihduser 계정에 등록 된 스케쥴을 모두 지우고, 새로운 스케쥴을 아래 정보로 다시 등록해야한다.
1) /home/ihduser/script1.sh 는 매시 정각에 수행 되어야함.
2) /home/ihduser/script2.sh 는 매주 월,목,금요일 03시01분에 수행 되어야함.
① _______ ② _______ ihduser
① _______ -eu ihduser
③ _______ /home/ihduser/script1.sh
④ _______ /home/ihduser/script2.sh
또 다른 스케쥴 추가방법: sudo echo " ③ _______ /home/ihduser/script1.sh" >> /var/spool/cron/ihduser
📝 crontab 명령어 옵션
-l : 스케쥴보기
-e : 스케쥴생성/수정(vi편집툴이용)
-r : 스케쥴모두제거
-u : 특정계정의스케쥴지정
📝 crontab 필드 설명
분(0~59) 시(0~23) 일(1~31) 월(1~12) 요일(1(월)~7(일=0)) 명령어(bash or script)
[4번답안]

① jxf 또는-jxf
② gcc
③ -c
④ -o calc
🎯답안해석
C언어 소스파일을 압축해제하여 컴파일 및 결과물 추출하는 과정. 압축, 컴파일 관련 명령어 사용 예상.
✅예상문제
다음은 calc.tar.bz2에 압축되어 있는 C 소스 파일을 해제하고, 이를 컴파일하여 실행 파일 calc를 생성하는 과정이다.
빈칸에 들어갈 알맞은 명령어나 옵션을 쓰시오.
tar ① __________ calc.tar.bz2
② __________ main.c ③ __________
gcc main.c ④ __________
✅ 설명
(1) bzip2(tar.bz2) 으로 tar 압축된 파일 압축해제
(2) GNU C 컴파일러를 이용한 소스파일 컴파일. 단, 오브젝트파일(main.c)까지만 생성
(3) 생성된 오브젝트파일로 실행파일을 이름 지정(calc)하여 생성
📝 tar 압축 종류
| gzip | .tar.gz, .tgz | tar -czvf | 빠르고 범용적, 기본 압축률 |
| bzip2 | .tar.bz2, .tbz2 | tar -cjvf | gzip보다 압축률 높음 (느림) |
| xz | .tar.xz | tar -cJvf | 압축률 매우 높음 (더 느림) |
| lzma | .tar.lzma | tar --lzma -cvf | xz의 이전 버전 (거의 안 씀) |
| zstd | .tar.zst | tar --zstd -cvf | 매우 빠르고 압축률 좋음 (최신) |
| compress | .tar.Z | tar -Zcvf | 아주 옛날 방식 (거의 사용 안 함) |
-c 압축
-x 압축해제
-v 진행상황 출력
-f 파일 지
📝 GNU C 컴파일 순서
소스.c
↓ (전처리, -E)
전처리된 코드
↓ (컴파일, -S)
어셈블리 코드 (.s)
↓ (어셈블, -c)
오브젝트 파일 (.o)
↓ (링크)
실행파일 (a.out)
[5번답안] 보완필요

① lsmod
② modprobe
③ -c
④ -r
🎯답안해석
C
✅예상문제(커널모듈확인및관리)
문제
시스템 관리자는 특정 디바이스의 커널 모듈을 확인하고, 필요시 모듈을 삽입하거나 제거하려고 한다.
아래 설명을 참고하여 각 단계에 알맞은 명령어나 옵션을 빈칸에 쓰시오.
①현재커널에 로드된 모듈 목록을 확인하고자 한다. 다음 명령어를 사용한다.
(1) __________
②특정모듈을 커널에 로드(삽입)하려면 어떤 명령어를 사용하는가?
(2) __________ [모듈명]
③모듈설정정보를확인하려면 modprobe 명령어에 어떤 옵션을 사용하는가?
modprobe (3) __________
④커널에서 모듈을 제거하려면 modprobe 명령어에 어떤 옵션을 사용하는가?
modprobe (4) __________ [모듈명]
📝
[6번답안]

① /proc/mdstat
② -C /dev/md2 (또는 --create /dev/md2)
③ -l 5 (또는 --level 5)
④ -n 3 (또는 --raid-devices 3)
🎯답안해석
답안에 mdstat, raid라는 문구가 있는걸로 리눅스 소프트웨어 raid 명령을 사용했다는걸 유추할 수 있다.
✅ 예상문제 (RAID 구성 - mdadm)
시스템 관리자는 /dev/sdb1, /dev/sdc1, /dev/sdd1 세 개의 디스크를 사용하여 RAID5 구성을 /dev/md2 장치로 만들려고 한다.
다음은 RAID를 구성하고, 진행 상태를 확인하는 과정이다.
빈칸에 알맞은 명령어나 옵션을 쓰시오.
mdadm (2) __________ (3) __________ (4) __________ /dev/sdb1 /dev/sdc1 /dev/sdd1
watch -n 1 cat (1) __________ ( 또는 while true; do cat (1) __________ ; sleep 1; done; )
💡 보충 설명
| 명령어/옵션 | 설명 |
| /proc/mdstat | 현재 활성화된 RAID 상태 확인 |
| -C / --create | 새로운 RAID 장치 생성 |
| -l / --level | RAID 레벨 지정 (예: 0, 1, 5 등) |
| -n / --raid-devices | RAID에 포함할 디바이스 수 |
📝 raid 설정 명령어 모음
| 상태 확인 | cat /proc/mdstat |
| 상세 확인 | mdadm --detail /dev/md0 |
| 생성 | mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd[abc]1 |
| 추가 | mdadm /dev/md0 --add /dev/sdd1 |
| 실패표시 | mdadm /dev/md0 --fail /dev/sdc1 |
| 제거 | mdadm /dev/md0 --remove /dev/sdc1 (remove 전에 fail을 해줘야 안전함) |
| 슈퍼블록 삭제 | mdadm --zero-superblock /dev/sdc1 |
| 설정파일 갱신 | mdadm --detail --scan >> /etc/mdadm.conf |
| 모니터 실행 | mdadm --monitor --scan --daemonise --mail=you@dom |
| Raid 해제 | mdadm --stop /dev/md0 |
| 디스크 초기화 | sudo mdadm --zero-superblock /dev/sde1 ( 주로 디스크를 다른 md에 붙이기 전에 사용 ) |
📌 추가 팁: 만약 "/" 파일시스템을 mdadm으로 생성시에는 부팅시 커널에 등록해줘야한다.
명령어: dracut -f
📌 추가 팁: 디스크 파티션 생성 간단 설명
- fdisk /dev/sdX 파티션
n (새 파티션)
p (primary 타입 지정)
Enter (파티션 번호 default 1)
Enter (조회된 First Sector 지정)
Enter (조회된 Last Sector 지정: 100%)
p (print 생성된 파티션 조회)
t 8e (LVM코드 8e로 파티션 유형 지정. 타입리스트보기 l)
w (현재 상태 저장하고 fdisk 종료)
q (저장하지 않고 종료)
- parted /dev/sdX 파티션
mklabel GPT (GPT 타입으로 label 지정. msdos(MBR), mac, bsd, sun 등의 타입이 있음)
mkpart [이름] [파티션 타입] [첫번호] [끝번호] (파티션 생성. mkpart만 쓰면 대화식으로 만들 수 있음)
print (생성된 파티션 확인)
q (종료. 따로 저장 없음)
[7번답안]

① mail.warn 또는 mail.warning 또는 mail.notice;mail.!=notice
② authpriv.*
③ :omusmsg:ihdman
④ mail,cron.* 또는 mail.*;cron.*
🎯답안해석
authpriv, .cron, .warn 등의 키워드로 syslog.conf인걸 알 수 있음. 로그 심각도와 대표 기능 몇가지를 알고 있어야함.
✅ 예상문제 (rsyslog 설정 - 로그 레벨 및 대상별 필터)
시스템 관리자는 다양한 로그 메시지를 필터링하여, 특정 사용자에게 메시지를 전달하거나 로그를 별도로 저장하려고 한다.
다음은 /etc/rsyslog.conf에 작성될 설정 예시이다.
각 빈칸에 알맞은 표현을 채우시오.
① 다음은 메일 관련 로그(mail facility) 중 warning 이상의 로그만 처리한다.
(1) __________ /var/log/mail.warn
② 보안 인증 관련 로그(authpriv)를 모두 /var/log/secure로 저장하려고 한다.
(2) __________ /var/log/secure
③ 사용자 ihdman에게 직접 메시지를 보내기 위한 설정이다.
*.* (3) __________
④ 메일 및 크론 관련 모든 로그를 한 파일로 통합 저장하고자 한다.
(4) __________ /var/log/mc.log
💡 보충 설명
- 로그 위치: /etc/(r)syslog.conf
- 로그 설정 양식: [Facility].[Severity] [로그저장위치 or 로그작동방식]
📝 로그의 Facility와 Severity
| Facility (시설) | 로그의 발생 위치 또는 종류를 의미 | auth, cron, daemon, kern, mail, user, authpriv, local0~7 등 |
| Severity (심각도) | 로그의 중요도 또는 긴급도 수준을 의미 | emerg, alert, crit, err, warning, notice, info, debug |
📝 Syslog 로그 심각도(Severity Level) 정리
| 숫자 | 이름 (영문) | 한글 설명 | 의미 |
| 0 | emerg (panic) | 비상 | 시스템 사용 불가 상태, 즉시 조치 필요 |
| 1 | alert | 경보 | 즉시 수정해야 할 심각한 문제 |
| 2 | crit (critical) | 치명적 | 하드웨어/시스템 구성에 치명적 장애 |
| 3 | err (error) | 오류 | 일반적인 오류 상황 |
| 4 | warning (warn) | 경고 | 문제 가능성, 주의 필요 |
| 5 | notice | 주의메시지 | 정상 동작 중 특별히 알아둘 사항 |
| 6 | info | 정보 | 일반 정보 메시지 |
| 7 | debug | 디버그 | 개발/분석용 세부 정보 |
📝 특수 작업
| 원격으로 로그 보낼 때 | *.* @log.example.com:514 *.* @@log.example.com:514 |
UDP(@) TCP(@@) |
UDP(@)와 TCP(@@) 프로토콜을 이용한 원격지 로깅 차이
*.* @log.example.com:514
*.* @@log.example.com:514
📝 특정 사용자에게 메시지 알람 보낼 때 (alice,bob)
*.err :omusrmsg:alice,bob
📌 추가 팁: 심각도 필터하여 조회
- 시스템 로그 journalctl (systemd 환경에서 사용하는 로그 뷰어)
| 심각도 | 필터링 명령 |
| 긴급 ~ 오류 (0~3) | journalctl -p err |
| 경고 이상 (4 이상) | journalctl -p warning |
| 정보 로그 포함 (6) | journalctl -p info |
| 디버그까지 전체 (7) | journalctl -p debug |
- dmesg (커널 메시지 전용)
| 필터 | 설명 |
| dmesg -T | 시간 포함 전체 로그 |
| dmesg --level=err,warn | 오류 + 경고만 |
| dmesg --level=emerg,alert,crit | 치명적 메시지만 |
📌 추가팀: 로그 관련 명령어
- syslog.conf 검사
rsyslogd -N1
- config 재로드
systemctl reload rsyslog
systemctl restart rsyslog (강제)
- 로그 수동 입력 명령어
logger "이것은 테스트 로그입니다"
logger -p local0.info "local0 INFO 레벨 테스트 메시지"
logger -p auth.warning "AUTH WARNING 테스트"
logger -p cron.err "CRON ERROR 테스트"
logger -p user.emerg "USER EMERGENCY 테스트"
[8번답안]

① dmesg 또는 /usr/bin/dmesg
② last -f
③ /var/log/wtmp
④ lastlog -t 3
🎯답안해석
사용자 로그인 이력 위주로 시스템 점검하는 명령어
✅ 예상문제
시스템 관리자는 시스템 부팅 메시지를 확인하고, 사용자 로그인 이력 및 최근 로그인 정보들을 점검하고자 한다.
아래 작업 절차를 참고하여 빈칸에 알맞은 명령어나 파일명을 쓰시오.
시스템이 부팅되면서 출력한 커널 메시지를 확인하려고 한다.
① __________
사용자 로그인 기록을 /root/login.log으로 백업하고 그 파일을 확인하려고 한다.
cp ③ __________ /root/login.log
② __________ /root/login.log
최근 3일 이내 로그인한 사용자 목록을 확인하려고 한다.
④ __________
💡 보충 설명
| 명령어/파일 | 설명 |
| dmesg | 커널 부팅 메시지 출력 (드라이버/하드웨어 초기화 등) |
| last | 로그인/로그아웃 기록 출력 (wtmp 파일 참조) |
| last -f [파일] | 특정 로그 파일에서 로그인 이력 확인 |
| /var/log/wtmp | 로그인 이력 기록 파일 |
| lastlog | 각 사용자의 마지막 로그인 정보 확인 |
| lastlog -t 3 | 최근 3일 이내 로그인 사용자 출력 |
📝 시스템,커널 관련 모든 로그: /var/log/messages
📝 [참고] 로그인 기록 관련 주요 파일과 명령어
| 로그인 기록 | /var/log/wtmp | 명령어: last |
| 로그인 실패 기록 | /var/log/btmp | 명령어: lastb |
| 마지막 로그인 시간 | /var/log/lastlog | 명령어: lastlog |
| 현재 로그인 사용자 | /var/run/utmp | 명령어: who, w |
| 그 외 로그인 성공/실패 로그 | /var/log/secure | 로그파일 직접 읽을 수 있음 |
📝 명령어 주요 기능 참조 파일 주요 옵션 설명
| last | 로그인·로그아웃·재부팅 이력 조회 | /var/log/wtmp | -f <file> | 다른 wtmp 파일 지정 |
| -n <N> | 표시할 줄 수 제한 | |||
| -R | 호스트명 숨김 | |||
| -a | 접속한 호스트를 마지막 열에 표시 | |||
| lastb | 잘못된 로그인 시도 조회 (보안 실패 로그) | /var/log/btmp | -f <file> | 다른 btmp 파일 지정 |
| -n <N> | 표시할 줄 수 제한 | |||
| -R | 호스트명 숨김 | |||
| lastlog | 사용자 최종 로그인 시점 조회 | /var/log/lastlog | -t <DAYS> | 지정한 일수 이내에 로그인한 사용자만 표시 |
| -b <DAYS> | 지정한 일수 이전에 로그인한 사용자 표시 | |||
| -u <UID> | 특정 UID 또는 사용자 ID만 표시 | |||
| who | 현재 로그인 사용자 목록 표시 | /var/run/utmp | -a | 모든 정보 표시 (idle, PID 등 포함) |
| -q | 로그인 사용자 이름만 간단히 표시 | |||
| -u | 로그인 시간 및 idle 시간 표시 | |||
| w | 현재 로그인 사용자 + 실행 중 프로세스 요약 | /var/run/utmp | -h | 헤더(첫 줄) 숨김 |
| -s | 짧은 형식 출력 | |||
| -f | 접속한 호스트명 표시/숨김 토글 |
[9번답안] 보완필요

① lsipc 또는 ipcs -l
② /proc/sys/fs/file-max
🎯답안해석
✅ 예상문제 (IPC 및 시스템 파일 핸들 제한 확인)
시스템 관리자는 리눅스 시스템에서 공유 메모리, 메시지 큐, 세마포어 등의 IPC 자원 상태와, 시스템 전체에서 열 수 있는 파일 수의 한계를 확인하려고 한다.
다음 작업 절차를 참고하여 빈칸에 알맞은 명령어나 파일 경로를 채우시오.
시스템에서 사용 중인 IPC 자원들에 대한 상세 정보(메모리, 메시지 큐, 세마포어 등)를 확인하려고 한다.
① __________
시스템이 허용하는 최대 열 수 있는 파일 디스크립터 수(file descriptor limit)를 확인하기 위해 다음 파일을 조회한다.
cat ② __________
💡 보충 설명
| 명령어/파일 | 설명 |
| lsipc | 공유 메모리, 메시지 큐, 세마포어 등 IPC 리소스 정보를 요약 출력 |
| ipcs -l | IPC 자원의 시스템 한계값 출력 (max segments, bytes 등) |
| /proc/sys/fs/file-max | 커널이 동시에 열 수 있는 최대 파일 수 (시스템 전체 기준) |
🧠 친숙치 않고 잘 모르겠는건 그냥 패스할까
[10번답안]

① cpio
② -ovF
③ -tF 또는 -itF
④ -ivF
🎯답안해석
파일 및 디렉토리 백업 및 복구. 옵션 및 명령어 형식을 보고 cpio 인걸 유추함.
✅ 예상문제 (cpio - 백업 및 복원)
시스템 관리자는 특정 디렉토리의 파일을 백업하고, 백업된 내용을 확인한 뒤 복원하려고 한다.
아래 흐름에 따라 빈칸에 알맞은 명령어나 옵션을 쓰시오.
현재 디렉토리의 파일을 dir.backup라는 이름으로 백업 파일을 생성하고, 그 백업파일 내용 확인
find . -type f | ① _______ ② ______ dir.backup
① _______ ③ _______ dir.backup
백업업 파일을 현재 디렉토리에 복원하려고 한다.
① _______ ④ _______ dir.backup
💡 cpio 백업/복구 차이점 구분 팁
cpio가 왼쪽에 있으면 복구(i), 오른쪽에 있으면 백업(o) 라고 생각하면 좋음
📝 백업 명령어 사용 모음
| cpio 표준 입출력을 이용한 백업,복원 활용 |
| find /etc | cpio -ov > etc_backup.cpio # /etc 백업 cpio -idv < etc_backup.cpio # 복원 |
|
| dump & restore 복원시 restore 명령 사용 |
| dump -0uf /backup/rootfs.dump /dev/sda1 # sda1 전체 백업 |
| cd /restore_dir restore -rf /backup/rootfs.dump # 전체 복원 |
dump
|
| dd 블록단위로 데이터를 복제,백업하는 명령어. |
| dd if=/dev/sda of=/backup/sda.img bs=1M status=progress # 디스크 이미지 백업 dd if=/backup/sda.img of=/dev/sda bs=1M # 복원 |
|
| rsync 원격지의 파일 동기화(복제)관리 프로그램 (rcp 상위호환) |
| rsync -av /home user@remote:/backup # SSH로 /home 백업 rsync -av --delete /src/ /dst/ # 정확히 동기화 |
|
| tar |
| tar -cvf backup.tar /etc # /etc를 backup.tar로 백업 tar -xvf backup.tar # backup.tar 압축 해제 tar -czvf backup.tar.gz /var # gzip으로 압축 백업 |
|
[11번답안] 보완필요

① httpd 또는 apachectl
② -M
③ AuthConfig
④ AuthUserFile
⑤ Require
✅ 예상문제
Apache 웹 서버를 제어하거나 설정을 테스트할 때 사용하는 기본 명령어는?
(1) __________
② 현재 Apache에 로드된 모듈 목록을 확인하려면 어떤 옵션을 사용하는가?
apachectl (2) __________
③ .htaccess 파일에서 인증 설정을 허용하기 위해, Apache 설정 파일의 <Directory> 항목에 다음 디렉티브를 설정한다.
AllowOverride (3) __________
④ 사용자 인증 파일의 경로를 설정하려면 어떤 디렉티브를 사용하는가?
(4) __________ /etc/httpd/.htpasswd
⑤ 인증에 성공한 사용자만 접근할 수 있도록 하기 위해 어떤 디렉티브를 사용하는가?
(5) __________ valid-user
💡 보충 설명
| 항목 | 설명 |
| httpd / apachectl | Apache 서버를 실행하거나 설정 점검에 사용 |
| apachectl -M | 현재 로드된 모듈 목록 확인 (mod_auth, mod_rewrite 등 포함 여부 확인) |
| AllowOverride AuthConfig | .htaccess 파일에서 인증 관련 설정 허용 |
| AuthUserFile | 사용자 인증 파일 경로 지정 (htpasswd로 생성한 파일) |
| Require valid-user | 인증에 성공한 사용자만 접근 허용 |
📝
| 항목 | 설명 | 예시 |
| Listen | Apache가 요청을 수신할 포트를 지정 | Listen 80 Listen 8080 |
| ServerName | 서버 도메인명과 포트를 지정 | ServerName www.example.com:80 |
| ServerAdmin | 에러 페이지에 표시될 관리자 이메일 | ServerAdmin admin@example.com |
| DocumentRoot | 웹 문서의 기본 디렉터리 경로 | DocumentRoot "/var/www/html" |
| Directory | 특정 디렉터리에 대한 접근 권한/설정 지정 | <Directory "/var/www/html"> ... </Directory> |
| Options | 디렉토리에서 허용할 기능 설정 | Options Indexes FollowSymLinks |
| AllowOverride | .htaccess 사용 허용 여부 | AllowOverride All |
| Require | 접근 허용 조건 설정 (Apache 2.4+) | Require all granted |
| Order / Allow / Deny | 접근 제어 설정 (Apache 2.2 이하) | Order allow,deny Allow from all |
| ErrorLog | 에러 로그 파일 경로 지정 | ErrorLog logs/error_log |
| CustomLog | 접근 로그 경로 및 포맷 설정 | CustomLog logs/access_log combined |
| LoadModule | 모듈을 로딩함 (기능 추가 시 필요) | LoadModule rewrite_module modules/mod_rewrite.so |
| Include | 다른 설정 파일을 불러옴 (modular 설정) | Include conf/extra/httpd-vhosts.conf |
| User / Group | Apache 프로세스가 실행될 사용자/그룹 | User apache Group apache |
| 항목 | 설명 | 예시 |
| Timeout | 요청 처리 제한 시간 (초) | Timeout 60 |
| KeepAlive | 연결 유지 여부 (성능 최적화) | KeepAlive On |
| MaxKeepAliveRequests | 하나의 연결에서 최대 요청 수 | MaxKeepAliveRequests 100 |
| KeepAliveTimeout | 연결 대기 시간 | KeepAliveTimeout 5 |
| ServerTokens | 서버 정보 노출 수준 조절 | ServerTokens Prod |
| ServerSignature | 에러 페이지 하단에 서버 정보 노출 여부 | ServerSignature Off |
| FileETag | 캐시 제어용 태그 설정 | FileETag None |
📌 시험 대비 팁
- AllowOverride All → .htaccess 설정이 적용됨
- Options Indexes → 디렉토리 목록 노출 허용
- Require all granted → 모든 접근 허용 (Apache 2.4)
- Listen, ServerName, DocumentRoot → 가상호스트 구성에서도 반드시 등장
📝 아파치 주요 명령어
| 항목 | 명령어 |
| 설정 검사 | httpd -t 또는 apachectl configtest |
| 전체 구조 확인 | httpd -S |
| 설정 반영 | systemctl reload httpd 또는 apachectl graceful |
| 상태 확인 | systemctl status httpd |
| 시작/중지/재시작 | systemctl start/stop/restart httpd |
| 자동실행 등록 | systemctl enable httpd |
[12번답안]

① /etc/exports
② 192.168.12.0/24 또는 192.168.12.0/255.255.255.0
③ root_squash
④ no_root_sqush
⑤ all_squash
🎯답안해석
서버에서 NFS를 이용하여 파일공유시 Config 지정
✅예상문제
아래 조건에 따라 NFS 공유를 하려고 한다.
1) /nfs/share01를 192.168.12.0 대역의 모든 IP 클라이언트에 NFS 공유하고, root는 nobody 권한으로 연결
2) /nfs/share02를 192.168.12.0 대역의 모든 IP 클라이언트에 NFS 공유하고, root는 root로 일반유저는 nobody 권한으로 연결
vi ① ______
~
/nfs/share01 ② ______ ③ ______
/nfs/share02 ② ______ ④ ______ ⑤ ______
~
📝 서버쪽 exports옵션
| 옵션명 | 설명 |
| ro | 읽기 전용 공유 (read-only) |
| rw | 읽기/쓰기 허용 (read-write) |
| sync | 데이터를 디스크에 즉시 기록 후 응답 (안정성 ↑) |
| async | 데이터를 메모리에 저장한 뒤 응답 (속도 ↑, 안전성 ↓) |
| root_squash | 클라이언트 root 사용자를 서버의 nobody로 매핑 (기본값) |
| no_root_squash | 클라이언트 root가 서버에서도 root 권한 유지 |
| all_squash | 모든 클라이언트 사용자를 nobody로 매핑 |
| anonuid=UID, anongid=GID | 매핑될 익명 사용자 계정 UID/GID 지정 |
| no_subtree_check | 공유 디렉토리 하위 경로 변경 시 검사 생략 (성능 ↑) |
| subtree_check | 하위 경로 변경 시 검사 수행 (기본값) |
💡 보충 설명
클라이언트쪽 마운트 옵션 (/etc/fstab 에 적용)
| 옵션 | 설명 |
| ro / rw | 읽기 전용 / 읽기쓰기 |
| soft | 서버 응답 없으면 잠시 대기 후 실패 반환 (에러 발생 가능성 있음) |
| hard | 서버 응답 없으면 계속 재시도 (기본값, 안정성 ↑) |
| intr | hard 모드에서 중간에 인터럽트(취소) 가능하게 함 |
| noac | Attribute Caching을 비활성화. 파일/디렉터리 메타데이터(사이즈, 타임스탬프 등)를 캐시하지 않음. 항상 서버에서 직접 확인. (성능은 떨어지지만 최신 데이터 보장) |
| vers=3 / vers=4 | NFS 버전 명시 (nfs3, nfs4와 관련) |
| nolock | 파일 잠금(lock) 기능 비활성화 (경량 클라이언트에서 사용) |
| noatime | 파일 접근 시간(atime) 업데이트 안 함 (속도 향상) |
| rsize=32768 | 서버로부터 읽어올 때 블록 크기를 32KB(변동가능)로 설정. 클라이언트가 한 번에 읽어오는 데이터 크기. (기본값보다 큼, 속도 최적화 가능) |
| wsize=32768 | 서버로 데이터를 쓸 때 블록 크기를 32KB(변동가능)로 설정. (쓰기 성능 최적화) |
| timeo=14 | 서버 응답 대기 시간 설정. 1.4초(변동가능) 기다리고 재시도 |
| proto=tcp | 전송 프로토콜을 TCP로 강제 설정. (오래된 NFS는 UDP 기본인데 TCP는 연결지향이라 안정성이 더 좋음) |
type nfs (rw,nolock,hard,noac,rsize=32768,wsize=32768,proto=tcp,vers=3,timeo=14,intr,addr=IP)
💡 보충 설명
exportfs 명령어 사용방법
| 명령어 | 설명 |
| exportfs -v | 현재 공유 보기 |
| exportfs -a | /etc/exports 파일에 설정된 내용 모두 적용 |
| exportfs -r | /etc/exports 파일 다시읽기 |
| exportfs -u [클라이언트IP]:[볼륨명] | 특정 클라이언트로만 볼륨 공유 해제 |
[13번답안] 보완필요

① .forward 또는 ~/.forward
② /etc/mail/access
③ Connect:192.168.12.22 DISCARD
④ makemap hash
⑤ <
🎯 답안해석
💡 보충 설명
| 항목 | 설명 |
| .forward | 사용자 메일 자동 전달용 파일 (내용: 전달할 이메일 주소) |
| /etc/mail/access | 접속 허용/차단 정책 설정 파일 (IP, 도메인, RELAY 등) |
| makemap hash | 텍스트 파일을 해시 기반 DB 파일로 변환 |
| < | 파일 내용을 명령어의 표준 입력으로 전달 |
✅ 예상문제 (Sendmail – 메일 전달 및 접속 제어 설정)
문제
시스템 관리자는 특정 사용자의 메일을 다른 주소로 전달하고, 특정 IP 대역에서의 메일 접속을 차단하고자 한다.
다음은 Sendmail 설정 과정이다. 빈칸에 들어갈 내용을 쓰시오.
① 특정 사용자가 수신한 메일을 다른 이메일 주소로 자동 전달하도록 설정하려고 한다.
사용자의 홈 디렉토리에 생성해야 하는 파일은?
(1) __________
② 특정 IP 주소(192.168.12.22)에서 들어오는 메일 접속을 차단하기 위해 설정해야 할 접속 제어 파일은?
(2) __________
③ 위 파일에서 192.168.12.22에 대해 접속 거부(discard) 하도록 설정하는 줄을 작성하시오.
(3) __________
④ 설정한 access 파일을 Sendmail이 읽을 수 있는 **DB 파일(.db)**로 변환하려면 다음 명령어를 사용한다.
(4) __________ /etc/mail/access.db < /etc/mail/access
⑤ 위 명령어에서 사용된 리다이렉션 연산자 <는 어떤 의미인가?
(5) _________
📝 예시 전체 흐름:
# 메일 차단 설정
echo "Connect:192.168.12.22 DISCARD" >> /etc/mail/access
# DB 파일로 변환
makemap hash /etc/mail/access.db < /etc/mail/access
💡 보충 설명
기타 옵션 여기 참조
https://raisonde.tistory.com/entry/리눅스마스터-sendmail-설정-파일들 [지식잡식:티스토리]
[14번답안]

① any;
② allow-transfer
③ forward only;
④ forwarders
⑤ allow-query
⑥ 203.247.60/24; 또는 203.247.60.0/24;
🎯답안해석
DNS의 named.conf 설정에 들어가는 값들이다. named.conf의 구조를 알아야한다.
named.conf와 domain.zone에 들어가는 값들을 구분해야한다.
✅예상문제
시스템 관리자는 BIND(DNS) 서버를 설정하면서 접근 제어와 포워딩 정책 등을 구성하고자 한다.
다음은 /etc/named.conf 파일 내 options 블록 설정 예시이다.
조건에 맞게 빈칸에 들어갈 알맞은 설정 키워드나 값들을 쓰시오.
options {
directory "/var/named";
recursion yes;
allow-query { ① __________ };
allow-transfer { ② __________ };
③ __________
④ __________ { 8.8.8.8; 8.8.4.4; };
};
zone "qwer.com" IN {
type master;
file "qwer.com.zone";
⑤ __________ {
⑥ __________ };
};
조건
1. 네임 서버에 질의를 요청하는 모든 호스트에게 질의를 허용하도록 설정.
2. 도메인 영역(Zone) 파일의 전송을 제어하는 항목을 명시.
3. 들어온 질의를 지정된 포워더(forwarder)에게 전달만 하고, 포워더가 응답하지 않을 경우 자체적인 재귀 질의는 수행하지 않음.
4. 외부 DNS 서버(8.8.8.8, 8.8.4.4)로 질의를 전달할 때 사용하는 항목을 명시.
5. 특정 도메인 영역(zone "qwer.co.kr")에 대해 질의를 허용할 호스트를 제한하는 항목을 명시.
6. 위 ⑤번 조건에서, 해당 영역에 대한 질의를 203.247.60.0/24 네트워크 대역에 속한 호스트만 허용하도록 설정.
💡 보충 설명
| 디렉티브 | 의미 |
| any; | 모든 클라이언트 허용 (보안상 실제 운영 환경에선 최소화 필요) |
| allow-query | 질의 허용 대상 설정 |
| allow-transfer | 존 정보 전송 허용 대상 (다른 DNS 서버에게만 허용하는 것이 일반적) |
| forward only; | 질의를 오직 지정된 포워더에게만 전달 (캐싱 DNS에 주로 사용) |
| forwarders { ... }; | 포워딩 대상 DNS 서버 (예: 구글 DNS 등) |
📝 named.conf 설명과 예시
| directory | 존(zone) 파일이 저장될 기본 디렉터리 | directory "/var/named"; |
| listen-on port 53 { ... }; | DNS 서버가 수신할 네트워크 인터페이스 지정 | listen-on port 53 { any; }; |
| listen-on-v6 port 53 { ... }; | IPv6용 포트 리슨 설정 | listen-on-v6 port 53 { none; }; |
| recursion yes/no; | 재귀 질의 허용 여부 | recursion yes; |
| allow-query { ... }; | 질의 허용할 클라이언트 범위 지정 | allow-query { any; }; |
| allow-recursion { ... }; | 재귀 질의를 허용할 IP대역 지정 | allow-recursion { 192.168.0.0/16; }; |
| allow-transfer { ... }; | 존 파일 복제(전송) 허용 IP 지정. 슬레이브IP 지정 | allow-transfer { 203.247.60.0/24; }; |
| allow-update { ... }; | DDNS(dynamic update) 허용 대상 지정 | allow-update { none; }; |
| dnssec-enable yes/no; | DNSSEC 기능 사용 여부 | dnssec-enable no; |
| dnssec-validation yes/no; | DNSSEC 검증 수행 여부 | dnssec-validation no; |
| pid-file | 프로세스 ID 저장 파일 지정 | pid-file "/run/named/named.pid"; |
| dump-file | zone dump 저장 위치 | dump-file "/var/named/data/cache_dump.db"; |
| statistics-file | 통계 데이터 저장 위치 | statistics-file "/var/named/data/named_stats.txt"; |
| querylog yes/no; | DNS 질의 로그 활성화 여부 | querylog yes; |
| forward only/first; | 포워딩 방식 지정 | forward only; |
| forwarders { ... }; | 포워더 DNS 서버 지정 | forwarders { 8.8.8.8; 1.1.1.1; }; |
* named.conf의 zone 영역
| 루트 힌트 | zone "." IN { type hint; file "named.ca"; }; | 루트 DNS 정보 |
| 정방향 존 | zone "qwer.com" IN { type master; file "qwer.com.zone"; }; | 도메인→IP. 기본 디렉토리 참조. |
| 역방향 존 | zone "0.168.192.in-addr.arpa" IN { type master; file "192.168.0.zone"; }; | IP→도메인 |
| 슬레이브 존 | zone "qwer.com" IN { type slave; masters { 192.168.0.10; }; file "slaves/example.com.zone"; }; | Slave 서버용 존 |
* acl로 라벨링(또는 alias)처럼 사용할 수 있음
| acl "internal_net" { 192.168.0.0/16; 127.0.0.1; }; acl "trusted_slaves" { 203.247.60.0/24; }; |
acl로 값을 특정 이름으로 정의 |
| options { allow-query { internal_net; }; allow-transfer { trusted_slaves; }; } |
정의한 네이밍으로 값 입력. 아래와 동일한 설정이 됨. allow-query { 192.168.0.0/16; 127.0.0.1; }; allow-transfer { 203.247.60.0/24; }; |
📝 레코드 설명 예시
| vi example.zone | 보통 주 도메인 이름으로 파일명 작성 | |
| $TTL 1D @ IN SOA ns1.qwer.com. admin.qwer.com. ( 2025102201 ; Serial 1H ; Refresh 10M ; Retry 1W ; Expire 1D ) ; Minimum TTL ; IN NS ns1.qwer.com. IN NS ns2.qwer.com. ns1 IN A 192.168.0.10 ns2 IN A 192.168.0.11 www IN A 192.168.0.20 mail IN A 192.168.0.30 @ IN MX 10 mail.qwer.com. ftp IN CNAME www.qwer.com. |
zone파일 예시 url 뒤에는 "." 붙여야한다 |
|
| @ IN SOA ns1.qwer.com. admin.qwer.com. ( 2025102201 ; Serial ← 변경 시 증가 1H ; Refresh ← Slave가 갱신 요청 간격 10M ; Retry ← Slave에서 갱신 실패 시 재시도 간격 1W ; Expire ← Slave 데이터 만료 시간 1D ) ; Minimum TTL ← 캐시 유지시간 |
";" 로 끝난다. ns1.example.com.: 주 DNS서버 이름 admin.example.com.: 관리자 이메일 Serial: zone 파일 버전(보통 날짜+순번: YYYYMMDDnn) |
|
| $TTL | 모든 레코드의 기본 TTL(Time To Live) | $TTL 1D → 1일 |
| @ | 현재 zone의 도메인 이름 (qwer.com.)을 의미 | @ IN MX 10 mail.qwer.com. |
| Serial | zone파일 버전. Slave에서 확인하고 설정 복사해감. | 2025102801 (보통 현재시간으로 작성) |
| IN | Internet 클래스 (거의 항상 IN) | IN A 192.168.0.20 |
| SOA | 권한 시작 레코드, 존의 관리자 정보 포함 | 아래에 상세 |
| NS | 네임서버 지정 | IN NS ns1.qwer.com. |
| A | 호스트 이름 → IPv4 주소 매핑 | www IN A 192.168.0.20 |
| AAAA | 호스트 이름 → IPv6 주소 매핑 | www IN AAAA 2001:db8::1 |
| MX | 메일 서버 지정 (숫자가 낮을수록 우선순위 높음) | IN MX 10 mail.qwer.com. |
| CNAME | 별칭(alias) 지정 | ftp IN CNAME www.qwer.com. |
| TXT | 텍스트 정보 (SPF, 인증 등) | @ IN TXT "v=spf1 include:_spf.google.com ~all" |
📝 역방향 레코드 설명 예시
| named.conf에 zone 명시 | |
| zone "0.168.192.in-addr.arpa" IN { type master; file "192.168.0.zone"; }; |
"0.168.192.in-addr.arpa" → IP 192.168.0.x 대역을 의미 file "192.168.0.zone" → 해당 대역의 PTR 매핑정보가 들어 있는 파일명 |
| vi 192.168.0.zone | ||
| $TTL 1D @ IN SOA ns1.qwer.com. admin.qwer.com. ( 2025102201 ; Serial 1H ; Refresh 10M ; Retry 1W ; Expire 1D ) ; Minimum TTL ; IN NS ns1.qwer.com. 10 IN PTR ns1.qwer.com. 20 IN PTR www.qwer.com. 30 IN PTR mail.qwer.com. |
||
| $TTL | 기본 TTL 설정 | $TTL 1D |
| SOA | 권한 시작(정방향과 동일) | IN SOA ns1.qwer.com. admin.qwer.com. |
| NS | 해당 네트워크의 네임서버 지정 | IN NS ns1.qwer.com. |
| PTR | IP 주소 → 도메인 이름 매핑 | 10 IN PTR ns1.qwer.com. 역방향은 모두 PTR 레코드다. |
📌 추가 팁: DNS 관련 명령어 사용 예제
DNS 서비스 관리 명령어
| DNS 데몬 실행 명령 (보통 systemd로 관리) | systemctl start named |
| 설정 변경 후 재시작 | systemctl restart named |
| 동작 상태 확인 | systemctl status named |
| 서비스 재시작 없이 설정 다시 읽기 | rndc reload |
| BIND 상태 정보 출력 | rndc status |
| 캐시 데이터 비우기 | rndc flush |
| named.conf 문법 검사 | named-checkconf /etc/named.conf |
| 특정 존 파일 구문 검사 | named-checkzone qwer.com /var/named/qwer.com.zone |
| 역방향 존 검사 | named-checkzone 0.168.192.in-addr.arpa /var/named/192.168.0.zone |
DNS 확인 명령어
| 기본 질의 | dig www.qwer.com | 기본 A 레코드 조회 |
| 특정 DNS서버 지정 | dig @8.8.8.8 www.qwer.com | 8.8.8.8로 직접 질의 |
| NS 레코드 조회 | dig qwer.com NS | 네임서버 목록 조회 |
| MX 레코드 조회 | dig qwer.com MX | 메일서버 확인 |
| PTR 조회 (역방향) | dig -x 192.168.0.10 | IP → 도메인 변환 |
| TTL 확인 | dig www.qwer.com +ttlunits | TTL 단위 포함 출력 |
| 캐시 테스트 | dig www.qwer.com +trace | 루트→TLD→Authoritative 단계 추적 |
| 기본 질의 | nslookup www.qwer.com | 간단히 확인 |
| 특정 서버 지정 | nslookup www.qwer.com 8.8.8.8 | 8.8.8.8에 질의 |
| 역방향 질의 | nslookup 192.168.0.10 | IP → 도메인 변환 |
📌 추가 팁: 리눅스 서버에 DNS 사용설정
| vi /etc/resolv.conf 구성 | |
| nameserver 192.168.0.10 nameserver 8.8.8.8 search corp.qwer.com localdomain options timeout:2 attempts:3 rotate |
- nameserver는 위부터 순서대로 질의 시도 - search corp.com localdomain → ping web 입력시 ping web.qwer.com 으로 자동 보정 - options timeout:2 attempts:3 rotate → 2초 안에 응답 없으면 다음 서버로 최대 3회 시도, 순환 질의 |
🧠 정리할게 이렇게 많이 필요한가 싶지만.. 이렇게 많이 필요하다.
[15번답안]

① http_port 8080
② acl hacker srcdomain .hacker.com
③ http_access deny hacker
④ http_access allow all
🎯답안해석
squid proxy를 이용한 내부사용자의 http 이용 통제
사용자 웹 접근제어가 필요한 경우 squid proxy를 쓴다고 생각하면 될 듯
✅ 예상문제 (Squid 프록시 서버 설정 - 접속 제어 및 포트 설정)
💡 보충 설명
| 디렉티브 | 설명 |
| http_port | Squid가 수신 대기할 포트 번호 지정 |
| acl [이름] [유형] [값] | 접근 제어 목록 정의 (도메인, IP, 시간 등으로 제어 가능) |
| http_access [allow|deny] [ACL이름] | 해당 조건(ACL)에 부합하면 접근 거부 |
그 외 구성 설명
| acl, http_access | 접근제어 핵심 구성. acl로 조건 생성, http_access로 정책 생성 |
| cache_mem, cache_dir | 캐시 메모리/디스크 설정 |
| visible_hostname | 호스트명 지정 |
| auth_param | 사용자 인증 설정 |
| access_log, cache_log | 로그 경로 |
| refresh_pattern | 캐시 유효기간 패턴 |
| cache_peer | 상위 프록시 설정 |
📝 사용 예시
| http_port 3128 | Squid가 클라이언트 요청을 수신할 포트를 지정합니다. (default 3128) |
| visible_hostname squid.local | Squid 서버의 호스트명을 지정합니다. (squid.local) |
| acl localnet src 192.168.0.0/16 | “내부망 IP 대역(192.168.x.x)”을 localnet이라는 이름으로 정의합니다. |
| acl SSL_ports port 443 | HTTPS(SSL) 요청을 허용할 포트 번호를 정의합니다. |
| acl Safe_ports port 80 443 21 1025-65535 | 허용할 수 있는 안전한 포트(Safe Ports) 리스트를 정의합니다. http(80), https(443), ftp(21), 사용자정의포트(1025-65535) |
| acl CONNECT method CONNECT | CONNECT 메서드(HTTPS 터널링용) 을 정의하기 위한 ACL입니다. |
| http_access allow localnet | 위에서 정의한 localnet ACL(내부망 IP 대역)을 허용합니다. |
| http_access deny !Safe_ports | Safe_ports에 포함되지 않은 포트(!Safe_ports)로 접근하면 차단합니다. |
| http_access deny CONNECT !SSL_ports | CONNECT 메서드(HTTPS) 요청이지만, 443(SSL_ports) 외 포트로 연결하려 하면 차단합니다. ➜ HTTPS 터널링 악용 방지 |
| http_access deny all | 위 조건에 해당하지 않는 모든 요청 차단. 화이트 리스트로 접근제어. |
| cache_mem 256 MB | 메모리 캐시 크기를 256MB로 지정합니다. |
| maximum_object_size 4096 KB | 캐시에 저장할 수 있는 최대 파일 크기(4MB) 를 지정합니다. ➜ 너무 큰 파일은 캐시에 넣지 않고 바로 전달합니다. |
| refresh_pattern . 0 20% 4320 | 캐시 갱신 정책(유효기간) 을 지정합니다. . : 모든 URL에 적용 0 : 최소 TTL (분 단위) 20% : 문서 나이에 따른 갱신율 4320 : 최대 TTL(분 단위, = 3일) ➜ 일정 시간 내에는 원본 서버 대신 캐시에서 응답. |
| access_log /var/log/squid/access.log squid | 접근 로그 파일 경로 및 포맷을 지정합니다. /var/log/squid/access.log : 저장 위치 squid : 기본 포맷 사용 ➜ “언제 누가 어떤 사이트를 요청했는가”를 기록합니다. |
📌 추가 팁:
- ACL은 반드시 http_access 규칙보다 먼저 정의해야 함 (정의 만든 다음 정책 지정)
- deny 규칙이 allow보다 먼저 선언되어야 제대로 동작함 (위에서부터 순서대로 정책적용)
* ACL의 유형과 값 설명
- acl [이름] [유형] [값]
| src | 요청을 보낸 클라이언트의 IP 주소 기준 | acl office src 192.168.0.0/24 |
| dst | 요청 대상 서버의 IP 주소 기준 | acl extnet dst 8.8.8.8 |
| dstdomain | 요청 대상의 도메인명 기준 | acl blocksite dstdomain .hacker.com |
| srcdomain | 클라이언트의 도메인명 기준 | acl localdomain srcdomain .company.local |
| port | 요청 포트 기준 | acl Safe_ports port 80 443 |
| proto | 프로토콜 기준 | acl ftp proto FTP |
| method | HTTP 메서드(GET, POST 등) 기준 | acl onlyget method GET |
| time | 요일/시간 기준 | acl worktime time MTWHF 09:00-18:00 |
| url_regex | URL 경로를 정규식으로 매칭 | acl adblock url_regex "/ads/" |
| browser | User-Agent(브라우저 정보) 기준 | acl oldie browser MSIE |
| maxconn | 한 IP당 동시 연결 수 제한 | acl too_many_conns maxconn 5 |
- acl [이름] [유형] [값]
| src | IP 주소 / CIDR | 192.168.0.0/16 |
| dstdomain | 도메인명 (앞에 . 붙이면 하위 도메인 포함) | .youtube.com |
| time | 요일 + 시간대 | MTWHF 09:00-18:00 (월~금 오전 9시~오후6시) |
| method | HTTP 메서드명 | GET / POST / CONNECT |
| url_regex | 정규 표현식 | "youtube" |
| port | 포트 번호 | 80 443 8080 |
📌 참고) Squid (/etc/squid/squid.conf) vs Apache (/etc/httpd/conf/httpd.conf)
- 물론 용도가 명백히 다르나 설정에서 헷갈리 수 있으므로 주요 설정 비교
| 역할 | 프록시 서버 (클라이언트 ↔ 인터넷 중계) | 웹 서버 (클라이언트에게 직접 콘텐츠 제공) |
| 포트 설정 | http_port | Listen |
| 접근제어 | acl, http_access | Require, Allow, Deny (Apache 2.2 이하) |
| 도메인 기반 차단 | acl srcdomain 등 | 불가능 (Apache는 클라이언트 기준 제어 X) |
| 로그 | /var/log/squid/access.log | /var/log/httpd/access_log |
| 기본 동작 | 클라이언트 요청을 중계 | 요청에 직접 응답 |
[16번답안]

① -P INPUT ACCEPT (①번부터 ⑤번까지 ‘-t filter’ 추가 가능)
② -F INPUT (①번부터 ⑤번까지 옵션 표기 관련 추가 정답 있음)
③ -A INPUT -s 192.168.4.14 -j DROP
④ -A INPUT -p tcp --dport 22 -j ACCEPT
⑤ -A INPUT -p tcp --dport 20:30 -j DROP
🎯답안해석
iptable을 이용한 OS level 방화벽 설정 특정 IP,port의 차단과 특정 port만 허용
NAT를 하는지 Filter를 하는지도 잘 봐야함
✅ 예상문제 (iptables – 기본 정책, 규칙 추가/삭제)
시스템 관리자는 리눅스 서버의 방화벽을 설정하여, 기본 수신 정책을 지정하고 특정 IP/포트에 대한 접근을 제어하려고 한다.
다음은 iptables를 사용한 설정 과정이다. 각 빈칸에 들어갈 알맞은 명령어 옵션을 쓰시오.
(모든 명령어는 -t filter를 생략하거나 포함할 수 있음)
① 수신 체인(INPUT)의 기본 정책을 **ACCEPT(허용)**으로 설정하려고 한다.
iptables (1) ______________________________________
② INPUT 체인의 기존 규칙을 모두 초기화(삭제) 하려 한다.
iptables (2) ______________________________________
③ 특정 IP(192.168.4.14)에서 들어오는 모든 패킷을 차단(DROP) 하려 한다.
iptables (3) ______________________________________
④ TCP 프로토콜의 **22번 포트(SSH)**를 수신 허용하려고 한다.
iptables (4) ______________________________________
⑤ TCP 프로토콜의 20번부터 30번까지의 포트 범위를 차단하려고 한다.
iptables (5) ______________________________________
💡 보충 설명
필드 예시 간단 설명
| iptables [테이블옵션] [동작옵션] [체인] [조건] [타깃] |
||
| 테이블 옵션 (-t) | -t filter, -t nat | 어떤 테이블을 다룰지 지정 (생략 시 기본은 filter) |
| 동작 옵션 | -A, -I, -D, -F, -L, -P | 규칙 추가·삽입·삭제·초기화·조회·정책설정 등 |
| 체인 (CHAIN) | INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING | 패킷이 통과하는 경로 단계 지정 |
| 조건 (조건절) | -p, -s, -d, --dport, --sport, -i, -o | 어떤 패킷을 대상으로 할지 지정 |
| 타깃 (-j) | -j ACCEPT, -j DROP, -j REJECT, -j LOG | 규칙이 일치했을 때 수행할 동작 지정 |
| 명령어 | 설명 |
| -P | 기본 정책 설정 (ACCEPT or DROP) (블랙리스트 or 화이트리스트) |
| -F 또는 --flush | 기존 규칙 전체 삭제 |
| -s, -d | 출발지 IP 지정, 도착지 IP 지정. 범위 지정하려면 ":" 사용. (100부터 200포트 -> 100:200) |
| --sport, --dport | 출발지, 목적지 포트 (-t tcp or -t udp 뒤에 이어서 사용) |
| -j | 행동 지정 (ACCEPT, DROP, REJECT 등) |
| iptables-save > iptable.rule iptables-restore < iptable.rule |
iptables 정책 백업, 복원 |
| service iptables save 또는 iptables-save |
현재 정책 영구적용. 재부팅시 그대로 가져옴. (iptables-persistent : Ubuntu용) |
명령어 기능 예시
| iptables -P <CHAIN> <POLICY> | 체인의 기본 정책 설정 | iptables -P OUTPUT ACCEPT |
| iptables -F <CHAIN> | 지정 체인의 모든 규칙 초기화 | iptables -F INPUT |
| iptables -A <CHAIN> | 체인의 끝에 새로운 규칙 추가 | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
| iptables -s <IP> | 출발지 IP 지정 | iptables -A INPUT -s 10.0.0.5 -j DROP |
| iptables -p <프로토콜> | 프로토콜 지정 (tcp, udp 등) | iptables -A INPUT -p udp --dport 53 -j ACCEPT |
| iptables --dport <포트> | 목적지 포트 지정 | iptables -A INPUT -p tcp --dport 443 -j ACCEPT |
| iptables -j <ACTION> | 수행할 동작 지정 (ACCEPT, DROP, REJECT 등) | iptables -A FORWARD -j DROP |
| iptables -I <CHAIN> <number> | 지정한 숫자의 행에 룰 입력 | iptables -I INPUT 4 -p tcp -doprt 88 -j DROP |
💡 보충 설명2 : nat 테이블 관련 (default는 filter 테이블)
- PREROUTING 체인 (Destination NAT, DNAT): 패킷이 라우팅되기 전에 목적지 주소를 변경함 (주로 포트 포워딩)
- POSTROUTING 체인 (Source NAT, SNAT): 패킷이 라우팅을 마친 후 출발지 주소를 변경함 (주로 내부망의 공인 IP 공유)
| -t nat | 테이블 변경하여 조회/수정 |
| --to-source | 출발지 IP 변환 지정 |
| --to-destination | 도착지 IP 변환 지정 |
| iptables -t nat -L | nat 테이블 규칙 확인 |
| iptables -t nat -A PREROUTING -j DNAT | 목적지에 관한 포트 포워딩 (DNAT) |
| iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80 | 포트 포워딩 (DNAT - 외부 8080 → 내부 서버 80) |
| iptables -t nat -A PREROUTING -p udp -s 192.168.1.50 --dport 53 -j DNAT --to-destination 8.8.8.8 | 내부사용자가 DNS를 사용할 때, 8.8.8.8로 포트 포워딩 |
| iptables -t nat -A POSTROUTING -j SNAT | 출발지에 관한 포트 포워딩 (SNAT) |
| iptables -t nat -A PREROUTING -i eth0 -p tcp -j DNAT --to-destination 192.168.1.101 | eth0 인터페이스로 들어오는 모든 TCP 트래픽을 내부 서버로 포워딩합니다. (인터페이스를 명시하여 규칙 적용 범위를 제한) |
| iptables -t nat -A OUTPUT -d 203.0.113.10 -p tcp --dport 3306 -j DNAT --to-destination 127.0.0.1:3307 | 내부에서 외부 IP, 특정 포트(3306)로 접속을 시도할 때, 내부의 다른 포트(3307)로 리다이렉트합니다. (개발 환경에서 내부 서비스 포트를 변경할 때 유용) (e.g. 80 try를 443으로 변경) |
| iptables -t nat -A POSTROUTING -s 192.168.1.200 -j SNAT --to-source 203.0.113.5 | 내부 서버에서 나가는 모든 트래픽의 출발지 IP 주소를 고정된 공인 IP로 변경합니다. |
| iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE | 내부 서버에서 나가는 모든 트래픽의 출발지 IP 주소를 동적 공인 IP 주소로 변경합니다. (공유기 역할 시 가장 많이 사용) |
* 마스커레이딩 -> 내부 사설IP들이 외부로 나갈 때 동적 공인IP를 달고 나가는 것.
📌 추가 팁:
- FORWARD, OUTPUT 차이
FORWARD - 다른 네트워크로 전달되는 트래픽. 리눅스 서버가 라우터/게이트웨이 역할을 할 때, 서버를 통과하는 패킷을 제어OUTPUT - 리눅스 서버 자체에서 생성되어 나가는 트래픽. 서버 자체에서 실행된 프로세스 (SSH, HTTPD, Redis 등)가 외부로 접속하는 것을 제어.
- iptables vs firewalld
| 서비스 시작 | systemctl start iptables | systemctl start firewalld |
| 규칙 보기 | iptables -L -n -v | firewall-cmd --list-all |
| 규칙 추가 | iptables -A INPUT -p tcp --dport 22 -j ACCEPT | firewall-cmd --add-service=ssh |
| 영구 적용 | iptables-save > /etc/iptables/rules.v4 | firewall-cmd --add-service=ssh --permanent |
| 규칙 삭제 | iptables -D INPUT 1 | firewall-cmd --remove-service=ssh |
| 설정 반영 | 즉시 반영 (현재 세션) | --permanent 설정 후 firewall-cmd --reload 필요 |
firewall-cmd 예시
| firewall-cmd --state | firewalld 서비스 상태 확인 (running / not running) |
| firewall-cmd --get-active-zones | 현재 활성화된 Zone 확인 |
| firewall-cmd --zone=public --list-all | public 존의 전체 설정(서비스, 포트, 인터페이스 등) 확인 |
| firewall-cmd --add-service=ssh | SSH 서비스 임시 허용 (즉시 적용, 재부팅 시 사라짐) |
| firewall-cmd --add-service=http --permanent | HTTP 서비스(80/tcp) 영구 허용 |
| firewall-cmd --reload | 영구 설정(--permanent) 변경사항을 반영 |
| firewall-cmd --add-port=8080/tcp --permanent | 8080/tcp 포트를 영구 허용 |
| firewall-cmd --remove-service=ftp --permanent | FTP 서비스 영구 차단 |
| firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.10" reject' --permanent | 특정 IP(192.168.1.10)에서 오는 요청을 거부 |
| firewall-cmd --zone=internal --change-interface=ens33 --permanent | 네트워크 인터페이스(ens33)를 internal 존에 할당 |
| firewall-cmd --list-services | 현재 허용된 서비스 목록 표시 |
| firewall-cmd --list-ports | 허용된 포트 목록 표시 |
| firewall-cmd --get-default-zone | 기본 zone 확인 |
| firewall-cmd --set-default-zone=public | 기본 zone 변경 |
| firewall-cmd --zone=public --remove-port=8080/tcp --permanent | 포트 제거 |
덤) 잘 모르는 부분은 특히 설명에 힘이 들어간 것 같다
'IT배움 > 자격증' 카테고리의 다른 글
| 리눅스마스터 1급 2차 2501 실기 모범답안 예상문제 만들기 (1~16문) (0) | 2025.11.07 |
|---|---|
| 리눅스마스터 1급 1차 시험문제 풀이 (20220312 51~100문) (0) | 2024.05.06 |
| 리눅스마스터 1급 1차 시험문제 풀이 (20220312 1~50문) (4) | 2024.02.08 |