Cisco ASA 방화벽(2) - SSH, ASDM(GUI Firewall), ACL(Access Control List), Syn Flooding 방어
## 2. SSH (Secure SHell) ##
* TCP 포트 22번 사용 / 암호화해서 주고받음 / Username이 있어야 동작을 한다.
* ASA에서 Telnet과 다르게, Security-level이 낮은 Interface에서도 SSH 접근이 가능하다.
ASA]
username admin password cisco123
aaa authentication ssh console LOCAL
crypto key generate rsa modulus 1024
## ras는 암호화해서 어떻게 주고받을지 고민하던 3 사람의 앞 이니셜임 ㅎㅎ..
ssh 200.1.1.0 255.255.255.0 Inside
ssh 1.1.100.2 255.255.255.255 Outside
show int ip br
## IP가 제대로 들어가 있다.
## [ssh2] - [200.1.1.254]
ID : admin
PW : cisco123
GNS3]
Win701과 SW가 연결된 선 캡처
tcp.port==2
막 주르륵 뜬다.
CE] - 여기서 접근을 하려면
ssh -l admin 1.1.100.1
## telnet과 다르게 Security-level이 낮은쪽에서 높은쪽으로도 접근이 된다
##Password : cisco123
## 3. ASDM(cisco Adaptive Security Device Manager) ##
GUI 모드로 실행해보자
* ASDM 방식은 Telnet / SSH 와 다르게 GUI 환경으로 ASA를 관리할 수 있는 접속방식이다.
* ASDM을 사용하기 위해서는 TFTP 사용, ASA의 Flash 메모리에 ASDM 바이너리 파일을 업로드 시켜야 한다.
이후 ASA에 Web 서비스를 활성화시키고, Client에서 Web Browser를 사용하여 접근이 가능하다.
이제 ASA의 'Gigabit 3' 단자를 관리용으로 할당해보자.
ASA]
conf t
int g 3
desc ##Management Interface##
nameif Management
ip add 192.168.1.254 255.255.255.0
security-level 100
management-only
no shut
exit
## 텔넷과 SSH 설정을 초기화하기
clear configure telnet
clear configure ssh
ssh 192.168.1.0 255.255.255.0 Management
Win702] - Management PC로 사용할 것임.
## VMnet 9번
## 게이트웨이로 Ping 가는지 확인
ping 192.168.1.254
위의 메뉴에서 [VM] - [VM Update Tool]해서 업데이트하기. ==> VMware로 아이콘을 끌어올 때 사용하기 위해서
ASA]
copy tftp: flash
192.168.1.1 ## Win702 Tool로 지정
asdm-649.bin ## 하고 그냥 엔터하면 ASA로 복사가 된다.
dir /all ## 전송된 것이 보여야 한다.
## 이렇게 하면 에러가 뜬다ㅎㅎ. Win702 Management PC에서 TFTP Server를 켜지 않고 복사하면 당연히 복사 안됨.
아래와 같이 접속 자체가 안된다.
## GUI 모드로 전환 !! ##
ASA]
username admin password cisco123
asdm image flash:asdm-649.bin
http server enable
http 192.168.1.1 255.255.255.255 Management
## 이러면 ASDM이 구동한다!!
Win702]
## Management PC에서의 Internet은 JAVA 기반이므로 JAVA 설치!
## Ping 잘 가나 확인
## Chrome 쓰지 말고, 익스플로어로 접속. 그러면 인증서 페이지가 뜰 것임.
https://192.168.1.254
## 이게 ASDM이다. 방화벽 System에 접속하였음.
## ASA ACL (Access Control List) ##
* ASA는 기본적으로 Security-level이 낮은 방향에서 높은 방향으로 전송되는 트래픽은 모두 차단된다.
만약 특정 트래픽에 대해서 level이 높은 방향으로 접근을 해야 하는 경우 관리자가 Access-list를 사용하여
접근을 허용해야 한다.
* ASA의 기본적인 L3/L4 패킷 제어는 'Access-list'를 사용하고,
Application(L7) 계층 제어 및 검사(DPI)는 'MPF(Modular Policy Framework)'를 사용한다
* ASA의 Access-list 설정 방식은 Router와 거의 동일하다. 차이점은 다음과 같다.
1) ASA의 경우 Standard CL은 패킷 필터링 용도가 아니기 때문에 Extended ACL을 사용한다.
## 우리가 NAT 돌릴 때 Access-list 1 했던 것이 Standard이다!!
2) ASA는 Numbered ACL은 지원되지 않고, named 방식만 지원한다.
## 그럼 이름을 왜 써주느냐? named의 장점은 '수정이 가능하다는 점임!!"
3) Wildcard mask가 아니라 Netmask를 사용한다.
Ex1> Outside에서 DMZ에 위치한 다음 서비스들에 대해 접근을 허용하시오.
- DNS 서버(100.1.1.250)
- Web 서버(100.1.1.251)
- IPMP (100.1.1.0/24)
## 현재 Kali에서 DMZ 쪽으로 접근을 하지 못한다.
ns lookup
www.kedu.edu
## 그래서 접근을 하게 해주려면
ASA]
access-list OUT->IN extended permit udp any host 100.1.1.250 eq 53 ## 이름풀이 되게
access-list OUT->IN extended permit tcp any host 100.1.1.250 eq 80
access-list OUT->IN extended permit icmp any 100.1.1.0 255.255.255.0 ## ping 되게
출발지 목적지 포트넘버 프로토콜
access-group OUT->IN in interface Outside
show access-list
Kali]
## 이제 Kali에서 접근이 가능함!!
vi /etc/resolv.conf
service networking restart
nslookup
>www.kedu.edu
Win702]
[configuration] - [Access Rules]
## GUI로 방화벽 구현(추가/삭제/수정) ##
Ex1> Kali에서 허용된 서비스들의 접근을 확인 후 다음 조건에 따라
Access-list를 수정하시오.
* Outside에서 DMZ로 전송되는 ICMP 차단.
* Outside에서 DMZ의 FTP 서버 접속 허용.
<방법 1 - GUI>
<방법 2 - ASA>
ASA]
no access-list OUT->IN line 3 permit icmp any 100.1.1.0 255.255.255.0
access-list OUT->IN line 3 permit tcp any host 100.1.1.251 eq 21
show access-list
Kali]
ping 100.1.1.250 ## 이제 Ping은 안된다!
## Ping 허용해보기
## 이제 4번에 ICMP가 생겼고, Ping이 된다.
ping 100.1.1.250
## ASA Access-list log ##
* Router의 경우 Access-list에 의해서 차단되는 패킷에 대한 log 메시지를 확인하기 위해 [log] 혹은 [log-input] 옵션을 사용한다. 반면에 ASA의 경우 별도의 log 관련 옵션을 사용하지 않아도 [logging enable] 명령어로 방화벽 자체의 log를 확인하게 되면, 차단되는 패킷들의 log를 확인할 수 있다.
logging console 4
logging enable
* 위와 같이 log 메시지를 발생시키는 경우 문제점은, 차단되는 packet마다 각각 log 메시지가 발생된다는 점이다.
만약 외부에서 DDoS와 같은 Flooding 공격이 발생되고 log를 확인하는 순간 수많은 log 메시지가 생성되면서
장비에 과부하가 발생될 수 있다.
이러한 문제점을 해결할 수 잇는 방법은 차단되는 Packet마다 log를 발생시키는 것이 아니라, 일정 시간동안
차단된 Packet의 숫자를 통계치로 log를 발생시키도록 설정하는 것이다.
## 계속 log 나오는걸 취소하려면
no logging on 하면 된다.
ASA]
access-list OUT->IN deny ip any any log 4 interval 60
## level 4 이하의 log 메시지를 60초 간격마다 통계치를 보여 달라는 의미이다.
## 그리고 GUI에서 icmp 방화벽 차단 후 Kali에서 Ping!!
Kali]
ping 100.1.1.250
##ASA에서 log가 나타난다!!
## Object_Group ##
1. Object
특정 Network 혹은 Service를 Object로 정의하여 사용이 가능하며, Network와 Servcie object로 구분한다.
Ex1> 다음 IP 대역을 'Network-Object'로 설정하시오.
200.1.1.0/24 | 영업부 |
200.2.2.0/24 | 관리부 |
200.2.3.0/24 | 인사부 |
200.2.4.0/24 | IT 지원팀 |
100.1.1.250 | DNS |
100.1.1.251 | Web |
100.1.1.252 | FTP |
100.1.1.253 |
ASA]
object network Sales
subnet 200.1.1.0 255.255.255.0
object network MGR
subnet 200.2.2.0 255.255.255.0
object network HR
subnet 200.2.3.0 255.255.255.0
object network IT_Support
subnet 200.2.4.0 255.255.255.0
object network DNS_SVR
host 100.1.1.250
object network WEB_SVR
host 100.1.1.251
object network FTP_SVR
host 100.1.1.252
object network MAIL_SVR
host 100.1.1.253
Refresh now - [Firewall] - [Object]
Ex2> FTP, DNS Service Object를 설정하시오.
object service DNS_P
service udp destination eq 53
object service FTP_P
service tcp destination eq 21
Refresh now - [Firewall] - [Object]
2. Object-Group
* 다수의 Network / Protocol / Service 등을 묶어서 하나의 Object-Group으로 정의할 수 있다.
또한 기존 Object / Object-Group을 포함하는 것도 가능하다.
Ex1> 다음 Network 대역을 본사 Network 대역으로 Object-Group을 사용해
정의하시오.
network-object 200.1.1.0/24 | 영업팀 |
network-object 200.2.2.0/24 | 관리팀 |
network-object 200.2.3.0/24 | 인사팀 |
network-object 200.2.4.0/24 | IT 지원팀 |
ASA]
conf t
Object-Group network HQ_IN_NET
network-object object Sales
network-object object MGR
network-object object HR
network-object object IT_Support
-or-
Object-group network HQ_IN_NET
network-object 200.1.1.0 255.255.255.0
network-object 200.2.2.0 255.255.255.0
network-object 200.2.3.0 255.255.255.0
network-object 200.2.4.0 255.255.255.0
## Verify ##
clear configure object
show run object-group
Ex2> 다음 조건에 맞도록 Service Object-Group를 설정하시오.
- Web Service : HTTP, HTTPs
- Mail Service : SMTP, POP3, IMAP
ASA]
conf t
Object-group service WEB_S
service-object tcp destination eq 80
service-object tcp destination eq 443
exit
Object-group service MAIL_S
service-object tcp destination eq 25
service-object tcp destination eq 110
service-object tcp destination eq 143
show run object-group
## 기존 설정 삭제 ##
(이건 그냥 알려준거고 아래 명령어들을 위해 지우면 안된다)
ASA]
clear config access-list
show run access-list
show run access-group
## Object & Object-group를 사용한 Access-list 설정 ##
(정책을 총 6단계에 걸쳐서 설정해보자)
* HQ Inside에는 영업부/관리부/인사부/IT 지원팀이 모두 포함되어 있다고 가정한다.
Inside -> DMZ | DNS, WEB, FTP, Mail |
Inside -> Outside | 모든 서비스 허용 |
DMZ -> Inside | 모든 접근 차단 |
DMZ -> Outside | DNS, SMTP |
Outside -> DMZ | DNS, WEB, Mail |
Outside -> Inside | 모든 접근 차단. |
1. Inside -> DMZ : DNS, WEB, FTP, Mail
ASA]
## access-list INSIDE_IN permit ? : 뒤에 Protocol을 쓰라고 함.
## 말로만 하면 이해가 안되므로, 직접 타이핑치면서!!
## group HQ_IN_NET : 출발지
DNS_SVR : 목적지
DNS_P : 프로토콜
access-list INSIDE_IN permit object DNS_P object-group HQ_IN_NET object DNS_SVR
access-list INSIDE_IN permit object-group WEB_S object-group HQ_IN_NET object WEB_SVR
access-list INSIDE_IN permit object FTP_P object-group HQ_IN_NET object FTP_SVR
access-list INSIDE_IN permit object-group MAIL_S object-group HQ_IN_NET object MAIL_SVR
#나머지는 전부 거부!!
access-list INSIDE_IN deny ip object-group HQ_IN_NET 100.1.1.0 255.255.255.0 log 4 interval 60
access-group INSIDE_IN in interface Inside
2. Inside -> Outside : 모든 서비스 접근 허용
ASA]
access-list INSIDE_IN permit ip any any
access-group INSIDE_IN in interface Inside
3. DMZ -> Inside : 모든 서비스 접근 차단
* 묵시적으로 'deny ip any any' 가 생략되어 있다.
4. DMZ -> Outside : DNS, SMTP 서비스
ASA]
access-list DMZ_IN permit object DNS_P 100.1.1.0 255.255.255.0 any
access-list DMZ_IN permit tcp 100.1.1.0 255.255.255.0 any eq 25
access-list DMZ_IN deny ip any any log 4 interval 60
access-group DMZ_IN in interface DMZ
5. Outside -> DMZ : DNS, WEB, MAIL
ASA]
access-list OUTSIDE_IN permit object DNS_P any object DNS_SVR
access-list OUTSIDE_IN permit object-group WEB_S any object WEB_SVR
access-list OUTSIDE_IN permit object-group MAIL_S any object MAIL_SVR
access-list OUTSIDE_IN deny ip any any log 4 interval 60
access-group OUTSIDE_IN in interface Outside
6. DMZ -> Inside : 모든 서비스 접근 차단
* 묵시적으로 'deny ip any any' 가 생략되어 있다.
Win701]
## 정책대로 다 잘 되는지 확인.
## 마지막, ASA Packet-Tracer 명령어 ##
* ASA에서 관리자가 설정한 보안 정책이 정상적으로 동작하는지 확인할 수 있는 명령어이다.
* 트래픽 전송 경로 중간에 Firewall이 위치한 경우, 만약 이 트래픽 전송에 문제가 발생하면 가장 먼저 Firewall 정책을
확인할 필요가 있다. 이 경우 모든 Filtering 정책 명령어를 하나씩 확인하는 것이 아니라,
[Packet tracer] 명령어를 사용하게 되면 Firewall 정책 문제인지, 혹은 다른 이유인지를 쉽게 확인이 가능하다.
ASA]
conf t
packet-tracer input Inside udp 200.1.1.1 50000 100.1.1.250 53
## Inside에서 udp면 DNS인데, 이런게 가면 방화벽에서 허용할건지 안할건지 미리 확인이 가능함.
## Inside 단자로 수신한 트래픽중 출발지 200.1.1.1:50000에서 목적지 100.1.1.250:53 으로 전송이 가능이 가능한지
Firewall에서 확인하는 명령어이다. (50000은 출발지 'Port Number'이다)
1번~1024번까지는 이미 정해진 Port Number이고, 그 이후는 정해지지 않은 사용가능한 Port Number를 뜻한다.
## 인터넷이 되는지 확인
packet-tracer input Inside tcp 200.1.1.1 40000 100.1.1.251 80
* Test 결과 마지막 줄에서 최종적인 Allowed 혹은 Drop 여부를 알려주고, 만약 Drop이 되는 경우 간단한 이유도
설명된다. ICMP의 경우 Port 번호가 사용되지 않고, 출발지 정보 뒤에 <Type> <Code> 정보를 입력한다.
## Time-range 옵션 ##
Time-range 옵션을 사용할 경우, Access-list가 활성화 되는 시간을 정의할 수 있다.
ASA]
## Time-range 걸기
방법1] ASA
Time-range Work_Time
periodic weekdays 09:00 to 18:00
## 만약 이게 어렵다 싶으면 GUI로 걸면 된다.
방법2] GUI
## 근데 학습하는 과정이므로 GUI 말고, ASA로 해보기.
show clock
show access-list ## www
no access-list OUTSIDE_IN line 2 extended permit object-group WEB_S any object WEB_SVR
access-list OUTSIDE_IN line 2 permit object-group WEB_S any object WEB_SVR time-range Work_Time
Kali]
www.kedu.edu 접속
## Kali에서 현재 인터넷에 접근할 수가 없음. 뺑뺑 돌면서 계속 찾고만 있다. 사진에서는 잘 못 찾겠지만 계속 빨간원이
돌고있으면서 찾고있음.
시간을 Work-time으로 바꿔주자.
show access-list OUTSIDE_IN
clock set 16:31:00 16 july 2021
show clock
show access-list OUTSIDE_IN
## TCP 트래픽 제어 - SYN Flooding 공격 방어 ##
## Web서버야 너 80번 열어.
내가 접속할테니까 포트 열어라. -> SYN만 계속 보냄 -> 그래서 서버가 포트를 계속 열고 기다리게해서
서버를 바쁘게하는 해킹임.
## Kali(Hacker)에서 Web Server를 공격을 해보자 ##
Kali]
hping3 --rand-source www.kedu.edu -p 80 -S ## Port number가 80번이다. S는 Sync flooding을 해라.
## 지금이 16:38이므로 9시부터 18시 사이니까 접속이 가능하다.
## SYN만 계~속 간다!! 이게 SYN Flooding 공격임.
CentOS]
netstat -lntp ## netstat (전체정보), netstat -lntp (요약정보)
## 전부 SYN_RECV 상태인것을 확인할 수 있다. (SYNC_RECEIVE)
Kali]
Cntl+C ## 공격중단
CentOS]
netstat
## 다시 확인!!
## 아까와는 다르게 현격히 적은 숫자의 'SYN_RECV'가 나타났다. 10개 이하면 웹 페이지에서 정상적인 상태이다.
## SYN Flooding 방어 ##
ASA]
class-map HTTP_C
match port tcp eq 80
policy-map Deny_Syn_Flood
class HTTP_C
set connection embryonic-conn-max 10 ## 80번 포트를 half open 상태로 10개까지만 허용하겠다! 라는 뜻임.
## 열어달라고 하면 원래 'Half open'상태로 기다리게 되는데 이것을
무한정으로 기다리지 않고 10개까지만 기다린다는 뜻임.
service-policy Deny_Syn_Flood interface Outside
Kali] - 재공격
hping3 --rand-source www.kedu.edu -p 80 -S
## SYN 10개마다 잠시의 소강상태가 생겨야 한다.