728x90
반응형
iptables
리눅스에서 방화벽을 설정하는 도구로 커널 2.2에서 사용되던 ipchains의 사슬(Chain) 구조를 그대로 승계했지만, 기능과 역할을 강화하기 위해 테이블로 확장하며 테이블별로 각각 사슬을 지정하고 해당 사슬에 정책을 설정하도록 되어있다.
즉, 패킷 필터링 도구로서 방화벽 구성이나 NAT에 사용되는 리눅스 커널 방화벽이다.
iptables의 구조
1. 테이블 (Table)
iptables는 체인이라는 규칙을 연결한 테이블 구조로 되어 있다. 각 테이블은 자신만의 고유한 사슬 집합을 가지고 있지만, 사용자가 공통태그와 관련된 규칙집합을 만들기 위해 사용자 정의 사슬을 생성할 수 있다.
iptables 는 filter, nat, mangle, raw, security와 같은 5개의 테이블이 있다.
- filter : iptables의 기본 테이블로 패킷 필터링 담당
- nat : Network Address Translation, IP 주소 변환
- mangle : 패킷 데이터를 변경하는 특수 규칙을 적용하는 테이블, 성능향상을 위한 TOS(Type of Service) 설정
- raw : 넷필터의 연결추적 하위시스템과 독립적으로 동작해야 하는 규칙을 설정하는 테이블
- security : 리눅스 보안 모듈인 SELinux에 의해 사용되는 MAC(Mandatory Access Control) 네트워크 관련 규칙 적용
2. 체인 (Chain)
일치하는 패킷의 규칙을 연결하는 단위이다. INPUT, OUTPUT, FORWARD가 내장 체인로 되어있다.
- INPUT : 시스템 외부에서 내부로 들어오는 체인
- OUTPUT : 시스템 내부에서 외부로 나가는 체인
- FORWARD : 시스템을 통과하는 체인
iptables 사용법
# iptables [-t table] [action] [chain] [match] [-j target]
- iptables를 이용하여 정책을 설정할 때 가장 중요한 것은 실질적 룰(Rule)에 해당하는 매치(match)와 타깃(Target)이다.
- 타깃은 iptables에서 패킷이 규칙과 일치할때 취하는 동작이고,
- 매치는 iptables가 규칙 타깃에 의해 명시되는 동작에 따라 패킷을 처리하기 위해 만족해야 하는 조건들이다
[주요 action]
action | 설명 |
-N | 새로운 사용자 정의 사슬 |
-X | 비어있는 사슬 제거, 기본 사슬 제거불가 |
-P | 사슬의 기본 정책 설정 (policy) |
-L | 현재 사슬의 규칙 나열 |
-F | 사슬로부터 규칙 전부 제거 (flush) |
-Z | 사슬내의 모든 규칙들의 패킷과 바이트의 카운트를 0으로 만든다 |
-A | 사슬에 새로운 규칙 추가, 맨 마지막 규칙으로 등록됨 (append) |
-l | 사슬에 규칙을 맨 첫 부분에 삽입 |
-D | 사슬의 규칙을 제거 |
[주요 match]
match | 설명 |
-s | 출발지 IP주소나 네트워크와 매칭, 도메인, IP주소, 넷마스크값 이용하여 표시 |
-d | 목적지 IP주소나 네트워크와 매칭, 도메인, IP주소, 넷마스크값 이용하여 표시 |
-p | 특정 프로토콜과 매칭, TCP, UDP, ICMP 와 같은 이름을 사용하고 대소문자는 구분하지 않음 이 옵션 사용하지 않으면 모든 프로토콜이 대상이됨 |
-i | 입력 인터페이스와 매칭 |
-o | 출력 인터페이스와 매칭 |
* iptables -p 옵션 뒤에 프로토콜 지정 추가 옵션
option | 설명 |
--sport | 발신지에서의 하나의 포트 또는 포트범위를 지정 |
--dport | 도착지의 포트를 지정하는 것으로 설정 방법은 --sport와 동일 |
[주요 target] (-j target)
target | 설명 |
ACCEPT | 패킷을 허가하는 것으로 본래 라우팅대로 진행 |
DROP | 패킷을 거부하는 것으로 더 이상 어떤 처리도 수행하지 않고 버림 |
LOG | 패킷을 syslog에 전달하여 기록, 일반적으로 /var/log/messages 에 저장 |
REJECT | 패킷을 버리고 동시에 적당한 응답 패킷을 전달 |
RETURN | 호출 사슬 내에서 패킷 처리를 계속 진행 |
# iptables -F
-> 현재 설정되어 있는 iptables의 규칙(rule)을 전부 제거
# iptables -P INPUT DROP
-> 들어오는 모든 패킷을 거부한다
# iptables -A INPUT -s 192.168.5.13 -j ACCEPT
-> IP주소가 192.168.5.13인 호스트로부터 들어오는 패킷을 허가한다
# iptables -F INPUT
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp --dport 20:30 -j DROP
-> 포트번호 20 - 30번까지 차단하고, ssh 포트인 22번만 허가한다
-> 거부 메시지 없이 무조건 거절한다
iptables를 이용한 NAT(Network Address Translation) 구현
NAT
- 폭발적인 인터넷 사용인구의 증가로 인해 IP주소가 부족해지는 현상을 해결하는 방안으로 나온 기술
- 말그대로 네트워크 주소를 변환하여 주는 역할
- 한 개의 공인 IP주소를 공유하여 여러대의 컴퓨터가 인터넷 접속이 가능하도록 하는 것이 대표적(SNAT)
NAT 테이블에서 사용하는 체인
- PREROUTING : 외부에서 내부로 보낼때 변환하는 체인
(DNAT - 하나의 공인 IP주소로 다수의 서버를 운영하는 경우 사용)
- POSTROUTING : 내부에서 외부로 보낼때 변환하는 체인
(SNAT - 공인 IP주소 하나로 다수의 컴퓨터가 인터넷 접속 가능)
# iptables -t nat -A PREROUTING -p tcp -d 203.247.50.100 --dport 80 -j DNAT --to 192.168.0.4:80
-> 하나의 공인 IP 주소를 이용해 다수의 서버를 연결하여 구성하고,
외부로부터 들어오는 웹 서비스 요청을 내부의 사설 IP 주소가 192.168.0.4인 웹 서버로 전달한다
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 203.247.40.100
-> 하나의 공인 IP를 공유하여 다수의 컴퓨터를 사용하는 환경을 구성하고,
해당 시스템에는 이더넷 카드가 두 개 장착되어 있는데 첫번째 이더넷 카드에서 나가는 패킷에 대해
공인 IP주소인 203.247.40.100을 할당한다
방화벽 규칙(Rule)을 확인하고 저장 및 관리
# iptables-save > firewall.sh
-> 현재 설정되어 있는 iptables의 규칙(rule)을 firewall.sh 파일로 저장한다.
# iptables -F
-> 현재 설정되어 있는 iptables의 규칙(rule)을 전부 제거한다.
# iptables-restore < firewall.sh
->firewall.sh 파일에 저장되어 있는 iptables의 규칙(rule)을 불러와서(복구) 반영한다.
반응형
'서버 운영 > Linux' 카테고리의 다른 글
리눅스 파일시스템 (/etc/fstab) (0) | 2021.11.05 |
---|---|
리눅스 방화벽(firewalld) 명령어 firewall-cmd (0) | 2021.11.04 |
리눅스 dhcpd.conf 설정 (0) | 2021.11.02 |
[Linux] Proxy 서버 - squid 설정 파일(squid.conf) (0) | 2021.11.01 |
리눅스 슈퍼데몬 xinetd 데몬과 설정 파일들 (0) | 2021.11.01 |