방화벽의 이해 - 4imp.com

Download Report

Transcript 방화벽의 이해 - 4imp.com

방화벽 (Firewall)
유닉스 네트워킹 실습
00190078
박혜정
방화벽의 이해
방화벽 (Firewall)

외부로부터 내부 망을 보호하기 위한 네트웍 구성 요소중의
하나로써 외부의 불법 침입으로부터 내부의 정보 자산을 보
호하고, 외부로부터 유해 정보의 유입을 차단하기 위한 정책
과 이를 지원하는 H/W 및 S/W를 총칭한다
공격 방법





비인가 접근
프로그램의 알려진 약점 이용
서비스 거부
스푸핑
이브즈드라핑
방화벽의 이해
방화벽 시스템(Firewall System)기능




안전하지않은 인터넷으로부터 내부망 보호
내/외부 서비스를 중계하는 게이트웨이
트래픽을 차단하는 필터링
게이트웨이가 있는 중간지역(DMZ)
필터링
Secured
Internal Network
내부
네트워크
필터링
De-Military Zone
게이트웨이
(Proxy)
Unsecured
Public Network
외부
네트워크
방화벽의 이해
방화벽의 종류

패킷 필터링 방식

어플리케이션 게이트웨이 방식

서킷 게이트웨이 방식

하이브리드 방식

베스쳔호스트

스크린 서브네트
IP 필터링
IP 필터링은 무엇인가 ?







라우터를 통과하는 패킷을 몇 가지 조건에 따라 필터링 하기
위한 것이다
패킷 필터링 라우터는 보통 다음에 제시되는 항목들의 전부
나 또는 일부에 기반을 두고 IP 패킷을 필터링할 수 있다.
발신지 IP 주소
목적지 IP 주소
TCP/UDP 발신지 포트
TCP/UDP 목적지 포트
데이터그램 종류 : SYN/ACK, 데이터, ICMP 반향 요청 등
리눅스 방화벽 설정
리눅스 IP 방화벽을 만들기 위해선 커널이 IP 방화벽을 지원하게
컴파일해야 하고 그에 상응하는 설정 도구가 있어야 한다.

Ipfwadm – 커널 2.2 시리즈 이전에서는 모두 사용

Ipchains – 커널 2.2.x에서는 제 3세대 리눅스 IP 방화벽

Netfilter – 커널 2.3.15이후부터 제 4세대 리눅스 IP 방화벽
리눅스 방화벽 설정
IP 방화벽을 지원하는 커널 설정
우선 커널 컴파일을 해야 할 필요가 있을지 모른다.
Networking options --->
[*] Network firewalls
....
[*] IP: forwarding/gatewaying
....
[*] IP: firewalling
[*] IP: firewall packet loggin
위에서 나타낸 옵션이 커널 기능에 들어 있어야만 가능하다

IP 데이터그램의 처리 단계
커널의 나머지 부분
네트워크 소켓
2
TCP/UDP 프로토콜
4
다른 프로토콜
IP 라우팅 소프트웨어
?
1
?
이더넷 드라이버
PPP 드라이버
5
다른 드라이버
IP 방화벽 - ipfwadm
Ipfwadm 유틸리티




2.2.0 이전의 모든 커널에 대한 방화벽 룰을 만들때 사용하
는 도구
리눅스 커널에서 IP 방화벽, 통계분석 규칙을 설정, 유지, 감
독하기 위한 도구
분류 : -I [입력 룰], -O [출력 룰], -F [포워딩 룰]
ipfwadm -A 명령 매개변수 [옵션]
ipfwadm -I 명령 매개변수 [옵션]
ipfwadm -O 명령 매개변수 [옵션]
ipfwadm -F 명령 매개변수 [옵션]
ipfwadm -M [ -l | -s ] [옵션]
IP 방화벽 설정
IP forwadding 을 위한 ipfwadm 이용
# ipfwadm –F -f
# ipfwadm -F -p deny
# ipfwadm -F -a accept –p tcp –s 172.16.1.0/24 –D 0/0 80
# ipfwadm –F –a accept –p tcp –s 0/0 80 –D 172.16.1.0/24
-F 명령어 인자는 ipfwadm에게 이것이 포워딩 룰임을 알려준다
IP 방화벽 설정
룰 나열
# ipfwadm -F –l


