네트워크 관련 스크립트
네트워크 명령어는 리눅스마스터 2급 시험에서 꾸준히 출제됩니다. 명령어의 출력 결과를 해석하거나, 상황에 맞는 명령어를 선택하는 문제가 많습니다. 이 절에서는 핵심 명령어를 정리하고 쉘 스크립트에서 활용하는 방법도 함께 다룹니다.
출제 유형 1 — 네트워크 명령어
ifconfig와 ip addr
# 전통적인 네트워크 인터페이스 확인ifconfig# 현대적인 방법 (ip 명령어)ip addr showip addr show eth0 # 특정 인터페이스만# 인터페이스 활성화/비활성화ip link set eth0 upip link set eth0 down
ifconfig 출력의 주요 항목은 다음과 같습니다.
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:11:22:33:44:55 txqueuelen 1000 (Ethernet)
| 항목 | 의미 |
|---|---|
inet |
IPv4 주소 |
netmask |
서브넷 마스크 |
broadcast |
브로드캐스트 주소 |
ether |
MAC 주소 |
UP |
인터페이스 활성화 상태 |
netstat와 ss
# 열린 포트와 연결 상태 확인 (netstat)netstat -tuln # TCP/UDP 수신 포트 목록netstat -an # 모든 연결 상태# 현대적인 방법 (ss)ss -tuln # TCP/UDP 수신 포트 목록ss -s # 소켓 통계 요약
| 옵션 | 의미 |
|---|---|
-t |
TCP |
-u |
UDP |
-l |
LISTEN 상태만 |
-n |
서비스명 대신 숫자로 표시 |
-p |
프로세스 정보 포함 |
네트워크 진단 명령어
# 호스트 연결 확인ping -c 4 8.8.8.8# 경로 추적traceroute 8.8.8.8# DNS 조회nslookup google.comdig google.com A # A 레코드 조회dig google.com MX # MX 레코드 조회# 라우팅 테이블 확인route -nip route show
문제 1
다음 중 현재 시스템에서 수신 대기 중인 TCP 포트 목록을 숫자 형태로 확인하는 명령어로 올바른 것은 무엇인가.
netstat -tulnnetstat -allifconfig -portss -show
정답: 1번. netstat -tuln은 TCP(-t), UDP(-u), 수신 대기(-l), 숫자 형식(-n)으로 포트 목록을 출력합니다.
문제 2
다음 중 도메인의 MX 레코드를 조회하는 명령어로 올바른 것은 무엇인가.
ping example.com MXnslookup -type MX example.comtraceroute example.com MXroute example.com MX
정답: 2번. nslookup -type=MX example.com 또는 dig example.com MX로 MX 레코드를 조회합니다. 2번은 -type 옵션을 사용하는 올바른 형태입니다.
출제 유형 2 — 네트워크 설정 파일
리눅스 네트워크 관련 설정 파일의 역할을 알아야 합니다.
| 파일 | 역할 |
|---|---|
/etc/hosts |
호스트명 - IP 주소 정적 매핑 |
/etc/resolv.conf |
DNS 서버 설정 |
/etc/hostname |
시스템 호스트명 |
/etc/network/interfaces |
Debian 계열 네트워크 설정 |
/etc/netplan/*.yaml |
Ubuntu 18.04+ 네트워크 설정 |
# /etc/hosts 예시127.0.0.1 localhost192.168.1.10 server01.local server01# /etc/resolv.conf 예시nameserver 8.8.8.8nameserver 8.8.4.4search example.com
iptables와 ufw 기초
# ufw (Uncomplicated Firewall) - Ubuntu 기본 방화벽ufw enable # 방화벽 활성화ufw disable # 방화벽 비활성화ufw status # 상태 확인ufw allow 22 # SSH 허용ufw allow 80/tcp # HTTP 허용ufw deny 23 # Telnet 차단ufw delete allow 80 # 규칙 삭제# iptables - 전통적인 방화벽iptables -L # 규칙 목록 확인iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 80포트 허용iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH 허용
문제 3
DNS 서버 주소를 설정하는 파일로 올바른 것은 무엇인가.
/etc/hosts/etc/hostname/etc/resolv.conf/etc/network/dns
정답: 3번. /etc/resolv.conf에 nameserver 항목으로 DNS 서버 주소를 설정합니다. /etc/hosts는 정적 호스트 매핑, /etc/hostname은 시스템 이름을 설정합니다.
네트워크 모니터링 스크립트 예시
지금까지 학습한 명령어를 실제 스크립트로 활용해봅니다.
호스트 ping 체크 스크립트
#!/bin/bash# 새 파일: check_host.shHOSTS=("8.8.8.8" "1.1.1.1" "google.com")LOG_FILE="/var/log/ping_check.log"TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')for host in "${HOSTS[@]}"; do if ping -c 1 -W 3 "$host" > /dev/null 2>&1; then echo "$TIMESTAMP $host: UP" | tee -a "$LOG_FILE" else echo "$TIMESTAMP $host: DOWN" | tee -a "$LOG_FILE" fidone
포트 연결 확인 스크립트
#!/bin/bash# 새 파일: check_port.shHOST="${1:-localhost}"PORT="${2:-80}"TIMEOUT=5if timeout "$TIMEOUT" bash -c "echo > /dev/tcp/$HOST/$PORT" 2>/dev/null; then echo "$HOST:$PORT 연결 가능" exit 0else echo "$HOST:$PORT 연결 불가" exit 1fi
실행 예시입니다.
chmod +x check_port.sh./check_port.sh google.com 443./check_port.sh localhost 22
네트워크 인터페이스 상태 확인 스크립트
#!/bin/bash# 새 파일: check_interfaces.shecho "=== 네트워크 인터페이스 상태 ==="echo ""# ip 명령어로 인터페이스 목록 조회ip -brief addr show | while read -r iface state ip_info; do printf "%-15s %-10s %s\n" "$iface" "$state" "$ip_info"doneecho ""echo "=== 라우팅 테이블 ==="ip route show
문제 4
다음 스크립트에서 check_port.sh가 특정 포트에 접속 가능한지 확인하는 방법으로 Bash의 어떤 기능을 사용하고 있는가.
timeout 5 bash -c "echo > /dev/tcp/$HOST/$PORT"
/dev/tcp를 통한 Bash 내장 TCP 연결 기능- netcat(nc) 유틸리티
- telnet 프로토콜
- curl의 TCP 모드
정답: 1번. Bash는 /dev/tcp/호스트/포트라는 특수 파일을 통해 TCP 연결을 테스트할 수 있습니다. 이것은 Bash 내장 기능으로 별도 유틸리티 없이 포트 연결 가능 여부를 확인할 수 있습니다.
이제 01장에서 배운 유형별 문제 풀이를 바탕으로 02장에서 실전 모의 문제에 도전해봅니다. 유형을 알고 풀면 처음 보는 문제도 접근법이 보입니다.