iptables & netfilter 개념도

Slides:



Advertisements
Similar presentations

Advertisements

정보 보안 개론과 실습 네트워크 해킹과 보안 3부 해킹 전 정보 획득 Chapter 10. 목록화.
Part TCP / IP(계속) 3. IP 주소 4. IP 라우팅 5. 응용 프로토콜.
Chapter 8. 인터넷 연결공유와 개인네트워크 구축
Oozie Web API 기능 테스트 이승엽.
김태원 심재일 김상래 강신택. 김태원 심재일 김상래 강신택 인터넷 통신망의 정보를 제공하는 서비스 인터넷의 자원 및 정보는 NIC가 관리 IP주소 또는 도메인으로 정보 검색 이용자 및 통신망 관한 정보를 제공.
1. 신뢰할 수 있는 싸이트 등록 인터넷 익스플로러 실행 후 실행
NAT – Network Address Translation
연결리스트(linked list).
Chapter 2. IP Address IP Address의 구성에 대한 자세한 설명과 함께 IP Address를 효율적으로 관리하기 위한 방법인 서브넷팅, 수퍼넷팅, VLSM 등에 대해서 단계별로 접근할 수 있다. 몇가지 예제를 통해서 서브넷팅에 대한 개념을 정리하고.
PHP입문 Izayoi 김조흔.
제 7장 정적 라우팅 프로토콜.
24 장 TCP/IP 24.1 개요 24.2 네트워크층 24.3 주소 지정 24.4 서브넷팅틍
18장. 방화벽 컴퓨터를 만들자.
Firewall & N-IDS 김창현.
ARP의 실험 발표자 : 이직수
5장 Mysql 데이터베이스 한빛미디어(주).
제 14장 Multicast & Broadcast
제 15 장 점 대 점 프로토콜 15.1 천이상태 15.2 PPP 계층 15.3 링크 제어 프로토콜 15.4 인증
8장. 원격지 시스템 관리하기.
Chapter 21 Network Layer: ARP, ICMP (IGMP).
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
Sungkyunkwan University OS Project Dongkun Shin
FTP 프로그램의 활용 FTP 프로그램의 용도 인터넷 공간에 홈페이지 파일을 업로드할 때 필요
5장 Mysql 데이터베이스 한빛미디어(주).
17장 X.25 패킷 교환망 17.1 X.25 계층 17.2 X.25와 관련된 기타 프로토콜 17.3 요약.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
WOL(Wake-On Lan) 컴퓨터공학과 4학년 박기웅.
인터넷응용프로그래밍 JavaScript(Intro).
시스템 인터페이스 Lab3 Unix 사용법 실습.
Network Security WireShark를 활용한 프로토콜 분석 I.
Day-04(mon_9.6) Host_PC Router NAT NIC Switch ISP NAT Host Only
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
ACL(Access Control List)
Day-27(Tue_10.16) 파일 서비스 설정 AD 가 설치된 환경에서 DHCP 설치 할 경우 권한 자격을 주어야함.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
3D 프린팅 프로그래밍 01 – 기본 명령어 강사: 김영준 목원대학교 겸임교수.
TCP/IP 네트워크 구조 TCP/IP 개요 TCP/IP 프로토콜 한빛미디어(주).
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
16 장 네트워크 보안 : 방화벽과 VPN 16.1 개요 16.2 기밀성 16.3 전자 서명 16.4 인터넷 보안
Network 네트워크 이론 및 실습 TCP / IP 4장.
20 장 네트워킹과 인터네트워킹 장치 20.1 리피터(Repeaters) 20.2 브리지(Bridges)
-네트워크 관리 개요 및 SNMP 프로토콜 동작과정
Firewall & N-IDS 김창현.
S-Work 2.0 DRM 신규 버전 설치 가이드 SOFTCAMP
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
Teaming pms.
Ping Test.
Addressing the Network – IPv4
Chapter 27 Mobile IP.
Chapter 1 단위, 물리량, 벡터.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
Chapter 10 데이터 검색1.
제 6 장 IP 패킷 전달과 라우팅 6.1 연결형 서비스와 비연결형 서비스 6.2 직접 전달과 간접 전달 6.3 라우팅 방법
5.2.3 교환방식의 비교 학습내용 교환방식의 비교.
MIDP 네트워크 프로그래밍 ps lab 김윤경.
4. IP 데이터그램과 라우팅 (6장. 인터넷과 IP) IP 데이터그램 : 특정 물리망에 종속되지 않은 가상의 패킷 형식.
TrustNet 전자 협조전 사용설명서 목 차 작성,수정,삭제 결재함 처리현황 발송대장,접수대장
 6장. SQL 쿼리.
Docker Study 6~7.
운영체제보안 SELinux 실습 박민재
7 생성자 함수.
6 객체.
CCISS 어레이 형식 centos7 설치방법
ARP.
20 XMLHttpRequest.
Presentation transcript:

iptables & netfilter 개념도 memory iptables Rule parsing, read, write user level kernel level Rule Read & Write ip_table filter mangle nat rules

Netfilter란 무엇인가? 커널의 일부분은 각 프로토콜에 대하여 다른 hook을 감시하도록 등록 패킷 프로토콜 스택의 표준 Berkeley Socket Interface의 외부에 존재하는 패킷 mangling에 대한 프레임워크 프레임워크는 크게 4부분으로 구성, 각각의 프로토콜은 hooks라는 것을 정의 - 각각의 프로토콜은 패킷과 Hook Number를 이용하여 넷필터 프레임워크를 호출 커널의 일부분은 각 프로토콜에 대하여 다른 hook을 감시하도록 등록 : 패킷이 넷필터 프레임워크를 통과할 때, 어떤 프로토콜과 훅을 등록했는지 확인 : 넷필터 훅이 호출되는 경우, 각각의 모듈은 우선순위에 따라 호출 : 등록 확인 후  등록된 순서대로 패킷 검사 후  패킷 프로토콜 스택의 packet’s traversal에 있는 잘 정의된 포인터 Routing, Forward, Local-IN, Local-OUT Accept Drop Stolen Queue 사용자 공간으로 보내기 위해 제어 (비동기 처리)

