Network/IPTables

CentOS - IPTABLES를 통한 내부 네트워크망 구성

잇(IT) 2022. 6. 26. 15:22

목차

 

1. 시나리오

 

2. CentOS6 설치

           2.1 VMware Virtual Machine 생성

           2.2 CentOS6 OS 설치

 

3. Virtual Network Editor, Linux Network 설정

           3.1 Host-only 네트워크 설정

           3.2 NAT 네트워크 설정

           3.3 CentOS 네트워크 설정

                      3.3.1 CentOS6 네트워크 설정

                      3.3.2 CentOS6-1 네트워크 설정

 

4. IPTABLES

           4.1 iptables?

           4.2 iptables 옵션

           4.3 iptables 정책 순서

           4.4 iptables 기본 명령어

                     4.4.1 iptables 규칙 추가

                     4.4.2 iptables 규칙 제거

           4.5 iptables 설정


1. 시나리오

- iptables 설정을 통해 외부와 통신이 가능한 CentOS6를 통해 Host-only 네트워크 카드만 존재하는 CentOS6-1가 외부와 통신이 가능하도록 설정


2. CentOS6 설치

 

2.1 VMware Virtual Machine 생성

 


2.2 CentOS6 OS 설치

- CentOS6의 경우 라우팅 역할을 하기 때문에 인터넷과 통신하기 위한 NAT 카드와 내부 네트워크들끼리 통신하기 위한 Host-only 카드를 장착 해준다.

 

- CentOS6-1의 경우 직접적으로 인터넷과 통신 할 수 없는 Private Network에 존재하고 CentOS6를 통해 인터넷과 통신이 가능하도록 설정하기 위해 Host-only 네트워크 카드만 장착한다.

 

- 위의 설정을 전부 마치게 되면 CentOS6 OS 설치가 완료된다.


3. Virtual Network Editor, Linux Network 설정

 

3.1 Host-only 네트워크 설정

- Host-only 네트워크 카드의 경우 172.16.0.0/24의 네트워크 대역을 사용한다.


3.2 NAT 네트워크 설정

 

- NAT 네트워크 카드의 경우 10.0.0.0/24의 네트워크 대역을 사용하고 Gateway10.0.0.254로 설정한다.


3.3 CentOS 네트워크 설정

 

- 각 네트워크 카드의 MAC Address를 확인한다.


3.3.1 CentOS6 네트워크 설정

 

- eth0 : NAT 네트워크 카드, eth1 : Host-only 네트워크 카드인 것을 확인 할 수 있다.

 

- eth0(NAT) 네트워크 카드의 네트워크 설정을 해준다.

 

- eth1(Host-only) 네트워크 카드의 네트워크 설정을 해준다.

 

- 변경된 네트워크 설정을 적용시키기 위해 네트워크 재시작을 해준다.

 

- 위와 같이 각 네트워크 카드에 IP 주소가 적용된 것을 확인 할 수 있다.


3.3.2 CentOS6-1 네트워크 설정

 

- CentOS6-1의 경우 네트워크 카드가 Host-only 하나밖에 없기 때문에 해당 네트워크 카드를 설정해준다.

 

- eth0(Host-only) 네트워크 카드의 네트워크 설정을 해준다.

 

- 변경된 네트워크 설정을 적용시키기 위해 네트워크 재시작을 해준다.

 

- 위와 같이 각 네트워크 카드에 IP 주소가 적용된 것을 확인 할 수 있다.

 

- CentOS6-1에서 CentOS6Host-only 네트워크로 Ping이 보내지는 것을 확인 할 수 있다.

 

- CentOS6에서 arp를 통해 연결을 시도한 네트워크의 IP주소와 MAC Address를 확인 할 수 있고 CentOS6-1IP주소와 MAC Address와 네트워크 카드인 것을 확인 할 수 있다.

 

- CentOS6NAT 카드를 통해 외부 인터넷과 통신이 되는 것을 확인 할 수 있다.


