Linux 서버 관리 완전 정복 4편: 네트워크 설정과 방화벽
Linux Server Administration Complete Guide Part 4
Linux 서버 관리 완전 정복 시리즈
3편: 패키지와 서비스 | 4편: 네트워크와 방화벽 (현재) | 5편: SSH와 원격 관리
들어가며: 네트워크는 서버의 생명선
서버는 네트워크를 통해 외부와 통신합니다. 올바른 네트워크 설정과 방화벽 구성은 서버 운영과 보안의 핵심입니다. 이번 편에서는 IP 설정, DNS, 라우팅부터 다양한 방화벽 도구까지 다룹니다.
1. 네트워크 기본 확인
1.1 네트워크 인터페이스 확인
# IP 주소 및 인터페이스 정보
ip addr
ip a
# 특정 인터페이스만
ip addr show eth0
# 구형 명령어 (deprecated)
ifconfig
1.2 네트워크 연결 상태
# 라우팅 테이블
ip route
ip r
# 기본 게이트웨이 확인
ip route | grep default
# DNS 서버 확인
cat /etc/resolv.conf
# 연결 테스트
ping -c 4 8.8.8.8
ping -c 4 google.com
1.3 포트 및 연결 확인
# 열린 포트 확인
ss -tuln
# 특정 포트 확인
ss -tuln | grep :80
# 연결 상태 포함
ss -tuna
# 프로세스와 함께 확인
sudo ss -tulnp
# netstat (구형)
sudo netstat -tulnp
2. IP 주소 설정
2.1 임시 IP 설정
# IP 주소 추가
sudo ip addr add 192.168.1.100/24 dev eth0
# IP 주소 삭제
sudo ip addr del 192.168.1.100/24 dev eth0
# 인터페이스 활성화/비활성화
sudo ip link set eth0 up
sudo ip link set eth0 down
2.2 영구 IP 설정 (Ubuntu/Debian - Netplan)
# /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
# 적용
sudo netplan apply
# 테스트 (문제 시 자동 롤백)
sudo netplan try
2.3 영구 IP 설정 (RHEL/CentOS - nmcli)
# 연결 목록 확인
nmcli connection show
# 고정 IP 설정
sudo nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24
sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1
sudo nmcli connection modify eth0 ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli connection modify eth0 ipv4.method manual
# 적용
sudo nmcli connection up eth0
# 또는 설정 파일 직접 수정
# /etc/sysconfig/network-scripts/ifcfg-eth0
3. DNS 설정
3.1 DNS 서버 설정
# /etc/resolv.conf (임시, 재부팅 시 초기화될 수 있음)
nameserver 8.8.8.8
nameserver 8.8.4.4
# systemd-resolved 사용 시
sudo systemctl status systemd-resolved
resolvectl status
3.2 호스트 파일
# /etc/hosts - 로컬 DNS 역할
127.0.0.1 localhost
192.168.1.10 webserver.local webserver
192.168.1.20 dbserver.local dbserver
3.3 DNS 조회 테스트
# nslookup
nslookup google.com
nslookup google.com 8.8.8.8
# dig (자세한 정보)
dig google.com
dig @8.8.8.8 google.com
# host
host google.com
4. 방화벽 개요
4.1 Linux 방화벽 체계
- netfilter: 커널 레벨 패킷 필터링
- iptables: netfilter의 전통적인 프론트엔드
- nftables: iptables의 후속 (최신 배포판)
- firewalld: RHEL/CentOS의 동적 방화벽 관리자
- UFW: Ubuntu의 간단한 방화벽 (iptables 프론트엔드)
5. iptables
5.1 기본 구조
# 테이블 → 체인 → 규칙
# 주요 테이블: filter, nat, mangle
# filter 체인: INPUT, OUTPUT, FORWARD
# 현재 규칙 확인
sudo iptables -L -n -v
sudo iptables -L -n --line-numbers
5.2 기본 규칙 설정
# 기본 정책 설정
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 state --state ESTABLISHED,RELATED -j ACCEPT
# SSH 허용 (포트 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP/HTTPS 허용
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 특정 IP에서만 허용
sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
5.3 규칙 삭제 및 저장
# 특정 규칙 삭제 (번호로)
sudo iptables -D INPUT 3
# 모든 규칙 삭제
sudo iptables -F
# 규칙 저장
sudo iptables-save > /etc/iptables.rules
# 규칙 복원
sudo iptables-restore < /etc/iptables.rules
# Ubuntu/Debian 영구 저장
sudo apt install iptables-persistent
sudo netfilter-persistent save
6. firewalld (RHEL/CentOS)
6.1 기본 명령어
# 상태 확인
sudo firewall-cmd --state
sudo systemctl status firewalld
# 시작/중지
sudo systemctl start firewalld
sudo systemctl enable firewalld
6.2 존(Zone) 기반 관리
# 사용 가능한 존 목록
sudo firewall-cmd --get-zones
# 기본 존 확인
sudo firewall-cmd --get-default-zone
# 활성 존 확인
sudo firewall-cmd --get-active-zones
# 특정 존 규칙 확인
sudo firewall-cmd --zone=public --list-all
6.3 서비스 및 포트 허용
# 서비스 허용 (일시적)
sudo firewall-cmd --zone=public --add-service=http
# 서비스 허용 (영구적)
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
# 포트 허용
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 변경사항 적용
sudo firewall-cmd --reload
# 서비스/포트 제거
sudo firewall-cmd --zone=public --remove-service=http --permanent
6.4 리치 룰 (Rich Rules)
# 특정 IP 허용
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'
# 특정 IP 차단
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" reject'
# 로그 기록
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" log prefix="SSH Access: " level="info" accept'
7. UFW (Ubuntu)
7.1 기본 명령어
# 상태 확인
sudo ufw status
sudo ufw status verbose
# 활성화/비활성화
sudo ufw enable
sudo ufw disable
# 기본 정책 설정
sudo ufw default deny incoming
sudo ufw default allow outgoing
7.2 규칙 추가
# 서비스 허용
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
# 포트 허용
sudo ufw allow 8080
sudo ufw allow 8080/tcp
sudo ufw allow 8080:8090/tcp
# 특정 IP 허용
sudo ufw allow from 192.168.1.0/24
sudo ufw allow from 192.168.1.100 to any port 22
# 특정 인터페이스
sudo ufw allow in on eth0 to any port 80
7.3 규칙 삭제
# 규칙 번호로 삭제
sudo ufw status numbered
sudo ufw delete 3
# 규칙 직접 삭제
sudo ufw delete allow 8080
# 모든 규칙 초기화
sudo ufw reset
8. 실전 시나리오
8.1 웹 서버 방화벽 설정 (UFW)
# 기본 정책
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH 허용 (관리용)
sudo ufw allow ssh
# 웹 서비스 허용
sudo ufw allow http
sudo ufw allow https
# 특정 IP에서만 관리 포트 허용
sudo ufw allow from 192.168.1.0/24 to any port 22
# 활성화
sudo ufw enable
8.2 데이터베이스 서버 (firewalld)
# MySQL 포트를 내부 네트워크에만 허용
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="3306" accept'
# SSH는 관리 서버에서만
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" service name="ssh" accept'
# 나머지는 기본 차단
sudo firewall-cmd --set-default-zone=drop
sudo firewall-cmd --reload
8.3 NAT/포트 포워딩 (iptables)
# IP 포워딩 활성화
echo 1 > /proc/sys/net/ipv4/ip_forward
# 영구 설정
# /etc/sysctl.conf에 추가
net.ipv4.ip_forward = 1
# 포트 포워딩: 외부 8080 → 내부 서버 80
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
9. 네트워크 트러블슈팅
9.1 연결 문제 진단
# 단계별 진단
# 1. 인터페이스 확인
ip addr
# 2. 게이트웨이 연결 확인
ping -c 4 192.168.1.1
# 3. 외부 IP 연결
ping -c 4 8.8.8.8
# 4. DNS 확인
ping -c 4 google.com
# 5. 경로 추적
traceroute google.com
mtr google.com
9.2 포트 연결 테스트
# 포트 연결 테스트
nc -zv 192.168.1.100 22
telnet 192.168.1.100 80
# 원격 포트 스캔 (자신의 서버만)
nmap -p 1-1000 localhost
9.3 패킷 캡처
# tcpdump 기본
sudo tcpdump -i eth0
# 특정 포트만
sudo tcpdump -i eth0 port 80
# 특정 호스트
sudo tcpdump -i eth0 host 192.168.1.100
# 파일로 저장
sudo tcpdump -i eth0 -w capture.pcap
마무리
네트워크 설정과 방화벽 구성은 서버의 연결성과 보안을 결정합니다. 기본 원칙은 필요한 것만 허용하고 나머지는 차단하는 것입니다.
다음 5편에서는 SSH와 원격 서버 관리에 대해 다룹니다.
시리즈 네비게이션
← 3편: 패키지와 서비스 | 4편 (현재) | 5편: SSH와 원격 관리 →