정보보안공부

시스템보안_Linux_방화벽 - iptables 본문

정보보안/시스템보안

시스템보안_Linux_방화벽 - iptables

Steady_sp 2018. 11. 7. 00:33

시스템보안_Linux_방화벽

- Vmware 가상머신 사용

- CentOs 6.0

 

<시스템보안_Linux_방화벽>

 

** 방화벽 : UTM 장비 / iptables

-> 리눅스 방화벽에서 iptables은 윈도우 방화벽과는 달리 인바운드, 아웃바운드 외에 지나가는 패킷에 대해서 필터링을 걸 수 있다.

 

#1 iptables 명령어, 기능 살펴보기

 

** iptables 개념

-> 네트워크를 보안하는 방법 중 하나이다.

-> 서버에서 보안은 정책설정과 방화벽 설정인데 그 중 방화벽 설정과 여러 클라이언트를 보호하는 기능이 iptables의 기능이다.

-> 방화벽 테이블의 종류 : filter , NAT

-> filter테이블 : INPUT, OUTPUT, FORWARD chain으로 구성

-> NAT테이블 : 패킷 필터링 기능 없다. POSTROUTING, PREROUTING으로 구성

 

** iptables 형식

형식 : iptables [ -t table ] 명령어 [ 매칭 옵션 ] [ 타겟 ]

-> [ ] : 생략가능한 가능

-> table : filter, NAT 2가지 , 생략시 filter 테이블이 방화벽이 기본 모드

-> 명령어 : append, delete, insert, list, flush, policy 등등..

-> 매칭 옵션 : ip주소, port 번호, 프로토콜의 세부 정보

-> 타겟 : 룰에 매칭 시 패킷의 처리 유무를 지정

-> 룰 설정이 많을 수록 직접적인 명령 구성 자제

 

** iptables 명령어

-A : append 명령어, 룰 설정 시 제일 마지막에 추가된다.

-D : delete 명령어, 설정한 룰을 한개씩 삭제한다. 삭제시 룰대신 번호를 이용해 삭제 가능하다.

-I : insert 명령어, 룰 설정 시 제일 처음에 추가된다.

-L : list 명령어, --line 옵션을 사용해 룰이 몇번 째 룰인지 확인할 수 있다.

-F : flush 명령어, 모든 룰을 삭제하는 명령어이다.

-P : policy 명령어, 패킷에 대한 기존 룰에 매칭 되지 않는 경우 기본 정책을 설정한다. 기본 정책은 DROP을 설정하는 경우가 많다.

 

** iptables 매칭 옵션

-p : protocol 옵션

-> tcp udp icmp 등의 프로토콜을 지정한다. !tcp는 tcp가 아닌 나머지 프로토콜이다.

-s, -d : 출발지 / 목적지 IP 주소

-> 192.168.222.0/24와 같이 IP대역을 지정할 수도 있다.

--sport, --dport : 출발지 / 목적지 포트번호

-> 1024:65535와 같이 포트범위를 지정할 수도 있다.

-i, -o : 인터페이스 지정 옵션

-> -i는 들어오는 인터페이스 -o는 나가는 인터페이스를 의미한다.

-> 한 서버에 여러개의 인터페이스 존재 시 사용하고 하나의 인터페이스 시 사용할 필요 없다.

--tcp flags : tcp 6개의 flag ( SYN ACK RST FIN URG PSH ) 지정 옵션

-> 비정상적인 tcp 패킷 필터링시 사용한다.

-> 이외 all, none으로 사용하고 SYN은 --syn으로 따로 사용 가능하다.

--icmp-type 옵션

-> icmp는 port 개념이 없으므로, type과 code를 사용한다.

-m state 옵션 

-> 상태 추적 방화벽의 옵션을 의미한다. 상태추적은 이미 허용되어 있으면 허용해준다

-> NEW는 새롭게 연결을 시작하거나 이전의 연결 추적 테이블에 보이지 않는 경우

-> ESTABLISHED 는 이미 연결 된 상태인 경우

-> RELATED : 연결된 상태에서 새로운 연결을 시작하는 경우

-> INVALID : 연결 상태를 알 수 없거나 잘못된 헤더를 갖고 있는 경우

--limit 옵션

-> 지정 시간 동안 최대 매칭 횟수를 정의한다. 서비스 거부 공격을 차단 시 효율적으로 사용

-> 횟수/second, 횟수/minute, 횟수/hour, 횟수/day 로 사용한다.

-> --limit-burst 10 : 먼저 10개의 패킷이 매칭된 다음 제한한다.

 

** iptables 타겟 지정

-j 타겟

-> ACCEPT : 매칭된 룰을 허용

-> DROP : 매칭된 룰을 거부

-> LOG : 매칭된 룰을 로그에 남김

-> SNAT, DNAT : 주소 변환 

 

** iptables 설정후 적용

