OSI 7 Layer
4~7계층이 Service에 해당 ex) L7 Service단에서의 보안
1~3계층이 Network에 해당 ex) ACL
클라우드에서의 보안
1) Security Group
- 서비스를 운영하는 개체 단위에 하나의 보안 그룹을 하나 더 감쌈
- (ex. UDP 안에 DNS(53)를 이용하려면 NACL을 통해 허용되고, Security Group을 또 들어가야 53번 포트로 DNS Query를 요청할 수 있음)
2) NACL
- Network ACL로 1~3계층의 네트워크적으로 필터 기능으로 ACL을 사용함
L7
- http(s) : 80(443), 웹서비스에 대한 요청을 할 때 사용하는 프로토콜(약속)
- SMTP : 25
- DNS : 53
- FTP : 20, 21
* 서비스 : 클라이언트(다수의 요청자)가 원하는 정보를 요청해 서버(최소 1개의 응답자)에서 응답해 주는 과정
-> 1:n 형식(클라이언트는 하나를 요청하겠지만, 서버 입장에서는 어떤 서비스를 요청할지 모르니 다양한 서비스를 운영해야 함=하드웨어적, 소프트웨어적 모두 서비스 가능해야 함)의 다수의 요청을 처리할 수 있어야 함
-> 하나의 서버에서 모든 서비스를 하기 힘드니 특정 기능만 하는 서버를 개발함
(ex. 종합병원(내과, 외과, 산부인과, 안과 등) -> 전문 병원(안과병원, 내과의원, 산부인과여성의원 등))
L4
- L7와 같이 상위계층 프로토콜을 이용하기 위해 지켜져야 하는 전송 프로토콜(TCP/UDP)
TCP
- 전송에 대한 연결성을 확보(수신했는지 보내면서 계속 확인)
- 연결성을 확보하면서 신뢰성이 있기 때문에 전송 속도는 UDP에 비해 느림
- 3-way handshake
UDP
- 전송에 대한 연결성을 맺지 않음(보내기만 하고 수신했는지 확인하지 않음)
- 연결성을 확보하지 않기 때문에 신뢰도는 낮고 전송 속도는 TCP에 비해 빠름
=> L1~L7까지 순차적으로 연결이 되어야 최종적으로 L7 서비스까지 동작함
(반대로 L7 서비스는 되는데 중간 L3 계층에서 ICMP 패킷만 차단은 가능)
TCP Port
1) 0 ~ 1023 : System Port(= Well-known Port)
- http, https, dns, ftp, ssh, smtp 등 서버에 의해서만 할당되는 포트(서비스 제공을 위해 사용되는 포트)
- 각 서비스들에 예약되어 있음, 개인적인 패킷 전송용으로 사용 불가
- ex) 웹서버에 웹 서비스 요청 시 : [S`s IP:80]로 요청함 <-> [C`s IP:(Random Port)]로 응답해 줌
- => Socket 통신(=Socket Connection)
-> ESTABLISHED : 3-way handshake 상태로 열린 상태
TIME_WAIT : 연결된 통신 상태의 장기간 미사용, 곧 FINISH로 끝나고 socket connection 끊김
-> 항상 상대방의 포트번호까지 적어줘야 socket connection이 이루어지는데,
well-knows port는 편의상 생략하고 적는 것
-> 444번 포트번호로 접속하면 잘못된 정보로 접속한거라, socket connection이 이뤄지지 않음
* 윈도우에서 findstr은 리눅스의 grep(egrep은 대소문자 가리지 않고)
- 1024 ~ 49151 : User Port
tcp port number의 최신정보 확인 사이트
https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
<클라우드 하면서 알아두면 좋은 포트 번호>
1) FTP-data(연결용) : 20
2) FTP-control(데이터 전송용) : 21
3) SSH : tcp/22
4) Telnet : tcp/23
5) SMTP(서버끼리의 메일 전송) : 25
6) DNS : udp/53
7) bootps(=DHCP Client) : udp/67
8) bootps(=DHCP Server) : udp/68
9) tftp(작은 단위의 파일 전송) : udp/69
10) http(웹서비스) : tcp/80
11) POP3(클라이언트가 메일 서버에서 내려 받음) : tcp/110
12) sunrpc(=rpc, portmapper) : tcp/111, udp/111
- nfs(2049)(=클라이언트에서는 dnf) 사용할 때 rpc로 접근
13) NTP(타임 서버) : tcp/123, udp/123
14) NETBIOS(윈도우에서 공유폴더 사용 시) : 137, 138, 139(세션 맺을 때)
- 공격 취약점이 많이 노출됨
15) bgp(라우팅 프로토콜, vpn 연결 시 사용) : 179
16) https(보안 웹서비스) : tcp/443
17) 윈도우의 smb 프로토콜(=cifs)(139번과 연관) : 445
18) oracle(오라클 DB 사용 시) : 1521
19) mysql(mysql DB 사용 시) : 3306
20) mssql(MS-SQL DB 사용 시) : 1433
21) ah(vpn 연결시 IPsec) : 50
22) esp(vpn 연결시 IPsec 암호화) : 51
23) isakmp : udp/500
24) rdp(윈도우에 원격 접속 시, 리눅스의 ssh) : tcp/3389
ACL(Access Control List), AL(Access List)
- 조건문 + 허용/거부(permit/deny) + 적용(어느 인터페이스에 적용할건지) + 방향(in/out:인터페이스에 들어오는/나가는)
1) 조건문
(1) L3
- SRC IP, SRC Network
- DST IP, DST Network
(2) Protocol
- IP, ICMP(ping), OSPF, TCP, UDP 등
- => L3(ip)와 Protocol을 조합해 조건문 작성 가능
(3) Port
- TCP : SRC Port -> DST Port
- UDP : SRC Port -> DST Port
- => 클라이언트에서 출발하는 포트는 무작위(랜덤)로 열려서 나감, 목적지 포트는 Well-known Port로 지정되어 있음(ex. 192.168.0.1:55356 -> 8.8.8.8:80)
* 어디서 ACL의 설정을 하면 좋을지를 잘 판단해야 함(검문의 위치)
2) Standard / Extended (cisco의 경우)
(1) Standard
- SRC IP, SRC Network로만 작성 가능 (ex. access-list 1 permit 172.16.0.0 0.0.255.255)
- 분류의 목적으로 사용
- 형식
access-list [그룹번호 1~99] [SRC IP] [SRC Network]
ex)
access-list 1 permit 172.16.0.0. 0.0.255.255
access-list 1 permit 172.31.0.0. 0.0.1.255
access-list 1 permit 192.168.0.0 0.0.255.255
-> 172.16.0.0에서 출발하는 패킷을 0.0.255.255 network(wildcard)에 맞게 검사
int fa 0/0
ip access-group 1 in
-> 위에서 설정한 access-list 1번 그룹에 설정한 정책을 int fa0/0에 들어오는 패킷을 검사
(2) Extended
- 모든 조건 조합 가능(1세대 방화벽)
- SRC IP, SRC Network, DST IP, DST Network, Protocol 등 다양한 조건을 조합하면 다양하게 사용 가능
- 보안의 목적으로 사용
- 형식
access-list [그룹번호 100~199] [permit/deny] [protocol] [SRC IP] [DST ip]
ex)
access-list 100 permit ip any any
-> any(0.0.0.0/0)에서 출발해서 도착지 any(0.0.0.0/0)로 가던지 ip 패킷을 검사
access-list 100 permit tcp any any eq 80
-> any(0.0.0.0/0)에서 출발해서 도착지 any(0.0.0.0/0)로 가던지 tcp 80번 포트로 가는 패킷을 검사
int fa 0/0
ip access-group 1 in
-> 위에서 설정한 access-list 100번 그룹에 설정한 정책을 int fa0/0에 들어오는 패킷을 검사
* any
0.0.0.0 255.255.255.255(W.B) -> 모든 비트를 검사하지 마라(모든 ip 허용하는 개념)
* host 172.16.1.1
172.16.1.1 0.0.0.0 -> 모든 비트를 검사 해라(단 하나의 ip만 허용하는 개념)
access-list 100 permit 172.16.0.0 0.0.3.255
-> 172.16.0.0/22의 네트워크 대역인지 검사해라
(172.16.0.0 0.0.3.255에서 W.B의 +1해서 ~172.16.3.0/22인지 검사해라) -> 이거 헷갈려 슈발
그냥 와일드카드 비트 보고 0.0.3.255인데 어디까지 검사하는지를 계산해서 서브넷마스크를 구해서 그 네트워크 대역이 맞는지 검사하는게 편할듯
172.16.0.0 0.0.9.255
-> 172.16.0.0~172.16.1.255 또는 172.16.8.0~172.16.9.255인지 검사해라
00000000.00000000.00001001.11111111
(뭐가 와도 상관없는 비트만 계산해서 10진수로 범위를 잡는다)
세번째 옥텟만 보면 나올 수 있는 경우의 수가 4개
0
1
8
9
172.16.0.0~172.16.0.255
172.16.1.0~172.16.1.255
=> 172.16.0.0~172.16.1.255(어차피 연속된 범위이니까 묶음)
172.16.8.0~172.16.8.255
172.16.9.0~172.16.9.255
=> 172.16.8.0~172.16.9.255(어차피 연속된 범위이니까 묶음)
-> 172.16.0.0 0.0.9.9
00000000.00000000.00001001.00001001
16가지 다 구해서 연속적인 범위를 묶으면 됨
=> 와일드카드 비트로 해당하는 ip 범위 지정을 하려면 고정적인 비트(0)은 그대로 두고, 누가 와도 상관 없는 비트(1)의 경우를 생각해서 0의 비트를 기준 ip에 맞게 완성하면 끝, 이렇게 나온 범위 대역이 해당 ACL에 통과/거부 되는 범위가 됨
★ 화이트리스트/블랙리스트, 암묵적 거부의 개념 ★
- 화이트리스트 : 전체 다 거부로 설정(암묵적 거부)한 후 허용되는 범위만 지정
- 블랙리스트 : 전체 다 허용으로 설정한 후 거부되는 범위들만 지정(명시적 거부), 전체 다 허용(permit any any로 설정한 게 아니면 암묵적 거부가 디폴트 설정임)
=> any any로 전체 지정에 대한 허용/거부에 대해 ACL 순서가 중요함
(deny host 192.168.1.1 host 192.168.1.0 한 후 permit any any)
=> 작은 범위부터 큰 범위로 작성해야 함, deny와 permit의 순서가 중요한 것이 아닌 작은 범위부터 큰 범위의 순서가 중요함!!!
Laptop과 Server 핑(어차피 전 구간) 통신 가능하도록 해라.
(라우팅 시 패킷트레이서는 ip route [아이피 대역] [서브넷마스크] [다음 홉의 ip] 형식으로 써야 함, 나가야 하는 방향 인터페이스는 명령어 지원 x)
(기본설정도 할 거면 해도 됨)
R0/R1
enable secret ciscosec
line con 0
exec-timeout 0
logging synchronous
login local
username root password toor
R0
ip route 192.168.1.0 255.255.255.0 10.0.0.2
R1
ip route 192.168.0.0 255.255.255.0 10.0.0.1
Laptop에서 192.168.1.1/24의 웹서버 접속 가능(80번 포트를 이용해)
TCP와 HTTP 패킷만 캡처해서 보기 위해 기존의 것을 모두 지우고 TCP와 HTTP만 체크
패킷 캡처해서 확인 가능
출발지 주소, 목적지 주소, 출발지 포트, 목적지 포트 등 헤더 정보 확인 가능
전송 과정 별로 확인 가능
(WAN 구간이니 HDLC로 통신함)
이 시뮬레이션 모드가 공부할 때 좋음(하나하나 자세히 뜯어서 확인할 수 있음)
4개의 구간에서 ACL을 적용시켜 통신되지 않도록 할 수 있음,
R1의 fa0/0 방향(4번)에 ACL 적용 -> 최종 서버 단과 가장 가까운 라우터의 out 방향(서버쪽 인터페이스)에 설정하는 것이 바람직함
암묵적 거부로 설정되지 않은 ip들도 모두 거부
access-list 100번으로 만든 ACL 그룹을 int fa 0/0 인터페이스에 나가는 방향(out)으로 적용
차단된 매치 패킷 확인 가능
랩탑(192.168.0.1) -> 서버(192.168.0.2)로 핑 안나감
(위에 설정한 deny 정책에 해당은 안되지만, 암묵적 거부로 전체 거부)
ACL 100번에 명시적 허용 추가해줌
(첫번째 거부한 항목을 제외한 나머지 ip 통신은 허용)
(192.168.0.1 -> 192.168.1.1 icmp ping 통신 가능)
명시적 허용으로 ip any any를 했기 때문에 192.168.0.1에서 192.168.1.1로 가는 80번 패킷만 차단, 나머지는 ip 통신은 모두 허용
PC 하나 추가 해줘서 host 192.168.0.1(Laptop) host 192.168.1.1로 가는 인터넷 http 패킷(80번)만 차단하고,
나머지 ip(any)들은 모든 곳(any)으로 ip 통신(L3)은 되어야 하는 것을 확인 해보자
(192.168.1.2(새로 추가한 PC) -> 192.168.1.1(server) icmp ping 통신 가능)
ACL 100번의 처음 명시적 거부(192.168.0.1에서 192.168.1.1로 가는 80번 패킷 차단)한 것에 해당되지 않음
(192.168.1.2(새로 추가한 PC) -> 192.168.1.1 http 80번 패킷 가능)
ACL 100번의 처음 명시적 거부(192.168.0.1에서 192.168.1.1로 가는 80번 패킷 차단)한 것에 해당되지 않음
웹 서버에 대한 ACL 정책을 만들어라.
- 192.168.2.0/24 대역은 핑(icmp) 거부
- 192.168.0.0/24 대역은 80번 포트 거부
- 이외의 모든 패킷은 허용
access-list 101 deny icmp 192.168.2.0 0.0.0.255
access-list 101 deny tcp 192.168.0.0 0.0.0.255 host 192.168.1.1 eq 80
access-list 101 permit ip any any
int fa 0/0
ip access-group 101 out
192.168.2.0/24 대역에서 192.168.1.1로 핑 차단
192.168.2.0/24 대역에서 192.168.1.1로 웹 패킷 허용
192.168.0.0/24 대역에서 192.168.1.1로 핑 패킷 허용
192.168.0.0/24 대역에서 192.168.1.1로 웹 패킷 거부
'On-Premise > Network' 카테고리의 다른 글
DHCP (1) | 2024.01.02 |
---|---|
L3 Switching, VLAN (0) | 2024.01.02 |
NAT (1) | 2024.01.02 |
Default Routing (2) | 2024.01.01 |
Routing 개념, 라우터 초기 보안 설정, Static Routing (1) | 2024.01.01 |
개인 공부 목적으로 사용하는 블로그입니다 :)
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!