1개의 네트워크를 사용하게 되면
1. 불필요한 브로드캐스트가 확산될 수 있다.
2. 보안상 결함이 발생한다.
-> vlan으로 해결 가능
필요한 만큼 논리적으로 구분
-> 논리적이므로 필요에 따라 vlan10에 포함되었다가 잠시 뒤 다른 네트워크로 이동시키는 것 자유롭다.
R1 -> SW1, R2 -> SW2
Symbol을 스위치로 변경
SW1, SW2에 NM-16ESW 추가하기 -> 16개 포트가 있는 스위치 모듈
https://www.router-switch.com/nm-16esw-used-p-17895.html
SW2만 실행
[SW2]
vlan database
vlan 10 name DEV
vlan 20 name OPS
exit
! 스위치 포트에 대한 vlan의 정보를 breif하게 보여줘
show vlan-sw br
conf t
int f1/1
! 스위치 포트의 모드를 access로
sw mode access
! 스위치 포트 access를 vlan 10으로 지정
sw access vlan 10
int f1/2
sw mode access
sw access vlan 10
int f1/3
sw mode access
sw access vlan 20
do show vlan-sw br
! VLAN10(DEV) -> Fa1/1, Fa1/2
! VLAN20(OPS) -> Fa1/3
PC3, PC4, PC5 start 시키기
[PC3]
ip 10.10.10.11/24
[PC4]
ip 10.10.10.12/24
[PC5]
ip 10.10.10.13/24
[PC3]
ping 10.10.10.12 -> VLAN10 -> 된다
ping 10.10.10.13 -> VLAN20 -> 안 된다
[PC4]
ping 10.10.10.11 -> VLAN10 -> 된다
ping 10.10.10.13 -> VLAN20 -> 안 된다
show arp
[PC3]
show arp
PC5와 통신을 시키고 싶음 -> PC5를 VLAN10으로 옮기자
[SW2]
end
conf t
int f1/3
sw access vlan 10
[PC3]
ping 10.10.10.13 -> VLAN10 -> 된다
[PC4]
ping 10.10.10.13 -> VLAN10 -> 된다
[PC5]
ping 10.10.10.11 -> VLAN10 -> 된다
ping 10.10.10.12 -> VLAN10 -> 된다
access port = 1 vlan / 1 port(interface)
-> 주로 pc, 프린터, 서버와 같은 end-device가 연결된 곳에 설정
trunk port = all vlan / 1 port(interface)
-> 주로 SW-SW, SW-R 연결에 설정
기본적으로 모든 vlan 통신이 가능한 인터페이스이고, 해당 트렁크 포트를 지낳 때에는 프레임의 vlan id를 태깅하여 넘겨준다. IEEE 802.1q
반대쪽 인터페이스에서는 태깅 부분을 제거한 나머지를 재조합하여 원래의 frame으로 만들어 최종 목적지로 전달하게 된다.
이를 이용하여 물리적으로 떨어져있는 end-device들 끼리도 정상적으로 통신이 가능하게 되는 것이다.
[SW2]
conf t
int fa1/10
sw mode trunk
SW1 -> start 시키기
[SW1]
vlan dat
vlan 10 name DEV
vlan 20 name OPS
exit
conf t
int f1/10
sw mode trunk
end
conf t
int fa1/1
sw mode access
sw access vlan 10
PC1 start 시키기
[PC1]
ip 10.10.10.10/24
ping 10.10.10.11 -> 된다
ping 10.10.10.12 -> 된다
ping 10.10.10.13 -> 된다
centos -> manage -> full clone -> name: CentOS2
VMware Work Station 네트워크 설정 변경
CentOS1 -> VMnet1
CentOS2 -> VMnet2
CentOS1 -> 본사에 있는 웹/DB 서버
CentOS2 -> 지사에 있는 Desktop
R2 -> SW1 -> NM-16ESW -> symbol: Multilayer Switch
Cloud1 -> 이더넷 추가
Cloud2 -> VMnet1 추가
Cloud3 -> VMnet2 추가
Switch -> start 시키기
[SW1]
vlan dat
vlan 10 name SERVER
vlan 20 name PC
exit
conf t
int fa1/1
sw mode access
sw access vlan 10
int fa1/2
sw mode access
sw access vlan 20
int fa1/10
sw mode trunk
! 저장
do wr
[kvm openvswitch vlan]
ovs-vsctl add-br ovsbr0
ovs-vsctl add-port ovsbr0 eth1
ovs-vsctl add-port ovsbr0 vnet1 tag=10
ovs-vsctl add-port ovsbr0 vnet2 tag=20
ovs-vsctl add-port ovsbr0 vnet3 tag=30
https://serverfault.com/questions/1005939/how-to-configure-vlans-along-with-libvirt-kvm-qemu-and-ovs
<network>
<name>ovs-network</name>
<forward mode='bridge'/>
<bridge name='ovsbr0'/>
<virtualport type='openvswitch'/>
<portgroup name='vlan-01' default='yes'>
</portgroup>
<portgroup name='vlan-02'>
<vlan>
<tag id='2'/>
</vlan>
</portgroup>
<portgroup name='vlan-03'>
<vlan>
<tag id='3'/>
</vlan>
</portgroup>
<portgroup name='vlan-all'>
<vlan trunk='yes'>
<tag id='2'/>
<tag id='3'/>
</vlan>
</portgroup>
</network>
https://blog.scottlowe.org/2012/11/07/using-vlans-with-ovs-and-libvirt/
[kvm openvswitch vxlan overlay]
[SW1]
show vlan-sw br
show int trunk
R1 -> start 시킴
[R1]
! 인터페이스 켜기
conf t
int fa0/1
no sh
int fa0/1.10
encap dot1Q 10
ip add 172.16.1.2 255.255.255.0
! 보조 interface 만들기
int fa0/1.20
encap dot1Q 20
! 인터페이스에 ip 주소 입력
ip add 172.16.2.2 255.255.255.0
do show ip route
-> 경로 2개 directly connected
centos1, 2 -> start
[centos2]
wired settings -> IPv4 ->
address: 172.16.2.100
gw: 172.16.2.2
[centos1]
wired settings -> IPv4 ->
address: 172.16.1.100
gw: 172.16.1.2
[centos2]
ping -c 3 172.16.1.100
curl http://172.16.1.100
firefox -> http://172.168.1.100 접속 -> 페이지 뜸
int fa0/0
ip add 192.168.1.116 255.255.255.0
ip nat inside so list 1 int fa0/0 overload
ip nat outside
no sh
int fa0/1.10
ip nat inside
int fa0/1.20
ip nat inside
ip route 0.0.0.0 0.0.0.0 192.168.1.1
[R1]
conf t
access-list 1 permit 172.16.2.0 0.0.0.255
[centos2]
ping www.google.com -c 3
-> 된다
[centos1]
ping www.google.com -c 3
-> 안 된다
-> ACL을 구성해야됨
[R1]
access-list 1 permit 172.16.1.0 0.0.0.255
[centos1]
ping www.google.com -c 3
-> 이제 된다
[R1]
conf t
ip nat inside so static tcp 172.16.1.100 80 int fa0/0 80
! 외부에서 int fa0/0 80 로 접속하면
! 내부 172.168.1.100 80로 정적 mapping
외부 pc에서 192.168.1.116 접속
[centos1]
yum -y install mariadb-server
[centos2]
yum -y install mariadb
[centos1]
systemctl enable mariadb --now
systemctl status mariadb
mysql_secure_installation
Enter current password for root: 그냥 엔터 누르기
Set root password? -> test123
Remove anonymous users? Y
Disallow root login remotely? Y
Remove test database and access to it? Y
Reload privilege tables now? Y
mysql -u root -ptest123
show databases;
create database testdb;
show databases;
RDBMS에 비해 NoSQL은 샤드라는 단위로 스토리지를 관리하여 확장에 용이하다. 저렴한 스토리지 여러 개를 연결하여, 대용량 저장소를 구축하고 운용하는데 어려움이 없다. NoSQL 그래프, 미디어와 같은 비정형데이터에 대한 저장이 가능하여 입출력이 잦고, 위와 같은 데이터를 관리하기 유용하여 최근 front 쪽에서 많이 사용한다. 하지만 여전히 RDBMS에 대한 사용량은 높은 편이다.
[centos2]
mysql testdb -u root -h 172.16.1.100 -p
-> 접속이 안 됨
-> not allowed
-> 원격 접속이 차단되어있음
[centos1]
db 사용자 만들기
GRANT ALL PRIVILEGES ON testdb.* TO 'user1'@'localhost' IDENTIFIED BY 'user1';
-> localhost에서 접속
GRANT ALL PRIVILEGES ON testdb.* TO 'user1'@'%' IDENTIFIED BY 'user1';
-> 원격에서 접속
FLUSH
-> 적용
[centos2]
mysql testdb -u user1 -h 172.16.1.100 -p
-> 이제 user1으로 원격에서 접속이 됨
use mysql;
-> access denied
-> testdb 데이터베이스만 접속되게 설정해놨음
[R1]
conf t
ip nat inside so static tcp 172.16.1.100 3306 int fa0/0 3306
[centos2]
mysql testdb -u user1 -h 192.168.1.115 -p
-> 외부(192.168.1.115)에서 접속
-> 원격 접속 됨
AWS ACL 예시
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sehyunfa&logNo=221979530198
번호: 1 ~ 99
출발지의 IP주소만을 확인하고 필터링
작성 방법
access-list 1 permit 192.168.1.0 0.0.0.255
access-list 1 permit 192.168.1.4 0.0.0.3 -> 192.168.1.4 ~ 7
access-list 1 deny 2.2.2.2 0.0.0.0 -> 2.2.2.2만 deny
(= access-list 1 deny host 2.2.2.2)
access-list deny 0.0.0.0 255.255.255.255 -> 모든 IPv4 주소 deny
(= access-list 1 deny any)
standard는 특정 IP 주소로부터의 모든 접근에 대하여 허용 또는 차단으로만 구분할 수 있다.
access-list 111 permit ip any host 1.1.1.1
- "ip": 패킷의 IP(L3) 부분만을 확인하고 필터링하겠다!
- "any": source IP (출발지 IP)
- "host 1.1.1.1": 목적지 IP
access-list 111 deny tcp any host 2.2.2.2 eq 80
- "tcp": L3 부분과 L4에서 tcp 포트 번호를 확인하고 해당 패킷을 차단하겠다
- "any": source IP (출발지 IP)
- "host 2.2.2.2 eq 80": 2.2.2.2:80으로 접속한 것
access-list 111 deny icmp any host 2.2.2.2
- "icmp": ping
- 외부에 있는 모든 사용자들이 2.2.2.2로 ping 보내는 것이 있다면 이를 차단하겠다.
access-list 111 deny ip any any
- 모두 차단하겠다
1.top-down 방식 -> 위에서 차례대로
quiz. 나는 외부에서 접속하는 사용자들의 트래픽 중 2.2.2.2로부터의 모든 트래픽을 차단하고 싶다. 나머지 모든 트래픽은 허용하고자 한다. ACL 설정 명령어 순서는?
access-list 1 deny host 2.2.2.2
access-list 1 permit any
2. 지정하지 않은 나머지 모든 트래픽은 자동으로 차단된다. (별도로 작성하지 않더라도 ACL의 가장 아래에는 deny ip any any가 생략되어있다)
quiz. 외부에서 유입되는 트래픽 중 2.2.2.2만을 차단하라.
access-list 1 deny host 2.2.2.2
access-list 1 permit any -> 반드시 추가해야됨
(access-list 1 deny any) -> 생략되어있음
3. 생성된 ACL은 적용해주어야 활성화된다.
적용할 때에는 방향을 지정해주어야 한다. (들어올 때 할 것인지, 나갈 때 할 것인지)
172.16.1.0/24에는 우리 회사의 서버들이 존재하고 있다.
이 서버들로 접속할 수 있는 사용자(IP)는 172.16.2.100이 유일하고, 나머지는 모두 차단된다.
[R1]
access-list 1 permit host 172.16.2.100
int fa0/1.10
ip access-group 1 out
[centos2]
curl http://172.16.1.100
-> 된다
ping 172.16.1.100 -c 3
-> 된다
mysql testdb -u user1 -h 172.16.1.100 -puser1
-> 된다
[R1]
! 새로운 standard ACL 생성
access-list 11 permit host 172.16.2.100
! 인터페이스에 ACL 적용
int fa0/1.10
ip access-group 11 out
[centos2]
IPv4 설정 변경
wired settings -> IPv4
-> 172.16.2.200으로 변경
curl http://172.16.1.100
-> 안 된다
ping 172.16.1.100 -c 3
-> 안 된다
mysql testdb -u user1 -h 172.16.1.100 -puser1
-> 안 된다
172.16.1.100 이외의 ip는 성공적으로 차단된 것을 확인할 수 있음
do clear ip nat trans *
no ip nat ~