🌐
네트워크 트러블슈팅 명령어 치트시트
이 트랙 35개 모듈의 핵심 명령어·단축키 342개를 한 곳에 모았습니다. 실무 중 “그 명령어 뭐였지?” 할 때 검색해 바로 꺼내 쓰세요. 각 모듈 제목을 누르면 해당 강의로 이동합니다.
342개 명령 · 35개 모듈
| 명령어(계층) | 용도 | 자주 쓰는 예 |
|---|---|---|
ip link show (L1/L2) | 인터페이스 UP/DOWN·MTU 확인 | ip link show eth0 |
arp -n (L2) | 같은 LAN의 MAC 학습 확인 | arp -n |
ping -c <N> (L3) | IP 도달성(ICMP) 검증 | ping -c 4 8.8.8.8 |
ip route get <IP> (L3) | 목적지로 나가는 경로 확인 | ip route get 8.8.8.8 |
nc -zv <host> <port> (L4) | TCP 포트 열림 확인 | nc -zv 192.168.1.10 443 |
telnet <host> <port> (L4) | 포트 연결 수동 확인 | telnet 192.168.1.10 80 |
ss -tlnp (L4) | 로컬 리스닝 포트 확인 | ss -tlnp | grep :443 |
curl -I <url> (L7) | HTTP 응답·헤더 확인 | curl -I http://example.com |
ping -M do -s 1472 <host> (심화) | 경로 MTU(단편화 금지) 확인 | ping -M do -s 1472 대상 |
| 명령어 | 용도 | 자주 쓰는 예 |
|---|---|---|
ip addr show | NIC의 IP·CIDR(prefix) 확인 | ip a, ip addr show eth0 (inet 10.0.1.25/24 형태) |
ipcalc <IP/CIDR> | 네트워크·브로드캐스트·호스트 범위 계산 | ipcalc 192.168.10.50/24 (Network/Broadcast/HostMin~Max) |
ip route show | 라우팅 테이블·기본 게이트웨이 확인 | ip r → default via가 게이트웨이 |
ip route get <IP> | 직접 통신인지 게이트웨이 경유인지 판별 | ip route get 10.0.2.50 → via 있으면 라우터 경유 |
python3 -c "import ipaddress…" | 두 IP가 같은 서브넷인지 프로그램 판정 | ipaddress.ip_address('10.0.1.200') in ip_network('10.0.1.0/24') |
ip addr add/del | 잘못 설정한 IP/CIDR 교정 | ip addr del 10.0.1.50/25 dev eth0 && ip addr add 10.0.1.50/24 dev eth0 |
| 명령어 | 용도 |
|---|---|
| ip route | 라우팅 테이블 확인 |
| ip route show | 라우팅 테이블 확인 |
| ip route get [목적지 IP] | 특정 목적지 경로 추적 |
| ip route add [서브넷/prefix] via [게이트웨이] dev [인터페이스] | 정적 경로 추가 (임시) |
| ip route add default via [게이트웨이] dev [인터페이스] | 디폴트 게이트웨이 추가 (임시) |
| ip route del [서브넷/prefix] via [게이트웨이] | 경로 삭제 |
| ip route change [서브넷/prefix] via [새 게이트웨이] | 경로 변경 |
| ip rule show | 정책 라우팅 규칙 확인 |
| 명령어 | 용도 |
|---|---|
| $ systemd-resolve --status | 시스템이 실제 사용하는 DNS 확인 |
| $ cat /etc/resolv.conf | 시스템이 실제 사용하는 DNS 확인 |
| $ nmcli dev show | grep DNS | 시스템이 실제 사용하는 DNS 확인 |
| $ dig @10.0.0.53 myapi.internal.com | 특정 DNS 서버로 직접 테스트 |
| $ dig @8.8.8.8 myapi.internal.com | 특정 DNS 서버로 직접 테스트 |
| 명령어 | 용도 |
|---|---|
| nc -l [포트] | nc 서버 모드 (포트 열기) |
| nc -l -p [포트] -v | nc 서버 모드 (포트 열기) |
| nc [IP] [포트] | nc 클라이언트 모드 (접속) |
| nc -zv [IP] [포트] | nc 클라이언트 모드 (접속) |
| nc -zuv [IP] [포트] | nc 클라이언트 모드 (접속) |
| ss -tlnp | 포트 현황 확인 |
| ss -ulnp | 포트 현황 확인 |
| ss -tnp | 포트 현황 확인 |
| grep [서비스명] /etc/services | 서비스별 기본 포트 확인 |
| 명령어 | 용도 | 자주 쓰는 예 |
|---|---|---|
ip addr show | 인터페이스 IP·상태 확인 | ip a, ip addr show eth0 (state UP인데 inet 없으면 IP 미할당) |
ip link show | 실제 인터페이스명·L2 상태 확인 | eth0 대신 ens3·enp2s0인지 대조, ip link set eth0 up/down |
ip route show | 라우팅·기본 게이트웨이 확인 | ip r → default via가 없으면 외부 통신 불가 |
nmcli con show | 연결 프로파일 목록·상세 | nmcli con show --active, nmcli con show "System eth0" |
nmcli device status | 디바이스 관리 상태 확인 | connected/disconnected/unmanaged 구분 |
nmcli con modify … ipv4.method manual | DHCP→고정 IP 전환 | auto(DHCP) ↔ manual(고정) |
nmcli con modify … ipv4.addresses/gateway/dns | 고정 IP·GW·DNS 설정 | ipv4.dns "8.8.8.8,8.8.4.4" |
nmcli con down/up | 변경 설정 적용(재부팅 없이) | nmcli con down "System eth0" && nmcli con up "System eth0" |
nmcli con add type ethernet | 새 프로파일 생성(기존 보존·롤백용) | … con-name static-eth0 ifname ens3 ipv4.method manual … |
nmcli con modify … +/-ipv4.addresses | 보조 IP(VIP) 추가/제거 | +ipv4.addresses 192.168.1.201/24(추가), -로 제거 |
nmcli con modify … ethernet.mtu | MTU(점보프레임) 조정 | ethernet.mtu 9000 → 경로 전체가 지원해야 함 |
ip addr add/del … dev eth0 | 임시 IP 추가/제거(재부팅 시 소멸) | 콘솔 복구 시 ip addr add 192.168.1.200/24 dev eth0 |
ping -M do -s <크기> <IP> | 경로 MTU(조각화 금지) 점검 | ping -M do -s 1472 IP(MTU 1500), -s 8972(9000) |
arping -A -I eth0 <IP> | IP 이전 후 ARP 캐시 갱신 | arping -A -I eth0 10.100.5.50 -c 3 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
cat /etc/resolv.conf | 현재 nameserver·search·options 확인 | 가장 먼저 — nameserver가 비었/틀렸는지 |
ls -la /etc/resolv.conf | 관리 주체(심볼릭 링크) 판별 | 링크면 systemd-resolved가 덮어씀 |
ping (IP vs 도메인) | DNS 문제 vs 네트워크 문제 분리 | ping -c2 8.8.8.8 성공 + ping -c2 google.com 실패 = DNS |
nslookup <도메인> <서버> | 특정 DNS 서버로 직접 질의 | nslookup google.com 8.8.8.8 (성공=resolv.conf 문제) |
dig | 질의 상세·특정 서버 지정 | dig @8.8.8.8 google.com |
dig +trace | 루트→TLD→권한 위임 경로 추적 | dig +trace google.com (SERVFAIL 원인) |
nmcli con mod ... ipv4.dns | 재부팅 후에도 유지되는 영구 DNS | sudo nmcli con mod "ens3" ipv4.dns "8.8.8.8 8.8.4.4" |
nmcli con mod ... ipv4.ignore-auto-dns | DHCP가 준 DNS 무시 | sudo nmcli con mod "ens3" ipv4.ignore-auto-dns yes |
resolvectl status | systemd-resolved DNS 상태 확인 | 적용된 nameserver·fallback 확인 |
resolvectl flush-caches | DNS 캐시 플러시 | 이상한 해석 결과 나올 때 |
grep hosts /etc/nsswitch.conf | 이름 해석 순서(files/dns) 확인 | /etc/hosts가 DNS보다 우선하는지 |
netplan apply | Netplan YAML DNS 반영(Ubuntu Server) | sudo netplan apply 후 resolvectl status |
| 목적 | 명령어 |
|---|---|
| 모든 리스닝 소켓 확인 | ss -tulnp |
| MySQL 바인딩 확인 | ss -tulnp | grep 3306 |
| Redis 바인딩 확인 | ss -tulnp | grep 6379 |
| MySQL bind-address 설정 위치 | /etc/my.cnf 또는 /etc/my.cnf.d/*.cnf |
| Redis bind 설정 위치 | /etc/redis/redis.conf |
| MySQL 재시작 | systemctl restart mysqld |
| Redis 재시작 | systemctl restart redis |
| 방화벽에서 특정 IP만 3306 허용 (CentOS) | firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept' --permanent |
| 명령어 | 용도 |
|---|---|
| ip route show | 조회 |
| sudo ip route add default via [GW_IP] dev [INTERFACE] | 추가 |
| sudo ip route del default | 삭제 |
| sudo ip route replace default via [GW_IP] dev [INTERFACE] | 교체 |
| 명령어 | 용도 | 자주 쓰는 예 |
|---|---|---|
sysctl net.ipv4.ip_forward | IP 포워딩 활성 여부 확인/설정 | sudo sysctl -w net.ipv4.ip_forward=1 (0이면 DNAT해도 드랍) |
iptables -t nat -A PREROUTING … -j DNAT | 포트 포워딩(목적지 변환) | --dport 8080 -j DNAT --to-destination 10.0.0.2:80 |
iptables -t nat -A POSTROUTING … -j MASQUERADE | 동적 IP SNAT(내부→외부) | -s 10.0.0.0/24 -o eth0 -j MASQUERADE |
iptables -t nat -A POSTROUTING … -j SNAT | 고정 공인 IP SNAT | -j SNAT --to-source 5.6.7.8 |
iptables -A FORWARD … -j ACCEPT | 포워딩 트래픽 허용(정책 DROP 대비) | -d 10.0.0.2 --dport 80 -m state --state NEW,ESTABLISHED,RELATED |
iptables -t nat -L -n -v | NAT 룰·적중(pkts) 확인 | pkts=0이면 트래픽이 그 체인에 안 닿음 |
iptables -t nat -D / -F | 룰 삭제/초기화 | -D PREROUTING 2(번호 삭제), -F(nat 전체 초기화) |
iptables -t nat -I PREROUTING 1 … -j LOG | 패킷 흐름 추적 | --log-prefix "NAT-PRE: " 후 journalctl -f | grep NAT-PRE |
iptables-save / -restore | 규칙 영구 저장·복원 | iptables-save > /etc/iptables/rules.v4 |
ss -tlnp | 대상 포트 LISTEN 교차 확인 | DNAT 대상 서버에서 해당 포트가 열렸는지 |
conntrack -S / -L -d <IP> | SNAT 포트 고갈 진단 | conntrack -S | grep insert_failed, conntrack -L -d 203.0.113.50 | wc -l |
| 명령어/옵션 | 용도 | 자주 쓰는 예 |
|---|---|---|
ping -c <N> | 지정 횟수만 보내고 종료(무한 방지) | ping -c 4 8.8.8.8 |
ping -i <초> | 전송 간격 조절(촘촘히 관찰) | ping -c 10 -i 0.2 8.8.8.8 |
ping -s <바이트> | 패킷 크기 지정(MTU 테스트) | ping -c 4 -s 1400 8.8.8.8 |
ping -W <초> | 응답 대기(타임아웃) 제한 | ping -c 4 -W 1 192.168.1.1 |
mtr --report | 홉별 손실·지연 위치 추적 | mtr --report --report-cycles 100 8.8.8.8 |
traceroute <host> | 목적지까지 경로(홉) 추적 | traceroute 8.8.8.8 |
telnet <host> <port> | 포트 열림(L4) 확인 — ping 보완 | telnet 192.168.1.100 80 |
nc -zv <host> <ports> | 데이터 없이 포트 스캔(L4) | nc -zv 192.168.1.100 80 443 |
curl -I <url> | 서비스 응답(L7) 확인 | curl -I http://my-server.example.com |
iptables … --icmp-type echo-request | 호스트 방화벽에서 ICMP 허용 | sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT |
firewall-cmd --list-all | firewalld의 ICMP 차단 여부 확인 | sudo firewall-cmd --list-all | grep icmp |
| 명령어/옵션 | 용도 | 자주 쓰는 예 |
|---|---|---|
telnet <host> <port> | 단발 TCP 포트 연결 확인(수동) | telnet db-server 3306 |
nc -zv <host> <port> | 데이터 없이 열림/거부 판정 | nc -zv 192.168.1.10 443 |
nc -zv <host> <범위> | 여러 포트 한 번에 스캔 | nc -zv 10.0.0.1 20-100 |
nc -zv -u <host> <port> | UDP 포트 점검(무응답 주의) | nc -zv -u 8.8.8.8 53 |
nc -w <초> | 응답 없는 포트에서 무한 대기 방지 | nc -zv -w 3 10.0.0.1 8080 |
nc -l <port> | 임시 리스닝 서버(반대편 테스트) | nc -l 9000 |
ss -tlnp | 로컬 LISTEN 포트·프로세스 확인 | ss -tlnp | grep 5432 |
iptables -I INPUT … -j DROP/REJECT | Refused·Timeout 재현·차단 | sudo iptables -I INPUT -p tcp --dport 8080 -j DROP |
iptables -L -n | REJECT/DROP 규칙 확인(거부 출처 판별) | sudo iptables -L -n | grep -i reject |
traceroute <IP> | timeout 시 어느 구간에서 막히는지 | traceroute 10.0.0.1 |
| 명령어 | 용도 |
|---|---|
| sudo ss -tulnp | grep :포트번호 | ===== 포트 점유 확인 ===== |
| sudo lsof -i :포트번호 | ===== 포트 점유 확인 ===== |
| fuser 포트번호/tcp | ===== 포트 점유 확인 ===== |
| kill [PID] | ===== 프로세스 종료 ===== |
| kill -9 [PID] | ===== 프로세스 종료 ===== |
| sudo fuser -k 포트번호/tcp | ===== 프로세스 종료 ===== |
| sudo systemctl stop 서비스명 | ===== systemd 서비스 ===== |
| sudo systemctl disable 서비스명 | ===== systemd 서비스 ===== |
| docker ps | grep 포트번호 | ===== Docker ===== |
| docker stop 컨테이너ID | ===== Docker ===== |
| 명령 | 설명 |
|---|---|
traceroute 목적지 | 기본 UDP 모드로 경로 추적 |
traceroute -n 목적지 | DNS 역조회 없이 IP로만 표시 |
traceroute -I 목적지 | ICMP 모드 |
traceroute -T -p 80 목적지 | TCP 80 포트 모드 |
traceroute -m 20 목적지 | 최대 홉 수 20으로 제한 |
mtr 목적지 | 실시간 대화형 추적 |
mtr --report -n 목적지 | 비대화형 리포트 모드 |
mtr --report-cycles 100 목적지 | 100개 패킷 후 리포트 |
mtr --tcp --port 443 목적지 | TCP 모드 mtr |
| 명령 | 설명 |
|---|---|
curl -I URL | HEAD 요청으로 헤더만 확인 |
curl -v URL | 전체 HTTP 흐름 verbose 출력 |
curl -s -o /dev/null -w "%{http_code}" URL | 상태 코드만 출력 |
curl -L URL | 리다이렉트 자동 추적 |
curl -o 파일 URL | 응답을 파일로 저장 |
curl -k URL | SSL 검증 건너뜀 (임시 테스트용) |
curl -X POST -d '...' -H 'Content-Type: application/json' URL | JSON POST 요청 |
curl --connect-timeout 3 --max-time 10 URL | 타임아웃 설정 |
| 명령어 | 용도 | 자주 쓰는 예 |
|---|---|---|
openssl s_client -connect host:443 | 서버와 TLS 핸드셰이크·인증서 수신 | -servername host 로 SNI 명시(없으면 기본 vhost 인증서) |
… x509 -noout -dates | 인증서 유효기간(만료일) 확인 | openssl s_client -connect host:443 </dev/null 2>/dev/null | openssl x509 -noout -dates |
… x509 -noout -subject -subjectAltName | CN·SAN 도메인 일치 확인 | 접속 도메인이 SAN(DNS:) 목록에 있는지 대조 |
openssl s_client … -showcerts | 인증서 체인 완전성 확인 | … -showcerts | grep "Certificate chain" (중간 CA 누락 탐지) |
openssl s_client … -tls1_2/-tls1_3 | TLS 버전별 협상 테스트 | 핸드셰이크 실패 시 어느 버전에서 되는지 특정 |
openssl x509 … -checkend | 만료 임박 여부 종료코드 판정 | … -checkend $((30*86400)) (30일 내 만료면 cron 알림) |
curl -v https://host | TLS 핸드셰이크·인증서 로그 | curl -v https://host 2>&1 | grep -E 'TLS|subject|expire' |
curl -k / --insecure | 인증서 검증 우회(개발 전용) | 프로덕션 금지 — 대신 curl --cacert ca.crt |
curl --cert/--key/--cacert | mTLS 양방향 인증 호출 | curl --cert client.crt --key client.key --cacert ca.crt https://svc/api |
nc -zv host 443 | 443 포트 도달(L4) 분리 확인 | succeeded면 TLS(L6)로, refused/timeout이면 포트 차단 |
nmap --script ssl-enum-ciphers | 서버 지원 TLS 버전·암호군 열거 | nmap --script ssl-enum-ciphers -p 443 host |
certbot renew | Let's Encrypt 인증서 갱신 | sudo certbot renew --dry-run 후 갱신, 반드시 systemctl reload nginx |
| 명령어 | 용도 | 자주 쓰는 예 |
|---|---|---|
curl --connect-timeout N | TCP 연결(핸드셰이크) 단계만 제한 | curl --connect-timeout 3 http://10.255.255.1/ (연결 안 되면 3초 컷) |
curl --max-time N | 연결+응답 전체 시간 제한 | curl --connect-timeout 3 --max-time 10 URL (두 단계 분리 제어) |
curl -w "@file" | 단계별 타이밍 측정 | -w "@/tmp/curl-format.txt" 로 time_connect·time_starttransfer 분해 |
curl -w "%{...}" | 특정 타이밍/코드만 출력 | -w "%{http_code}", -w "%{time_starttransfer}" |
curl -v | 요청 단계·연결 상세 로그 | curl -v --connect-timeout 3 --max-time 10 URL |
nc -zv -w N host port | HTTP 없이 순수 TCP 연결만 점검 | nc -zv -w 3 httpbin.org 443 (succeeded면 L4 정상) |
for port in …; nc -zv | 여러 포트 일괄 개방 점검 | for p in 80 443 8080; do nc -zv -w 2 host $p; done |
ss -o state established | 유휴 established 소켓·타이머 확인 | ss -o state established '( dport = :443 )' |
tcpdump -ni any | 재전송·무응답 패킷 확인 | sudo tcpdump -ni any 'tcp port 443 and host api...' |
| 장애 신고 | 확인 명령 |
|---|---|
| "서버 접속이 안 돼요" | ss -tlnp | grep 포트번호 |
| "서버가 느려요" | ss -antp | grep ESTAB | wc -l |
| "주기적으로 연결이 끊겨요" | ss -antp | grep CLOSE-WAIT | wc -l |
| "새벽마다 장애가 나요" | ss -s로 TIME_WAIT 추이 모니터링 |
| "특정 IP에서만 접속 안 돼요" | ss -antp | grep [IP] |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
arp -an | ARP 캐시 스냅샷(IP↔MAC) | arp -an | grep 192.168.1.50 (특정 IP MAC 확인) |
ip neigh show | neighbor 테이블 상태까지 확인 | REACHABLE/STALE/INCOMPLETE/FAILED 판독 |
watch arp -an | MAC 펄럭임(충돌) 실시간 관찰 | watch -n1 'arp -an | grep 192.168.10.55' |
arping -I -c | 같은 IP에 응답하는 MAC 수 확인 | sudo arping -I eth0 -c 5 192.168.1.50 (두 MAC=충돌) |
arping -D | 배포 전 IP 중복 사전 점검 | sudo arping -D -I eth0 192.168.1.60 (응답=이미 사용 중) |
ip neigh flush all | ARP 캐시 전체 초기화 | 충돌 해결 후 옛 MAC 강제 갱신 |
ip neigh del / arp -d | 특정 항목만 삭제 | sudo ip neigh del 192.168.1.50 dev eth0 |
tcpdump -n arp | ARP 요청/응답 직접 캡처 | sudo tcpdump -i eth0 -n "arp and host 192.168.1.50" |
ip neigh show | wc -l | 현재 엔트리 수 세기(포화 진단) | gc_thresh3(기본 1024)과 비교 |
sysctl ...gc_thresh3 | neighbor 테이블 하드 상한 확인 | sysctl net.ipv4.neigh.default.gc_thresh3 |
dmesg | neighbor table overflow 확인 | dmesg -T | grep 'table overflow' |
| 목적 | 명령어 |
|---|---|
| 빠른 아웃바운드 HTTP 점검 | curl -o /dev/null -s -w "%{http_code}" --connect-timeout 5 http://example.com |
| HTTPS 연결 및 응답 확인 | curl -v --connect-timeout 5 https://example.com |
| 파일 다운로드 (curl) | curl -O https://example.com/file.tar.gz |
| 파일 다운로드 (wget) | wget https://example.com/file.tar.gz |
| 프록시를 통한 요청 | curl -x http://proxy:3128 https://example.com |
| SSL 검증 무시 (임시) | curl -k https://internal.example.com |
| 포트 아웃바운드 점검 | nc -zv -w 3 example.com 443 |
| DNS 해석 확인 | nslookup example.com |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
firewall-cmd --list-all | 현재 zone 규칙 전체 확인 | sudo firewall-cmd --zone=public --list-all |
firewall-cmd --get-active-zones | 인터페이스·source의 zone 바인딩 | source zone 우선순위 함정 진단 시 |
firewall-cmd --add-service / --add-port | 서비스·포트 허용 | --zone=public --add-port=8080/tcp --permanent |
firewall-cmd --add-rich-rule | 출발지 IP+포트+프로토콜 ACL | rule family=ipv4 source address=203.0.113.10/32 service name=ssh accept |
firewall-cmd --add-source | 대역을 zone에 바인딩 | --zone=internal --add-source=10.0.0.0/8 (trusted 금지) |
firewall-cmd --reload | --permanent 규칙 적용 | 세션 끊김 주의 — 대안은 아래 |
firewall-cmd --runtime-to-permanent | 런타임 규칙을 무중단 영구화 | reload 없이 즉시 반영 후 저장 |
firewall-cmd --list-rich-rules | 등록된 rich rule 확인 | --zone=public --list-rich-rules |
conntrack -L | 추적 중인 세션 조회 | conntrack -L | grep dport=22 |
conntrack -C | 현재 추적 연결 수 | nf_conntrack_max의 80%↑면 증설 신호 |
nft list ruleset | firewalld 백엔드 규칙 전체 | sudo nft list ruleset | grep -A5 output |
iptables -L -n -v | 체인 기본정책·룰 적중 카운터 | iptables -L -n -v --line-numbers (pkts 0=미적중) |
... | at now + 5 minutes | 실수 대비 자동 롤백 예약 | echo "firewall-cmd --reload" | sudo at now + 5 minutes |
| 목적 | 명령어 |
|---|---|
| 포트 추가 (영구) | firewall-cmd --zone=public --add-port=8080/tcp --permanent && firewall-cmd --reload |
| 포트 제거 (영구) | firewall-cmd --zone=public --remove-port=8080/tcp --permanent && firewall-cmd --reload |
| 포트 목록 확인 | firewall-cmd --list-ports |
| 영구 설정 확인 | firewall-cmd --permanent --list-ports |
| 전체 규칙 확인 | firewall-cmd --list-all |
| 포트 허용 | ufw allow 8080/tcp |
| 특정 IP에서만 허용 | ufw allow from 192.168.1.100 to any port 3306 |
| 포트 거부 | ufw deny 8080/tcp |
| 상태 확인 | ufw status verbose |
| 번호로 규칙 삭제 | ufw delete 규칙번호 |
| 명령어/옵션 | 용도 | 자주 쓰는 예 |
|---|---|---|
iptables -L <체인> -n -v --line-numbers | 규칙·카운터·줄번호 확인(진단 첫 명령) | iptables -L INPUT -n -v --line-numbers |
iptables -I INPUT 1 … | 맨 위에 규칙 삽입(policy DROP에선 필수) | iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT |
iptables -A INPUT … | 체인 맨 끝에 규칙 추가 | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
iptables -D INPUT <번호> | 규칙 삭제(줄번호 기준) | iptables -D INPUT 3 |
-s <CIDR> | 출발지 IP 제한(SSH 특정 대역만) | iptables -I INPUT 1 -p tcp --dport 22 -s 203.0.113.0/24 -j ACCEPT |
-m conntrack --ctstate ESTABLISHED,RELATED | 아웃바운드 응답 자동 허용(stateful) | iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
-j DROP | 조용히 폐기(외부 공격·스캔 차단) | iptables -I INPUT 1 -s 45.142.212.100 -j DROP |
-j REJECT --reject-with | 즉시 거부(내부·개발 디버깅) | iptables -A INPUT -p tcp --dport 22 -j REJECT --reject-with tcp-reset |
-j LOG --log-prefix | 차단 패킷 기록(-m limit로 폭주 방지) | iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "DROP: " |
iptables -P <체인> DROP | 체인 기본 정책 지정 | iptables -P FORWARD DROP |
iptables-save > <파일> | 규칙 영구 저장 | iptables-save > /etc/iptables/rules.v4 |
iptables-restore < <파일> | 저장 규칙 일괄 복원 | iptables-restore < /etc/iptables/rules.v4 |
conntrack -L | 연결 추적 테이블 확인(포화 진단) | conntrack -L | wc -l |
iptables -F | 규칙 전체 삭제 — 운영/원격에서 직접 실행하지 말고 검증된 ruleset을 restore | (직접 실행 금지) |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
aws ec2 describe-security-groups | SG 인바운드/아웃바운드 규칙 조회 | --group-ids sg-xxx --query 'SecurityGroups[*].IpPermissions' |
aws ec2 describe-instances | 인스턴스에 부착된 SG 확인 | --instance-ids i-xxx --query 'Reservations[*].Instances[*].SecurityGroups' |
aws ec2 describe-network-acls | 서브넷 NACL 인/아웃 규칙 확인 | --filters "Name=association.subnet-id,Values=subnet-xxx" |
aws ec2 describe-route-tables | 0.0.0.0/0 → igw/nat 경로 확인 | --filters "Name=association.subnet-id,Values=subnet-xxx" |
aws ec2 describe-network-interfaces | ALB/RDS ENI 실제 부착 위치 | --filters "Name=group-id,Values=sg-xxx" |
aws ec2 authorize-security-group-ingress | SG ID를 소스로 포트 허용 | --group-id $DB_SG --protocol tcp --port 3306 --source-group $WEB_SG |
aws logs filter-log-events | Flow Logs에서 REJECT 필터 | --filter-pattern "8080 REJECT" (차단 지점 특정) |
nc -zv | EC2 내부 포트 도달성 테스트 | nc -zv 10.0.2.100 3306 -w 3 (timed out=방화벽 / refused=앱) |
ss -tlnp | 포트 LISTEN 여부 확인 | sudo ss -tlnp | grep :8080 (refused 원인) |
iptables -L INPUT -n -v | OS 방화벽 차단 확인 | sudo iptables -L INPUT -n | grep 8080 |
ping -M do -s | 경로 MTU/PMTUD 블랙홀 확인 | ping -M do -s 1472 <대상> (큰 패킷만 멈출 때) |
| 명령어/옵션 | 용도 | 자주 쓰는 예 |
|---|---|---|
modprobe 8021q | VLAN(802.1Q) 커널 모듈 로드 | lsmod | grep 8021q || sudo modprobe 8021q |
ip link add link <부모> name <이름> type vlan id <N> | VLAN 서브인터페이스 생성 | sudo ip link add link eth0 name eth0.10 type vlan id 10 |
ip addr add <IP> dev <vlan-if> | VLAN 인터페이스에 IP 할당 | sudo ip addr add 192.168.10.100/24 dev eth0.10 |
ip link set <if> up | 인터페이스 활성화 | sudo ip link set eth0.10 up |
ip -d link show <if> | VLAN 프로토콜·ID 상세 확인 | ip -d link show eth0.10 |
ip link set <if> mtu <N> | 태그 4B 오버헤드로 MTU 조정 | sudo ip link set eth0.10 mtu 1496 |
tcpdump -e -n vlan | 프레임의 실제 VLAN 태그 캡처 | sudo tcpdump -i eth0 -e -n vlan |
ping -s 1472 -M do <host> | 단편화 금지 MTU 검증 | ping -c 4 -s 1472 -M do 192.168.10.1 |
ip neigh show / arp -n | ARP 학습 여부(단절 진단) | ip neigh show |
cat /proc/net/vlan/config | 구성된 VLAN 인터페이스 일람 | cat /proc/net/vlan/config |
| 명령어/옵션 | 용도 | 자주 쓰는 예 |
|---|---|---|
tcpdump -i <iface> | 캡처할 인터페이스 지정 | sudo tcpdump -i eth0 -nn port 443 |
-n / -nn | DNS·포트 역조회 끄기(빠른 분석) | tcpdump -i eth0 -nn host 10.0.0.5 |
host <IP> and port <N> | BPF로 특정 호스트·포트만 | sudo tcpdump -i eth0 -nn host 10.0.0.5 and port 443 |
src / dst | 출발지·목적지 방향 필터 | tcpdump -i eth0 -n dst port 22 |
not / or | 제외·다중 조건 결합 | tcpdump -i eth0 -n port 80 or port 443 |
'tcp[tcpflags] & tcp-syn != 0' | SYN·RST만 골라 연결 시도·거부 추적 | sudo tcpdump -i eth0 -n 'tcp[tcpflags] & tcp-rst != 0' |
-w <파일> / -r <파일> | pcap 저장·재분석(Wireshark 연동) | tcpdump -i eth0 -w cap.pcap → tcpdump -r cap.pcap -n |
-c <N> / -s <바이트> | 패킷 수·캡처 길이 제한 | tcpdump -i eth0 -c 10000 -s 0 port 443 |
-C <MB> -W <개수> / -G <초> | 파일 순환 저장(디스크 풀 방지) | tcpdump -w rot.pcap -C 100 -W 5 |
-A / -X | 페이로드 ASCII·Hex 덤프 | sudo tcpdump -i eth0 -A port 80 | grep HTTP |
tcpdump -D | 캡처 가능한 인터페이스 목록 | sudo tcpdump -D |
ethtool -K <iface> … | 캡처 중 오프로드 끄기(cksum·거대세그먼트 착시 제거) | ethtool -K eth0 gro off gso off tso off |
| 명령어/설정 | 용도 | 자주 쓰는 예 |
|---|---|---|
haproxy -c -f <cfg> | 설정 문법 검증(재시작 전 필수) | sudo haproxy -c -f /etc/haproxy/haproxy.cfg → Configuration file is valid |
systemctl reload haproxy | 무중단 설정 반영 | haproxy -c … && sudo systemctl reload haproxy |
balance <알고리즘> | 분산 방식 지정(설정) | balance roundrobin / leastconn(편차 큼) / source(세션 고정) |
option httpchk + http-check expect | L7 헬스체크(설정) | option httpchk GET /health + http-check expect status 200 |
server … check inter rise fall | 서버 등록·헬스체크 민감도(설정) | server web1 127.0.0.1:8001 check inter 3000 rise 2 fall 3 |
cookie … insert | 쿠키 기반 세션 고정(설정) | cookie SERVERID insert indirect nocache + server … cookie srv1 |
option forwardfor / http-reuse | 원본 IP 전달 / 백엔드 연결 재사용(설정) | XFF로 진짜 IP 로깅, http-reuse로 소스 포트 고갈 완화 |
curl 반복 요청 | 분산·Failover 동작 확인 | for i in $(seq 1 10); do curl -s http://localhost:80; done |
tail -f /var/log/haproxy.log | 라우팅·헬스체크 로그 추적 | DOWN / Layer7 timeout 원인 확인 |
ss -tan state time-wait | wc -l | 소스 포트 고갈 진단 | sysctl net.ipv4.ip_local_port_range로 범위 확인 |
stats 페이지(stats uri /stats) | 실시간 서버 상태(UP/DOWN)·연결 수 | http://서버IP:8404/stats 접속 |
| 명령어 | 용도 | 자주 쓰는 예 |
|---|---|---|
apt-get install keepalived | Keepalived 설치(두 노드) | sudo apt-get install -y keepalived (RHEL은 yum install -y keepalived) |
sysctl -w net.ipv4.ip_nonlocal_bind=1 | VIP 바인딩 허용(nonlocal bind) | net.ipv4.ip_forward=1 과 함께 설정 |
keepalived -t -f <conf> | 설정 파일 문법 검증 | sudo keepalived -t -f /etc/keepalived/keepalived.conf |
systemctl status keepalived | MASTER/BACKUP 상태 확인 | 출력에 Entering MASTER STATE 면 VIP 보유 노드 |
systemctl stop keepalived | VRRP 참여 중단(안전한 수동 절체) | Active를 내려 Standby 승격 유도 |
ip addr show | VIP 바인딩 위치 확인 | ip addr show eth0 | grep 192.168.1.100 (한 노드에만 있어야 정상) |
ip link show | 실제 NIC 이름 확인 | interface eth0 오류 시 ens3·enp0s3 대조 |
journalctl -u keepalived | VRRP 로그·오류 추적 | sudo journalctl -u keepalived -n 50 |
tcpdump … vrrp | VRRP 광고 패킷 캡처 | sudo tcpdump -i eth0 -n vrrp (split-brain·차단 확인) |
tcpdump … arp / arp -n | GARP 송출·ARP 캐시 확인 | 절체 후 tcpdump -i eth0 arp, arp -n 으로 옛 MAC 확인 |
firewall-cmd --add-protocol=vrrp | VRRP 방화벽 허용(firewalld) | sudo firewall-cmd --add-protocol=vrrp --permanent && sudo firewall-cmd --reload |
iptables -p vrrp -j ACCEPT | VRRP 허용(iptables) | sudo iptables -A INPUT -p vrrp -j ACCEPT |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
curl --proxy | 프록시 경유 연결 테스트 | curl -v https://pypi.org/ --proxy http://dmz-proxy:3128 |
curl --connect-timeout | 직접 연결 차단(폐쇄망 격리) 확인 | curl -v --connect-timeout 5 https://pypi.org/ (타임아웃=격리 정상) |
export http_proxy / https_proxy | 셸에 프록시 주입(HTTP·HTTPS 별도) | export https_proxy=http://dmz-proxy:3128 |
squid -k parse | squid.conf 문법 검사 | 재시작 전 항상 — 에러 없이 통과해야 |
squid -k reconfigure | 무중단 설정 재로드 | ACL 추가 후 sudo squid -k reconfigure |
squid -z | 캐시 디렉토리 초기화 | sudo squid -z && sudo systemctl restart squid |
tail .../squid/access.log | 프록시 요청·차단 감사 | tail -f /var/log/squid/access.log | grep DENIED |
grep <도메인> squid.conf | ACL에 도메인 등록됐는지 확인 | grep pythonhosted /etc/squid/squid.conf |
getent hosts (프록시에서) | 목적지 이름 해석 주체 확인 | 프록시에서 getent hosts pypi.org (NONE/503 진단) |
| apt 프록시 파일 | apt가 프록시 경유하게 | /etc/apt/apt.conf.d/01proxy 에 Acquire::http::Proxy |
strace -e trace=network | pip 접근 도메인 사전 파악 | strace -e trace=network pip install pandas 2>&1 | grep connect |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
iftop -i | IP별 실시간 대역폭 진단 | sudo iftop -i eth0 -f "port 443" |
iftop 키 s/d/n | 출발지·목적지 집계·이름 전환 | s=출발지, d=목적지, n=IP/호스트명 토글 |
nload | 인터페이스 전체 대역폭(상·하행) | nload eth0 / nload -u h (human) |
vnstat | 누적 트래픽 통계(일/월/시) | vnstat -d / vnstat -m / vnstat -l (라이브) |
ss -tnp | 특정 IP 연결의 프로세스 찾기 | ss -tnp | grep 52.95.121.30 (범인 PID) |
ss -tlnp | exporter 포트 LISTEN 확인 | ss -tlnp | grep 9100 (node-exporter) |
netstat -tnp | ss 대체(연결↔프로세스 매핑) | netstat -tnp | grep <IP> |
curl <target>:9100/metrics | Prometheus 수집 대상 직접 확인 | connection refused=exporter 꺼짐/방화벽 |
aws cloudwatch put-metric-alarm | 임계값 알람 생성 | --metric-name TargetResponseTime --statistic p99 --threshold 1.0 |
aws cloudwatch list-metrics | 실제 수집된 메트릭 확인 | --namespace "MyApp/System" (No data 진단) |
rate(...[5m]) (PromQL) | 초당 증가율(에러율·요청수) | rate(http_requests_total{status=~"5.."}[5m]) |
histogram_quantile(...) (PromQL) | P99 등 분위수 응답시간 | histogram_quantile(0.99, rate(...bucket[5m])) |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
aws ec2 describe-vpcs | VPC 목록·CIDR 확인 | --query 'Vpcs[*].{VpcId:VpcId,CIDR:CidrBlock}' |
aws ec2 describe-subnets | 서브넷·AZ·MapPublicIp 확인 | --filters "Name=vpc-id,Values=$VPC_ID" |
aws ec2 describe-route-tables | Public/Private 판별(0.0.0.0/0 대상) | --filters "Name=association.subnet-id,Values=subnet-xxx" |
aws ec2 describe-nat-gateways | NAT GW 존재·available 확인 | --filter "Name=vpc-id,Values=$VPC_ID" "Name=state,Values=available" |
aws ec2 create-nat-gateway | 프라이빗 아웃바운드용 NAT 생성 | --subnet-id $PUBLIC_SUBNET --allocation-id $EIP |
aws ec2 create-route | 라우트 테이블에 NAT/IGW 경로 추가 | --route-table-id $RT --destination-cidr-block 0.0.0.0/0 --nat-gateway-id $NAT |
aws ec2 describe-security-groups | SG 인/아웃 규칙 확인 | --group-ids $SG_ID |
aws ec2 describe-network-acls | 서브넷 NACL 규칙 확인 | --filters "Name=association.subnet-id,Values=subnet-xxx" |
aws ec2 create-network-acl-entry | NACL 규칙 추가(Stateless 양방향) | --egress ... --port-range From=1024,To=65535 (응답용 ephemeral) |
aws logs filter-log-events | Flow Logs에서 REJECT 확인 | --log-group-name /vpc/flow-logs --filter-pattern REJECT |
curl http://169.254.169.254/... | 인스턴스 메타데이터로 서브넷·공인IP | curl -s .../latest/meta-data/public-ipv4 (없으면 Private) |
ping / curl (Private에서) | NAT 경로 정상 여부 검증 | ping -c3 8.8.8.8, curl -I https://aws.amazon.com |
| 목적 | 명령어/표현 |
|---|---|
| 타임아웃 포함 포트 점검 | nc -zv -w 3 192.168.1.200 3306 |
| 종료 코드 확인 | echo $? (0=성공, 비0=실패) |
| 타임스탬프 생성 | $(date '+%Y-%m-%d %H:%M:%S') |
| 로그 파일에 기록 | echo "메시지" >> /var/log/netcheck.log |
| bash 배열 선언 | TARGETS=("host1:port1:desc1" "host2:port2:desc2") |
| 배열 순회 | for item in "${TARGETS[@]}"; do ...; done |
| 문자열 파싱 | echo "$item" | cut -d: -f1 |
| cron 5분 주기 | */5 * * * * /opt/scripts/netcheck.sh |
| cron 등록 확인 | crontab -l |
| 단계 | 목적 | 명령어 | 성공 기준 |
|---|---|---|---|
| 1단계 | L3 라우팅 확인 | ping -c 4 [DB_IP] | 0% packet loss |
| 2단계 | L4 방화벽+포트 | nc -zv -w 3 [DB_IP] 3306 | succeeded! |
| 3단계 | 데몬 기동 확인 | ss -tulnp | grep 3306 | 리스닝 항목 있음 |
| 4단계 | 라우팅/DNS 설정 | ip route show + cat /etc/resolv.conf | default via 항목 있음 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
docker network inspect | 두 컨테이너가 같은 네트워크인지 | docker network inspect debug-net (Containers·Subnet) |
docker exec ... cat /etc/resolv.conf | 내장 DNS(127.0.0.11) 확인 | 이름 해석 실패 시 nameserver 확인 |
docker exec ... getent hosts | 컨테이너 이름 DNS 해석 테스트 | docker exec api getent hosts db |
docker inspect --format | 컨테이너 IP·네트워크 추출 | docker inspect db --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' |
docker port | 호스트↔컨테이너 포트 바인딩 | docker port server (80/tcp -> 0.0.0.0:8080) |
docker network connect | 컨테이너를 다른 네트워크에 추가 | docker network connect net-b web (no such host 해결) |
iptables -t nat -L DOCKER | 포트포워딩(DNAT) 규칙 확인 | sudo iptables -t nat -L DOCKER --line-numbers | grep 8080 |
kubectl get endpoints | Service가 Pod에 연결됐는지 | <none>이면 selector 불일치/Pod 크래시 |
kubectl exec -it ... -- | Pod 안에서 직접 통신 검증 | kubectl exec -it debug-pod -- wget -qO- http://api-svc/ |
kubectl port-forward | Service/Pod 우회 로컬 접근 | kubectl port-forward svc/api-svc 8080:80 |
nc -z -w3 | 컨테이너 간 포트 도달성 | busybox sh -c "nc -z -w3 $DB_IP 5432" |
ping -M do -s / ip link show | 오버레이 MTU 블랙홀 확인 | ping -M do -s 1472 <대상>, ip link show로 MTU 비교 |
| 명령어/옵션 | 용도 | 자주 쓰는 예 |
|---|---|---|
openvpn --config <파일>.ovpn | OpenVPN 클라이언트 접속 | sudo openvpn --config client.ovpn |
ip addr show tun0 | VPN 인터페이스·할당 IP 확인 | ip addr show tun0 |
ip route show | grep tun0 | 내부 대역이 터널로 가는지 확인 | ip route show | grep tun0 |
ip route add <망> via <gw> dev tun0 | 누락된 내부망 경로 수동 추가 | sudo ip route add 10.0.0.0/16 via 10.8.0.1 dev tun0 |
nc -u -z -v <host> 1194 | VPN UDP 포트 차단 여부 진단 | nc -u -z -w 5 -v vpn.company.com 1194 |
wg-quick up/down <if> | WireGuard 연결·해제 | sudo wg-quick up wg0 |
wg show | 핸드셰이크·송수신 바이트 확인 | sudo wg show |
wg genkey | wg pubkey | WireGuard 키페어 생성 | wg genkey | tee privatekey | wg pubkey > publickey |
resolvectl status | tun0에 내부 DNS·검색도메인 적용 확인 | resolvectl status |
dig <도메인> @<내부DNS> | 내부 리졸버가 사설 IP 주는지 대조 | dig intranet.company.com @10.9.0.1 |