4. IPTABLES

 

4.1 iptables?

 

- iptables는 리눅스상에서 방화벽을 설정하는 도구로서 커널 2.4 이전 버전에서 사용되던 ipchains를 대신하는 방화벽 도구이다. iptables는 커널상에서의 netfilter 패킷필터링 기능을 사용자 공간에서 제어하는 수준으로 사용할 수 있다.

           * 패킷필터링 : 패킷의 헤더를 보고 패킷 전체의 운명을 결정하는 것이다. 헤더에 필터링 할 정보인 [출발지 IP:Port, 목적지 IP:PORT, checksum, 프로토콜 옵션 등]을 가지며 데이터는 각각의 전송 데이터가 포함되어 있다.

 

- 특정 조건을 가지고 있는 패킷에 대해 ACCEPT(허용)DROP(차단)등을 지정할 수 있으며, 특정 조건등을 통해 다양한 방식의 패킷 필터링과 처리 방식을 지원한다.

 

- iptables 정책은 여러 구분이 있는데 그 중 Chain이라는 부분이 가장 중요하다.

- Chain은 패킷이 조작될 상태를 지정하고, iptables에 내장된 Chain은 다음과 같다.

           - Chain FORWARD         : 서버에서 forwarding 기본 정책

           - Chain OUTPUT            : 서버로 들어오는 기본 정책

           - Chain INPUT               : 서버에서 나가는 기본 정책

- linux Server를 목적지로 삼는 모든 패킷은 INPUT Chain을 통과하고 Linux Server에서 생성되어 외부로 나가는 모든 패킷은 OUTPUT Chain을 통과한다.

- FORWARD Chain의 경우 현재 Linux Server가 목적지가 아닌 패킷이 통과하는 Chain이다. (FORWARD ChainNAT(네트워크 공유) 기능의 사용을 위해 사용된다.)

 

* Masquerade (마스커레이드)

- 내부 사설 IPPC들이 외부 인터넷이 연결 가능하도록 해주는 기능이다.

 

* NAT (Network Address Translation)

- SNAT(Source NAT)       : 내부 사설 IP에서 외부로 나갈 때 공인 IP로 변환시켜준다.

- DNAT(Destination NAT) : 외부에서 방화벽(외부 IP)으로 요청되는 주소로, 내부 사설 IP로 변환한다.


4.2 iptables 옵션

 

-append, -A      : 새로운 규칙을 추가

-C (--check)       : 패킷을 테스트

-delete, -D         : 규칙을 삭제

-d                   : 패킷의 수신지를 제어한다.

--dport             : 목적지(destination) 포트번호

-F                   : 체인으로부터 규칙들을 지운다.

-insert, -I          : 새로운 규칙을 삽입(기존 규칙은 내려간다.)

-interface, -i      : 입력 인터페이스

-jump, -j            : 규칙에 맞는 패킷을 어떻게 처리할 것인가를 명시

-L                   : 적용 되어 있는 정책 목록을 출력한다.

-match, -m        : 특정 모듈과의 매치

-N                  : 새로운 체인을 만든다. (INPUT, OUTPUT, FORWARD )

-o                   : 패킷이 나가는 네트워크 인터페이스

-policy, -P         : 기본정책을 변경

-p                   : 프로토콜을 제어한다.

-replace, -R        : 새로운 규칙으로 교체

-s                   : 패킷의 송신지를 제어한다.

--sport             : 출발지(source) 포트번호

-t                   : 테이블을 지정한다. (기본은 fileter)

-X                   : 비어있는 체인을 제거한다.

-Z                   : 체인의 모든 규칙들의 패킷과 바이트 카운트를 0으로 만든다.


4.3 iptables 정책 순서

 

- 모든 방화벽은 순차적 실행이다.

- 먼저 등록한 부분에 대해서 효력이 유요하기 때문에 순서가 매우 중요하다.