Netfilter란 무엇인가? Netfilter framework Netfilter/iptables 패킷 - 리눅스 커널 2.4이후 지원되는 F/W mechanism - IPFW  ipfwadm  ipchains계보를 잇는 패킷 처리에 대한 실질적 기반 구조 Netfilter framework 시스템에 들어오는 모든 패킷을 분석해서 사용자의 뜻대로 처리(필터링, 변조)할 수 있고 기록할 수 있는 지능적 시스템 Kernel module Filtering Mangle (사용자 의도 대로 처리) Hooking (단지 커널모듈 호출) (시스템으로 유입되는) 패킷 분석 기록

Netfilter 패킷 경로도 HOOK Name 무결성 점검 [1]PRE [ROUTE] [3]FOR~ [4]POST 패킷 이상 Other Interface 무결성 점검 [1]PRE [ROUTE] [3]FOR~ [4]POST 패킷 이상 유무점검 라우팅 결정 소스 IP IP 옵션 확인 [ROUTE] HOOK Name [1]NF_IP_PRE_ROUTING [2]NF_IP_LOCAL_IN [3]NF_IP_FORWARD [4]NF_IP_POST_ROUTING [5]NF_IP_ LOCAL_OUT [2] IN [5] OUT 시스템에 패킷 진입 후부터 패킷의 진로에 대한 처분을 결정하는 사슬고리 구조 넷필터 훅들에 규칙을 추가(iptables)해서 패킷 흐름 제어 - 패킷이 들어오면 해당 프로토콜에 의한 후킹이 발생해서 넷필터 프레임워크(커널 모듈)을 호출하여 패킷 진로 결정

Netfilter 패킷 경로도와 Hooking [PRE] [FOR- WARD] [POST] [ROUTE] Conntrack Mangle Mangle Mangle SNAT Filter DNAT Conntrack [ROUTE] Conntrack [IN] [OUT] Conntrack Mangle Mangle DNAT (Proxy) Filter Filter (Local Processes) Hooking Call에 의한 모듈의 작동 1.Packet Filtering filter table 2. NAT : 네트워크 주소 변환  NAT table (IP Masquerade, Port Forward, Redirection) 3. Packet Mangling : 패킷에 대한 변조  mangle table 4. Connection Tracking : 연결 추적  conntrack table

Netfilter 패킷 경로도와 Hooking 2. 패킷 도착 감지 및 통보만 담당  한 지점의 길목 역할 지정 커널 모듈  실질적 패킷 처리 호출 결과통보 Hooking에 의한 1차적 패킷처분 - NF_ACCEPT: 평소처럼 진행 - NF_DROP : 패킷 폐기 - NF_STOLEN: 패킷 접수 - NF_QUEUE : 사용자 큐에 삽입(사용자영역에서 처리) - NF_REPEAT: 같은 훅을 한 번 더 후킹

Packet Filtering의 개념 F/W = “Packet Filtering” - F/W의 정의 * 네트워크 사이에 접근 제어 정책을 집행할 수 있는 장치나 서비스, P/G 통칭 * 원하는 것을 받고, 원하지 않는 것을 받지 않는 기본적인 패킷 필터의 역할 * 이유 + 외부의 악의적인 접근을 제어 + end-user에게서 잘 정의된 보안정책을 기대할 수 없기 때문에 네트워크 전체 차원에서 제어 및 감시 * 패킷 헤더 검사  규정된 규칙에 따라 패킷을 결정(filter table) * 패킷 필터링은 넷필터의 local_in, local_out, forward 훅에서 호출되어 수행 * 종류 + Static packet filtering F/W Network Layer(IP)에서 패킷 단위의 필터링 결정 + Dynamic packet filtering F/W (status check) Transport Layer에서 TCP Connection이나 UDP Exchange에 관련해서 작동

Packet Filtering의 개념 - Packet Filtering의 이득(위협 보호) * 불법적인 Port Scan과 Network Mapping * Source Address Spoofing : 발신지 주소 속이기 * DOS : 몇몇 종류의 서비스 거부 공격 * Misconfiguration or Mistakes : 내부의 실수로 인한 보안 구멍 - Packet Filtering을 위한 기본적인 보안정책 * 보안성 유리 정책  허가 패킷 제외, 모두 거부 “허가받은 패킷을 제외한 보든 것을 거부하겠다.” * 사용자 유리 정책  거부 패킷 제외, 모두 허가 “거부된 패킷을 제외한 모든 것을 허가하겠다.”

Packet Filtering의 개념 - 패킷을 필터링하는 종류 * Incoming Packet Filtering + Remote Src Address Filtering Port + Local Dest Address Filtering * Outgoing Packet Filtering + Local Src Address Filtering Port + Remote Dest Address Filtering * Incoming & Outgoing Packet Filtering + TCP Connection State Filtering - 패킷 필터링을 위한 예 * TCP Port Scanning : TCP 연결을 생성하여 해당 포트가 열려있는지 검사 짧은 시간에 같은 소스에서 많은 포트로 TCP 연결 생성  포트 스캔으로 판단  접근 금지 * SYN Flooding : IP Spoofing을 위한 과도한 SYN 신호 포착  차단 * 외부에서 내부 IP로 접속 시도  차단 * Ping of Death : 패킷을 크게 만들어 처리를 느리게 함  차단 * Ping Flooding : 출발지 주소를 변조해 Echo Request를 뿌려 공격 대상에게 과도한 Ping Echo Reply를 받게 함  차단

Iptables 개요 - 리눅스 넷필터 기반구조 위에서 방화벽을 구축하는 관리자 도구  기능적 분리 단위를 모듈을 호출하는 방식으로 사용 - 가장 중요한 Table  기본 테이블, 삭제 안됨 * filter table : 패킷 필터링 * nat table : 네트워크 주소 변환 * mangle table : 패킷 변조 - 필요 시 table 추가 가능, table에서 table을 호출 가능(모듈간 상호협동성) + 이 table들을 기동하기 위한 모듈들은 table이 사용될 때에 동적 로딩 + 모듈은 넷필터의 훅과 iptables에 모두 등록

Iptables 개요 - filter table의 기능 * INPUT, OUT, FORWARD 세가지 기본 Chain과 사용자 체인을 만들어 패킷에 대한 각종 명령 수행 가능 * 출발지, 목적지 포트 지정 * 규칙에 해당하는 패킷에 대해 처분(ACCEPT or DROP) 지시 * IP헤더의 각종 부분, 즉 protocol, source, destination, interface, fragmetation에 대해 ‘match’하여 rule 적용 * TCP, UDP, ICMP 등 다양한 프로토콜 지원 *** 이외 다양한 것들을 수행하기 위해, iptables 내부에는 몇 가지 특수한 flag들을 사용  ‘target’과 ‘match’ (이 flag들은 내부적으로 확장형이라고 부르고, 모듈로도 구성되어 있음)