이 명령어는 설정한 모든 포워딩 룰을 나열한다.
Ipfwadm 명령어는 /etc/services를 사용하여 만약 항목이
존재한다면 포트 번호를 서비스명으로 바꾼다.
# ipfwadm -F -l -e

-e(확장 출력) 인자를 지정하여 세부항목을 좀더 많이 나열
한다.
Ipfwadm 인자 요약
분류

방화벽에게 어떤 종류의 방화벽 룰을 설정하는지를 알려주는
역할을 하며 한번에 단 한가지만 사용한다.
-A : IP 통계분석 규칙.
-I : IP 입력 방화벽 규칙.
-O : IP 출력 방화벽 규칙.
-F : IP 전달 방화벽 규칙.
-M : IP 매스커레이딩(masquerading) 관리.
Ipfwadm 인자 요약 - 명령어
-a [정책]


새로운 룰을 첨부한다.
accept, deny, 또는 reject. 출발지 또는 목적지 이름이 하나
이상의 주소를 나타낼 때는 그것이 나타내는 모든 주소 조합
에 대하여 규칙이 추가된다.
-i [정책]

선택한 목록의 맨 앞에 하나 또는 그 이상의 규칙을 삽입한다.
-d [정책]

현존하는 룰을 삭제한다.
-l

선택한 목록에 있는 모든 규칙을 보여준다.
-z

선택한 목록의 모든 규칙에 대하여 패킷과 바이트 카운터를
0으로 돌려놓는다.
Ipfwadm 인자 요약 - 명령어
-f

선택한 규칙 목록을 비워버린다.
-p [정책]


선택한 방화벽 유형에 대한 기본 정책을 바꾼다.
정책으로 사용하는 값은 accept, deny, 또는 reject중하나이
다.
-s tcp tcpfin udp

매스커레이딩에 사용되는 타임아웃값을 바꾼다.
-c

선택한 방화벽 유형에 대하여 IP패킷이 허가, 거부(deny) 또
는 거절(reject)될 것인지 점검한다.
-h

도움말. 명령 문법에 대한 설명을 보여준다.
Ipfwadm 인자 요약 - 매개변수
-P protocol

규칙 또는 점검할 패킷의 프로토콜을 말한다.
 프로토콜로 올 수 있는 값은 tcp, udp, icmp, 또는 all이
다.
-S address[/mask] [port]


출발지 명시 (선택적).
주소 에는 호스트명, 네트웍명 또는 평범한 IP 주소가 올 수
있다.
-D address [/mask] [port]

룰이 일치할 목적지 IP 주소를 지정한다.
-V address

패킷을 받거나 보내는 통로가 되어 주는 인터페이스에 대
한 주소로서 선택적이다.
-W name

패킷을 주고 받는 인터페이스의 이름으로서 선택적이다.
Ipfwadm 인자 요약 – 선택적 인자
-b

양방향 모드. 규칙을 양방향 모두의 IP 패킷에 적용하도록 한다.

부합하는 패킷에 대하여 커널 로깅을 하도록 한다.

숫자를 확장. K (1000) 또는 M (1000K) 단위로 반올림
표현하지 않고 패킷과 바이트 카운터의 수치를 정확하게
표시한다
-o
-y
-k

ACK 비트가 설정된 TCP 패킷하고만 부합한다.
-e

확장 출력. 이 옵션을 주면 list 명령에 대하여 인터페이스 주
소와 규칙 옵션(존재한다면)을 추가로 보여준다.
ICMP 데이터그램 유형
유형 번호
Iptables Mnemonic
유형 설명
0
Echo-reply
반향 응답
3
Destination-unreachable
목적지 도달 불가
4
Source-quench
발신지 quench
5
Redirect
라다이렉트
8
Echo-request
반향 용청
11
Time-exceeded
시간 초과
12
Parameter-problem
매개변수 문제
13
Timestamp-request
타임스탬프 요청
14
Timestamp-reply
타임스탬프 응답
15
None
정보 요청
16
None
정보 응답
17
Address-mask-request
주소 마스크 요청
18
Address-mask-reply
주소 마스크 응답
IP 방화벽 - ipchains
Ipchains 유틸리티



커널 개발버전 2.1.102부터 공식적으로 IP방화벽 관리도구로서
커널에 들어왔다.
패킷 필터를 통해서 패킷의 헤더를 조사해서 설정된 규칙에 의
해서 해당 패킷을 받아들일 것인가 버릴것인가를 결정한다
ipchains의 버전 확인 방법
[root@eve /sbin]# ./ipchains –version
ipchains 1.3.9, 17-Mar-1999

