'iptables'에 해당되는 글 1건

  1. 2008/05/21 iptable 정리
1.1 IPTALBES 의 COMMAND와 옵션 방법.

 

1.1.1 명령의 기본 형태

 

iptable - [ADC]chain-rule-specification [option]
iptable - [RI] chain rulenum rule - specification [option]
iptable - D chain rulenum [options]
iptable - [LFZ] [chain] [options]
iptable - [NX] chain
iptable - P chain target [option]
iptalbe - E old-chain-name new-chain-name

* iptables -A INPUT -s 211.254.138.130 -j DROP
* iptables -A OUPUT -d 211.254.138.130 -j DROP


#iptables -A INPUT -s 근원지 --sport 근원지포트 -d 목적지 --dport 목적지의 포트 -j 정책

 EX) iptables -A INPUT -s ! 211.100.100.110 -d 211.200.200.122 -p tcp -j DROP
 (출발지가 211.100.100.110  이 아니며 목적지가 211.200.200.122 인 경우 패킷을 파기)

 

1.1.2 commands

-A (--append) : 지정된 체인의 끝에 하나 또는 그 이상의 정책을 첨가

-I (--insert) : 지정된 체인의 시작에 하나 또는 그 이상의 정책을 삽입

-D (--delete) : 정책 내용과 일치하는 특징 체인에서 하나 또는 그 이상의 정책을 삭제
  (ex) iptables -D 1  (룰번호 1번 삭제)

-R (--replace) : 선택된 체인에서 정책을 교채

-L (--list) : 선택된 체인에서 모든 정책의 목록을 출력 (룰번호등을 확인 출력)

-F (--flush) : 지정된 체이 내의 정책들을 삭제

-Z (--zero) : 모든 체인의 byte와 packet 카운트를 0으로 만든다.

-N (--new-chain)

-X (--delete-chain) : 지정한 상용자 정이 체인을 삭제 한다.

-P (--policy) : 지정된 체인에 정책을 세운다.

-E (--rename-chain) : 체인의 이름을 바꾼다.

-h

 1.1.3 Rule specification parameters (중요)

 -p : 점검할 패킷 또는 정책에 대한 프로토콜이 정의 ex) -p tcp, -p udp

 -s : 근원지 정의 (패킷이 오는곳) ex) -s 211.100.100.111
     
 TIP) IP 영역 선택 :
200.200.200.0/24 ==> 200.200.200.*

 -d : 목적지 정의 (패킷이 가는곳)

 -j : 지정된 target이동 ex) -j DROP

 -i : 패킷을 받는 인터페이스 (eth0, ppp0)의 이름  ex) -i ppp0

 -o : 패킷이 보내지는 인터페이스의 이름  ex) -o ppp0

* 패킷이 들어오는 체인 : -INPUT, FORWARD, PREROUTING

  패킷이 나가는 체인 : -OUTPUT, FORWARD, POSTROUTING

-f : 두 번째 이후의 패킷에 대한 규칙을 지정할 수 있다.

-c(-set-counters) PKTS BYTES : 정책에 패킷과 byte를 초기화 할 수 있다.

1.1.4 OPTIONS

-v(--verbose) : 상세 정보를 출력

-n(--numeric) : 호스트 이름이나 포트 이름 대신 숫자로 출력

-x(--exact) : 패킷과 바이트 카운터 값을 단위(K,M,G)로 보여주지 않고 전제 숫자로 보여줌

--line-numbers : 정책을 출력시 각 정책의 시작 부분에 라인의 넘버를 추가.

 * TCP, UDP, ICMP Extensions (중요)

 * TCP : --protocol tcp로 지정되면 적용된다.

 --sport(--source-port) [!][port[:port]]: 패킷이 오는 tcp포트 또는 포트범위
     ex) -sport 20:21

 --dport(--destination-port)[!][portp[:port]]: 패킷이 나가는 tcp포트, 포트범위
     ex) --dport 21,  --dport 21:80,  --dport ! 80

 --tcp-flags[!] mask comp : mask에서 지정한 tcp flag가 있을때 comp로대응
     ex) --tcp-flags SYN,ACK,FIN,RST   SYN  -j DROP

   참고:유요한 TCP flags SYN, ASK, FIN, RST, URG, PSII, ALL, NONE

 [!]--syn : --tcp-flags SYN, RST, ACK, SYN의 약어

 --tcp-option [!] number : TCP 옵션과 일치할 경우 패킷을 검사한다.

 * UDP : --protocol u에fh 정의 되어 있다며 적용된다.

 --sport(--source-port) [!][port:[port]] : 근원지의 포트, 포트 범위 지정

 --dport(--destination-port) [!][port:[port]] ; 목적지의 포트, 포트 범의 지정

 * ICMP : --protocal icmp 로 정의 되어 있다면 적용된다.

 --icmp-type [!] typename : 지정된 ICMP 형태를 허용한다.

 

1.1.6 그 외의 적용확장

* mac : 들어오는 패킷의 이터넷 주소를 감시하며 INPUT 체인에서만 유용하다.

--mac-source [!] address : (:)으로 분리된 16진수의 이더넷 주소를 지정

* limit : 로그 메시지를 억제하는 것과 같이 적용검사의 속도를 제한하는데 사용되며

1초에 주어진 숫자만큼의 적용만 검사하게 된다.

--limit rate : 초당 평균 최대 적용 검사수(rate)지정하며 시간단위를 지정할 수있다.

