1. 네트워크 설정 확인
1.1 ifconfig (레거시)
net-tools 패키지에 포함. 현재는 ip 명령으로 대체되었지만, 레거시 환경에서 여전히 사용된다.
ifconfig # 모든 활성 인터페이스 정보
ifconfig -a # 비활성 포함 모든 인터페이스
ifconfig eth0 # 특정 인터페이스 정보
ifconfig eth0 up # 인터페이스 활성화
ifconfig eth0 down # 인터페이스 비활성화
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 # IP 수동 설정 (임시)
# 설치 (없는 경우)
sudo apt install net-tools # Debian/Ubuntu
sudo dnf install net-tools # RHEL/CentOS1.2 ip - 현대적 네트워크 도구
iproute2 패키지에 포함. ifconfig, route, arp 등을 통합한 명령.
# ip addr - 주소 관리
ip addr show # 모든 인터페이스 IP 정보 (= ip a)
ip addr show eth0 # 특정 인터페이스
ip -4 addr show # IPv4만 표시
ip -6 addr show # IPv6만 표시
ip -br addr show # 간결한 출력 (brief)
ip addr add 192.168.1.100/24 dev eth0 # IP 추가 (임시)
ip addr del 192.168.1.100/24 dev eth0 # IP 삭제
# ip link - 인터페이스(링크) 관리
ip link show # 모든 인터페이스 상태
ip -br link show # 간결한 상태 (UP/DOWN)
ip link set eth0 up # 인터페이스 활성화
ip link set eth0 down # 인터페이스 비활성화
ip link set eth0 mtu 9000 # MTU 변경
# ip route - 라우팅 테이블 관리
ip route show # 라우팅 테이블 (= ip r)
ip route get 8.8.8.8 # 특정 IP로의 경로 확인
ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0 # 정적 라우트 추가
ip route del 10.0.0.0/8 # 라우트 삭제
ip route add default via 192.168.1.1 # 기본 게이트웨이 설정
# ip neigh - ARP/이웃 탐색 (arp 대체)
ip neigh show # ARP 테이블 (= ip n)
ip neigh flush all # ARP 캐시 초기화1.3 hostname / hostnamectl
hostname # 현재 호스트명
hostname -I # 모든 IP 주소 (대문자 I)
hostname -f # FQDN (Fully Qualified Domain Name)
# systemd 환경
hostnamectl # 상세 호스트 정보 (static, transient, pretty)
hostnamectl set-hostname myserver # 호스트명 변경 (영구적)2. 네트워크 설정 파일
2.1 공통 설정 파일
# /etc/hostname - 호스트명
cat /etc/hostname
# myserver
# /etc/hosts - 로컬 호스트명-IP 매핑 (DNS보다 우선)
cat /etc/hosts
# 127.0.0.1 localhost
# 127.0.1.1 myserver
# 192.168.1.100 db.local db
# /etc/resolv.conf - DNS 서버 설정
cat /etc/resolv.conf
# nameserver 8.8.8.8
# nameserver 8.8.4.4
# search example.com # 도메인 검색 접미사
# options timeout:2 attempts:3
# /etc/nsswitch.conf - 이름 해석 순서 설정
grep "^hosts:" /etc/nsswitch.conf
# hosts: files dns myhostname
# files = /etc/hosts → dns = DNS 서버 → myhostname = 로컬 호스트명2.2 Debian/Ubuntu: /etc/network/interfaces (레거시)
cat /etc/network/interfaces# 루프백
auto lo
iface lo inet loopback
# 고정 IP (static)
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
# DHCP
auto eth0
iface eth0 inet dhcp
# 적용
sudo ifdown eth0 && sudo ifup eth0
sudo systemctl restart networking2.3 RHEL/CentOS: /etc/sysconfig/network-scripts/ (레거시)
cat /etc/sysconfig/network-scripts/ifcfg-eth0TYPE=Ethernet
BOOTPROTO=static # static 또는 dhcp
NAME=eth0
DEVICE=eth0
ONBOOT=yes # 부팅 시 자동 활성화
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
2.4 NetworkManager / nmcli (현대적, 공통)
대부분의 현대 배포판에서 사용하는 네트워크 관리 데몬.
# 상태 확인
nmcli general status # NetworkManager 전반 상태
nmcli device status # 디바이스 상태 (= nmcli dev)
nmcli connection show # 연결 프로필 목록 (= nmcli con show)
nmcli connection show "Wired 1" # 특정 연결 상세
# 연결 관리
nmcli connection up "Wired 1" # 연결 활성화
nmcli connection down "Wired 1" # 연결 비활성화
# 고정 IP 설정
nmcli connection modify "Wired 1" \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8,8.8.4.4"
nmcli connection up "Wired 1" # 변경 적용
# DHCP로 전환
nmcli connection modify "Wired 1" ipv4.method auto
nmcli connection up "Wired 1"
# 새 연결 생성
nmcli connection add type ethernet \
con-name "my-static" \
ifname eth0 \
ipv4.method manual \
ipv4.addresses 192.168.1.200/24
# Wi-Fi 관련
nmcli device wifi list # 사용 가능한 Wi-Fi 목록
nmcli device wifi connect "SSID" password "비밀번호"3. 연결 테스트
3.1 ping
ICMP Echo Request를 보내 네트워크 연결 상태를 확인한다.
ping google.com # 무한 핑 (Ctrl+C로 중단)
ping -c 5 google.com # 5회만 전송 (count)
ping -i 0.5 google.com # 0.5초 간격 (interval, 기본 1초)
ping -W 3 google.com # 응답 대기 시간 3초 (timeout)
ping -s 1024 google.com # 패킷 크기 1024 바이트
ping -f google.com # flood ping (root만, 부하 테스트)
ping -4 google.com # IPv4만 사용
ping -6 google.com # IPv6만 사용3.2 traceroute / tracepath / mtr
패킷이 목적지까지 거치는 경로(홉)를 추적한다.
# traceroute (설치 필요할 수 있음)
traceroute google.com # 기본 (UDP)
traceroute -I google.com # ICMP 사용
traceroute -T google.com # TCP 사용 (방화벽 통과에 유리)
traceroute -n google.com # DNS 역조회 안 함 (빠름)
traceroute -m 20 google.com # 최대 홉 수 20
# tracepath (traceroute 대안, 추가 설치 불필요한 경우 많음)
tracepath google.com # PMTU 탐색도 함께 수행
# mtr - ping + traceroute 결합 (실시간 모니터링)
mtr google.com # 대화형 모드
mtr -r -c 10 google.com # 리포트 모드 (10회 후 결과 출력)
mtr -n google.com # DNS 역조회 안 함4. 포트/연결 확인
4.1 netstat (레거시)
net-tools 패키지. ss로 대체되었지만 레거시 환경에서 여전히 사용된다.
netstat -tulnp # 가장 많이 쓰는 조합
# -t: TCP, -u: UDP, -l: LISTEN 상태만, -n: 숫자(포트번호), -p: 프로세스 표시
netstat -an # 모든 연결 (ESTABLISHED 포함)
netstat -rn # 라우팅 테이블 (route -n과 동일)
netstat -s # 프로토콜별 통계
netstat -i # 인터페이스 통계
netstat -tulnp | grep :80 # 80번 포트 사용 프로세스4.2 ss - netstat 대체
더 빠르고 정보가 풍부한 소켓 통계 도구.
ss -tulnp # netstat -tulnp와 동일 용도
# -t: TCP, -u: UDP, -l: LISTEN, -n: 숫자, -p: 프로세스
ss -s # 소켓 통계 요약
ss -a # 모든 소켓
ss -o # 타이머 정보 포함
# 필터링
ss -tn state established # ESTABLISHED 상태인 TCP
ss -tn dst 192.168.1.1 # 특정 목적지 연결
ss -tn sport = :80 # 소스 포트 80
ss -tn dport = :443 # 목적지 포트 4434.3 lsof -i
열린 파일(소켓 포함)을 조회하는 명령. 포트 사용 프로세스 확인에 유용.
sudo lsof -i # 모든 네트워크 연결
sudo lsof -i :80 # 80번 포트 사용 프로세스
sudo lsof -i TCP # TCP 연결만
sudo lsof -i TCP:22 # TCP 22번 포트
sudo lsof -i @192.168.1.100 # 특정 IP 관련 연결
sudo lsof -i -P -n # 포트/IP 숫자로 표시 (빠름)5. DNS 관련 명령어
5.1 nslookup
nslookup google.com # A 레코드 조회
nslookup -type=MX google.com # MX 레코드 (메일 서버)
nslookup -type=NS google.com # NS 레코드 (네임서버)
nslookup -type=TXT google.com # TXT 레코드
nslookup google.com 8.8.8.8 # 특정 DNS 서버로 조회5.2 dig (권장 - 더 상세한 출력)
dig google.com # A 레코드 (상세 출력)
dig google.com +short # IP만 간결하게
dig google.com MX # MX 레코드
dig google.com NS # NS 레코드
dig google.com ANY # 모든 레코드
dig -x 8.8.8.8 # 역방향 조회 (IP → 도메인)
dig @8.8.8.8 google.com # 특정 DNS 서버 사용
dig google.com +trace # 루트 서버부터 전체 조회 과정 추적
dig google.com +noall +answer # 답변 섹션만 출력5.3 host
간결한 DNS 조회 도구.
host google.com # A 레코드 + MX 레코드
host -t MX google.com # MX 레코드만
host 8.8.8.8 # 역방향 조회
host google.com 8.8.8.8 # 특정 DNS 서버 사용/etc/resolv.conf
cat /etc/resolv.conf
# nameserver 8.8.8.8 # 기본 DNS 서버
# nameserver 8.8.4.4 # 보조 DNS 서버
# search example.com # 'host myserver' → 'host myserver.example.com' 시도
# domain example.com # search와 유사 (한 개만)
# options ndots:5 timeout:2 attempts:3최신 시스템에서 /etc/resolv.conf는 systemd-resolved나 NetworkManager에 의해 자동 관리되는 경우가 많다. 직접 수정하면 덮어씌워질 수 있다.
# systemd-resolved 사용 시 실제 DNS 설정 확인
resolvectl status
systemd-resolve --status6. 데이터 전송
6.1 curl
URL을 이용한 데이터 전송 도구. API 호출, 파일 다운로드 등.
# 기본 GET 요청
curl https://api.example.com/data
curl -s https://api.example.com/data # silent (진행바 숨김)
# HTTP 메서드 지정
curl -X GET https://api.example.com/data
curl -X POST https://api.example.com/data
curl -X PUT https://api.example.com/data
curl -X DELETE https://api.example.com/data/1
# 헤더 추가
curl -H "Content-Type: application/json" \
-H "Authorization: Bearer token123" \
https://api.example.com/data
# 데이터 전송 (POST)
curl -X POST -d "name=park&age=25" https://api.example.com/users
curl -X POST -d '{"name":"park","age":25}' \
-H "Content-Type: application/json" \
https://api.example.com/users
# 파일 다운로드
curl -o filename.zip https://example.com/file.zip # 파일명 지정
curl -O https://example.com/file.zip # 원래 파일명 사용
# 리다이렉트 따라가기
curl -L https://bit.ly/short-url # follow redirect
# SSL 인증서 무시 (개발/테스트용)
curl -k https://self-signed.example.com
# 상세 출력 (디버깅)
curl -v https://api.example.com/data # verbose
curl -I https://api.example.com/data # 헤더만 표시 (HEAD 요청)
# 이어받기 / 타임아웃
curl -C - -O https://example.com/large.iso # 이어받기
curl --connect-timeout 10 --max-time 30 https://api.example.com
# 업로드
curl -F "file=@/path/to/file.jpg" https://api.example.com/upload # multipart
curl -T /path/to/file.txt ftp://ftp.example.com/ # FTP 업로드6.2 wget
파일 다운로드에 특화된 도구. 재귀 다운로드 가능.
# 기본 다운로드
wget https://example.com/file.zip
wget -O custom_name.zip https://example.com/file.zip # 파일명 지정
# 이어받기
wget -c https://example.com/large.iso # continue
# 재귀 다운로드 (웹사이트 미러링)
wget -r https://example.com/docs/ # recursive
wget -r -l 2 https://example.com/ # 깊이 제한 (level)
wget -r --no-parent https://example.com/docs/ # 상위 디렉토리 안 감
wget --mirror https://example.com/ # = -r -N -l inf --no-remove-listing
# 백그라운드 다운로드
wget -b https://example.com/large.iso # background
tail -f wget-log # 진행 확인
# 여러 파일 다운로드
wget -i urls.txt # 파일에 나열된 URL 다운로드
# 속도 제한
wget --limit-rate=500k https://example.com/large.iso7. 방화벽
7.1 iptables
리눅스 커널의 Netfilter 프레임워크를 설정하는 저수준 도구.
체인(Chain): 패킷이 통과하는 규칙 목록
| 체인 | 설명 |
|---|---|
INPUT | 호스트로 들어오는 패킷 |
OUTPUT | 호스트에서 나가는 패킷 |
FORWARD | 호스트를 통과하는 패킷 (라우터 역할) |
타겟(Target): 규칙에 매칭된 패킷의 처리 방식
| 타겟 | 설명 |
|---|---|
ACCEPT | 허용 |
DROP | 무시 (응답 없음) |
REJECT | 거부 (ICMP 에러 응답) |
LOG | 로그 기록 후 다음 규칙으로 |
# 규칙 확인
sudo iptables -L # 모든 체인의 규칙 목록
sudo iptables -L -n -v # 숫자 표시, 상세 (패킷/바이트 카운터)
sudo iptables -L INPUT --line-numbers # 규칙 번호 포함
# 기본 정책 설정 (매칭 규칙 없을 때의 기본 동작)
sudo iptables -P INPUT DROP # 기본 차단 (화이트리스트 방식)
sudo iptables -P OUTPUT ACCEPT # 나가는 건 허용
sudo iptables -P FORWARD DROP # 포워딩 차단
# 규칙 추가 (-A: append)
# 특정 포트 허용
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH 허용
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP 허용
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS 허용
# 특정 IP 허용/차단
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 서브넷 허용
sudo iptables -A INPUT -s 10.0.0.5 -j DROP # 특정 IP 차단
# 루프백 허용 (필수!)
sudo iptables -A INPUT -i lo -j ACCEPT
# 이미 연결된 세션 허용 (중요!)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 규칙 삽입 (-I: insert, 특정 위치에)
sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT # 맨 앞에 삽입
# 규칙 삭제
sudo iptables -D INPUT -p tcp --dport 8080 -j ACCEPT # 조건 매칭으로 삭제
sudo iptables -D INPUT 3 # 번호로 삭제
# 규칙 초기화
sudo iptables -F # 모든 체인의 모든 규칙 삭제 (Flush)
sudo iptables -X # 사용자 정의 체인 삭제
# 규칙 저장/복원 (재부팅 후 유지)
sudo iptables-save > /etc/iptables.rules
sudo iptables-restore < /etc/iptables.rules
# Debian: sudo apt install iptables-persistent
# RHEL: sudo service iptables save실전 기본 방화벽 설정 예시:
# 기존 규칙 초기화
sudo iptables -F
# 기본 정책
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# 필수 규칙
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 서비스 포트 개방
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# ICMP (ping) 허용
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT7.2 firewalld / firewall-cmd (RHEL/CentOS 7+)
iptables의 동적 프론트엔드. 영역(zone) 기반으로 관리.
# 상태 확인
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all # 현재 zone의 모든 규칙
# 서비스 허용
sudo firewall-cmd --add-service=http # 임시 (--permanent 없으면 리로드 시 사라짐)
sudo firewall-cmd --add-service=http --permanent # 영구
sudo firewall-cmd --reload # 영구 규칙 적용
# 포트 허용
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --remove-port=8080/tcp --permanent
# 사용 가능한 서비스 목록
sudo firewall-cmd --get-services
# Zone 관리
sudo firewall-cmd --get-zones
sudo firewall-cmd --set-default-zone=public
sudo firewall-cmd --zone=trusted --add-source=192.168.1.0/24 --permanent7.3 ufw (Uncomplicated Firewall, Ubuntu)
iptables의 간편한 프론트엔드.
# 기본 명령
sudo ufw enable # 방화벽 활성화
sudo ufw disable # 비활성화
sudo ufw status # 상태 확인
sudo ufw status verbose # 상세 상태
sudo ufw status numbered # 번호 포함
# 규칙 추가
sudo ufw allow 22 # SSH 허용
sudo ufw allow 80/tcp # HTTP TCP 허용
sudo ufw allow from 192.168.1.0/24 # 서브넷 허용
sudo ufw allow from 192.168.1.0/24 to any port 3306 # MySQL 특정 서브넷만
sudo ufw deny 23 # Telnet 차단
sudo ufw reject 23 # 거부 (응답 포함)
# 규칙 삭제
sudo ufw delete allow 80/tcp
sudo ufw delete 3 # 번호로 삭제
# 기본 정책
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 앱 프로필
sudo ufw app list # 사용 가능한 앱 프로필
sudo ufw allow 'Nginx Full' # 앱 프로필로 허용8. 원격 접속
8.1 ssh
# 기본 접속
ssh user@hostname
ssh user@192.168.1.100
ssh -p 2222 user@hostname # 포트 지정
# 키 기반 인증 (비밀번호 대신 공개키 사용)
ssh-keygen -t ed25519 -C "comment" # 키 쌍 생성 (ed25519 권장)
ssh-keygen -t rsa -b 4096 -C "comment" # RSA 4096비트
ssh-copy-id user@hostname # 공개키를 서버에 복사 (~/.ssh/authorized_keys)
# 또는 수동:
# cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys (서버에서)SSH 포트 포워딩 (터널링):
# -L: 로컬 포트 포워딩 (로컬 → 원격)
# 로컬 8080으로 접속하면 원격 서버를 통해 db.internal:3306으로 연결
ssh -L 8080:db.internal:3306 user@bastion
# 이후 localhost:8080 으로 접속하면 db.internal:3306에 연결됨
# -R: 리모트 포트 포워딩 (원격 → 로컬)
# 원격 서버의 9090으로 접속하면 내 PC의 localhost:3000으로 연결
ssh -R 9090:localhost:3000 user@remote-server
# -D: 동적 포트 포워딩 (SOCKS 프록시)
ssh -D 1080 user@proxy-server
# 브라우저에서 SOCKS5 프록시 localhost:1080 설정 → 모든 트래픽이 proxy-server를 통과
# -J: ProxyJump (Jump Host, 다단계 접속)
ssh -J bastion-user@bastion target-user@target
# bastion을 거쳐 target에 접속SSH 설정 파일 (~/.ssh/config):
Host myserver
HostName 192.168.1.100
User phh
Port 2222
IdentityFile ~/.ssh/id_ed25519
Host production
HostName 10.0.0.50
User deploy
ProxyJump bastion
Host bastion
HostName bastion.example.com
User phh
# 이후 간단히 접속
ssh myserver
ssh production8.2 scp - 파일 복사
# 로컬 → 원격
scp file.txt user@hostname:/remote/path/
scp -r localdir/ user@hostname:/remote/path/ # 디렉토리 재귀 복사
scp -P 2222 file.txt user@hostname:/path/ # 포트 지정 (대문자 P)
# 원격 → 로컬
scp user@hostname:/remote/file.txt /local/path/
scp -r user@hostname:/remote/dir/ /local/path/
# 원격 → 원격
scp user1@host1:/path/file user2@host2:/path/8.3 sftp - 대화형 파일 전송
sftp user@hostname
# sftp 내부 명령
sftp> ls # 원격 디렉토리 목록
sftp> lls # 로컬 디렉토리 목록
sftp> get remote_file # 다운로드
sftp> put local_file # 업로드
sftp> mget *.log # 여러 파일 다운로드
sftp> mkdir newdir # 원격 디렉토리 생성
sftp> exit8.4 rsync - 효율적 파일 동기화
변경된 부분만 전송하여 네트워크 대역폭을 절약한다.
# 기본 동기화 (-avz: archive + verbose + compress)
rsync -avz /local/dir/ user@hostname:/remote/dir/
# 주요 옵션
rsync -avz source/ dest/ # 기본 동기화
rsync -avz --delete source/ dest/ # 소스에 없는 파일은 대상에서도 삭제
rsync -avz --dry-run source/ dest/ # 시뮬레이션 (실제 전송 안 함)
rsync -avz --progress source/ dest/ # 전송 진행 표시
rsync -avz --exclude='*.log' source/ dest/ # 특정 패턴 제외
rsync -avz --exclude-from=exclude.txt source/ dest/
rsync -avz -e "ssh -p 2222" source/ user@host:/dest/ # SSH 포트 지정소스 경로 끝의 / 유무에 따라 동작이 달라진다.
source/- source 디렉토리의 내용을 dest에 동기화source- source 디렉토리 자체를 dest 아래에 복사 (dest/source/)
9. 네트워크 디버깅
9.1 tcpdump
패킷 캡처 도구. 네트워크 문제 진단에 필수.
# 기본 캡처
sudo tcpdump # 모든 인터페이스의 모든 패킷
sudo tcpdump -i eth0 # 특정 인터페이스
sudo tcpdump -c 100 # 100개만 캡처
# 필터
sudo tcpdump host 192.168.1.100 # 특정 호스트 관련 패킷
sudo tcpdump src 192.168.1.100 # 소스가 특정 IP
sudo tcpdump dst 192.168.1.100 # 목적지가 특정 IP
sudo tcpdump port 80 # 특정 포트
sudo tcpdump tcp port 443 # TCP 443 포트
sudo tcpdump -n # DNS 역조회 안 함 (빠름)
sudo tcpdump -nn # 포트명도 숫자로 표시
# 복합 필터 (BPF 문법)
sudo tcpdump 'host 192.168.1.100 and port 80'
sudo tcpdump 'tcp[tcpflags] & tcp-syn != 0' # SYN 패킷만
# 파일 저장/읽기
sudo tcpdump -w capture.pcap # pcap 파일로 저장 (Wireshark로 분석 가능)
sudo tcpdump -r capture.pcap # pcap 파일 읽기
# 상세 출력
sudo tcpdump -X # 패킷 내용 HEX + ASCII
sudo tcpdump -A # ASCII만
sudo tcpdump -v # verbose (-vv, -vvv 가능)9.2 nmap 기초
네트워크 탐색 및 포트 스캐닝 도구.
# 호스트 탐색
nmap -sn 192.168.1.0/24 # Ping scan (포트 스캔 없이 호스트만)
# 포트 스캐닝
nmap 192.168.1.100 # 상위 1000개 TCP 포트 스캔
nmap -p 22,80,443 192.168.1.100 # 특정 포트
nmap -p 1-65535 192.168.1.100 # 전체 포트 (= -p-)
nmap -sV 192.168.1.100 # 서비스 버전 탐지
nmap -O 192.168.1.100 # OS 탐지
# 스캔 유형
nmap -sT 192.168.1.100 # TCP Connect scan (기본)
nmap -sS 192.168.1.100 # SYN scan (반개방, root)
nmap -sU 192.168.1.100 # UDP scan허가 없는 네트워크 스캐닝은 법적 문제가 될 수 있다. 자신의 시스템이나 허가받은 네트워크에서만 사용할 것.
10. 소켓 - nc (netcat)
“네트워크의 스위스 아미 나이프”. TCP/UDP 연결을 수동으로 생성/테스트.
# 포트 연결 테스트 (telnet 대안)
nc -zv hostname 80 # TCP 포트 연결 테스트
nc -zv hostname 20-100 # 포트 범위 스캔
# 간단한 서버/클라이언트
nc -l 1234 # 1234 포트에서 수신 대기 (서버)
nc hostname 1234 # 1234 포트에 연결 (클라이언트)
# 양쪽에서 입력하면 채팅 가능
# 파일 전송
nc -l 1234 > received_file # 수신 측
nc hostname 1234 < send_file # 송신 측
# HTTP 요청 수동 전송
echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80
# UDP
nc -u hostname 5000 # UDP 연결
nc -lu 5000 # UDP 수신 대기
# 포트 개방 확인 (스크립트에서 유용)
nc -z -w 3 hostname 22 && echo "Open" || echo "Closed" # 3초 타임아웃11. /etc/services와 Well-Known Ports
/etc/services
포트 번호와 서비스명의 매핑 파일.
grep "^http " /etc/services
# http 80/tcp www # WorldWideWeb HTTP
grep "^ssh" /etc/services
# ssh 22/tcp # SSH Remote Login ProtocolWell-Known Ports
| 포트 | 서비스 | 프로토콜 |
|---|---|---|
| 20 | FTP (데이터) | TCP |
| 21 | FTP (제어) | TCP |
| 22 | SSH | TCP |
| 23 | Telnet | TCP |
| 25 | SMTP (메일 전송) | TCP |
| 53 | DNS | TCP/UDP |
| 67/68 | DHCP (서버/클라이언트) | UDP |
| 80 | HTTP | TCP |
| 110 | POP3 (메일 수신) | TCP |
| 123 | NTP (시간 동기화) | UDP |
| 143 | IMAP (메일 수신) | TCP |
| 443 | HTTPS | TCP |
| 465 | SMTPS | TCP |
| 993 | IMAPS | TCP |
| 995 | POP3S | TCP |
| 3306 | MySQL | TCP |
| 5432 | PostgreSQL | TCP |
| 6379 | Redis | TCP |
| 8080 | HTTP Proxy (대체) | TCP |
포트 범위 구분:
0-1023- Well-Known Ports (root 권한 필요)1024-49151- Registered Ports (등록된 서비스)49152-65535- Dynamic/Private Ports (클라이언트 임시 포트)