ACL (Access Control List) : 접근제어목록
ACL은 3계층 정보와 3계층 이상의 정보, 4계층 정보를 이용하여
트래픽을 식별하거나 필터링(방화벽) 하는 기능
트래픽을 식별하는 기능은 자체로써는 의미가 없고,
식별된 혹은 식별하여 분류된 트래픽을 다른 기능에서 활용하게 됩니다.
즉 NAT, VPN, QoS, PBR 등에 사용됩니다.
트래픽을 필터링하는 기능은 방화벽의 기본 기능으로써, 식별된 트래픽을 허용하거나 차단하는 기능입니다.
Standard Access Control List
- Standard ACL은 출발지IP주소만 확인하고 동작합니다.
(부분제어 불가 - 텔넷은 비허용하고 SSH를 허용하는 등의 동작이 불가능 합니다)
가능하면 수신지에서 가까운곳에 사용하는 것이 좋습니다.
트래픽을 식별하는데 주로 사용됩니다.
Extended Access Control List
- Extended ACL은 프로토콜, 출발지IP주소, 목적지IP주소, 포트번호(TCP/UDP), 해당 프로토콜 필드값
트래픽을 식별하고 필터링하는데 주로 사용됩니다.
Numbered Access Control List
- Numbered ACL은 숫자로 ACL을 구분하며, 정해진 숫자에 따라 Standard와 Extended로 나뉩니다.
숫자만 보고는 Standard ACL인지 Extended ACL인지 알 수 없다는 단점이 있습니다.
그래서 약속으로 1~99까지는 Standard,
100~199는 Extended로 사용합니다.
Named Access Control List
- Named ACL은 숫자포함 문자로 ACL을 구분하며, ACL작성시 명령(standard, extended)에 의해 구분됩니다.
이름을 지을 때 관련된 이름을 지어서 ACL의 종류를 구분하도록 할 수 있습니다.
ex)
std_lan1_permit
ext_http_deny
인바운드와 아웃바운드
인바운드는 라우터에 들어가서 처리하기 전에 식별하는 방법이고
아웃바운드는 라우터에서 처리한 후 내보내기 전에 식별하는 방법입니다.
인바운드로 처리가 가능한 제어라면 아웃바운드보다
라우터에서 처리하기 전인 인바운드에서 처리하는 것이 유리합니다.
ACL의 적용 규칙
1. 순차적으로 일치하는지 확인
2. 일치하면 하위의 규칙은 무시함
3. 좁은범위, 작은것 -> 넓은범위, 큰것 순으로 생성
4. 인터페이스에 적용
방화벽의 규칙
1. 모든것을 차단하고 부분 허용
2. 모든것을 허용하고 부분 차단
기본적으로는 1번을 주로 사용하며,
ACL도 기본값은 1번입니다.
ACL 실습1
R3라우터로 들어오는 172.16.1.0/24 트래픽 중
172.16.1.55 트래픽만 차단하세요
(ping / telnet / ssh로 테스트)
R1의 f0/0, s1/0, R2의 f0/0, s1/0중
어디에 ACL을 설정하는 것이 좋을까?
=> 가능하면 가장 수신지에 가까운 R2 f0/0이 좋습니다.
R1에서 설정하면 다른 라우터를 통해 빠져나가거나
다른 수신지와 통신하는 것도 방해하므로
R1에 설정하는 것은 올바르지 않습니다.
R1)
conf t
int f0/0
ip add 172.16.1.254 255.255.255.0
no sh
int s1/0
ip add 172.16.13.1 255.255.255.0
no sh
router ospf 1
network 172.16.1.0 0.0.0.255 area 1
network 172.16.13.0 0.0.0.255 area 1
end
copy run start
R3)
conf t
int f0/0
ip add 172.16.3.254 255.255.255.0
no sh
int s1/0
ip add 172.16.13.3 255.255.255.0
no sh
router ospf 1
network 172.16.3.0 0.0.0.255 area 1
network 172.16.13.0 0.0.0.255 area 1
end
copy run start
conf t
# access-list [ACL번호] [permit|deny] [대상IP] [와일드마스크]
access-list 1 deny host 172.16.1.55
# access-list 1 deny 172.16.1.55 0.0.0.0 과 같은 명령어
access-list 1 permit 172.16.1.0 0.0.0.255
int f0/0
ip access-group 1 out
end
copy run start
# ACL은 규칙을 먼저 만든 후 인터페이스에 적용해야 합니다.
# 인터페이스에 적용하고 규칙을 수정해도 적용이 되지 않습니다.
ACL 실습2
호스트 PC0 을 외부와 통신 차단하기
R1)
access-list 99 deny 172.16.1.100 0.0.0.0
# host 172.16.1.100 도 동일한 명령
access-list 99 permit any
# 이 명령을 써주어야 리스트를 제외한 나머지 장비가 통신이 가능합니다.
# access-list 99 deny any
# access-list를 작성하면 마지막에 자동으로 들어가는 명령
# 위의 permit any를 써주지 않으면 이 명령때문에 나머지 호스트도 통신이 거부됩니다.
do show access-list
# access list를 모두 보여주는 명령
int g0/0
ip access-group 99 in
int s0/0/0
ip access-group 99 out
이제 외부로의 통신이 PC0만 R1에서 차단되는 것을 확인할 수 있습니다.
새 네트워크를 추가하고 같은 조건으로 만들기
R1)
int g0/0
no in access-group 99 in
int s0/0/0
ip access-group 99 out
R2)
ip route 172.16.2.0 255.255.255.0 2.2.2.1
# 새 네트워크를 추가했으므로 R2에 라우팅 설정 추가
특정 웹서버에만 접속 가능하도록 만들기
172.16.1.0/24 네트워크를 192.168.2.150 의 웹서버에만 접속 가능하게 하기
그 외 트래픽은 허용
R1)
access-list 100 permit tcp 172.16.1.0 0.0.0.255 host 192.168.2.150 eq 80
access-list 100 deny ip 172.16.1.0 0.0.0.255 host 192.168.2.150
access-list 100 permit ip any any
# access-list 100 deny ip any any
# 80번 포트만 접속 가능하게 설정하면 웹서버에만 접속이 가능하고
# 그외에는 접속이 안된다 (ping 포함)
PC1에서 확인했을 때 웹 서버에는 접속이 가능한데 ping 수신은 되지 않는것을 확인할 수 있습니다.
위의 ACL을 수정하여 새 규칙 추가하기
172.16.2.0/24 네트워크에서는
192.168.2.150에는 접속이 불가능하고
192.168.2.200에는 FTP접속만 가능하도록 만들기
R1)
ip access-list extended 100
25 deny ip 172.16.2.0 0.0.0.255 host 192.168.2.150
26 permit tcp 172.16.2.0 0.0.0.255 host 192.168.2.200 eq 21
27 deny ip 172.16.2.0 0.0.0.255 host 192.168.2.200
위와같이 설정하면 192.168.2.150은 접속 불가,
192.168.2.200은 ftp만 접속 가능하고 그외에는 접속 불가한 것을 확인할 수 있습니다.
들어오는 IP는 차단하지만 나가는 ping은 가능하도록 설정하기
외부에서 172.16.2.0/24 네트워크로 향하는 모든 트래픽 차단
172.16.2.0/24 네트워크에 외부로 Ping 허용
그 외 트래픽 모두 차단
R1)
access-list 110 deny ip any 172.16.2.0 0.0.0.255
access-list 110 permit ip any any
int s0/0/0
ip access-group 110 in
ip access-list extended 110
5 permit icmp any 172.16.2.0 0.0.0.255 echo-reply
특정 웹서버와 FTP만 접속 가능하도록 설정하기
172.16.2.0/24 네트워크에서 192.168.2.200 서버에 웹접속과 FTP접속 가능하도록 ACL 수정
R1)
ip access-list extended 110
7 permit tcp host 192.168.2.200 eq 80 172.16.2.0 0.0.0.255
8 permit tcp host 192.168.2.200 eq 21 172.16.2.0 0.0.0.255
실습2
NAT와 ACL을 함께 걸면?
NAT)
ip access-list standard std-no-private-ip
deny 10.0.0.0 0.255.255.255
deny 172.16.0.0 0.15.255.255
deny 192.168.0.0 0.0.255.255
deny 127.0.0.0 0.255.255.255
permit any
int s1/0
ip access-group std-no-private-ip out
exit
# 모든 사설 IP를 차단하는 ACL
no ip nat pool TestPool 10.1.1.101 10.1.1.102 netmask 255.255.255.252
no ip nat inside source list 1 pool TestPool overload
no ip nat inside source static tcp 172.31.0.100 23 10.1.1.100 23333 extendable
no ip nat inside source static tcp 172.31.0.100 23 10.1.1.150 23 extendable
# 테스트를 위해 이전에 작성했던 NAT을 모두 삭제
ip nat pool Testpool 3.3.3.1 3.3.3.2 netmask 255.255.255.252
ip nat inside source list 1 pool Testpool overload
# IP를 3.3.3.1 - 3.3.3.2로 바꾸는 NAT 적용
ISP)
ip route 3.3.3.0 255.255.255.252 s1/0 10.1.1.1
ip access-list standard 2
10 permit 3.3.3.0 0.0.0.3
# 역시 테스트를 위해 NAT를 재작성
ACL에서 사설 IP를 모두 차단하도록 설정했으나
NAT에서 먼저 IP가 3.3.3.2로 변환되어 차단되지 않고 전송이 잘 되는것을 확인할 수 있습니다.