체인의 종류 : ‘input’, ‘output’, ‘forward’
IP 방화벽 - ipchains
패킷 필터링 기능을 위한 조건



커널 안에 IP방화벽 사슬(Generic IP Firewall Chain) 기
능을 갖추고 있어야 한다.
현재 사용하고 있는 커널이 패킷 필터링 기능을 포함하는
지 확인하기 위해서는 /proc/net/ip_fwchains파일이 있
는지 확인
패킷필터링을 위해 추가해야할 설정 옵션
CONFIG_EXPERIMENTAL
CONFIG_FIREWALL
CONFIG_IP_FIREWALL
CONFIG_IP_FIREWALL_CHAINS
Ipchains - 명령어
ipchains 설정 파일






-N : 새로운 체인을 만든다.
-X : 빈 사슬을 지운다.
-P : 내장 사슬에 대한 기본 정책을 변경한다.
-L : 사슬 속에 든 규칙을 나열한다.
-F : 사슬로부터 규칙을 모두 방출한다.
-Z : 사슬 속의 모든 규칙에 대한 패킷, 바이트 카운터 값
을 0 으로 설정한다.
ipchains 내의 규칙 설정 방법




-A : 사슬에 새로운 규칙을 추가한다.
-I : 사슬 속 어딘가에 새로운 규칙을 삽입한다.
-R : 사슬 속 특정 위치의 규칙을 교체한다.
-D : 사슬 속의 특정 규칙을 삭제한다.
Ipchains - 명령어
패킷 특성 옵션






-s : 패킷의 발신지를 명시한다
-d : 패킷의 도착지를 명시한다
-p : 패킷의 프로토콜을 명시한다
-I : 규칙을 적용할 인터페이스 이름을 명시한다
-y : 접속 요청 패킷인 SYN패킷을 허용하지 않는다
-f : 두 번째 이후의 조각에 대해서 규칙을 명시한다
규칙의 추가나 삭제는 추가(-A), 삭제(-D) 명령을 사용한다.
Ipchains - 예제
예를 들어 127.0.0.1 이라는 IP 주소로부터 오는 모든
ICMP 패킷을 무시하는 경우를 고려하자.
# ping -c 1 127.0.0.1
# ipchains -A input -s 127.0.0.1 -p icmp -j DENY
# ping -c 1 127.0.0.1
규칙을 지우는 첫 번째 방법
# ipchains -D input 1
규칙을 지우는 두 번째 방법
# ipchains -D input -s 127.0.0.1 -p icmp -j DENY
Ipchains - 예제
새로운 체인 만들기
# ipchains -N test
체인 지우기
# ipchains -X test
체인 비우기
# ipchains -F forward
사슬 내용 보기
# ipchains -L input
# ipchains -L test
# ipchains -v -L input
Netfilter와 iptables(커널 2.4)
체크섬
sanity
Input
체인
라우팅
결정
Masq?
Forward
체인
Demasq?
Output
체인
로컬
프로세스
IP 체인의 데이터그램 처리 체인
Netfilter와 iptables(커널 2.4)
체크섬
sanity
라우팅
결정
Forward
체인
Input
체인
라우팅
결정
Output
체인
로컬
프로세스
Netfilter내의 데이터그램 처리 체인
IP 방화벽 - iptables
Iptables 유틸리티

리눅스 IPv4 방화벽을 설정하는 명령어

iptables의 버전을 확인하는 방법
# iptables --version
iptables 1.2.4

커널은 3가지의 방화벽 체인(chain)을 기본적으로 가지
고 패킷 필터링을 시작한다.
체인이라 부르는 이 3가지는 입력(Input), 출력(Output),
전달(Forward)이다.
Iptables - 명령어











-A : 새로운 규칙을 추가한다.(--append)
-D : 규칙을 삭제한다.(--delete)
-C : 패킷을 테스트한다.(--check)
-R : 새로운 규칙으로 교체한다.(--replace)
-I : 새로운 규칙을 삽입한다.(--insert)
-L : chain에 설정된 규칙을 출력한다.(--list)
-F : chain으로부터 규칙을 모두 방출(삭제)한다.(-flush)
-Z : 모든 chain의 패킷과 바이트 카운터 값을 0으로 만
든다.(--zero)
-N : 새로운 chain을 만든다.(--new)
-X : chain을 삭제한다.(--delete-chain)
-P : 기본정책을 변경한다.(--policy)
Iptables – 매개변수







