iptables
: NAT 및 방화벽에 사용되는 패킷 필터링 도구
: 커널에 있는 netfilter를 이용하여 네트워크 스택에서의 필터링을 수행
: ipchain의 사슬(Chain) 구조를 사용하며, 4계층의 테이블로 구분하여 테이블 마다 각각의 사슬을 지정.
: 사슬에는 정책을 지정하고 Match Target을 설정.
- 개념
: 테이블
> 패킷에 대한 규칙 집합
: 사슬
> 패킷에 대한 제어
: Match
> iptables에 지정하는 규칙
: Target
> iptables에 지정한 규칙에 부합할 때 취하는 동작
- netfilter
: 리눅스가 제공하는 모든 종류의 패킷에 대한 filtering 및 mangling 도구
: 네트워크 스택으로 함수를 hooking하는데 사용하는 커널 내부 프레임워크
※ mangling
: 패킷이 라우팅 단계에 들어가기 전에 IP 패킷 헤더의 정보를 수정 하는 것
- ipchain
: 커널 2.2에서 사용되던 패킷 필터링 도구
: iptables의 filter 테이블의 역할만 수행
iptables을 구성하는 테이블
- filter
: iptables의 기본 테이블로 패킷 필터링을 수행
- nat
: NAT (Network Address Translation)을 수행하는 테이블. IP의 주소를 다른 IP 주소로 변환하는 역할 수행
: ipchain의 FORWARD 사슬 역할을 확장한 것
- mangle
: 패킷 데이터를 변경하는 특수 규칙을 적용하는 테이블
: 성능 향상을 위한 TOS (Type of Service)를 설정
- raw
: net filter의 연결추적 하위 시스템과 독립적으로 동작해야 하는 규칙을 설정하는 테이블
iptables의 사슬
- INPUT
: 패킷 필터링 및 방화벽 관련 정책을 설정하는 사슬로 실제적인 접근 통제를 수행
: 커널 내부에서 라우팅 계산을 마친 후, 로컬 소켓이 목적지인 패킷에 적용
- OUTPUT
: 다른 시스템으로의 접근을 차단하는 사슬. 리눅스 시스템에서 전송하는 패킷을 제어
- FORWARD
: 리눅스 시스템을 통과하는 패킷을 관리하는 사슬. 두 네트워크 간의 패킷이 방화벽을 통과하는 경우 사용
: NAT 기반 시스템에서 사용할 경우 사설 IP를 사용하는 시스템의 접근 제어 정책 설정
- PREROUTING
: 커널 내부에서 라우팅 계산을 수행하기 전의 패킷 헤더를 수정하는 사슬
- POSTROUTING
: 커널 내부에서 라우팅 계산을 수행한 이후의 패킷 헤더를 수정하는 사슬
테이블 별 적용된 사슬
- filter
: INPUT / FORWARD / OUTPUT
- nat
: INPUT / OUTPUT / PREROUTING / POSTROUTING
- mangle
: INPUT / FORWARD / OUTPUT / PREROUTING / POSTROUTING
- raw
: OUTPUT / PREROUTING
iptables 관련 명령어
- iptables
- iptables-save
- iptables-restore
iptables
: iptables를 설정. 중복되는 설정이 있을 경우 먼저 설정된 설정을 따름
: 재부팅하면 사라지기 때문에 스크립트 등으로 저장필요
- 형식
: iptables [-t <table>] <action> <chain> <match> [-j <target>]
- 주요 action (사슬 설정 및 제어)
: -N (--new-chain)
> 새로운 사용자 정의 사슬 생성
: -X (--delete-chain)
> 모든 사용자 정의 사슬 삭제
: -P (--policy)
> 사슬의 기본 정책 설정
: -L (--list)
> 현재 사슬의 규칙 출력
: -F (--flush)
> 사슬에서 규칙 제거
: -Z (--zero)
> 사슬내의 모든 규칙들의 패킷과 바이트의 카운트를 0으로 갱신
: -A (--append)
> 사슬의 마지막 규칙으로 새로운 규칙 추가
: -I (--insert)
> 사슬 첫 규칙으로 새로운 규칙 추가. 룰 넘버를 사용해 특정 부분에 삽입 가능
: -R (--replace)
> 사슬의 규칙을 대체
: -D (--delete)
> 사슬의 규칙을 제거
- 주요 match (iptables에 지정하는 규칙)
: -s (--source, --src)
> 출발지 IP 주소, 도메인, 넷마스크 값
: -d (--destination, --dst)
> 목적지 IP 주소, 도메인, 넷마스크 값
: -p (--protocol)
> 특정 프롵토콜. 대소문자 구분 없음. 해당 옵션 미표기시 모든 프로토콜을 대상으로 적용
: -i (--in-interface)
> 입력 인터페이스
: -o (--out-interface)
> 출력 인터페이스
: !
> NOT. 제외할 매칭앞에 사용
: -m (--match)
> 세밀한 제어를 위한 매칭 옵션
: --state
> 연결 상태. INVALID / ESTABLISHED / NEW / RELATED
: --string
> 특정한 패턴
- 주요 옵션
: -t
> 기본 Filter 테이블 외 지정할 테이블
- j (--jump)
> target 지정
: -n (--numeric)
> 다른 옵션과 같이 사용되면서 출력 정보를 숫자 값으로 표현
: -v (--verbose)
> 다른 옵션과 같이 사용되면서 패킷, 바이트수 등을 추가하여 정보를 자세히 출력
: --line-number
> 정책 앞에 번호를 붙여 출력. 삭제 및 삽입 시 유용
- 주요 target (iptables에 지정한 규칙에 부합할 때 취하는 동작)
: ACCEPT
> 본 라우팅 대로 진행 되도록 패킷을 허가
: DROP
> 패킷 거부
: LOG
> 패킷을 /var/log/messages에 기록
: REJECT
> 패킷을 거부하고 응답 패킷 전송. TCP인 경우 reset 패킷, UDP인 경우 port Unreachable 메시지 전송
: RETURN
> 호출 사슬 내에서 패킷 처리를 계속 진행
- -p tcp 옵션에 대한 확장 옵션
: --sport (--source-port)
> 출발지 포트 또는 포트 범위. /etc/services에 기록된 포트 이름 및 포트 번호 지정 가능. 범위는 :을 사용해서 표기
: --dport (--destination-port)
> 도착지 포트 또는 포트 범위.
: --tcp-flags
> TCP flag 지정. SYN, ACK, FIN, RST, URG, PSH, ALL, NONE
: --syn
> TCP flags SYN, RST, ACK, FIN SYN과 동일
- -p udp 옵션에 대한 확장 옵션
: --sport
: --dport
- -p icmp
: --icmp-type
> ICMP 타입. echo-request, echo-reply, destination-unreachable 등
> iptables -p icmp -h로 옵션 확인
iptables 조회 예시
- iptables -t nat -L
: nat 테이블 내 모든 사슬에 설정된 정책 정보 출력
- iptables -t raw -nL
: raw 테이블 내 모든 사슬에 설정된 정책 정보 중 포트, 프로토콜을 숫자값으로 출력
- iptables -L INPUT --line-number
: filter 테이블의 INPUT 사슬에 설정된 정책 정보를 줄번호를 붙혀서 출력
iptables 규칙 추가 예시
- iptables -A INPUT -s 192.168.0.28 -d localhost -j DROP
: INPUT 사슬에 출발지가 192.168.0.28이고 목적지가 localhost인 패킷에 대해 거부 정책 추가
- iptables -A INPUT -s 192.168.1.0/24 -p icmp -j DROP
: INPUT 사슬에 발신지가 192.168.1.0 네트워크 대역인 ICMP 패킷을 거부
- iptables -A INPUT ! -p icmp -j DROP
: INPUT 사슬에 ICMP 프로토콜을 제외한 모든 프로토콜 패킷을 거부
- iptables -A OUTPUT -p tcp -d www.2mukee.com --dport 80 -o eth0 -j DROP
: 2mukee 웹 사이트에 대한 웹 사이트 접속 차단 (eth0 인터페이스를 통한 80번 포트 접속)
- iptables -A FORWARD -p tcp -d www.deragon.co.kr --dport 80 -o eth0 -j DROP
: 사설 IP 대역 사용자들의 deragon.co.kr 웹 사이트 접속 차단 (eth0 인터페이스를 통한 80번 포트 접속)
iptables 정책 제거 예시
- iptables -F
: filter 테이블 내 모든 사슬에 설정된 정책 제거
- iptables -F OUTPUT
: filter 테이블의 OUTPUT 사슬에 설정된 정책 제거
- iptables -D INPUT 2
: INPUT 사슬의 두 번째 정책 제거
- iptables -D INPUT -s 192.168.1.0/24 -p icmp -j DROP
: INPUT 사슬에서 해당 규칙을 제거
iptables의 로그기록 예시
- iptables -I INPUT 3 -j LOG
> INPUT 사슬의 3번째 정책에 대한 로그를 /var/log/messages에 기록
iptables-save
: iptables로 설정된 정책을 표준 출력. 리다이렉션 기호를 조합하여 파일로 저장
- 형식
: iptables-save [option]
- 주요 옵션
: -t (--table)
> 정책을 출력할 테이블
: -c (--counters)
> 출력되는 정책 앞부분에 패킷수와 바이트 표시
- 예시
: iptables-save > firewall.sh
> 현재 설정된 정책을 .sh 파일로 생성
iptables-restore
: iptables의 정책 설정을 시스템에 반영. 리다이렉션 기호를 조합하여 파일로 저장
- 형식
: iptables-restore [option]
- 주요 옵션
: -c (--counters)
> 기록된 패킷수와 바이트를 그대로 반영
: -n (--noflush)
> 현재 시스템에 설정된 정책을 초기화하지 않고 추가 하는 방식으로 반영
- 예시
: iptables-restore < firewall.sh
iptables와 NAT
: iptables에서 NAT는 SNAT(Source NAT)과 DNAT(Destination NAT)로 구분
: /proc/sys/net/ipv4/ip_forward 파일에 설정이 되어있어야 NAT 사용 가능
- NAT (Network Address Translation)
: 하나의 네트워크에서 여러 기기들이 인터넷에 접속하기 위해 각 기기마다 사설 IP를 부여하고
이를 인터넷이 가능한 공인 IP로 변환하는 기술
: 공인 IP와 사설 IP 간 변환을 수행
- 투명프록시
: 네트워크 중간에서 요청과 응답에 대해 redirection을 수행하는 프록시 서버
- SNAT
: 네트워크에서 외부 네트워크로 보낼때에 대한 설정. 공인 IP 변경
: 공인 IP 주소 하나로 다수의 컴퓨터가 인터넷 접속이 가능하게 하는 것
: 라우팅 이후에 설정되기 때문에 POSTROUTING 사슬에서 설정
- DNAT
: 외부 네트워크에서 온 패킷에 대한 설정. 패킷의 도착지 주소 변경
: 하나의 공인 IP 주소로 다수의 서버를 운영
: 라우팅 이전에 설정되기 때문에 PREROUTING 사슬에서 설정
SNAT 설정 예시
- iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 201.58.72.88
: eth0 인터페이스로 나가는 패킷에 대해 201.58.72.88 주소를 부여
- iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 201.58.72.1-201.58.72.20
: eth0 인터페이스로 나가는 패킷에 대해 201.58.72.1~20 사이의 주소를 부여
- iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
: eth0 인터페이스로 나가는 패킷에 대해 유동 IP로 할당된 주소를 부여
DNAT 설정 예시
- iptables -A PREROUTING -t nat -p tcp -d www.2mukee.com --dport 80 -j DNAT --to 192.168.1.110:80
: tcp 80번 포트로 2mukee.com에 패킷을 보낼 경우 192.168.1.110:80으로 보내짐
- iptables -A PREROUTING -t nat -p udp -d www.deragon.co.kr --dport 53 -j DNAT --to 192.168.2.5:53
: udp 53번 포트로 deragon.co.kr에 패킷을 보낼 경우 192.168.2.5:53으로 보내짐
- iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
: 투명프록시 설정. eth1 인터페이스에서 80번 포트로 나가는 패킷을 3128 포트로 나가도록 리다이렉트
ICMP Flooding 방어 설정
1) iptables -N ICMP
: ICMP 라는 이름의 사슬 생성
2) iptables -A INPUT -p icmp -j ICMP
: icmp 프로토콜 패킷은 ICMP 사슬에서 처리
3) iptables -A ICMP -p icmp --icmp-type echo-request -j DROP
: icmp echo request 요청을 거부
UDP Flooding 방어 설정
1) iptables -N UDP
: UDP 라는 이름의 사슬 생성
2) iptables -A INPUT -p udp -j UDP
: udp 프로토콜 패킷은 UDP 사슬에서 처리
3) iptables -A UDP -p udp --dport 80 -m recent --uptadte --seconds 1 --hitcount 10 -j DROP
: 같은 IP 주소에서 1초에 10개 이상의 UDP 패킷을 보내면 거부
4) iptables -A UDP -j LOG --log-prefix "UDP-FLOOD"
: UDP 사슬의 패킷 처리 로그를 UDP-FLOOD라는 이름을 붙혀서 기록
TCP Flooding 방어 설정
- iptables -A INPUT -p tcp --dport 80 --syn -m limit --limit 100/s -j ACCEPT
: 초당 허용되는 접속 개수를 100개로 제한
- iptables -A INPUT -p tcp --dport 80 --syn -m connlimit --limit -above 30 0j DROP
: IP 주소 당 허용되는 접속 갯수를 30회로 제한
- iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 10 -j DROP
: IP 주소당 초당 요구 갯수 제한를 10회로 제한
SSH Injection 방어 설정
1) iptables -N SSH
: SSH 라는 이름의 사슬 생성
2) iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH
: 22번 포트로 접속하는 패킷을 SSH 사슬에서 처리
3) iptables -A SSH -p udp --dport 22 -m recent --update --seconds 60 --hitcount 15 -j DROP
: 22번 포트로 같은 IP 주소에서 60초 동안 15번 이상 접속 시도 시 거부
4) iptables -A SSH -j LOG --log-prefix "SSH-BRUTE"
: SSH 사슬의 패킷 처리 로그를 SSH-BRUTE라는 이름을 붙혀서 기록
- 시간에 따른 접속 횟수 제한 (60초에 5회 접속 가능 하도록 설정)
: iptables -A INPUT -p tcp --dport 22 -m recent --set --name ssh --resource
: iptables -A INPUT -p tcp --dport 22 -m recent ! --rcheck --second 60 --hitcount 5 --name ssh --resource -j ACCEPT
- 접속 커넥션 수를 분당 3번으로 제한
: iptables -A INPUT -p tcp --dport 22 --syn -m limit --limit-burst 3 -j ACCEPT
: iptables -A INPUT -p tcp --dport 22 --syn -j DROP
Refference
리눅스마스터 1급 2차 실기 정복하기 | 정성재 - 교보문고
리눅스마스터 1급 2차 실기 정복하기 | 출제 경향을 반영하여 핵심 내용만 요약 정리 시험대비를 위한 최신 기출문제를 해설과 함께 수록본 교재는 독자들이 최근 출간 요구가 많았던 리눅스마
product.kyobobook.co.kr
'Certification > 리눅스마스터' 카테고리의 다른 글
리눅스 마스터 1급 중요 명령어 요약 (0) | 2022.11.23 |
---|---|
리눅스 마스터 1급 설정 파일 예시 (0) | 2022.11.23 |
리눅스 시간 동기화 서버 (NTP) 관리 (0) | 2022.10.20 |
리눅스 가상 네트워크 컴퓨팅 서버 (VNC) (0) | 2022.10.20 |
리눅스 DHCP 서버 관리 (0) | 2022.10.20 |