34
방방방 (Firewall) 방방방 방방방방 방방 00190078 방방방

방화벽 (Firewall)

  • Upload
    arin

  • View
    60

  • Download
    3

Embed Size (px)

DESCRIPTION

방화벽 (Firewall). 유닉스 네트워킹 실습 00190078 박혜정. 방화벽의 이해. 방화벽 (Firewall) 외부로부터 내부 망을 보호하기 위한 네트웍 구성 요소중의 하나로써 외부의 불법 침입으로부터 내부의 정보 자산을 보호하고 , 외부로부터 유해 정보의 유입을 차단하기 위한 정책과 이를 지원하는 H/W 및 S/W 를 총칭한다 공격 방법 비인가 접근 프로그램의 알려진 약점 이용 서비스 거부 스푸핑 이브즈드라핑. 필터링. 필터링. Secured Internal Network. - PowerPoint PPT Presentation

Citation preview

Page 1: 방화벽  (Firewall)

방화벽 (Firewall)

유닉스 네트워킹 실습00190078

박혜정

Page 2: 방화벽  (Firewall)

방화벽의 이해방화벽 (Firewall) 외부로부터 내부 망을 보호하기 위한 네트웍 구성 요소중의

하나로써 외부의 불법 침입으로부터 내부의 정보 자산을 보호하고 , 외부로부터 유해 정보의 유입을 차단하기 위한 정책과 이를 지원하는 H/W 및 S/W 를 총칭한다

공격 방법 비인가 접근 프로그램의 알려진 약점 이용 서비스 거부 스푸핑 이브즈드라핑

Page 3: 방화벽  (Firewall)

방화벽의 이해방화벽 시스템 (Firewall System) 기능 안전하지않은 인터넷으로부터 내부망 보호 내 / 외부 서비스를 중계하는 게이트웨이 트래픽을 차단하는 필터링 게이트웨이가 있는 중간지역 (DMZ)

외부네트워크내부네트워크

필터링 필터링

게이트웨이(Proxy)

De-Military ZoneUnsecured

Public NetworkSecured

Internal Network

Page 4: 방화벽  (Firewall)

방화벽의 이해방화벽의 종류 패킷 필터링 방식

어플리케이션 게이트웨이 방식

서킷 게이트웨이 방식

하이브리드 방식 베스쳔호스트

스크린 서브네트

Page 5: 방화벽  (Firewall)

IP 필터링

IP 필터링은 무엇인가 ? 라우터를 통과하는 패킷을 몇 가지 조건에 따라 필터링 하기

위한 것이다 패킷 필터링 라우터는 보통 다음에 제시되는 항목들의

전부나 또는 일부에 기반을 두고 IP 패킷을 필터링할 수 있다 .

발신지 IP 주소 목적지 IP 주소 TCP/UDP 발신지 포트 TCP/UDP 목적지 포트 데이터그램 종류 : SYN/ACK, 데이터 , ICMP 반향 요청 등

Page 6: 방화벽  (Firewall)

리눅스 방화벽 설정

리눅스 IP 방화벽을 만들기 위해선 커널이 IP 방화벽을 지원하게 컴파일해야 하고 그에 상응하는 설정 도구가 있어야 한다 .

Ipfwadm – 커널 2.2 시리즈 이전에서는 모두 사용

Ipchains – 커널 2.2.x 에서는 제 3 세대 리눅스 IP 방화벽

Netfilter – 커널 2.3.15 이후부터 제 4 세대 리눅스 IP 방화벽

Page 7: 방화벽  (Firewall)

리눅스 방화벽 설정

IP 방화벽을 지원하는 커널 설정 우선 커널 컴파일을 해야 할 필요가 있을지 모른다 . Networking options ---> [*] Network firewalls .... [*] IP: forwarding/gatewaying .... [*] IP: firewalling [*] IP: firewall packet loggin위에서 나타낸 옵션이 커널 기능에 들어 있어야만 가능하다

Page 8: 방화벽  (Firewall)

IP 데이터그램의 처리 단계커널의 나머지 부분

네트워크 소켓TCP/UDP 프로토콜 다른 프로토콜

IP 라우팅 소프트웨어

이더넷 드라이버 PPP 드라이버 다른 드라이버

4

5

?2

1

?

Page 9: 방화벽  (Firewall)

IP 방화벽 - ipfwadm

Ipfwadm 유틸리티

2.2.0 이전의 모든 커널에 대한 방화벽 룰을 만들때 사용하는 도구 리눅스 커널에서 IP 방화벽 , 통계분석 규칙을 설정 , 유지 , 감독하기 위한 도구 분류 : -I [ 입력 룰 ], -O [ 출력 룰 ], -F [ 포워딩 룰 ]

ipfwadm -A 명령 매개변수 [ 옵션 ] ipfwadm -I 명령 매개변수 [ 옵션 ] ipfwadm -O 명령 매개변수 [ 옵션 ] ipfwadm -F 명령 매개변수 [ 옵션 ] ipfwadm -M [ -l | -s ] [ 옵션 ]

Page 10: 방화벽  (Firewall)

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 에게 이것이 포워딩 룰임을