Iptables 개요 - filter table의 target 확장형의 기능 * 기존의 처분(ACCEPT and DROP) 외에 REJECT라는 새로운 처분 가능 (REJECT는 에러 메세지를 발신지에 보냄) * target 확장형을 통해서 log 가능  방화벽의 필수 요소 * QUEUE를 이용해서 사용자 공간으로 패킷을 보낼 수 있음  사용자 공간에 패킷을 위한 처리가 없다면 그냥 DROP * RETURN으로 체인의 끝으로 점프시킬 수 있음 - filter table의 match 확장형의 기능 *

Iptables 개요 - nat table의 기능 * nat table은 3개의 체인을 기본으로 가짐 + PREROUTING : 패킷이 들어오기 전에 수정하는 목적지 주소 변환을 수행해서 부하분산 및 프록시 등의 여러 가지 일을 행함 + POSTROUTING : 라우팅 후, 패킷이 빠져나가기 전에 출발지 주소 변환 이나 masquerading을 수행 + OUTPUT : 로컬 프로세스/네트워크에서 만들어져서 나가는 패킷이 라우팅 되기 전에 목적지 주소 변환이나 방향 재설정, 포트 포워딩을 수행 * 사설 IP만 사용하는 네트워크에서 IP 주소만을 변환하여 NAT를 수행 * 모든 사설 호스트가 하나의 공인 주소를 통하여 연결되도록 NAT를 수행할 수 있음  NAPT (Network Address Port Translation) * 서로 다른 IP 체계를 사용하는 네트워크 사이에서 양방향 NAT 수행 가능  IPv4, IPv6 사이에서 양방향 NAT를 사용하여 소통 * src와 dest 주소의 네트워크가 충돌하는 경우, 또는 필요 시 NAT를 두 번 수행

Iptables 개요 - nat table의 확장형 * SNAT 확장형을 사용하여 출발지 NAT를 수행 * DNAT 확장형을 사용하여 목적지 NAT를 수행 * MASQUERADE 확장형을 사용하여 마스크레이딩 기능 제공 * REDIRECT 확장형을 사용하여 포트 포워딩, 방향 재설정을 사용 - mangle table의 기능 * 넷필터에서 관여하는 여러 부분들을 수정하거나 유지하는 일을 담당 * filter table 등에서 match하는 부분과 연동되어 패킷의 진로에 지속적인 영향 * 두 가지 기본 체인  packet mangling이 수행되는 지점 + PREROUTING 체인: 넷필터에 도착한 패킷이 라우팅 되기 전에 그 내용을 바꾸어 패킷을 임의대로 처리하는 역할 + OUTPUT 체인 : 로컬 프로세스/네트워크에서 생성된 패킷을 수정하는 역할 + INPUT, FORWARD, POSTROUTING 추가  넷필터 구조의 모든 후킹 지점에서 조작 가능 * mangle table의 확장형 + TOS 모듈 : IP헤더의 TOS부분을 수정 + MAKR 모듈 : 패킷의 mark에 값을 지정해서 iptables가 패킷을 관리하게 함

Iptables – 기본구조 - Iptables의 변천 과정 1.1시리즈 (제 1세대) 2.0 시리즈 (1994년) 2.2 시리즈 (1998년) 2.4 시리즈 (1999년) ipfw ipfwadm ipchains iptables - iptables는 크게 3개의 테이블로 구분 Filter Table 필터링을 담당 NAT Table 네트워크의 주소를 변환할 때 사용 Mangle table 성능 향상을 위한 TOS를 설정

Iptables – Filter Table - 기본 필터링은 논리적인 3개의 chains으로 구성 - 사용자가 정의하여 새로운 사슬도 생성 가능 - 기본 사슬의 이름은 반드시 대문자 리눅스를 향해 들어오는 패킷들이 거치는 체인 리눅스를 거쳐 Postrouting 체인을 향하는 체인 리눅스를 나가는 패킷들이 들어가는 체인 각각의 chain에 rule을 추가하면 아래에서부터 하나씩 추가됨

Iptables – Filter Table - 기본 문법 iptables [ table ] [ action ] [ chain ] [ pattern ] [ target ] [table] : 크게 nat와 filter로 나누며, 기본값일 filter이므로 filter인 경우에는 생략 [action] : 전체 사슬에 대한 정책을 지정에(-A, -L, -D, -F) 대문자 옵션 사용 [chain ] : 일반적인 필터링에 속하는 INPUT, OUTPUT, FORWARD가 있으며, nat 테이블에는 POST ROUTING, PREROUTING, OUTPUT이 있음 [pattern]: 세부규칙을 지정하는 것으로 소문자 옵션(-s, -p, -d) 사용 [target] : 정책을 지정하는 것으로 DROP, ACCEPT, LOG 등이 해당

Iptables – Policy - iptables의 정책 : 패킷을 어떻게 처리할 것인지를 결정 - 패킷의 처리는 크게 Deny할 것이냐 Accept할 것이냐 두 가지 - 세부적으로는 ACCEPT, DENY, DROP으로 관리 - 기본정책 ACCEPT 패킷을 허용하는 옵션 DENY 패킷을 허용하지 않는다는 메시지를 보내면서 거부 사슬 전체정책설정(-P)에서는 사용할 수 없음 DROP 패킷을 완전히 무시 QUEUE 패킷을 추가적으로 처리하기 위해 사용자 영역으로 전송하도록 설정