--limit-burst number : 일치하는 패킷의 최대 수 (default는 5)

* owner : 지역 프로세서에 의해서 발생한 패킷의 생성자(유저)의 다양한 특징을 적용

--uid-owner userid : 지정된 사용자에 의해서 발생한 프로세서에서 만들어진 패킷

--uid-owner groupid : 지정된 그룹에 의해서 발생한 프로세서 만들어진 패킷

--pid-owner processid : 지정된 프로세서에 의해서 발생한 프로세서에 의해 만들어진

패킷인지를 검사

--sid-owner sessionid : 지정된 세션그룹에 의해서 발생한 프로세서에의해 만들어진

패킷인지를 검사

* state : 'ip_conntrack'모듈이 접속 추적 분석(connection-trackin analysis)를 해석한다.

NEW : 새로운 접속을 만드는 패킷

ESTABLISHED : 존재하는 패킷에 속하는 패킷(i,c. 응답 패킷 또는 응답을 보안 접속에

서 나가는 패킷)

RELATED : 실재의 접속은 아니지만 관계있는 패킷으로 ICMP error 또는 ftp data 접

속을 성릭하는 패킷

INVALID : 몇 가지 이유로 인증되지 않는 패킷으로 ICMP error 와 out of memory등

을 포함.

 

1.1.7 target 확장

* LOG : 일치하는 패킷이 커널 로그를 제공

--log-level level : 레벨 숫자나 이름을 적게 된다.

--log-prefix : 로그 시작 부분에 prefix의 내용을 첨가 하게 된다.

--log-tcp-sequence : TCP sequence 넘버를 로그에 기록한다. 만약 사용자들이 로그

를 읽을 수 있을 경우 보안이 위험이 있다.

--log-tcp-options : TCP 패킷 헤더의 option들을 로그에 남긴다.

--log-ip-options : ip패킷 헤더의 options을 로그에 남긴다

* REJECT : DROP 과 동일한 작용을 하며 상대편 호스트에 ‘port unreachable'이란 에

러 메시지를 icmp로 보내게 된다.

--reject-with : 응답 패킷에 대한 변경을 할 수 있다.

icmp-net-unreachable, icmp-host-unreachable

icmp-port-unreachable, icmp-proto-unrechable, icmp-net-prohibited

echo-reply, tcp-reset 사용 할 수 있다

* 재부팅후에도 설정이 되려면 쉘프로그램으로 설정후 /etc/rc.d/rc.local 에 넣어준다.

  IPTABLE 적용 사례

 iptables -A INPUT -p ! tcp -j DROP   TCP를 죄외한 모든 패킷은 파기하라!

 iptables -A INPUT -p tcp -j ACCEPT
   TCP 이면 모든 허용하라!

 iptables -A INPUT -s 211.100.100.111 -j DROP  211.100.100.11에서 오는 모든 패킷은 파기하라

 iptables -A INPUT -d 211.100.100.777 -j DROP  211.100.100.777로 나가는 모든 패킷은 파기하라

 iptables -A PREROUTING -s 211.11.17.9 -i ppp0 -j DROP ppp0장치에서 수신하는 패킷 출발지가 211.22.17.9 이면 파기하라

 iptables ?A INPUT ?s 200.200.200.1 ?p tcp --dport 21 ?j DROP
 출발지가 200.200.200.1이고 목적지 포트가 21번 이면 파기하라
 iptables ?A INPUT --dport 25 ?j DROP
 
목적지 포트가 25이면 파기하라 

 iptables ?A INPUT ?p tcp --dport 22 ?i ppp0 ?j DROP  목적지가 22번 포트 패킷이고 ppp0(인터넷접속연결) 인경우 차단
 (만약, eth0 랜카드라면 무관)

 iptables ?A INPUT ?i ppp0 ?p tcp --syn --dport ! 80 ?j DROP  인터넷 연결에 들어오는 syn패킷은 80포트가 아니라면 모두 파기

 NAT(NETWORK ADDRESS TRANSLATION) 서버에 대한 요약과 사례

 SNAT (Source NAT) : 사설 IP -> SNAT서버(공인IP) -> 외부에 패킷전달
 (ex) iptable -t nat -A POSTROUTING -s 192.168.1.10 -o ppp0 -j SNAT --to 211.1.1.2
   출발지가 192.168.10.10 인 패킷은 SNAT에 도착하여 211.1.1.2 로 변환 외부로 패킷 전송


 DNAT(Destination NAT) : 외부 클라이언트 -> DNAT 서버(공인IP) -> 사설 IP 서버
 (ex)iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.0.7:8080
 eth0에 도착한 패킷중 목적지 포트가 80번인 경우 사설IP 192.168.0.7의 8080포트로 패킷을 전송한다.

 

(자꾸 까먹어서리.. - -;)


[출처]http://blog.naver.com/hcege/90017809610



 

'Scrapbook > 개발관련' 카테고리의 다른 글

[리눅스] 파일 내용 일괄수정  (0) 2008/06/11
rsync 하기  (0) 2008/05/22
iptable 정리  (0) 2008/05/21
리눅스 한글 깨짐 수정  (0) 2008/05/20
gcc 설치  (0) 2008/05/16
mysqldump로 백업하기  (0) 2008/05/15
Posted by 가을이짱짱

트랙백 주소 : http://www.couplestyle.com/trackback/585 관련글 쓰기

댓글을 달아 주세요