🛠️ IPtables 기본 설정 및 네트워크 통신 허용 규칙 설정
리눅스에서 네트워크 통신을 제어하는 데 중요한 도구인 iptables!
iptables를 사용하여 네트워크 트래픽을 제어하는 방법을 소개.
1. 테이블의 정책 확인 🔍
특정 테이블의 정책을 확인하려면 아래 명령어를 사용. 예를 들어, filter 테이블의 정책을 확인하려면 이렇게 입력.
iptables -t filter -L # filter 테이블의 정책을 확인
filter는 패킷 필터링을 담당하고, nat은 네트워크 주소 변환, mangle은 패킷 헤더 수정에 사용되는 테이블. 😎
2. 테이블 정책 설정 ⚙️
기본적인 iptables 정책을 설정. 예를 들어, 포워딩되는 모든 트래픽을 차단하려면 아래와 같이 설정가능.
iptables -t filter -P FORWARD DROP # FORWARD 체인 기본 정책을 DROP으로 설정
이렇게 설정하면 기본적으로 포워딩되는 모든 트래픽이 차단. 필요한 서비스만 허용. 🔒
3. 체인에 규칙 추가하기 ➕
특정 네트워크 서비스가 통신할 수 있도록 허용하는 규칙을 추가.
1) DNS 통신 허용 (UDP 포트 53)
DNS 질의 및 응답을 허용하는 규칙을 추가.
iptables -t filter -A FORWARD -p udp --dport 53 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -t filter -A FORWARD -p udp --sport 53 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
2) Telnet 통신 허용 (TCP 포트 23)
Telnet 서비스를 허용하는 규칙을 추가.
iptables -t filter -A FORWARD -p tcp --dport 23 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 23 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
3) SSH 통신 허용 (TCP 포트 12345)
SSH 통신을 허용하는 규칙을 추가.
iptables -A FORWARD -p tcp --dport 12345 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 12345 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
4) 메일 통신 허용 (SMTP, POP3)
SMTP(25번 포트)와 POP3(110번 포트) 서비스를 허용하는 규칙을 추가
# SMTP (메일 송신)
iptables -A FORWARD -p tcp --dport 25 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 25 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
# POP3 (메일 수신)
iptables -A FORWARD -p tcp --dport 110 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 110 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
5) FTP 통신 허용
FTP 제어 연결 및 데이터 연결을 허용하는 규칙을 추가
# FTP 제어 연결 (포트 21)
iptables -A FORWARD -p tcp --dport 21 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 21 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
# FTP 데이터 연결 (포트 범위 50000~50001)
iptables -A FORWARD -p tcp --dport 50000:50001 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 50000:50001 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
6) Ping 통신 허용
클라이언트와 방화벽 간의 Ping을 허용
iptables -A INPUT -p icmp -s 10.10.10.10 -j ACCEPT
iptables -A OUTPUT -p icmp -d 10.10.10.10 -j ACCEPT
4. 일반적인 정책 삭제 ❌
- 특정 체인의 규칙을 삭제하려면 -D 명령을 사용
iptables -t filter -D FORWARD 1 # 첫 번째 규칙 삭제
- 모든 규칙을 삭제하려면 -F 명령을 사용
iptables -t filter -F # FORWARD 체인의 모든 규칙 삭제
5. 네트워크 포워딩 활성화 🚀
리눅스에서 네트워크 패킷을 포워딩하려면 IP forwarding을 활성화. 이걸 통해 외부 네트워크와 통신가능.
리눅스 운영체제를 통해 네트워크 데이터를 지나가게 하려면 forwarding 기능을 활성화해야 한다.
방법**
1.SW forwarding 프로그램 설치해서 기능 활성화
2. kernel 자체 프로그램 이용
sysctl net.ipv4.ip_forward -> net.ipv4.ip_forward = 0 이라고 나옴 -> sysctl net.ipv4.ip_forward=1 라고 명령어를 치면 바뀐다
1) sysctl 명령을 사용하여 활성화
sysctl net.ipv4.ip_forward # 현재 설정 확인
sysctl net.ipv4.ip_forward=1 # 포워딩 활성화
2) 영구 설정 변경
/etc/sysctl.conf 파일에 아래와 같이 추가해서, 시스템이 재부팅될 때마다 포워딩을 활성화
net.ipv4.ip_forward = 1
6. NAT 설정 🔄
서버가 외부 네트워크와 통신할 수 있도록 NAT(Network Address Translation)를 설정가능. MASQUERADE를 사용하면 외부 네트워크와 연결되는 서버의 IP 주소가 자동으로 변경
iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE # NAT 설정
NAT 설정 후, 확인하려면 아래 명령어를 사용
iptables -t nat -L # NAT 설정 확인
실습 1
클라이언트와 서버가 통신 불가능.
클라이언트 : 10.10.10.10
서버 : 20.20.20.20
방화벽 설정
-gateway는 없어도 된다.
-ens160복사해서 파일 이름, 디바이스 이름, addr 변경해주기
1. 클라이언트와 서버가 DNS 통신 가능하도록 정책 추가
DNS 질의 허용 : 10.10.10.10:??? -> 20.20.20.20:53
DNS 응답 허용 : 20.20.20.20:53 -> 10.10.10.10:????
iptables -t filter -A FORWARD -p udp --dport 53 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -t filter -A FORWARD -p udp --sport 53 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
2. 클라이언트와 서버가 telnet 통신 가능하도록 정책 추가
10.10.10.10:??? -> 20.20.20.20:23 허용
20.20.20.20:23 -> 10.10.10.10:??? 허용
iptables -t filter -A FORWARD -p tcp --dport 23 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 23 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
3. 클라이언트와 서버가 ssh 통신 가능하도록 정책 추가
10.10.10.10:??? -> 20.20.20.20:12345 허용
20.20.20.20:12345 -> 10.10.10.10:??? 허용
iptables -A FORWARD -p tcp --dport 12345 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 12345 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
4. 클라이언트와 서버가 mail 통신 가능하도록 정책 추가
메일을 송신(smtp)(tcp)
10.10.10.10:??? -> 20.20.20.20:25 허용
20.20.20.20:25 -> 10.10.10.10:??? 허용
iptables -A FORWARD -p tcp --dport 25 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 25 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
메일을 수신(pop3)(tcp)
10.10.10.10:??? -> 20.20.20.20:110 허용
20.20.20.20:110 -> 10.10.10.10:??? 허용
iptables -A FORWARD -p tcp --dport 110 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 110 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
5. 클라이언트와 서버가 ftp 통신 가능하도록 정책 추가
ftp 제어 연결 허용
10.10.10.10:??? -> 20.20.20.20:21
20.20.20.20:21 -> 10.10.10.10:???
iptables -A FORWARD -p tcp --dport 21 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 21 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
ftp 데이터 연결 허용
10.10.10.10:??? -> 20.20.20.20:50000~50001
20.20.20.20:50000~50001 -> 10.10.10.10:???
iptables -A FORWARD -p tcp --dport 50000:50001 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 50000:50001 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
6. 클라이언트와 방화벽이 서로 ping 통신 가능하도록 정책 추가
10.10.10.10 -> 10.10.10.254
10.10.10.254 -> 10.10.10.10
iptables -A INPUT -p icmp -s 10.10.10.10 -j ACCEPT
iptables -A OUTPUT -p icmp -d 10.10.10.10 -j ACCEPT
-----------
iptables 파일 만들어서 아래 작성하기
iptables -t filter -A FORWARD -p udp --dport 53 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -t filter -A FORWARD -p udp --sport 53 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 23 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 23 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
iptables -A FORWARD -p tcp --dport 12345 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 12345 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
iptables -A FORWARD -p tcp --dport 25 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 25 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
iptables -A FORWARD -p tcp --dport 110 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 110 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
iptables -A FORWARD -p tcp --dport 21 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 21 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
iptables -A FORWARD -p tcp --dport 50000:50001 -s 10.10.10.10 -d 20.20.20.20 -j ACCEPT
iptables -A FORWARD -p tcp --sport 50000:50001 -s 20.20.20.20 -d 10.10.10.10 -j ACCEPT
iptables -A INPUT -p icmp -s 10.10.10.10 -j ACCEPT
iptables -A OUTPUT -p icmp -d 10.10.10.10 -j ACCEPT
실습 2
문제.
linux1(firewall)
ens160 192.168.50.50(vmnet8)
ens224 192.168.100.254(vmnet3)
ens256 192.168.150.254(vmnet4)
linux2(server1)
ens160 192.168.100.100(vmnet3)
linux3(server2)
ens160 192.168.150.100(vmnet4)
1. 모든 리눅스가 서로간의 통신 되도록 네트워크 설정
2. linux2,linux3이 인터넷 가능하도록 네트워크 설정
3. linux2에 DNS server 구성(naver.com, google.com 2개의 존 구성)
4. linux3에 SSH server 구성(ssh.naver.com)(root 접속 허용)(port 62300)
5. linux3에 FTP server 구성(pasv port 60000~60010)(root 접속 허용)(file.naver.com)
6. linux2에 telnet server 구성(기본 구성)(tel.google.com)
7. 방화벽 모든 기본 정책 ALL DROP
8. linux3에서 DNS server 질의 가능하도록 정책 설정
9. linux3에서 telnet server 접속 가능하도록 정책 설정
10. linux2에서 ssh server 접속 가능하도록 정책 설정
11. linxu2에서 ftp server 접속 가능하도록 정책 설정
12. linux2에서 ktest로 ftp server 접속 시 chroot 적용되도록 설정
13. linux2,3에서 외부 통신 가능하도록 정책 설정(ping 통신)
iptables
#!/bin/bash
sysctl net.ipv4.ip_forward=1
# 모든 테이블 초기화
iptables -F
iptables -t nat -F
# 모든 기본 정책 ALL DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# 서버1, 서버2가 외부통신 가능하도록 NAT 설정
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens160 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.150.0/24 -o ens160 -j MASQUERADE
# 서버2가 DNS서버에게 질의 가능하도록 허용 설정
iptables -A FORWARD -p udp --dport 53 -s 192.168.150.100 -d 192.168.100.100 -j ACCEPT
iptables -A FORWARD -p udp --sport 53 -s 192.168.100.100 -d 192.168.150.100 -j ACCEPT
# 서버2가 telnet서버에게 접속 가능하도록 허용 설정
iptables -A FORWARD -p tcp --dport 23 -s 192.168.150.100 -d 192.168.100.100 -j ACCEPT
iptables -A FORWARD -p tcp --sport 23 -s 192.168.100.100 -d 192.168.150.100 -j ACCEPT
# DNS 서버에서 반복질의 가능하도록 허용 설정
iptables -A FORWARD -p udp --dport 53 -s 192.168.100.100 -j ACCEPT
iptables -A FORWARD -p udp --sport 53 -d 192.168.100.100 -j ACCEPT
iptables -A FORWARD -p tcp --dport 53 -s 192.168.100.100 -j ACCEPT
iptables -A FORWARD -p tcp --sport 53 -d 192.168.100.100 -j ACCEPT
# 서버1, 서버2가 웹 통신 가능하도록 허용 설정
iptables -A FORWARD -p tcp --dport 443 -s 192.168.150.100 -j ACCEPT
iptables -A FORWARD -p tcp --sport 443 -d 192.168.150.100 -j ACCEPT
iptables -A FORWARD -p tcp --dport 443 -s 192.168.100.100 -j ACCEPT
iptables -A FORWARD -p tcp --sport 443 -d 192.168.100.100 -j ACCEPT
# 서버1이 ssh서버에 접속 가능하도록 허용 설정
iptables -A FORWARD -p tcp --dport 62300 -s 192.168.100.100 -d 192.168.150.100 -j ACCEPT
iptables -A FORWARD -p tcp --sport 62300 -s 192.168.150.100 -d 192.168.100.100 -j ACCEPT
# 서버1이 FTP서버에 접속 가능하도록 허용 설정
iptables -A FORWARD -p tcp --dport 21 -s 192.168.100.100 -d 192.168.150.100 -j ACCEPT
iptables -A FORWARD -p tcp --sport 21 -s 192.168.150.100 -d 192.168.100.100 -j ACCEPT
iptables -A FORWARD -p tcp --dport 60000:60010 -s 192.168.100.100 -d 192.168.150.100 -j ACCEPT
iptables -A FORWARD -p tcp --sport 60000:60010 -s 192.168.150.100 -d 192.168.100.100 -j ACCEPT
# 서버1, 서버2가 icmp ping 통신 가능하도록 허용 설정
iptables -A FORWARD -p icmp -s 192.168.100.100 -d 8.8.8.8 --icmp-type 8 -j ACCEPT
iptables -A FORWARD -p icmp -s 8.8.8.8 -d 192.168.100.100 --icmp-type 0 -j ACCEPT
iptables -A FORWARD -p icmp -s 192.168.150.100 -d 8.8.8.8 --icmp-type 8 -j ACCEPT
iptables -A FORWARD -p icmp -s 8.8.8.8 -d 192.168.150.100 --icmp-type 0 -j ACCEPT
# 모든 테이블 출력
iptables -L
iptables -t nat -L
'Linux' 카테고리의 다른 글
와이어샤크로 본 도메인 이름 해석 과정 wireshark (0) | 2025.04.26 |
---|---|
계정 관리, 디스크 관리, RAID 구성 및 bit 연산-> 서버 관리나 데이터 복구 시 유용 (0) | 2025.04.26 |
메일, DNS,FTP,방화벽,telnet, ssh 서버 구성하기 (0) | 2025.04.24 |
기본 리눅스 설정: 헷갈리는 것들 모음 (0) | 2025.04.23 |
이메일 서버 설정 : Dovecot과 Postfix 구성 방법 ✉️ (메일 이론, 설정법) (0) | 2025.04.21 |