- 모든 입출력 패킷에 대해 거부하는 설정이 먼저 등록되면, 이후 포트를 열어주는 설정이 있어도 효과가 없다.


4.4 iptables 기본 명령어

 

- 기본 정책을 ACCEPT로 설정하는 법

           iptables -P INPUT ACCEPT

- 기본 정책을 DROP로 설정하는 법

           iptabels -P INPUT DROP

- 현재 자신의 방화벽 규칙을 볼 수 있는 명령어

           iptables --list / iptables -L

- 규칙 추가 후에 저장하기

           service iptables saves (/etc/sysconfig/iptables에 저장된다.)

- 현재 iptables 규칙을 초기화하기

           iptables -F


4.4.1 iptables 규칙 추가

 

iptables -A INPUT -s[발신지] --sport[발신지 포트] -d[목적지] --dport[목적지 포트] -j [정책]

           iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP

-> 로컬에서 요청하는 모든 ICMP 패킷에 대해 무시하고자 할 때


4.4.2 iptables 규칙 제거

 

iptables -D INPUT -s[발신지] --sport[발신지 포트] -d[목적지] --dport[목적지 포트] -j [정책]

           iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP

-> 위에서 생성했던 규칙을 제거하고자 할 때


4.5 iptables 설정

 

- Chain FORWARD         : 서버에서 forwarding 기본 정책

- Chain OUTPUT            : 서버로 들어오는 기본 정책

 

- 서로 다른 네트워크를 사용하는 VM간의 라우팅이 필요한 경우 Router의 역할을 해야하는 Linux에서 net.ipv4.ip_forward = 1로 설정하게 되면 Router와 같은 역할을 하게 된다. , 외부와 내부와 연결된 Linux이기 때문에 내부 네트워크와 외부 네트워크의 연결 다리가 된다.

 

- 변경된 내용을 저장해준다.

 

- 아무것도 설정하지 않은 iptables의 상태이다.

- INPUT을 보게 되면 모든 통신에 대해 받아들이고 있다.

- FORWARD를 보게 되면 모든 포워딩 요청을 거부하고 있는 것을 볼 수 있다.

 

- 규칙 생성 예시

* iptables -A INPUT -p tcp -d port 80 -j ACCEPT

-> 외부 모든 목적지의 tcp/80 포트로의 접근을 허용한다.

* iptables -A INPUT -d 192.168.10.10 -p tcp -d port 22 -j DROP

-> 외부 모든 출발지에서 내부 192.168.10.10 목적지 서버의 tcp/80 포트로의 접근을 차단한다.

 

     * iptables -t filter -P FORWARD DROP

- FORWARD의 모든 기본 정책을 DROP으로 제거한다.

     * iptables -t filter -F FORWARD

- FORWARD Chain의 모든 규칙을 삭제한다.

     * iptables -A FORWARD -i eth1 -j ACCEPT

- FOWARD 패킷 중 입력 인터페이스가 eth1인 패킷에 대해 forwarding을 허용하겠다.

 

* iptables -A FORWARD -o eth1 -j ACCEPT

- FORWARD 패킷 중 인터페이스 eht1로 나가는 패킷의 forwarding을 허용하겠다.

     * iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

- 방화벽 외부 네트워킹 장치 eth0에서 NAT에 내장된 POSTROUTING chain을 지정한다. POSTROUTING을 사용할 경우 패킷이 방화벽의 외부 장치를 떠날 때 변경된다.

- -j MASQUERADE 옵션을 사용하여 컴퓨터의 사설 IP 주소를 방화벽/게이트웨이의 외부 IP 주소로 바꾸기 위해 사용한다.

 

- 설정을 변경 한 뒤 iptables --list를 보게 되면 설정 사항이 변경 된 것을 확인 할 수 있다.

 

- 변경된 iptables 설정들을 저장한다.

 

- Host-only 카드만 존재하는 CentOS6-1에서 외부 네트워크와 통신이 가능해진 것을 볼 수 있다.

 

728x90