실습)
vyos2만 만들어서 eth0의
222번 = vyos의 ssh 접속
22번 = mint의 ssh 접속
2222 = web의 ssh 접속
5959 = web의 tftp 서버 접속
각각을 다 검증
- tftp 설치 및 검증
[root@web ~]# yum install -y tftp-server
[root@web ~]# systemctl restart tftp
[root@web ~]# systemctl status firewalld
[root@web ~]# echo 'tftp test' > /var/lib/tftpboot/test.txt
- 민트 ssh 22번 - 22번
vyos@vyos# set nat destination rule 500 protocol tcp
vyos@vyos# set nat destination rule 500 destination port 22
vyos@vyos# set nat destination rule 500 translation add 10.10.5.100
vyos@vyos# set nat destination rule 500 inbound-interface eth0
vyos@vyos# set service ssh port 222
- 민트에 접속해서 tftp 명령어(클라이언트) 설치
root@mint:~# apt install -y tftp
root@mint:~# tftp 172.16.101.80
tftp> get test.txt
- tftp를 위한 DNAT 설정
- vyos 이전 설정 삭제
vyos@vyos# delete nat destination
vyos@vyos# commit
- 민트서버와 웹서버가 외부로 통신되는지 확인
user1@mint:~$ ping 8.8.8.8
[root@web ~]# ping 8.8.8.8
- 외부에서 웹서버로 접속되도록 DNAT
vyos@vyos# set nat destination rule 100 inbound-interface eth0
vyos@vyos# set nat destination rule 100 destination port 80
vyos@vyos# set nat destination rule 100 translation address 172.16.101.80
vyos@vyos# set nat destination rule 100 translation port 80
vyos@vyos# set nat destination rule 100 protocol tcp
vyos@vyos# commit
VyOS Firewall
Zone 기반 방화벽
- private, public, dmz 각 존을 설정
vyos@vyos# set zone-policy zone public interface eth0
vyos@vyos# set zone-policy zone private interface eth1
vyos@vyos# set zone-policy zone dmz interface eth2
vyos@vyos# commit
- zone을 설정하는 순간 각 존이 폐쇄된다는 사실을 확인
- 구성할 정책
1. PUBLIC에서 PRIVATE으로 접속을 차단
- 1번 정책 생성
vyos@vyos# set firewall name PUBLIC_TO_PRIVATE rule 10 action accept
vyos@vyos# set firewall name PUBLIC_TO_PRIVATE rule 10 state established enable
vyos@vyos# set firewall name PUBLIC_TO_PRIVATE rule 10 state related enable
vyos@vyos# set firewall name PUBLIC_TO_PRIVATE rule 10 protocol all
# PUBLIC을 배려하는 정책
PRIVATE에서 출발하는 애들은 다 거부할건데, 특별히 PUBLIC에서 들어와서 돌아가는 애들은 허용해주겠다.
원래는 다 거부해야 하는 것이 맞는데, all deny하게 되면 public에서 들어온 극히 일부(2번을 통해 private에서 나갔던 애들)를 허용하기 위해서 위와 같이 일부를 허용하는 코드를 작성했다.
# PUBLIC TO PRIVATE 정책
원래 '전부 차단'이지만, state inspection table에 내 상태 혹은 그것과 연관이 있는 트래픽은 밖으로 내보내줘야 하기 때문에 이런 설정이 필요하다.
state
세션의 상태
- stateful = 상태가 존재하고 기억한다. 융통성이 있다.
- stateless = 상태가 없고 기억하지 않는다. 융통성이 없다.
- stateful한 firewall
파랑: statefull firewall 정책에 의해 client는 server로 진입이 가능하다.
빨강: 돌아오는 정책은 모두 차단이 되어있는 상태다.
→ 하지만 state를 기억하는, statueful 방화벽이기 때문에 이전에 수립(established)됐거나 관계있는(related) 트래픽은 밖으로 나가는게 가능하다.
established
연결이 수립되었을때, 통로
related
프로토콜의 포트 이외에 해당 프로토콜을 수행하기 위해 추가적으로 필요한 포트
ex. related = ftp의 경우에는 20, 21번 이외에 추가적으로 ‘랜덤한 포트’가 할당되어 데이터를 주고받는다.
2. PRIVATE에서 PUBLIC으로 접속을 허용
- 2번 정책 생성 및 반영
vyos@vyos# set firewall name PRIVATE_TO_PUBLIC rule 20 action accept
vyos@vyos# set zone-policy zone public from private firewall name PRIVATE_TO_PUBLIC
# 2번 정책만 적용시켜서는 외부로 통신이 안된다.
# 1번 정책을 반영시켜야만 된다. 왜냐하면 1번 정책 안에 ‘2번에서 established or related된 트래픽’ 을 허용하기 때문이다.
- 1번 정책 반영
vyos@vyos# set zone-policy zone private from public firewall name PUBLIC_TO_PRIVATE
3. private에서 dmz로 향하는 정책
- 3번 정책 생성 및 반영
vyos@vyos# set firewall name PRIVATE_TO_DMZ rule 30 action accept
vyos@vyos# set zone-policy zone dmz from private firewall name PRIVATE_TO_DMZ
vyos@vyos# commit
# 3번 정책을 적용시켰지만 안된다. 배려해주는 정책이 없기 때문
4. dmz에서 private으로 향하는 정책
- 4번 정책 생성 및 반영
vyos@vyos# set firewall name DMZ_TO_PRIVATE rule 40 action accept
vyos@vyos# set firewall name DMZ_TO_PRIVATE rule 40 state established enable
vyos@vyos# set firewall name DMZ_TO_PRIVATE rule 40 state related enable
vyos@vyos# set firewall name DMZ_TO_PRIVATE rule 40 protocol all
vyos@vyos# set zone-policy zone private from dmz firewall name DMZ_TO_PRIVATE
vyos@vyos# commit
5. dmz에서 public으로 향하는 정책
- 5번 정책 생성 및 반영
vyos@vyos# set firewall name DMZ_TO_PUBLIC rule 50 action accept
vyos@vyos# set firewall name DMZ_TO_PUBLIC rule 50 state established enable
vyos@vyos# set firewall name DMZ_TO_PUBLIC rule 50 state related enable
vyos@vyos# set firewall name DMZ_TO_PUBLIC rule 50 protocol all
vyos@vyos# commit
vyos@vyos# set zone-policy zone public from dmz firewall name DMZ_TO_PUBLIC
vyos@vyos# commit
6. public에서 dmz로 http와 ssh 허용하는 정책
- 6번 정책 생성 및 반영
vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 60 action accept
vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 60 protocol tcp
vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 60 destination port 22,80
vyos@vyos# set zone-policy zone dmz from public firewall name PUBLIC_TO_DMZ
vyos@vyos# commit
# 반영 후 client에서 web으로 접속이 되는걸 확인
- 방화벽 룰, 존 정책 확인
show firewall
show zone-policy
문제)
이렇게 되도록 추가해보세요.
- TFTP (Trivial File Transfer Protocol)
- 프로토콜: UDP
- 포트 번호: 69
- tftp를 위한 DNAT 설정
set nat destination rule 200 destination port 69
set nat destination rule 200 protocol udp
set nat destination rule 200 inbound-interface eth0
set nat destination rule 200 translation address 172.16.101.80
set nat destination rule 200 translation port 69
commit
- tftp를 허용하기 위한 정책 추가
vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 65 action accept
vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 65 protocol udp
vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 65 destination port 69
vyos@vyos# commit
문제)
기존 VyOS는 서스펜드 해두시고 VyOS-exam을 만드셔서 아래와 같이 구성해보세요. 사전에 잘 되는것을 확인한 스샷과 1,2,3,4,5,6을 각각 구성한 후의 스샷을 엮어서 제출하세요.
-
더보기NIC 추가 후 설정
vyos@vyos# set int eth eth0 add 211.183.3.252/24
vyos@vyos# set service ssh port 22
vyos@vyos# commit
vyos@vyos# set int eth eth1 add 10.10.3.252/24
vyos@vyos# commit
vyos@vyos# set int eth eth2 add 10.10.4.252/24
vyos@vyos# commit
- decription 설정
vyos@vyos# set int eth eth0 description public
vyos@vyos# set int eth eth1 description private
vyos@vyos# set int eth eth2 description dmz
vyos@vyos# commit
- NAT 설정
vyos@vyos# set nat source rule 10 source address 10.10.3.0/24
vyos@vyos# set nat source rule 10 outbound-interface eth0
vyos@vyos# set nat source rule 10 translation address 211.183.3.252
vyos@vyos# commit
vyos@vyos# set nat source rule 20 source address 10.10.4.0/24
vyos@vyos# set nat source rule 20 outbound-interface eth0
vyos@vyos# set nat source rule 20 translation address 211.183.3.252
vyos@vyos# commit
- zone-policy 설정
vyos@vyos# set zone-policy zone public interface eth0
vyos@vyos# set zone-policy zone private interface eth1
vyos@vyos# set zone-policy zone dmz interface eth2
vyos@vyos# commit
1. 정책10
SSH (Secure Shell)
- 프로토콜: TCP
- 포트 번호: 22
vyos@vyos# set firewall name PUBLIC_TO_PRIVATE rule 10 action accept
vyos@vyos# set firewall name PUBLIC_TO_PRIVATE rule 10 protocol tcp
vyos@vyos# set firewall name PUBLIC_TO_PRIVATE rule 10 destination port 22
vyos@vyos# set zone-policy zone private from public firewall name PUBLIC_TO_PRIVATE
vyos@vyos# commit
- DNAT 설정 (Public -> Private, SSH 포트 22)
set nat destination rule 100 inbound-interface eth0
set nat destination rule 100 destination port 22
set nat destination rule 100 protocol tcp
set nat destination rule 100 translation address 10.10.3.100
set nat destination rule 100 translation port 22
commit
2. 정책20
vyos@vyos# set firewall name PRIVATE_TO_PUBLIC rule 20 action accept
vyos@vyos# set firewall name PRIVATE_TO_PUBLIC rule 20 state established enable
vyos@vyos# set firewall name PRIVATE_TO_PUBLIC rule 20 state related enable
vyos@vyos# set firewall name PRIVATE_TO_PUBLIC rule 20 protocol all
vyos@vyos# set zone-policy zone public from private firewall name PRIVATE_TO_PUBLIC
vyos@vyos# commit
3. 정책30
HTTP (HyperText Transfer Protocol)
- 프로토콜: TCP
- 포트 번호:
- 80 (HTTP 기본 포트)
- 8080 (프록시나 개발 환경에서 자주 사용됨)
Telnet
- 프로토콜: TCP
- 포트 번호: 23
vyos@vyos# set firewall name PRIVATE_TO_DMZ rule 30 action accept
vyos@vyos# set firewall name PRIVATE_TO_DMZ rule 30 protocol tcp
vyos@vyos# set firewall name PRIVATE_TO_DMZ rule 30 destination port 23,80
vyos@vyos# set zone-policy zone dmz from private firewall name PRIVATE_TO_DMZ
vyos@vyos# commit
4. 정책40
vyos@vyos# set firewall name DMZ_TO_PRIVATE rule 40 action accept
vyos@vyos# set firewall name DMZ_TO_PRIVATE rule 40 state established enable
vyos@vyos# set firewall name DMZ_TO_PRIVATE rule 40 state related enable
vyos@vyos# set firewall name DMZ_TO_PRIVATE rule 40 protocol all
vyos@vyos# set zone-policy zone private from dmz firewall name DMZ_TO_PRIVATE
vyos@vyos# commit
5. 정책50
vyos@vyos# set firewall name DMZ_TO_PUBLIC rule 50 action accept
vyos@vyos# set zone-policy zone public from dmz firewall name DMZ_TO_PUBLIC
vyos@vyos# commit
6. 정책60
FTP (File Transfer Protocol)
- 프로토콜: TCP
- 포트 번호:
- 21: 제어 커넥션(Control Connection)
- 20: 데이터 전송(Data Connection, Active Mode)
vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 60 action accept
vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 60 protocol tcp
vyos@vyos# set firewall name PUBLIC_TO_DMZ rule 60 destination port 20
vyos@vyos# set zone-policy zone dmz from public firewall name PUBLIC_TO_DMZ
vyos@vyos# commit
'AWS Cloud School 8기 > VyOS' 카테고리의 다른 글
29일차) 2025-02-10 (VyOS+wp, db, dns+http/tftp/ssh) (0) | 2025.02.10 |
---|---|
27일차) 2025-02-06 (VyOS 초기설정) (0) | 2025.02.06 |