본문으로 바로가기

Day-41 iptables

category Linux 2017. 2. 9. 17:22

iptables

 

- iptables는 커널에 탑제된 Netfilter 모듈의 Table과 Rule을 검사하고, Math 여부에 따라 Target을 실행시키기 위한 Command Line Utility이다.

- Netfilter의 Rule을 추가하거나 삭제할 때 iptables를 사용한다.

 

Netfilter Table 종류

 

Mangle : Packet 내부의 TOS, TTL, MARK의 packet 정보 변경을 위한 rule과 해당 action(target)의 리스트가 저장되어있는 table

 

Nat : Packet 내부의 source address 및 destination address의 정보 변경을 위한 rule과 해당 action(target)의 리스트가 저장되어 있는 table

 

Filter : Packet을 filtering 하기위한 rule과 해당 action(target)의 리스트가 저장되어 있는 table

 

iptables는 3개의 테이블로 이루어져 있으며, 각테이블들은 패킷을 처리하는 체인(Chain)을 가진다.

 

테이블명                                                        기본 체인명

fileter                INPUT, FORWARD, OUTPUT, 사용자 정의 체인(RH-Firewall-1-INPUT)

nat                      PREOUTING, OUTPUT, POSTROUTING

mangle                PREROUTING, OUTING

 

서버(방화벽)를 통과하는 모든 패킷에 대한 filter, nat, mangle의 처리를 거쳐 최종적으로 [target]에 보내에 패킷을 처리한다.

 

-t 옵션을 사용하여 [table]을 지정하며, 지정하지 않은 경우 default 값은 filter이다.

 

filter : 사용 할 수 있는 체인은 INPUT, FORWARD, OUTPUT 또는 사용자의 정의 체인이 있으며,

         Protocol, Port, IP Address 등 일반적인 적용을 할 수 있다.

 

nat : NAT(Network Address Translator)는 방화벽의 한 종류로 내부 네트워크와 외부 네트워크를 분리하고자 할 때 사용한다.

 외부에서 내부로의 접근을 차단 할 수 있으며, IP 주소와 포트를 변경하여 내부 네트워크에서 외부로, 외부에서 내부 네트워크의 접속 규칙을

 설정하며, PREROUTING, POSTROUTING, OUTPUT 체인을 사용 할 수 있다. PREROUTING은 외부에서 내부로의 포워드를 하기전의 규칙을 설정,

 POSTROUTING은 내부 네트워크에서 외부로 전소오디기 전의 규칙을 설정 할 수 있다.

 

mangle : mangle 테이블은 통과하는 패킷의 헤더 정보를 변경하고자 할 때 사용할 수 있다.

 PREROUTING, OUTPUT,INPUT FORWARD, POSTROUTING 체인을 사용 할 수 있다.

 

 

 

 

Chain

 

- 테이블을 처리하기 위한 도구이며, 시스템은 기본적으로 입력고가 출력으로 구성되어 있다.

 

- 테이블을(시스템) 제어하기 위해, 체인도 입력에 해당하는 INPUT, 출력에 해당하는 OUTPUT이 있다.

 

- 여러 인터페이스에 패킷을 전달해야 할 때는 FORWARD를 한다.

 

 

iptables = 기본 방화벽 정책

 

(1) 허용할 것을 제외한 나머지를 모두 거부
(2) 모든 연결을 차단한 후, 필요한 것만 허용

 

명령어
iptables -t [table] -A [chain] [RULE:MATCH] -j [target]

 

iptables -F              //지정한 체인을 제거
iptables -X             //지정한 룰을 제거
                              //-P 지정한 체인에 기본 정책을 설정

 

iptalbes -L             // iptables내용 확인 (기본값은 ACCEPT)

 

 


vi /etc/sysconfig/iptables  // iptables에 적용시킬 사항들이 있는 파일

 

vi /etc/sysconfig/iptables
기본설정 해제

 

 

 

service iptables save
service iptables restart


Filter Table 기본 정책을 DROP으로 변경

 

iptables -P INPUT DROP                              // xshell 연결해제
iptables -P OUTPUT DROP                           // vm에서 입력
iptables -P FORWARD DROP
iptalbes -L                                                    // filter 테이블의 INPUT, FORWARDING, OUTPUT 정책 확인

 

 

 

 