Iptables – Chain 사용 - iptables는 조작하는 방법은 크게 두 가지 - 전체사슬에 대한 조작 -N 새로운 체인을 만든다. -X 비어있는 사슬을 제거(3개의 기본 사슬은 제거할 수 없음) -P 체인의 정책을 설정한다. -L 현재 사슬의 규칙을 나열한다. -F 사슬으로부터 규칙을 제거한다. -Z 사슬내의 모든 규칙들의 패킷과 바이트의 카운트를 0으로 만듦 -E 체인의 이름을 변경 iptables -N test iptables -X test iptables -F forward iptables -P INPUT DROP; iptables -P OUTPUT ACCEPT; iptables -P FORWARD DROP iptables –L; iptables –L –n –v; iptables –L –n –vv iptables –Z INPUT iptables –E test scpark Iptables –I INPUT –s 192.168.1.2 –p tcp –sport 51 –j ACCEPT Iptables –I INPUT 2 –s 192.168.1.2 –p tcp –sport 51 –j ACCEPT Iptables –R FORWARD 2 –s 192.168.1.2 –p tcp –sport 51 –j ACCEPT - 사슬 내부의 규칙에 대한 조작 -A 사슬에 새로운 규칙을 추가, 해당 맨 마지막 붙음 -I 사슬에 규칙을 맨 첫 부분에 삽입, 또는 특정 포지션 -R 사슬의 규칙을 교환 -D 사슬의 규칙을 제거

Iptables – 세부옵션 * interface명 앞에 "!" 추가 : 그 장치는 제외한다는 의미. 발신지('-s', '--source', '--src')를 가리킴 -d 도착지('-d', '--destination', '--dst')를 가리킴 -j 특정한 정책(ACCEPT, DROP, DENY, REDIRECT 등) 설정 ! 'not‘의 의미 -p 프로토콜을 지시할 때 사용 -i 패킷이 들어오는 인터페이스를 지정하는데 사용(INPUT과 FORWARD 사슬에 사용) * -t가 nat이면 PREROUTING에서만 지정가능 * interface명 앞에 "!" 추가 : 그 장치는 제외한다는 의미. * interface명 뒤에 "+“(기본) 추가 : 그 이름으로 시작하는 모든 장치 를 의미 -o 패킷이 나가는 네트워크장치를 지정하는데 사용(OUTPUT, FORWARD사슬에 사용) * -t nat이면 POSTROUTING에서만 지정 가능("!"과 "+"은 -i와 동일) -t table 선택(filter(default), nat, mangle 중 선택) -f 커서 패킷을 여러 개로 나누어서 분절해서 여러 개의 패킷으로 전달할 때 사용 -c 명령을 사용하는 동안 INSERT(-I), APPEND(-A), REPLACE(-R) 규칙의 패킷과 바이트의 카운터 초기화 # iptables –A INPUT –s 141.223.201.119 –j DROP  141.223.201.119에서 오는 모든 packet을 차단한다. # iptables –A INPUT –d 141.223.201.119 –j DROP # iptables –A INPUT –p tcp –destination-port telnet –i ppp0 –j DROP

Iptables – 확장옵션 - p 옵션들이 세부적인 사항들을 설정할 수 있도록 추가 옵션 제공 예) iptables -A INPUT --protocol tcp --tcp-flag ALL SYN, ACK -j DENY  모든 flag들이 검사되지만 SYN과 ACK만 거부로 설정 - TCP는 두 시스템간의 접속을 위해서 3-way handshaking 행함  접속 시도 패킷만 불가능하게 만듦으로써 접속이나 요청 등을 거부 예) -p tcp -s 192.168.1.3 --syn  192.168.1.3으로부터 오는 SYN 패킷 TCP 확장 --source-port 발신지에서의 하나, 포트범위 지정 (포트이름 또는 숫자, 범위를 표시 : '-' 사용) --sport --source-port와 동일 --destination-port 도착지 포트 지정 --dport --destination-port와 동일 --tcp-flags tcp에서 발생하는 flag를 지정하는 옵션 (첫 번째 것 : 검사하고자 하는 지시자 리스트, 두 번째 : 설정될 것 지정) --syn, --rst, --ack --tcp-flags SYN, RST, ACK의 줄임(! 선행 가능) --tcp-option 숫자 숫자와 tcp 옵션이 같은 경우의 패킷을 검사 UDP 확장 -p udp(--protocol udp) --source-port(--sport), --destination-port(-dport) ICMP 확장 -p icmp(--protocol icmp) --icmp-type만 추가옵션으로 지원 # iptables -A INPUT --protocol tcp --tcp-flag ALL SYN, ACK -j DENY  모든 flag들이 검사되지만 (여기서 ALL은 SYN, ACK, FIN, RST, URG, PSH와 같다.) SYN과 ACK만 거부로 설정된다 # iptables -A FORWARD -p tcp -s 192.168.1.3 –syn –j DROP  특정한 곳으로부터 오는 접속 시도를 패킷만 불가능하게 만듦으로써 접속이나 요청 등을 거부

Iptables – rule 최적화

Iptables – rule 확장

NAT의 개념 - 출발지나 목적지의 주소 변환 - IP 개수의 부족을 메우기 위해 개발 - 투명성, 편의성, 보안성 - Masquerading, Port Forwarding, Transparent Proxing - 변환 방식 2가지 * 단순히 주소만 바꾸는 것 공인 IP를 몇 개 가지고 있고, 사설 IP와 공인 IP 주소가 1:1로 Mapping * 주소와 함께 포트도 바꾸는 것 공인IP를 하나 가지고, 하나의 외부 연결이 하나의 사설 호스트와 연결 - 출발지 NAT : Masquerading - 목적지 NAT : Port Forwarding, Transparent Proxy

NAT의 개념 - NAT의 장점 * 공인 IP 하나를 공유 사용함으로써, IP 사용 증가의 고갈 해결 * 패킷이 네트워크 사이에서 투명하게 전송됨 * Client/Server 서비스들은 별다른 조작 없이 사용 가능 * 인터넷 사용시 사설 IP와 공인 IP를 수동으로 바꾸지 않아도 됨 * NAT를 사용하는 내부 호스트는 외부에서 탐색할 수 없으므로 보안성 뛰어남 - NAT의 단점 및 한계점 * 네트워크 효율 저하 + NAT 장비에 처리 집중으로 인한 Overload + 패킷 수정, Defragmentation하는 과정에서 NAT 장비는 부담 * NAT 장비가 실패했을 경우 재시도 불가능 * APP.에서 정의하는 방식에 따라 NAT 장치에서 따로 지원해야 함 (패킷이 수정되지 않고 목적지까지 도달한다는 기존 인터넷 상식을 깨었기 때문) * NAT를 행할 수 있는 호스트 수가 한정

NAT Table - ip 주소를 바꾸는 테이블이며 기본으로 3가지의 체인 존재 POSTROUTING routing 되어 밖으로 나가려는 packet PREROUTING routing 하기 전에 방금 들어온 packet OUTPUT 내부에서 밖으로 내보내는 packet

