Linux
네트워크 관리
Linux 네트워크 기본 개념, 설정, 상태 확인, 방화벽 정리
1) 네트워크 기본 개념
TCP/IP 프로토콜
- 프로토콜: 통신을 하기 위한 규칙 또는 규약
- TCP/IP: 인터넷이라는 통신망의 프로토콜
주소
MAC Address
- Media Access Control의 약자
- 하드웨어를 위한 주소로, 이더넷 주소/하드웨어 주소/물리 주소라고도 불림
- NIC(Network Interface Card)에 저장된 주소
- 하드웨어 제조 과정에서 부여되며 원칙적으로는 수정 불가
- 하지만 운영체제에 따라 수정 가능
:또는-로 구분되는 6개의 16진수로 구성 → 총 48bit00:50:56:3e:3c:fe형태- 앞의 3개 → 제조사 번호
- 뒤의 3개 → 일련번호
IP Address
- 인터넷 주소 체계
- 현재는 IPv4와 IPv6만 사용
IPv4
- 32비트 주소 체계
- 8비트씩 끊어 10진수로 표현, 구분은
. - 0~255까지의 숫자 4개로 표현
- 현재는 주소가 고갈되어 IPv6 사용
IPv6
- 128비트 주소 체계
- 16진수 2개씩 묶어 표현
- 구분은
:
NetMask
- IP 주소에서 네트워크 부분을 알려주는 역할
- 동일한 네트워크를 나타내기 위해 사용
- 내부 통신이 가능한 영역을 표현
- IP처럼 10진수 4자리 또는 1의 개수로 표현
192.168.0.2 255.255.255.0또는192.168.0.2/24형태255.255.255.0→11111111.11111111.11111111.00000000- 1의 개수가 24개 →
/24 - 1의 개수 24자리까지 동일하면 동일한 네트워크로 간주
192.168.0까지 동일하면 동일 네트워크 → 외부 라우터 없이 내부 처리
Broadcast Address
- 동일 네트워크의 모든 컴퓨터에 메시지를 보낼 때 사용하는 주소
- 일반적으로 네트워크 대역에서 가장 마지막 주소 사용
192.168.0.2 255.255.255.0→192.168.0.255
호스트 이름
- IP 주소 대신 사용할 수 있는 컴퓨터 이름
- 도메인: 인터넷에서 사용하는 호스트 이름
www.naver.com→naver.com은 네트워크 부분,www는 호스트 부분
DNS (Domain Name Service)
- 도메인을 해석해 IP로 변환해주는 시스템
- 도메인 입력 → DNS가 해석 → IP로 변환 → 해당 컴퓨터로 접속
- IP를 직접 사용하면 도메인보다 속도가 빠름
DHCP (Dynamic Host Configuration Protocol)
- IP 주소 관리 자동화를 위한 네트워크 프로토콜
- 네트워크에 연결되는 장비는 IP주소, 넷마스크, 기본 게이트웨이, DNS Server 주소를 설정해야 인터넷 사용 가능
- DHCP 서버가 장비의 요청을 받아 할당 가능한 주소를 찾아 대여
Gateway
- 로컬 네트워크는 내부 컴퓨터 정보만 알 수 있음
- 외부 네트워크로 나가기 위해 거쳐야 하는 장비(라우터)
- 인터넷 사용 시 Gateway를 통해 요청
- 보통 사용 가능한 네트워크 주소 대역에서 첫 번째 주소 사용
192.168.0.2/24→192.168.0.1(또는 마지막 주소192.168.0.254사용)
포트 번호
- 컴퓨터 내부에서 통신 가능한 애플리케이션을 구분하기 위한 번호
- 0~65535까지 사용 가능
- 0-1023번: 국제 표준으로 합의된 잘 알려진 포트(Well-known port)
cat /etc/services에서 확인 가능
인터넷 사용을 위해 설정해야 할 주소
- IP Address
- Subnet Mask
- Gateway Address
- DNS Address
2) 네트워크 설정
ip 명령으로 주소 관리
-
형식:
ip [옵션] 객체 [서브 명령] - 옵션
V: 버전 출력s: 자세한 정보 출력
- 객체와 서브 명령
address [add | del | show | help]: IP 주소 관리route [add | del | help]: 라우팅 테이블 관리link [set]: 네트워크 인터페이스 활성화/비활성화
# 전체 장치에 대한 상세 정보 출력
ip addr show
# 하나의 인터페이스에 대한 정보 출력
ip addr show enp0s3
# IP 추가 설정
sudo ip addr add 192.168.1.20/24 dev enp0s3
- 하지만
ip명령은 재부팅 시 사라지므로 별도의 설정 파일에 저장해야 영구 적용됨
라우팅 테이블과 게이트웨이
- 라우팅: 최적의 경로를 찾아가는 것
- 라우팅 테이블: 경로 정보를 저장해 놓은 테이블
- 라우팅 테이블에 없는 경로는 게이트웨이를 통해 찾아감
# 기본 게이트웨이 설정
sudo ip route add default via IP주소 dev 인터페이스주소
net-tools 패키지
- 네트워크 관련 전통적인 명령어들을 제공하는 패키지
sudo apt install net-tools
ifconfig 명령
- 형식:
ifconfig [인터페이스이름] [옵션] [값] - 옵션
a: 시스템의 전체 인터페이스 정보 출력up/down: 활성화 및 비활성화netmask: 넷마스크 주소 설정broadcast: 브로드캐스트 설정
DNS 설정
- 리눅스는 DNS 정보를
/etc/resolv.conf파일에 저장nameserver 127.0.0.53→ 로컬 스터브 주소를 가리키는 심볼릭 링크
# DNS 정보 확인
resolvectl status
# nmcli 명령으로 DNS 설정
nmcli con mod 커넥션이름 ipv4.dns DNS주소
# DNS 서버에 질의해 도메인의 IP 확인
nslookup
netplan
- 우분투에서 네트워크 구성을 관리하는 도구
- 설정 파일은 YAML 형식으로 작성하며
/etc/netplan/디렉토리에 존재- 파일 이름은 의미 없음
# 설정 적용
sudo netplan apply
# 또는 재부팅
# 권한 변경 (설정 파일들은 권한 변경 필요)
sudo chmod 600
- 파일을 수정하고
sudo netplan apply또는 재부팅으로 적용
네트워크 설정
가상머신 복제
- 여러대의 가상머신을 하나의 네트워크로 구성
- 하나의 NAT 네트워크를 생성(여러 개의 가상머신을 하나의 스위치나 허브로 묶는 장비 생성)
NAT 네트워크 생성
- [파일] → [도구] → [네트워크] 메뉴 실행
- [NAT 네트워크] 탭에서 만들기 선택
- 이름 수정 및 IPv4 접두사에 사용할 IP 대역 설정 (
192.168.0.0/24) - DHCP 활성화 체크 해제
가상머신 네트워크 연결
- 가상머신 선택 → 설정 아이콘 → 네트워크 탭 선택
Attached to를 NAT 네트워크로 선택 → 생성한 NAT 네트워크 선택
가상머신 IP 설정
# 네트워크 설정 파일 확인
ls /etc/netplan
# 기존 설정 파일 삭제 후 새 파일 생성 (파일명 무관, 확장자는 yaml/yml)
vi netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses:
- 192.168.0.101/24
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
# 적용
sudo netplan apply
- 주의: YAML 파일의 위치는
/etc/netplan이어야 하며, 이 디렉토리에는 YAML 파일이 1개만 있어야 함
네트워크 연결 확인
- 2개 컴퓨터 간
ping 상대방IP주소로 연결 확인
포트포워딩 설정
- HOST IP/PORT: 현재 컴퓨터의 IP와 사용할 포트
- 게스트 IP/PORT: 가상머신의 IP와 포트 번호 (SSH는 22번)
호스트 이름 관련 명령어
uname
- 호스트 이름 관련 명령어
- 형식:
uname [옵션] - 옵션:
m,n,r,s,v,a
hostname
- 호스트 이름과 관련된 명령어
hostname -I: 현재 설정된 IP 주소 확인 (IP가 안 보이면 IP 설정 미완료)hostname: 호스트 이름 출력hostname [호스트이름]: 호스트 이름 변경 (다음 로그인 시 적용, 하지만 재부팅 시 소멸)
hostnamectl
- 호스트 이름 관련 명령 (영구 적용)
hostnamectl status: 상태 조회hostnamectl set-hostname 호스트이름: 호스트 이름 변경 (파일 기반 → 재부팅 후 유지)
/etc/hostname
- hostname 관련 설정 파일
hostnamectl은 이 파일을 수정 → 영구 적용hostname은 메모리만 변경 → 재부팅 시 소멸
/etc/hosts
- 개요
- 도메인 이름을 IP 주소에 수동 매핑하는 텍스트 파일
- 호스트 이름 사용 시 가장 먼저 참조됨
- 이 파일에 없으면 DNS가 해석
- 용도
- 로컬 호스트 및 개발: 내부 통신 시 IP 대신 사용
- 시스템 최적화: 자주 사용하는 도메인 기재 → DNS 생략 → 속도 향상
- 특정 사이트 차단: 도메인에 루프백 주소 설정
- 설정 형식:
IP주소 호스트이름 [별명 나열]
3) 네트워크 상태 확인
ping
- 외부와 통신이 되는지 확인하거나 외부 서버가 동작 중인지 확인
- 형식:
ping [옵션] [목적지 주소] - 옵션
a: 통신이 되면 소리 출력q: 종합 결과만 출력c 개수: 보낼 패킷 수 지정
- 출력 해석:
64 bytes from server (192.168.0.101): icmp_seq=1 ttl=64 time=1.52 msicmp_seq: 응답 순서- ttl(Time To Live): 패킷이 목적지까지 거친 라우터 수를 간접적으로 알려줌 → 128 또는 64부터 시작, 라우터 거칠 때마다 1씩 감소 → 높을수록 경로가 짧거나 안정적
time: 왕복 시간
- 요약 예시:
5 packets transmitted, 5 received, 0% packet loss, time 4005msrtt min/avg/max/mdev: 최소/평균/최대/표준편차
- 통신이 안 될 때는
ping으로 gateway 확인 후 DNS 확인
netstat
- 네트워크 연결 상태, 라우팅 테이블, 인터페이스 통계 정보 출력
- 현재 시스템에 열려있는 포트 확인 가능
- 형식:
netstat [옵션] - 옵션
a: 모든 소켓 정보 출력r: 라우팅 정보 출력n: IP 주소로 출력 (호스트 이름 대신)i: 모든 네트워크 인터페이스 정보 출력s: 프로토콜별 통계 정보 출력p: 해당 소켓과 관련된 프로세스 이름과 PID 출력
# 열려 있는 포트 확인
netstat -an | grep LISTEN
# 열려 있는 포트의 프로세스 확인
netstat -p
arp
- 같은 네트워크에 있는 시스템들의 MAC 주소와 IP 주소 확인
- 형식:
arp [IP주소]
tcpdump
- 패킷 캡처 명령
- 네트워크 상태 확인에 사용
- 옵션
c 패킷수i 인터페이스이름n: IP 주소를 호스트 이름으로 변경하지 않음q: 정보를 간단히 출력X: 패킷 내용을 16진수와 ASCII로 출력w 파일명: 덤프 내용을 파일에 기록r 파일명: 파일에서 읽어오기host 호스트이름portip
- 명령보다는 별도 애플리케이션(와이어샤크, 패킷트레이서 등)을 이용해 수행
4) 방화벽 설정
iptables
- 개요
- 리눅스 커널 내부의 패킷 필터링 프레임워크인 netfilter를 제어하는 명령줄 기반 보안 도구
- 들어오고 나가는 모든 네트워크 패킷을 검사하고 규칙에 따라 허용/차단/전달 결정
- 네트워크 게이트키퍼 역할
- 장점
- 커널 레벨의 고성능: 커널 레이어에서 직접 패킷 제어 → 처리 속도 빠름, 자원 적게 사용
- 포트, IP, 패킷 상태, NIC, MAC 주소, 패킷 문자열 감지 등 정교한 조건 생성 가능
- 오랜 기간 리눅스 표준 방화벽 → 레퍼런스와 스크립트 툴이 다양
- 단점
- 하지만 명령어가 복잡하고 가독성이 떨어짐 → 규칙 하나 잘못 추가 시 네트워크 전체 마비 가능
- 하지만 규칙을 위에서부터 순서대로 검사 → 순서 의존성
- 하지만 휘발성 메모리에서 작동 → 별도 저장하지 않으면 재부팅 시 규칙 소멸
- 구조: 3대 테이블
- Filter(기본 테이블): 패킷 허용/차단 결정 (방화벽 핵심)
- NAT(Network Address Translation): 출발지/목적지 IP/포트 변환
- Mangle: 패킷 헤더 정보 마킹/수정
- 구조: 5대 체인
- INPUT: 외부 → 서버 자체로 들어오는 패킷
- OUTPUT: 서버 → 외부로 나가는 패킷
- FORWARD: 서버를 거쳐 다른 곳으로 전달되는 패킷 (라우터/공유기 역할)
- PREROUTING: NIC 도착 직후, 라우팅 경로 결정 전
- POSTROUTING: 라우팅 완료 후, NIC 통해 나가기 직전
- 패킷 처리 규칙
- ACCEPT: 허용 및 통과
- DROP: 완전 차단 (응답 없음 → 보안상 추천)
- REJECT: 차단 + 거부 메시지(ICMP 에러) 반환
- LOG: 시스템 로그 기록 (패킷은 통과)
# 기본 filter 테이블 규칙 조회
sudo iptables -L -n -v --line-numbers
# NAT 테이블 규칙 조회
sudo iptables -t nat -L -n -v --line-numbers
# 기본 정책 변경
sudo iptables -P INPUT DROP # 들어오는 패킷 기본 차단
sudo iptables -P OUTPUT ACCEPT # 나가는 패킷 기본 허용
sudo iptables -P FORWARD DROP # 거쳐가는 패킷 기본 차단
# 방화벽 규칙 추가
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 # SSH(22) 허용
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP(80) 허용
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS(443) 허용
sudo iptables -A INPUT -s 아이피주소 -j DROP # 특정 IP 차단
# 방화벽 규칙 삭제
sudo iptables -D INPUT 라인번호 # 번호 기반 삭제
sudo iptables -F # 모든 규칙 삭제
# 포트포워딩 (80 → 8080)
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
- 규칙 저장
# 패키지 설치
sudo apt install iptables-persistent
# 파일에 저장
sudo iptables-save | sudo tee /etc/iptables/rules.v4
# 파일에서 읽어오기
sudo iptables-restore < /etc/iptables/rules.v4
- 현대 리눅스에서 위치
- ufw: Ubuntu 기본 방화벽 도구 (iptables를 단순화 Wrapping)
- nftables: 차세대 패킷 필터링 프레임워크
ufw
- 개요
- Uncomplicated FireWall의 약자
- iptables를 사용자 친화적으로 Wrapping한 도구
- 백엔드는 여전히 iptables 규칙을 생성하지만 사용자는 단순한 명령어로 제어 가능
- 핵심 동작 방식
- Whitelist 방식 기본: 외부 접근은 전부 차단, 내부 통신은 전부 허용
- 필요한 포트만 선택적으로 개방
- 특징
- 명령 체계 단순
- iptables:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT - ufw:
sudo ufw allow ssh
- iptables:
- 규칙 관리:
sudo ufw status numbered/sudo ufw delete 번호 - 응용프로그램 프로필 지원:
sudo ufw allow nginx full - 다중 조건 조합 가능 (IP + 프로토콜 + 포트)
- 명령 체계 단순
# 상태 확인 및 활성화
sudo ufw status verbose # 상태 확인
sudo ufw enable # 방화벽 활성화
sudo ufw disable # 방화벽 비활성화
# 기본 정책 설정
sudo ufw default deny incoming # 들어오는 모든 접속 차단
sudo ufw default allow outgoing # 나가는 모든 접속 허용
# 포트 번호 기반 설정
sudo ufw allow 포트번호 # 특정 포트 허용
sudo ufw allow 포트번호/tcp # 프로토콜 지정 허용
sudo ufw deny 포트번호 # 특정 포트 차단
sudo ufw allow 시작번호:끝번호/tcp # 포트 범위 허용
# 서비스 이름 기반 설정
sudo ufw allow ssh # SSH 허용
# 특정 IP 기반 설정
sudo ufw allow from IP # 특정 IP 접근만 허용
sudo ufw allow from 네트워크주소/서브넷마스크 # 특정 네트워크 대역 허용
sudo ufw allow from IP주소 to any port 포트번호 proto tcp # IP + 포트 조건
# 규칙 삭제 및 초기화
sudo ufw delete 번호 # 번호로 삭제
sudo ufw delete allow 80 # 명령어로 삭제
sudo ufw reset # 전체 초기화
댓글