알려준다

Page 11: 방화벽  (Firewall)

IP 방화벽 설정룰 나열

# ipfwadm -F –l

이 명령어는 설정한 모든 포워딩 룰을 나열한다 . Ipfwadm 명령어는 /etc/services 를 사용하여 만약 항목이 존재한다면 포트 번호를 서비스명으로 바꾼다 .

# ipfwadm -F -l -e

-e(확장 출력 ) 인자를 지정하여 세부항목을 좀더 많이 나열한다 .

Page 12: 방화벽  (Firewall)

Ipfwadm 인자 요약

분류 방화벽에게 어떤 종류의 방화벽 룰을 설정하는지를

알려주는 역할을 하며 한번에 단 한가지만 사용한다 .

-A : IP 통계분석 규칙 . -I : IP 입력 방화벽 규칙 . -O : IP 출력 방화벽 규칙 . -F : IP 전달 방화벽 규칙 . -M : IP 매스커레이딩 (masquerading) 관리 .

Page 13: 방화벽  (Firewall)

Ipfwadm 인자 요약 - 명령어

-a [ 정책 ] 새로운 룰을 첨부한다 . accept, deny, 또는 reject. 출발지 또는 목적지 이름이 하나 이상의

주소를 나타낼 때는 그것이 나타내는 모든 주소 조합에 대하여 규칙이 추가된다 .

-i [ 정책 ] 선택한 목록의 맨 앞에 하나 또는 그 이상의 규칙을 삽입한다 .

-d [ 정책 ] 현존하는 룰을 삭제한다 .

-l 선택한 목록에 있는 모든 규칙을 보여준다 .

-z 선택한 목록의 모든 규칙에 대하여 패킷과 바이트 카운터를 0 으로 돌려놓는다 .

Page 14: 방화벽  (Firewall)

Ipfwadm 인자 요약 - 명령어

-f 선택한 규칙 목록을 비워버린다 .

-p [ 정책 ] 선택한 방화벽 유형에 대한 기본 정책을 바꾼다 . 정책으로 사용하는 값은 accept, deny, 또는 reject 중하나이다 .

-s tcp tcpfin udp 매스커레이딩에 사용되는 타임아웃값을 바꾼다 .

-c 선택한 방화벽 유형에 대하여 IP 패킷이 허가 , 거부 (deny) 또는

거절 (reject)될 것인지 점검한다 .-h 도움말 . 명령 문법에 대한 설명을 보여준다 .

Page 15: 방화벽  (Firewall)

Ipfwadm 인자 요약 - 매개변수

-P protocol 규칙 또는 점검할 패킷의 프로토콜을 말한다 .

프로토콜로 올 수 있는 값은 tcp, udp, icmp, 또는 all 이다 . -S address[/mask] [port] 출발지 명시 ( 선택적 ). 주소 에는 호스트명 , 네트웍명 또는 평범한 IP 주소가 올 수 있다 .

-D address [/mask] [port] 룰이 일치할 목적지 IP 주소를 지정한다 .

-V address 패킷을 받거나 보내는 통로가 되어 주는 인터페이스에 대한

주소로서 선택적이다 . -W name 패킷을 주고 받는 인터페이스의 이름으로서 선택적이다 .

Page 16: 방화벽  (Firewall)

Ipfwadm 인자 요약 – 선택적 인자

-b 양방향 모드 . 규칙을 양방향 모두의 IP 패킷에 적용하도록 한다 .

-o 부합하는 패킷에 대하여 커널 로깅을 하도록 한다 .

-y 숫자를 확장 . K (1000) 또는 M (1000K) 단위로 반올림 표현하지 않고 패킷과 바이트 카운터의 수치를 정확하게 표시한다

-k ACK 비트가 설정된 TCP 패킷하고만 부합한다 .

-e 확장 출력 . 이 옵션을 주면 list 명령에 대하여 인터페이스 주소와

규칙 옵션 (존재한다면 ) 을 추가로 보여준다 .

Page 17: 방화벽  (Firewall)

ICMP 데이터그램 유형유형 번호 Iptables Mnemonic 유형 설명

0 Echo-reply 반향 응답3 Destination-unreachable 목적지 도달 불가4 Source-quench 발신지 quench5 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 주소 마스크 응답

Page 18: 방화벽  (Firewall)

IP 방화벽 - ipchains

Ipchains 유틸리티

커널 개발버전 2.1.102 부터 공식적으로 IP 방화벽관리도구로서 커널에들어왔다 .

패킷 필터를 통해서 패킷의헤더를 조사해서 설정된규칙에 의해서 해당패킷을 받아들일 것인가 버릴것인가를결정한다

ipchains 의 버전 확인 방법

[root@eve /sbin]# ./ipchains –version ipchains 1.3.9, 17-Mar-1999

체인의 종류 : ‘input’, ‘output’, ‘forward’

Page 19: 방화벽  (Firewall)

IP 방화벽 - ipchains

패킷 필터링 기능을 위한 조건

커널 안에 IP 방화벽 사슬 (Generic IP Firewall Chain) 기능을 갖추고 있어야 한다 .