-> 방화벽 룰을 정할 때 /etc/sysconfig/iptables안에서 룰을 작성하고 iptables를 재시작하면 적용된다.

-> /etc/sysconfig/iptables안에서 작성하지 않고 명령어로 실행하면 바로 적용되지만 /etc/sysconfig/iptables 내용에 반영되지 않는다.

-> 방화벽 재시작 명령어 : service iptables restart

 

#2 XP와 BackTrack 사이 CentOS에서 iptables를 설정해 icmp 프로토콜 통신 해보기

IP                NM                GW

- XP : 172.16.1.1 / 255.255.255.0 / 172.16.1.2    -> HostOnly인 VMnet1로 설정

- BackTrack : 1.1.1.1 / 255.255.255.0 / 1.1.1.2    -> HostOnly인 VMnet2로 설정

IP            NM                                            IP            NM

- CentOS : 172.16.1.2 / 255.255.255.0        -> VMnet1    /    1.1.1.2 / 255.255.255.0        -> VMnet2

 

** XP에서 BackTrack으로 ping 해보기

- XP : 172.16.1.1

- BackTrak : 1.1.1.1

 

 

-> BackTrack과의 통신이 Request Time out이므로 아예 연결조차 되지 않고있다.

-> CentOS에서 IP 포워딩 기능을 추가해야한다.

 

** CentOS에서 IP 포워딩 기능 실행한후 다시 XP에서 BackTrack으로 ping 해보기

 

 

-> sysctl net.ipv4.ip_forward=1 를 하면 IP 포워딩이 실행된다.

 

-> XP에서 다시 BackTrack으로 ping을 해보면 CentOS에서 IP포워딩에 의해 연결은 되지만 방화벽 iptables에서 FORWARD 필터링에 의해 막혀 Destination Unreachable이 확인된다. 

 

** CentOS에서 iptables FOWARD 필터링 룰 수정하기

 

# FORWARD 필터링의 기본정책 ACCEPT일 때

 

 

-> iptables -F FORWARD를 통해 FORWARD 필터링 삭제

-> iptables -L FORWARD를 통해 FORWARD의 policy 기본정책이 ACCEPT이므로 설정을 안해놓으면 FORWARD 필터링이 전부 허용된다.

 

# FORWARD 필터링의 기본정책이 DROP일 때

 

 

-> iptables -P FORWARD DROP을 통해 기본정책을 DROP으로 변경한다.

-> 기본적으로 DROP하므로 echo-request와 echo-reply를 따로 특정 IP에 대해 허용해주어야한다.

 

** XP에서 BackTrack으로 ping해보기

 

 

-> BackTrack에서 패킷이 잘 통신되나 확인하기위해 와이어 샤크를 실행한다.

 

 

-> XP에서 BackTrack으로 ping시도

 

 

-> BackTrack에서 확인해보면 XP의 IP 172.16.1.1로부터 자신의 IP 1.1.1.1로 정상적으로 통신되는 것을 확인할 수 있다.

 

** CentOS에서 iptables NAT 필터링에 MASQUERADE 설정해보기

-> MASQUERADE 설정을 하면 XP에서 BackTrack으로 통신할 때 CentOS에서 지정한 인터페이스의 IP를 통해 통신한다.

 

 

-> MASQUERADE 설정을 CentOs의 eth0 인터페이스 IP 1.1.1.2로 지정했다.

 

** XP에서 BackTrack으로 ping해보기

 

 

-> XP에서 BackTrack으로 ping은 잘 이루어진다.

 

 

-> BackTrack에서 와이어샤크로 확인해보면 XP의 IP는 172.16.1.1이지만 CentOs에서 IP포워딩과 Filter 테이블의 FORWARD 에서 echo-request , echo-reply 설정 허용, NAT 테이블의 POSTROUTING 에서 MASQUERADE 설정을 eth0 인터페이스로 설정에 의해 eth0의 IP인 1.1.1.2와 BackTrack의 1.1.1.1이 통신되는것을 확인할 수 있다.

 

#3 XP 와 BackTrack 사이 CentOS에서 iptables를 설정해 tcp 프로토콜 통신 해보기

 

** BackTrack 에서 웹서버 실행 

#> service apach2 start

 

 

-> BackTrack에서 웹서버스를 실행한뒤 1.1.1.1로 웹페이지 접근해보면 성공

 

** XP에서 BackTrack의 웹서버에 접근 

 

 

-> 방화벽에 의해 막혀 접근할 수 없다.

 

** CentOS에서 iptables FORWARD 테이블 80번 포트 허용 

 

 

-> 출발지가 172.16.1.0 대역대이고 목적포트가 80번 포트라면 데이터가 지나가도록 허용

-> 목적지가 172.16.1.0 대역대이고 출발포트가 80번 포트라면 데이터가 지나가도록 허용

 

** XP에서 BackTrack의 웹서버에 접근

 

 

-> 정상적으로 접근된다.

 

Comments