ping 127.0.0.1                                                // Loopback 통신도 되지 않는다.

 

 

 

 

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
ping 127.0.0.1                                                // Loopback 통신도 된다.

 

 

규칙 관련 파라 미터

 

--in-interface (-i) 입력 인터페이스와 매칭
--out-interface (-o) 출력 인터페이스와 매칭
--jump (-j) 패킷이 규칙에 일치할때 처리해야 할 행동(target)을 지정
-s 출발지 IP
-d 목적지 IP

 

iptables -A INPUT -p [프로토콜] --sport [포트번호] -j ACCEPT
                                   [tcp |upd]

 

TCP나 UDP는 양방향 접속으로 이뤄지므로 들어오고 나가는 패킷에 대해서 모두 설정해야한다.

즉, INPUT과 OUTPUT체인을 짝으로 생각해서 방화벽을 성정해야한다.

 

iptables -A INPUT -p tcp -d 100.100.100.120 --dport 22 -j ACCEPT

 

iptables 규칙 구상


Server-A                              iptables                          Client
SSH:TCP:22  <---------- INPUT(dport22)  <----------------
------------------------>  OUTPUT(sport22) ---------------->

 

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACEEPT

 

[서버] (ssh22) <- Xshell

 

네임서버
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
// 적용이 잘 되지 않는다.

 

방화벽 종류
1세대 방화벽 - 패킷 필터링 방화벽 (Packet Filtering Firewall)
2세대 방화벽 - 패킷의 연결 상태를 확인  (Stateful Firewall)
3세대 방화벽 - L7까지 패킷 검사와 검사  (Application Firewall)


필터 테이블 타겟 확장
연결 추적(Connection Tracking)모듈을 이용하여 내부 네트워크에서 연결 상태에 따라 연결을 감사하고 제한할 수 있다.
-m state --state [Match]
NEW     새로운 연결을 요청하는 패킷
ESTABLISHED 기존 연결의 일부인 패킷
RELATED     기존 연결에 속하지만 새로운 연결 요청하는 패킷 (icmp, ftp등)
INVAILID    어느 연결에도 속하지 않는 패킷

 

TCP (Transmission Control Protocol)
- 연결지향 (Connection-oriented) 프로토콜
- 데이터 전송전, 서로에 대한 전송을 보장하는세션을 수립하는 과정을 수립

 

Client(CLOSED)  -->     [SYN]   -->   Server(LISTEN)
Client(SYN_SENT) <-- [SYN/ACK] <-- Server(SYN_RECEIVED)
Client(ESTABLISHED) --> [ACK] --> server(ESTABLISHED)

 

iptables TCP


            Client                     iptables                         Server
1단계  SYN---------->  |        NEW        |--------------------->
2단계  <---------------  |ESTABLISHED|<-----------SYN/ACK
3단계  ACK-----------> |ESTABLISHED|--------------------->

 

(1) 서버로 SYN 패킷이 들어오도록 INPUT체인에서 외부에서 들어오는 SYN에
    NEW상태를 적용 (INPUT, NEW)


(2) 서버에서 [SYN/ACK] 패킷을 클라이언트로 전송하여 연결이 확립(ESTABLISHED)되는 상태 적용 (OUTPUT, ESTABLISHED)


(3) [SYN/ACK]패킷을 받아 연결 확립에 대한 [ACK]패킷과 데이터 전송이 되도록 한다.    (INPUT, ESTABLISHED)

 

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m  state --state ESTABLISHED -j ACCEPT

iptables -L

 

 

 

Server-A(telnet-Server)                                                Server-B
yum -y install telnet-server                                                service iptables stop
vi /etc/xinetd.d/telnet   //  disable = no (23)                    yum -y install telnet

service xinetd start                                                           telnet 100.100.100.110

useradd telnet-user1                                                          // 현 상태에서는 접속이 되지 않는다.

passwd telnet-user1

-passwd : 123

 

 

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

iptables -A INPUT -p tcp -m tcp --dport 23 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 23 -j ACEEPT

iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m  state --state ESTABLISHED -j ACCEPT

 


'Linux' 카테고리의 다른 글

Day-43 APM (Apache(httpd), php, Mysql)  (0) 2017.03.04
Day-42 Mail  (0) 2017.03.02
Day-38 PXE & Kickstart (미완)  (0) 2017.02.02
Day-37 Samba & NFS  (0) 2017.01.31
Day-36 FTPS & Samba(미완)  (0) 2017.01.31