목차
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의 네트워크 대역을 사용하고 Gateway는 10.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에서 CentOS6의 Host-only 네트워크로 Ping이 보내지는 것을 확인 할 수 있다.
- CentOS6에서 arp를 통해 연결을 시도한 네트워크의 IP주소와 MAC Address를 확인 할 수 있고 CentOS6-1의 IP주소와 MAC Address와 네트워크 카드인 것을 확인 할 수 있다.
- CentOS6는 NAT 카드를 통해 외부 인터넷과 통신이 되는 것을 확인 할 수 있다.
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 Chain은 NAT(네트워크 공유) 기능의 사용을 위해 사용된다.)
* Masquerade (마스커레이드)
- 내부 사설 IP의 PC들이 외부 인터넷이 연결 가능하도록 해주는 기능이다.
* 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에서 외부 네트워크와 통신이 가능해진 것을 볼 수 있다.