강좌
클라우드/리눅스에 관한 강좌입니다.
네트워크 분류

라우터 ingress filtering

작성자 정보

  • 구돌 작성
  • 작성일

컨텐츠 정보

본문

라우터 ingress filtering

 

한 조사에 의하면 서비스거부(DoS)공격의 60%가 사설 IP등 소스IP를 위조한 공격이었다고 한다.

 

그렇다면 사설IP등 인터넷에서 라우팅 되지 않는 IP대역을 소스로 한 패킷을 인터넷의 가장 앞단에 위치하고 있는 라우터에서 필터링한다면 그만큼의 서비스거부공격을 차단하는 효과가 있을 것이다.

 

이를 위해서 access-list를 이용한 ingress filtering을 이용하면 되는데, ingress filtering이란 라우터 내부로 inbound되는 패킷의 소스 IP를 체크하여 필터링하는 것을 뜻한다.

 

필터링 항목은 각각의 특성에 따라 다르지만

 

- 사설(private)등 인터넷에서 라우팅 되지 않는 IP대역

- udp 1434등 정상적인 서비스에서 사용하지 않는 악성포트

- 라우터 내부에서 사용하는 네트워크 대역

등을 필터링하면 된다.

 

 

아래 예제에서 0.0.0.0부터 240.0.0.0 0.0.0.255까지는 일반적으로 라우팅 되지 않는 IP 대역이므로 필터링한 것이고 211.1.1.0 0.0.0.255는 라우터 내부 네트워크에서 211.1.1.0/24 대역을 사용한다고 가정하고 적용한 것이다.

 

, 내부 네트워크에서 211.1.1.0 대역을 사용할 경우 이 IP 대역을 소스로 한 트래픽이 라우터를 통해 나갈 수는 있어도 이 IP 대역을 소스로 한 트래픽이 들어올 수는 없기 때문이다.

 

이는 외부에서, 목적지 IP와 소스IP를 동일하게 설정한 위조 패킷을 발송하여 시스템을 다운시키는 Land Attack등을 사전에 차단하는 효과도 있다.

 

참고로 최근의 IP할당 내역은 아래 URL에서 확인 가능한데, 아직 예약된 IP 대역도 확인하여 추가적으로 필터링 할 수 있다.

 

그러나 RFC에 지정된 특정 IP대역이 아닐 경우 수시로 할당이 이루어지고 있으므로 적용 시 각별히 주의하여야 한다.

 

 

 

http://www.iana.org/assignments/ipv4-address-space

 

그 이하 부분에는 사용하지 않거나 보안에 취약한 악성포트를 필터링한 예를 보여주고 있다.

 

이중 몇 개만 알아보면 udp/tcp 135~138까지는 최근에 정상적인 서비스로는 거의 사용되지 않으면서도 virus등 가장 스캔이 많이 확인되는 포트이므로 가능한 필터링하는 것이 좋은데, 만약 Windows등에서 네트워크 드라이브를 이용한 공유를 허용하지 않는다면 139도 추가하는 것이 좋다.

 

그리고 RPC로 사용되는 udp 111, 프록시로 사용되어 스캔이 많은 tcp 1080, 3128등도 차단하는 것이 좋다.

 

주로 필터링하여야 할 악성 포트에 대해서는 아래 URL을 참고하기 바란다.

 

 

 

http://www.doshelp.com/trojanports.htm

interface GigabitEthernet2/0

ip access-group 101 in

 

access-list compiled

access-list 101 deny ip host 0.0.0.0 any

access-list 101 deny ip 127.0.0.0 0.255.255.255 any

access-list 101 deny ip 10.0.0.0 0.255.255.255 any

access-list 101 deny ip 172.16.0.0 0.15.255.255 any

access-list 101 deny ip 192.0.2.0 0.0.0.255 any

access-list 101 deny ip 169.254.0.0 0.0.255.255 any

access-list 101 deny ip 192.168.0.0 0.0.255.255 any

access-list 101 deny ip 240.0.0.0 15.255.255.255 any

access-list 101 deny ip 211.1.1.0 0.0.0.255 any // 내부 네트워크대역

access-list 101 deny tcp any any range 1 chargen

access-list 101 deny udp any any eq tftp

access-list 101 deny tcp any any eq finger

access-list 101 deny udp any any eq sunrpc

access-list 101 deny udp any any range 135 138

access-list 101 deny tcp any any range 135 138

access-list 101 deny tcp any any range exec 518

access-list 101 deny tcp any any eq cmd

access-list 101 deny tcp any any eq uucp

access-list 101 deny tcp any any range 6000 6099

access-list 101 deny tcp any any range 12345 12346

access-list 101 deny tcp any any range 54320 54321

access-list 101 deny tcp any any eq 27665

access-list 101 deny udp any any eq 31335

access-list 101 deny udp any any eq 27444

access-list 101 deny tcp any any eq 33270