NAT의 설정 - 첫 패킷의 시작 주소 변경 시작점 NAT - 들어오는 접속을 변경 (SNAT) - 항상 라우팅 후, 패킷이 밖으로 나가기 직전에 이루어짐 목적지 NAT (DNAT) - 첫 패킷의 목적지 주소 변경 - 접속이 어디를 향하는지 변경 - 항상 라우팅 전, 패킷이 안팎으로 전송 시 이루어짐

NAT의 설정 - SNAT - '-j SNAT'를 사용함으로 지정 - '--to-source' 옵션으로 IP 주소, IP 주소의 범위, 포트, 포트의 범위 지정 - POSTROUTING에서 나가는 Source Address 변경 ex) ## 시작점 주소를 211.253.39.1 로 바꾸기 # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 211.253.39.1 ## 시작점 주소를 211.253.39.1 에서 211.253.39.125 로 바꾸기 # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 211.253.39.1-211.253.39.125

NAT의 설정 - DNAT - 패킷의 시작점('-s', '--source'), 목적지 ('-d', '--destination')을 지정 - 이 옵션 뒤에는 하나의 IP 주소나 도메인 이름 이나 네트워크 주소가 붙음 ex) 목적지 주소가 211.253.39.4의 80포트를 1.2.3.4의 8080포트로 바꾸기 #iptables -t nat -A PREROUTING -p tcp -d 211.253.39.4 --dport 80 -j DNAT --to 1.2.3.4:8080 ## 들어오는 80 포트의 웹 정보를 squid (투명한) 프록시로 보내기 # iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

MANGLE Table - 성능 향샹을 위한 TOS를 설정 - 매우 고급적이 내용이므로 확실하게 이해하지 않는경우 그대로 둠 - 잘못 설정할 경우 네트워크에 심각한 상황 초래 - TOS코드 이름 CODE [HEXCODE] 설명 Minimize-Delay 16 [0x10] 최소지연 Maximize-Throughput 8 [0x08] 최대 전송률 Maximize-Reliability 4 [0x04] 최대 안정성 Minimize-Cost 2 [0x02] 최소 경로 Normal-service [0x00] 일반서비스

MANGLE Table – 실질적인 예 - INPUT 체인 # iptables -t mangle -A INPUT -p tcp --dport 22 -j TOS --set-tos 0x10 # ssh를 최소지연 # iptables -t mangle -A INPUT -p tcp --dport 23 -j TOS --set-tos 0x10 # telnet을 최소지연 # iptables -t mangle -A INPUT -p tcp --dport 21 -j TOS --set-tos 0x10 # ftp 커맨드 전송포트를 최소지연 # iptables -t mangle -A INPUT -p tcp --dport 20 -j TOS --set-tos 0x08 # ftp-data전송포트를 최대 전송률 유지

MANGLE Table – 실질적인 예 - OUTPUT 체인 # iptables -t mangle -A OUTPUT -p tcp --dport 22 -j TOS --set-tox 0x10 # ssh를 최소지연 # iptables -t mangle -A OUTPUT -p tcp --dport 23 -j TOS --set-tox 0x10 # telnet을 최소지연 # iptables -t mangle -A OUTPUT -p tcp --dport 21 -j TOS --set-tox 0x10 # ftp 커맨드 전송포트를 최소지연 # iptables -t mangle -A OUTPUT -p tcp --dport 20 -j TOS --set-tox 0x08 # ftp-data전송포트를 최대 전송률을 유지

Iptables syntax-개요 - 실제 사용자가 iptables를 사용하기 위한 방법 - 기본 테이블에 기본 체인이 있음 filter table 속에 * INPUT * OUTPUT * FORWARD nat table 속에 * PREROUTING * OUTPUT * POSTROUTING mangle table 속에 * PREROUTING * OUTPUT * INPUT * FORWARD * POSTROUTING 이 체인들이 어떤 위치에서 어떤 역할을 하는지 숙지하고 구문을 익히는 것이 실제로 적용하는 데 도움이 됨

Iptables syntax-명령 - -t, --table table_name * table을 선택하는 명령이 iptables에서 가장 먼저 나옴 * 항상 ‘iptables -t filter [some other commands]’ 형태로 사용 * 기본 테이블은 filter, nat, mangle (-t 옵션을 사용하지 않으면 default인 filter 테이블로 동작하게 됨 - 일반적)

Iptables syntax-명령 - iptables의 1차적 명령 * -N, --new-chain chain : 지정이름으로 새로운 체인 생성 * -X, --delete-chain [chain] : 지정한 이름의 체인 삭제 + 지정한 체인 내부에 규칙이 존재하면 삭제 안됨. + 체인 이름이 생략되면, 모든 사용자 정의 체인 삭제 * -L, --list [chain] : 지정한 이름의 체인에 속한 모든 규칙을 출력 + 체인 이름이 생략되면, 모든 체인에 속한 규칙을 출력 + -L(-n, --numeric) : 모든 정보를 숫자로 출력 + -L(-v, --verbose) : 패킷이나 byte-counter등의 자세한 정보를 출력 + -L(-x, --exact) : counter를 반올림하지 않고 출력 + -L -line-number : 규칙 번호를 출력 * -E, --rename-chain old-chain new-chain : old 이름을 new 이름으로 변경 (체인안에 규칙 있어도 바뀜, 체인의 구조와 상관없이 이름만 변경) * -F, --flush [chain] : 선택한 체인의 규칙을 모두 삭제 (체인 이름을 선택하지 않으면 모든 테이블의 모든 규칙을 삭제) * -Z, --zero [chain] : 패킷과 byte-counter를 reset(reset전의 정보를 미리 출력) * -P, --policy chain target : 기본 체인에만 적용할 수 있는 명령어로, 체인의 기본 정책을 target에 지정한 것으로 변경(기본 정책  ACCEPT, DROP) * -h, --help : 간략한 도움말

Iptables syntax-명령 - 체인 내부의 규칙에 대한 명령어 * -A, --append chain rule-specification : 체인의 끝에 규칙을 추가하는 명령 * -D, --delete chain rule-specification : rule-specification의 규칙 삭제 * -D, --delete chain rulenum : rulenum의 번호 규칙 삭제(1번이 첫 번째) * -I, --insert chain [rulenum] rule-specification : rulenum 순서에 규칙 삽입 * -R, --replace chain rulenum rule-specification : rulenum 순서에 있는 것을 rule-specification으로 교체