-s : 패킷의 발신지를 명시한다.(--source)
-p : 패킷의 프로토콜을 명시한다.(--protocol)
-d : 패킷의 도착지를 명시한다.(--destination)
-i : 규칙을 적용할 인터페이스 이름을 명시한다.(-interface)
-j : 규칙에 맛는 패킷을 어떻게 처리할 것인가를 명시한
다.(-jump)
-y : 접속 요청 패킷인 SYN패킷을 허용하지 않는다.(-syn)
-f : 두 번째 이후의 조각에 대해서 규칙을 명시한다.(-fragment)
Iptables의 확장
TCP 확장 : -m tcp –p tcp 로 사용






--tcp-flags
: '!' 옵션을 사용한다면 이것 뒤에 두개의 단어를 사용한다. 첫
번째 것은 검사하고자 하는 지시자 리스트의 마스크이고 두번
째 단어는 지시자에게 어떤것이 설정 될 것인지를 말해준다.
--syn
: !' 옵션이 선행될 수 있다. 이것은 '--tcp-flags
SYN,RST,ACK,SYN'의 약어이다.
--source-port
:/etc/services 에 기록된 것과 같은 포트 이름이 사용될 수 도
있고 숫자로 나타낼 수도 있다.
--sport
--destination-port 와 --dport
--tcp-option
: '!' 나 숫자가 옵션에 선행될 수 있는데 숫자가 앞에 올경우 그
숫자 와 TCP 옵션이 같은 경우의 패킷을 검사한다.
Iptables의 확장
UDP 확장

이 확장은 '--protocol udp'가 지정되고 적용이 저정되
지 않으면 자동으로 적재된다. 이것은 '--source-port',
'--sport', '--destination-port', '-dport'를 지원하고 내
용은 TCP 설명에서 자세히 나왔다
ICMP 확장

--icmp-type
: '!' 옵션이 선행될 수 있다. 이후에 ICMP 타입의 이름
('host-unreachable') 이나 숫자형태 ('3'), 또는 숫자형
태와 코드('/'로 분리 예. '3/3') 의 형 태가 사용된다. 사
용할 수 있는 ICMP 형태의 이름의 리스트는 '-p icmp -help' 하면 나타난다.
Iptables - 예제
만약 네트워크에 24비트 네트워크 마스크(C 클래스)
가 있고 172.16.1.0의 주소를 가지고 있다면,
다음 iptables 룰을 사용할 것이다.
# modprobe ip_tables
# iptables –F FORWARD
# iptables –P FORWARD DROP
# iptables -A FORWARD –m tcp –p tcp –s 0/0 --sport 80
–d 172.16.1.0/24 / --syn –j DROP
# iptables -A FORWARD –m tcp –p tcp -s 172.16.1.0/24
--sport / 80 –d 0/0 –j ACCEPT
# iptables -A FORWARD –m tcp –p tcp -d 172.16.1.0/24
--dport 80 –s 0/0 –j / ACCEPT
Iptables - 예제
예를들어, 여러분은 127.0.0.1로부터의 모든 ICMP패
킷을 DROP하려고 할 것이다. 그렇다면, 이경우 일치
되어야할 상태는 'ICMP이면서 그 출처가27.0.0.1' 이
다. 이 경우 'target' 은 DROP 이다. 127.0.0.1은
'loopback' 인터페이서 이고 실제적인 네트워크 접속
이 전혀 없더라도 이것은 가지고 있을 것이다. 이러한
패킷은 'ping' 프로그램을 이용하여 생성할 수 있다.
# ping -c 1 127.0.0.1
# iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
# ping -c 1 127.0.0.1
Iptables - 예제
예로, 다음과 같은 규칙은 192.168.1.1 로 향하는 분
절을 DROP 시킨다.
# iptables -A OUTPUT -f -d 192.168.1.1 -j DROP
규칙을 지우는 첫 번째 방법
# iptables -D input 1
규칙을 지우는 두 번째 방법
# iptables -D input -s 127.0.0.1 -p icmp -j DROP
Iptables - 예제
새로운 체인 생성
# iptables -N test
체인 제거
# iptables -X test
체인 비우기
# iptables -F forward