access-list 101 deny tcp any any eq 39168

access-list 101 deny tcp any any eq 6669

access-list 101 deny tcp any any eq 2222

access-list 101 deny tcp any any eq 7000

access-list 101 deny tcp any any eq 161

access-list 101 permit udp host 211.47.64.3 host 211.1.1.3 eq 161

access-list 101 deny udp any any eq 161

access-list 101 deny udp any any eq 1434

access-list 101 permit ip any any

 

위의 룰은 실제로 필자가 관리하는 라우터에 적용하여 사용하고 있는 룰 중 일부인데, access-list 101번에서 앞부분은 IP에 대해서, 뒷부분은 포트에 대해서 필터링 설정을 한 것이다.

 

물론 어떤 것이 먼저 오든 관계는 없으며 단지 extended acl을 사용하면 IP와 포트를 함께 사용할 수 있다는 것을 알 수 있다.

 

그리고 SNMP서비스인 udp 161에 대해 살펴보면 특정한 IP(211.47.64.3)에서 특정한 IP(211.1.1.3)로는 트래픽을 허용하지만 나머지 SNMP는 거부하도록 하고 있다.

 

그리고 포트번호를 직접 입력했음에도 config를 살펴보면 특정 포트는 서비스명으로 바뀐 것을 알 수 있는데, 이는 라우터에서 미리 지정된 포트이름으로 변경된 것이다.

 

 

추가적으로 아래는 오래전에 유행했던 전형적인 분산서비스거부(DDoS)공격의 기본 포트를 차단한 예를 보여주고 있다.

 

최근에는 사용되지는 않으므로 참고만 하기 바란다.

 

! the TRINOO DDoS systems

access-list 101 deny tcp any any eq 27665 log

access-list 101 deny udp any any eq 31335 log

access-list 101 deny udp any any eq 27444 log

! the Stacheldraht DDoS system

access-list 101 deny tcp any any eq 16660 log

access-list 101 deny tcp any any eq 65000 log

! the TrinityV3 system

access-list 101 deny tcp any any eq 33270 log

access-list 101 deny tcp any any eq 39168 log

! the Subseven DDoS system and some variants

access-list 101 deny tcp any any range 6711 6712 log

access-list 101 deny tcp any any eq 6776 log

access-list 101 deny tcp any any eq 6669 log

access-list 101 deny tcp any any eq 2222 log

access-list 101 deny tcp any any eq 7000 log

위와 같이 log를 남겼을 경우 환경에 따라 다소의 CPU부하가 유발 될 수도 있으니 적용 시에는 주의하기 바란다.

 

지금까지 IP TCPUDP등에 대해 알아보았는데, 추가적으로, ICMP에 대해 필터링을 어떻게 할 것인지 고민해 보아야 한다.

 

아직까지도 일부 메일링리스트에서는 ICMP필터링에 대해 다소간의 논쟁이 있는데, 어떤 조직에서는 그냥 간단히 모든 ICMP를 필터링하는 경우도 있지만 이러한 경우 몇 가지 문제를 유발할 수 있다.

 

ICMP는 흔히 알고 있는 ping(icmp echo request)만 있는 것이 아니기 때문이다.

 

 

일반적으로 ICMP에 대해서는 아래와 같이 반드시 허용해 주어야 할 몇 가지 타입과 코드를 제외하고는 필터링하는 것도 좋은 방안이다.

 

어떤 ICMP를 허용하고 거부할 것인지는 “7.3.8 각 서비스별 필터링 규칙 설정에서 자세하게 언급하였으므로 참고하기 바라며 아울러 icmp typecode에 대해서는 아래 URL을 살펴보기 바란다.

 

 

 

http://www.iana.org/assignments/icmp-parameters

interface xy

ip access-group 100 in

access-list 100 permit icmp any any echo

access-list 100 permit icmp any any echo-reply

access-list 100 permit icmp any any packet-too-big

access-list 100 permit icmp any any source-quench

access-list 100 permit icmp any any time-exceeded

access-list 100 deny icmp any any

access-list 100 permit ip any any

????[유용한 팁]

[ turbo acl에 대하여 ]

 

IOS 12.1(6)이상에서는 compiled access control list 또는 "Turbo ACL"이라는 것을 제공한다.

 

만약 acl의 목록이 많을 경우 compiled acl을 적용하면 많은 부하를 줄일 수 있는데, 특히 rule5개 이상일 경우에는 compiled acl을 적용할 것을 권장한다.

 

turbo aclenable하려면 다음과 같이 global config 모드에서 "access-list compiled"만 실행하면 된다.

 

만약 제공되지 않는 IOS에서는 없는 명령어라는 메시지가 출력될 것이다.

 

Router# conf tRouter(config)# access-list compiled

 

강사 : 라쿠텐 홍석범 부매니저

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 전체 회원수 59,444 명
  • 전체 게시물 30,916 개
  • 전체 댓글수 11,873 개