Iptables syntax-명령 - rule-specification을 구성하기 위한 Parameter * -p, --protocol [!] protocol : 체크할 패킷이나 규칙의 프로토콜을 지정 + protocol 종류 : icmp, tcp, udp, 및 all, 그리고 번호도 가능 1, 6, 17 * -s, --source [!] address[/mask] : 출발주소 지정 * -d, --destination [!] address[/mask] : 목적지주소 지정 * -j, --jump target : 지정한 target으로 jump, 조건이 있다면 해당할 때 jump * -i, --in-interface [!] name : 외부에서 INPUT, FORWARD, PREROUTING 체인으로 들어오는 패킷의 인터페이스 지정 + 끝에 ‘+’를 붙이면 wild-card로 사용 예) eth+ * -o, --out-interface [!] name : 내부에서 FORWARD, OUTPUT, PREROUTING 체인으로 나갈 패킷의 인터페이스를 지정 * [!] -f, --fragment : 여러 개로 분절된 패킷이 들어올 경우 프로토콜 적용 같은 것을 사용할 수 없어 -f를 사용해 두 번째 이상의 패킷 분절만 적용할 수 있는 경우 제공, !을 붙이면 첫번째 분절이나 분절이 아닌 곳에 적용 * -c, --set-counters PKTS BYTES : 이것은 관리자가 APPEND, INSERT, REPLACE하는 동안 규칙의 패킷이나 byte counter를 초기화 하는 것 가능 * --modprobe=<command> : 체인에 규칙을 추가할 때 이 옵션을 사용해 지정한 command로 모듈을 로드 가능

Iptables syntax-정리 iptables -t filter [some other commands] * -N, --new-chain chain * -X, --delete-chain [chain] * -L, --list [chain] * -E, --rename-chain old-c new-c * -F, --flush [chain] * -Z, --zero [chain] * -P, --policy chain target * -h, --help - 체인 내부의 규칙에 대한 명령어 * -A, --append chain rule-spec * -D, --delete chain rule-spec * -I, --insert chain [rulenum] rule-spec * -R, --replace chain rulenum rule-spec - rule-specification을 구성하기 위한 Parameter * -p, --protocol [!] protocol * -s, --source [!] address[/mask] * -d, --destination [!] address[/mask] * -j, --jump target * -i, --in-interface [!] name * -o, --out-interface [!] name * [!] -f, --fragment * -c, --set-counters PKTS BYTES * --modprobe=<command>

Iptables syntax-명령 - iptables 추가 기능 확장 사용자가 필요하면 모듈을 제작해서 사용 가능 * 커널 확장 모듈 : /lib/modules, iptables 확장 모듈 : /lib/iptables * 확장은 사용될 때 동적으로 loading됨 * iptables에서 확장의 두가지 측면: match, target

Iptables syntax-명령 - iptables의 match 확장 으로 loading * 확실하게 명시하기 위해서 -m, --match를 사용해서 확장을 로드 가능 * -p tcp 이후에 쓰이는 확장 + --source-port [!] port[:port] : 출발지 포트 번호나 번호 범위를 지정 확장 ex) 1:10241024개 포트 지정, !  지정한 이외 선택, --sport는 동일 + --destination-port [!] port[:port] : 목적지 포트 번호나 범위를 지정 확장 ex) 1:10241024개 포트 지정, !  지정한 이외 선택, --dport는 동일 + --tcp-flags [!] mask comp : 특정한 tcp flag 검사 ^ mask와 comp에 들어갈 수 있는 flag : SYN ACK FIN RST URG PSH ^ 하나 또는 여러 개(comma로 구분)  ALL or NONE 사용 가능 ^ mask에 지정된 flag들이 검사되지만, comp에 지정된 flag만 설정 + [!] -syn: “--tcp-flags SYN,RST,ACK” 과 동일한 역할 SYN flag가 첫 번째 요청에서 설정되어야 함을 나타냄 + --tcp-option [!] number : 제대로 된 크기의 패킷을 받기 위해 사용, tcp option의 번호와 number의 번호가 같을 경우만 매치, 그 외의 경우는 DROP. + --mss value[:value] : tcp SYN, SYN/ACK 패킷과 MSS를 매치 최대 패킷 크기를 제어하는데 사용

Iptables syntax-명령 * -p udp 이후에 쓰이는 확장 + --source-port [!] port[:port] : tcp와 동일 + --destination-port [!] port[:port] : tcp와 동일 * icmp에 사용되는 확장 + --icmp-type [!] typename : 지정한 typename의 icmp type을 매치 (iptable –p icmp –h  icmp typename 출력) ^ echo-reply(0) ^ destination-unreachable(3) network[,host, protocol, port]-unreachable, network[,host]-unkown … ^ sourcequench(4) ^ redirect(5) network[, host, TOS-network, TOS-host]-redirect ^ echo-request(8-ping) ^ time-exceeded(10) ttl-zero-during-transit, ttl-zero-during-reassembly ^ parameter-problem(11) ip-header-bad, required-option-missing

Iptables syntax-명령 - iptables match 확장 * (-m, --match) limit에 사용되는 확장 옵션 + --limit rate : rate에 지정된 시간당 패킷 수를 넘지 않는 패킷에 매치 + --limit-burst number : limit된 시간동안 number에서 정의된 개수만큼만 매치 ^ 기본 number는 5이므로 처음 5개의 패킷을 다 매치시켰을 때 limit rate가 기본값인 3/hour이라면 20분 후에 다시 패킷을 매치 시킬 수 있음 ^ 이것은 로그를 기록할 때 사용될 수 있는데, 많은 패킷이 오더라도 모든 패킷을 로그하지는 않는 방식으로 로그 기록을 남길 수 있음 * -m state에 사용되는 확장 옵션 + --state state : 이 확장을 이용해서 현재 패킷의 상태에 따라 처리 가능 ^ state에 들어갈 수 있는 것은 NEW, EXSTABLISHED, RELATED, INVALID ^ NEW 패킷: 패킷을 새로 연결을 생성하는 패킷 ^ EXSTABLISHED 패킷 : 기존의 연결에 속해 있는 패킷(응답을 받은 패킷) ^ RELATED 패킷 : 기존의 연결에 속한 것은 아니지만 기존의 연결과 연관이 있는 ICMP 에러 메시지 같은 패킷을 말함 ^ INVALID 패킷 : 앞의 세 가지 상태로 인식할 수 없는 패킷

