Download ppt - 방화벽 (Firewall)

Transcript
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


Recommended