현재사용하고 있는 커널이 패킷 필터링 기능을 포함하는지 확인하기 위해서는 /proc/net/ip_fwchains 파일이 있는지확인

패킷필터링을 위해추가해야할 설정 옵션

CONFIG_EXPERIMENTAL CONFIG_FIREWALL CONFIG_IP_FIREWALL CONFIG_IP_FIREWALL_CHAINS

Page 20: 방화벽  (Firewall)

Ipchains - 명령어

ipchains 설정 파일 -N : 새로운 체인을 만든다 . -X : 빈 사슬을 지운다 . -P : 내장 사슬에 대한 기본 정책을 변경한다 . -L : 사슬 속에 든 규칙을 나열한다 . -F : 사슬로부터 규칙을 모두 방출한다 . -Z : 사슬 속의 모든 규칙에 대한 패킷 , 바이트 카운터 값을 0 으로 설정한다 .

ipchains 내의 규칙 설정 방법 -A : 사슬에 새로운 규칙을 추가한다 . -I : 사슬 속 어딘가에 새로운 규칙을 삽입한다 . -R : 사슬 속 특정 위치의 규칙을 교체한다 . -D : 사슬 속의 특정 규칙을 삭제한다 .

Page 21: 방화벽  (Firewall)

Ipchains - 명령어

패킷 특성 옵션

-s : 패킷의 발신지를 명시한다 -d : 패킷의 도착지를 명시한다 -p : 패킷의 프로토콜을 명시한다 -I : 규칙을 적용할 인터페이스 이름을 명시한다 -y : 접속 요청 패킷인 SYN 패킷을 허용하지 않는다 -f : 두 번째 이후의 조각에 대해서 규칙을 명시한다

규칙의추가나삭제는추가 (-A), 삭제 (-D) 명령을 사용한다 .

Page 22: 방화벽  (Firewall)

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

Page 23: 방화벽  (Firewall)

Ipchains - 예제

새로운 체인 만들기 # ipchains -N test

체인 지우기 # ipchains -X test 체인 비우기

# ipchains -F forward사슬 내용 보기

# ipchains -L input # ipchains -L test # ipchains -v -L input

Page 24: 방화벽  (Firewall)

Netfilter와 iptables( 커널 2.4)

체크섬 Demasq?sanity Input체인

로컬프로세스

Output체인

Forward체인Masq?

라우팅결정

IP 체인의 데이터그램 처리 체인

Page 25: 방화벽  (Firewall)

Netfilter와 iptables( 커널 2.4)

체크섬 sanity

Input체인

로컬프로세스

Output체인

Forward체인

라우팅결정

Netfilter 내의 데이터그램 처리 체인

라우팅결정

Page 26: 방화벽  (Firewall)

IP 방화벽 - iptables

Iptables 유틸리티

리눅스 IPv4 방화벽을 설정하는 명령어

iptables 의 버전을 확인하는 방법

# iptables --version iptables 1.2.4

커널은 3 가지의 방화벽체인 (chain) 을 기본적으로 가지고 패킷 필터링을 시작한다 .

체인이라 부르는 이 3 가지는 입력 (Input), 출력 (Output), 전달 (Forward) 이다 .

Page 27: 방화벽  (Firewall)

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)

Page 28: 방화벽  (Firewall)

Iptables – 매개변수

-s : 패킷의 발신지를 명시한다 .(--source) -p : 패킷의 프로토콜을 명시한다 .(--protocol) -d : 패킷의 도착지를 명시한다 .(--destination) -i : 규칙을 적용할 인터페이스 이름을 명시한다 .(--interfa

ce) -j : 규칙에맛는 패킷을 어떻게처리할 것인가를 명시한다 .

(-jump) -y : 접속 요청 패킷인 SYN 패킷을 허용하지 않는다 .(--sy

n) -f : 두번째이후의 조각에 대해서 규칙을 명시한다 .(--frag

ment)

Page 29: 방화벽  (Firewall)

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 옵션이 같은 경우의 패킷을 검사한다 .

Page 30: 방화벽  (Firewall)

Iptables 의 확장

UDP 확장 이 확장은 '--protocol udp'가 지정되고 적용이 저정되지

않으면 자동으로 적재된다 . 이것은 '--source-port', '--sport', '--destination-port', '-dport'를 지원하고 내용은 TCP 설명에서 자세히 나왔다

ICMP 확장 --icmp-type : '!' 옵션이 선행될 수 있다 . 이후에 ICMP 타입의 이름

('host-unreachable') 이나 숫자형태 ('3'), 또는 숫자형태와 코드 ('/'로 분리 예 . '3/3') 의 형 태가 사용된다 . 사용할 수 있는 ICMP 형태의 이름의 리스트는 '-p icmp --help' 하면 나타난다 .

Page 31: 방화벽  (Firewall)

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

Page 32: 방화벽  (Firewall)

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

Page 33: 방화벽  (Firewall)

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

Page 34: 방화벽  (Firewall)

Iptables - 예제

새로운 체인 생성

# iptables -N test

체인 제거 # iptables -X test 체인 비우기

# iptables -F forward