Iptables syntax-명령 * -m conntrack에 사용되는 확장 옵션(-m state보다 향상된 성능) + --ctstate state : 기본적으로 –m state --state와 같다고 보면 됨 ^ SNAT와 DNAT flag가 추가되어 있는데, 원본 출발지 주소가 응답 목적지 주소와 다른 경우에 SNAT 상태로 보고, 원본 목적지 주소가 응답 출발지 주소와 다를 때 DNAT 상태로 봄 + --proto proto : 프로토콜을 명시해 매칭(이름, 숫자 모두 가능, -p와 비슷) + --ctorigsrc [!] address[/mask] : 원본 출발지 주소로 매칭. + --ctorigdst [!] address[/mask] : 원본 목적지 주소로 매칭 + --ctreplsrc [!] address[/mask] : 응답 출발지 주소로 매칭 + --ctrepldst [!] address[/mask] : 응답 목적지 주소로 매칭 + --ctstatus [NONE | EXPECTED | SEEN_REPLY | ASSURED][,…] : 내부의 연결 추적 상태에 따라서 매칭 + --ctexpire time[:time] : 남은 life-time을 입력받은 시간/범위와 비교해서 매칭(시간 단위는 second) mask를 AND하는 것은 기존과 같음

Iptables syntax-명령 * -m mac에 사용되는 확장 옵션 + --mac-source [!] address : MAC주소로 매치 ^ 주소의 형식은 ‘XX:XX:XX:XX:XX:XX’ 같은 형식이여야함 ^ MAC 주소 매치인 만큼 당연히 PREROUTING, INPUT, FORWARDING 체인에서만 가능 * -m owner에 사용되는 확장 옵션 + --uid-owner userid : 유효한 UID의 프로세스가 생성한 패킷에 적용 + --gid-owner groupid : 유효한 GID의 프로세스가 생성한 패킷에 적용 + --pid-owner processed : 지정한 PID의 프로세스가 생성한 패킷에 적용 + --sid-owner sessionid : 주어진 session 그룹 내의 프로세스가 생성한 패킷에 적용 + --cmd-owner name : 지정된 이름의 command로 생성된 프로세스가 생성한 패킷에 적용 * -m mark에 사용되는 확장 옵션 + --mark value[/mask] : MARK target에 의해 표시된 mark 값을 지정한 값과 매치. mask 값을 지정했으면 mask와 AND한 값을 매치

Iptables syntax-명령 * -m multiport에 사용되는 확장 옵션(‘-p tcp’나 ‘-p udp’와 꼭 함께 사용) + --source-ports port[,port[,port…]] : 최대 15개까지 출발지 포트를 나열 가능 ^ 주의할 점은 포트를 나열할 때 공백을 넣으면 안된다는 것과, ‘-p tcp’나 ‘-p udp’의 바로 뒤에 와야함. ‘--dports’도 같은 역할함 ^ --ports port[,port[,port…]] : 만약 출발지와 목적지 포트가 같고 위에서 지정한 포트 중에 하나일 경우 적용 * -m tos에 사용되는 확장 옵션 + --tos tos : IP헤더에 있는 TOS정보를 매치 Minimize-Delay(0x10), Maximize-Throughput(0x08), Maximize-Reliability(0x04), Minimize-Cost(0x02), Normal-Service(0x00) * -m unclean : 조작된 것 같거나 의심가는 패킷 매치 + 확장 옵션 없음

Iptables syntax-명령 - target 확장 * 기존으 ACCEPT와 DROP외에도 target으로 활용할 수 있는 것은 많음 * 기본적으로 사용자가 만든 체인으로 jump 가능 + jump는 어디로나 무한히 가능, 하지만 jump의 경로가 원형을 그리며 반복된다던지 하는 경우는 dead lock이기 때문에 거부 + 여러 가지 기능들을 사용하기 위해 jump의 확장 target이 사용되기도 함 * 확장 target에는 기본적으로 LOG와 REJECT가 있고 NAT를 수행하는 것과 mangling하는 것도 target 확장을 활용 * -j LOG의 확장 옵션 + --log-level level : 로그 레벨을 지정 ^ /usr/include/sys/syslog.h에 정의 ^ emerg(0), alert(1), crit(2), err(3), warn(4), notice(5), info(6), debug(7) + --log-prefix prefix : 로그 앞에 붙일 전치구를 지정, 로그 구분에 도움 + --log-tcp-sequence : tcp순서 번호를 로그로 남김, 사용자들에게 보이게 되면 보안상의 문제점이 될 수 있으니 주의 + --log-tcp-options : TCP 패킷 헤더로부터의 옵션을 로그로 남김 + --log-ip-options : IP 패킷 헤더로부터의 옵션을 로그로 남김

Iptables syntax-명령 * -j REJECT의 확장 옵션 REJECT는 DROP과 다르게 패킷을 폐기할 때 발신자에게 ICMP 에러 메시지 보냄 + --reject-with type : 사용할 응답 패킷을 변경 ^ type에 들어갈 값으로는 icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable(기본 값), icmp-proto-unreachable, icmp-net-prohibited, icmp-host-prohibited등이 가능, type으로 tcp-reset 을 사용(tcp만) * -j TCPMSS를 사용할 때의 확장 옵션 TCPMSS는 연결에 대한 최대 크기를 체어할 수 있도록, TCP SYN 패킷의 MSS 값을 변경하거나 검사하게 하는 기능 수행 + --set-mss value : 명시적으로 mss 옵션 값을 지정된 값으로 설정 + --clamp-mss-to-pmtu : MSS값을 자동적으로 고정(path_MTU - 40) 즉, 자동으로 최대 크기에 대한 문제점에서 멀어지게 함

Iptables syntax-명령 *** -t nat로 지정되는 nat 테이블에 사용되는 target 확장 * -j SNAT에 사용되는 확장 옵션 + nat 테이블의 POSTROUTING 체인에서만 사용 가능 + --to-source ipaddr[-ipaddr][:port-port] ^ 지정한 IP 주소와 포트 범위에서 가능한 것 중 하나를 골라 출발지 주소로 매핑 ^ 하나 이상의 사용 가능한 주소와 포트를 지정하려면 tcp나 udp를 사용 ^ --to-source를 여러 번 사용해서 여러 개으 주소를 지정 가능 ^ 간단한 라운드로빈 알고리즘 사용 ^ -to라고만 써도 같은 작용 * -j DNAT에 사용되는 확장 옵션 + nat 테이블의 PREROUTING과 OUTPUT체인에서만 사용 가능 + --to-destination ipaddr[-ipaddr][:port-port] ^ 지정한 IP 주소와 포트 범위에서 가능한 것 중 하나를 골라 목적지 주소로 매핑 ^ 포트를 지정하지 않으면 포트는 변경되지 않음 ^ --to- destination를 여러 번 사용해서 여러 개으 주소를 지정 가능 ^ 간단한 라운드로빈 알고리즘 사용하여 부하 분산 가능 ^ --to라고만 써도 같은 작용

Iptables syntax-명령 * -j MASQUERADE에 사용되는 확장 옵션 + nat 테이블의 POSTROUTING 체인에만 사용 + --to-ports port[-port] ^ 지정한 포트, 포트 범위에서 출발지 포트를 선택해서 마스쿼레이딩을 함 ^ SNAT와 다른 점은 IP가 동적으로 할당된다는 것. 각각의 새로운 연결마다 IP주소가 다르게 지정 ^ POSTRUTING체인에서 MASQUERADING을 하기 위해 out-interface를 지정 해 주어야하고, 포트를 사용하기 때문에 tcp나 udp를 사용하여야함 * -j REDIRECT에 사용되는 확장 옵션 + nat테이블의 PREROUTING과 OUTPUT 체인, 또는 이 체인들에서 부른 사용자 정의 체인들에서 부른 사용자 정의 체인에만 사용 ^ REDIRECTION을 위한 포트나 포트 범위를 입력 받아서 포트 방향 재설정 ^ 이것은 특별한 형태으 DNAT로 패킷은 로컬 호스트의 한 포트로 방향 재설정 ^ 들어오는 패킷은 들어오는 인터페이스의 INPUT 체인으로 방향 재설정되고, 로컬에서 생성된 패킷은 로컬 호스트의 loopback 인터페이스의 포트로 방향 재설정 ^ PREROUTING 체인에서 방향 재설정을 하기 위해서 in-interface를 지정해 주어야 하고, OUTPUT 체인에서 방향 재설정을 하기 위해서 out-interface를 지정해 주어야 함.

Iptables syntax-명령 *** 이후 나오는 MARK와 TOS는 mangle 테이블의 체인에서 작동하는 target이므로 –t mangle을 꼭 해주어야 함 * -j MARK에 사용되는 target 확장 옵션 + --set-mark mark ^ 패킷에 Netfilter mark 값을 설정해중 (이것은 filter 테이블의 match에서 활용) * -j TOS에 사용되는 target확장 옵션 + --set-tos tos ^ 패킷에 tos 값을 설정 가능, 이것은 filter 테이블의 match 확장에서 활용되고 tos 값에 대한 것은 match 확장에서 언급됨

Iptables syntax-정리 - iptables의 match 확장 * -p tcp 이후에 쓰이는 확장 + --source-port [!] port[:port] + --destination-port [!] port[:port] + --tcp-flags [!] mask comp + [!] -syn + --tcp-option [!] number + --mss value[:value] * -m conntrack에 사용되는 확장 옵션 + --ctstate state + --proto proto + --ctorigsrc [!] address[/mask] + --ctorigdst [!] address[/mask] + --ctreplsrc [!] address[/mask] + --ctrepldst [!] address[/mask] + --ctstatus [NONE | EXPECTED + --ctexpire time[:time] * -p udp 이후에 쓰이는 확장 + --source-port [!] port[:port] + --destination-port [!] port[:port] * icmp에 사용되는 확장 + --icmp-type [!] typename * -m mac에 사용되는 확장 옵션 + --mac-source [!] address * -m owner에 사용되는 확장 옵션 + --uid-owner userid + --gid-owner groupid + --pid-owner processed + --sid-owner sessionid + --cmd-owner name * -m mark에 사용되는 확장 옵션 + --mark value[/mask] - iptables match 확장 * (-m, --match) limit에 사용되는 확장 옵션 + --limit rate + --limit-burst number * -m state에 사용되는 확장 옵션 + --state state * -m multiport에 사용되는 확장 옵션 + --source-ports port[,port[,port…]] * -m tos에 사용되는 확장 옵션 + --tos tos * -m unclean

Iptables syntax-정리 - target 확장 * -j LOG의 확장 옵션 + --log-level level + --log-prefix prefix + --log-tcp-sequence + --log-tcp-options + --log-ip-options * -j REJECT의 확장 옵션 + --reject-with type * -j TCPMSS를 사용할 때의 확장 옵션 + --set-mss value + --clamp-mss-to-pmtu * -j MARK에 사용되는 target 확장 옵션 + --set-mark mark * -j TOS에 사용되는 target확장 옵션 + --set-tos tos * -j SNAT에 사용되는 확장 옵션 + --to-source ipaddr[-ipaddr][:port-port] * -j DNAT에 사용되는 확장 옵션 + --to-destination ipaddr[-ipaddr][:port-port] * -j MASQUERADE에 사용되는 확장 옵션 + --to-ports port[-port] * -j REDIRECT에 사용되는 확장 옵션 + --to-ports port[-port]

Iptables 활용 - iptables를 사용해서 실제로 보안 설정  일반적으로 참고할 수 있는 기본적인 방화벽 설정을 통해 사용 - 여기 예제는 기본적으로 DROP - 주의 : 명령어를 리모트에서 하나씩 실행하는 것은 연결을 잃을 수 있으므로 반드시 콘솔에서 테스트하거나 스크립트를 만들어 사용 - 체인의 규칙은 위에서부터 순서대로 적용하기 때문에 순서에 신경을 써야함 # iptables –A INPUT –s 192.168.1.0/24 –j DROP # iptables –A INPUT –s 192.168.1.32 –j ACCEPT # iptables –A INPUT –s 192.168.1.32 –j ACCEPT # iptables –A INPUT –s 192.168.1.0/24 –j DROP - 두 경우는 매우 큰 차이가 있음 - 첫 번째 박스의 두 번째 줄의 target을 ACCEPT준 명령이 아무런 소용이 없음 - ACCEPT 줄이 두 번째 박스처럼 적용이 되게 할려면 DROP 앞에 선행되어야 함

script file에 대해… - 나중에…