문제)
VyOS를 통해 다양한 서버를 운영하고자 한다.
주어진 내부 대역은 10.20.30.0 /23 대역이며 vmnet5,6을 사용한다. VAR과 DB라는 두 개의 내부 Zone과 PUB zone을 통해 다음과 같은 구성을 하고자 한다.
1. VAR zone에 varwp라는 호스트네임을 갖는 wordpress 서버를 구성하고, DB zone에는 dbdb라는 이름의 mariadb 데이터베이스 서버 구성을 하고자 한다. wordpress 서비스는 PUB 대역에 제공하며 사용자들은 www.rapa.com으로 접속해야 한다.
==> www.rapa.com 접속확인
2. VAR zone의 bastion이라는 호스트네임을 갖는 서버에 bastion.rapa.com이라는 영문주소로 ssh 접속이 가능하며, 이 서버를 경유하여 DB zone의 dbdb 서버에 ssh로 접속하여야 한다. DB서버는 절대 PUB zone에서의 접속을 허용하지 않는다.
==> 방화벽 룰 및 bastion.rapa.com 경유하여 dbdb에 ssh 접속 확인
3. bastion 서버는 PUB 대역에 tftp 서비스도 제공한다. 사용자들은 tftp.rapa.com으로 이 서버에 접속할 수 있다.
이때 서버의 방화벽은 물론, ZONE기반 방화벽 정책 구성을 통해 반드시 필요한 트래픽만 허용해야 한다.
sol - 1)
VMware와 Xshell 환경에서 실습을 진행했다. VyOS는 install image를 입력하고 설치를 진행해 준다.
내부 대역 네트워크 주소 10.20.30.0 /23를 두 개의 네트워크로 서브넷팅 하면 10.20.30.0/24와 10.20.31.0/24로 나뉜다.
eth0 은 211.183.3.252/24, eth1은 10.20.30.252/24, eth2는 10.20.31.252/24로 설정을 해주었고 외부로 나가는 게이트웨이 주소는 211.183.3.2이다.
입력 후에는 반영을 시켜주기 위해 commit을 입력한다. ssh 통신을 위해 set service를 통해 포트 번호를 22번으로 설정해 주었다.
eth0,1,2번의 이름을 위와 같이 입력하고 commit. sh int 명령어를 통해 인터페이스 정보를 보면 다음과 같다.
○VyOS설정
내부대역에 wordpress 서버 및 mariadb 서버를 만들기 위한 패키기 설치가 필요한데 외부와 통신이 안 되는 상황이므로 포트 포워딩 개념을 이용한 PAT를 통해 외부와 통신이 되게 만들어 줄 것이다.
VAR zone은 rule2로 설정하여 위와 동일한 과정으로 외부와 통신이 가능하다.
그다음 필요한 패키지들을 설치 해준 뒤 http 데몬을 활성화시켜준다.
wordpress 웹서버를 통해 통신하기 위해서 http 포트인 80번 포트를 열어주고 반영시켜준다.
set nat destination rule 10 inbound-interface eth0
set nat destination rule 10 translation 10.20.30.100
set nat destination rule 10 translation address 10.20.30.100
set nat destinaton rule 10 destination port 80
set nat destination rule 10 protocol tcp
commit
으로 port 80번을 이용하여 웹서버에 대한 DNAT설정을 해주면 다음과 같이 접속이 잘되는 것을 확인할 수 있지만
이것은 host-connection을 통해 접속되는 것이고 문제에서 의도하는 것은 VyOS 인터페이스 eth0을 통해 접속되는 것을 원한다.
host-connection을 해제하면 정상적으로 접속되던 웹서버가 접속이 되지 않음을 확인할 수 있다.
host-connection으로 생긴 가상의. 1 주소로 흘러들어 가서 웹서버에 접속되는 현상을 막기 위해 host-connetion 박스에 체크를 해제해 준다.
DNAT를 사용하기 때문에 여기에서는 inbound-interface는 eth0으로 동일하다.
mariadb 서버가 있는 곳을 destination으로 지정해 준다면 rule 20을 통해 포트는 22번(ssh)으로 지정해 주었고 통신 방식은 프로토콜 tcp와 udp 중 신뢰성 있는 통신인 tcp를 채택했으며 destination으로 갈 때 주소를 10.20.31.80으로 변한다(translation address)는 의미이다.
이때 VyOS는 xshell과 통신하기 위해 ssh 포트를 222번으로 지정해 주자. ( mariadb 포트를 22번으로 했기 때문에 VyOS 기존 포트 22번에서 222번으로 변경. set service ssh port 222. 이러면 222번으로 xshell과 통신이 가능하다.)
웹서버도 마찬가지로 rule 2222번으로 설정하였고 inbound는 eth0을 통과하며 destination으로 변환될 주소는 10.20.30.100이며 통신 프로토콜은 tcp를 따른다. destination port는 2222로 DNAT를 해주었다. commit으로 반영 잊지 말자!
이렇게 VyOS의 기본적인 설정들은 끝났고 PUB, VAR, DB zone을 나눠본다.
○ 방화벽 설정
VAR에서 DB 존으로 가고 DB로부터만 응답을 받기 위해서는 mysql포트인 3306번 포트만 허용해 주면 된다.
rule 10을 통해 3306 포트와 함께 DB로 가게 되고 rule 15(state established, related)를 통해 DB와 관련된 통신을 하고 싶다.
DB에서 VAR로 가는 방향은 deny 해준다. DB에서 VAR 방향은 DB 관련 정보만 주면 되기 때문에 위와 같이 state established, related를 rule 20을 통해 지정해 주었다.
set zone-policy를 통해 zone에서 zone으로 이동하는 설정을 다 마치고 다면 반영시켜 주는 것을 잊지 말자!
rule 30을 통해 PUB에서 VAR로 갈 때는 웹서버 동작을 시키기 위한 것이 목적이므로 destination port는 80번이다.
rule 35를 통해 PUB에서 송신한 정보중 port 80번을 통해 http와 관련된 정보만 수신하고 싶으므로 state established, related 설정을 해준 다음 zone-policy 설정을 반영시켜 준다.
VAR에 있는 wordpress 서버는 외부 PUB으로 나가서 통신을 해야 하므로 rule 40을 통해 전부 열어주고 반영시켜 준다.
그다음 DNS 설정 및 VAR에 있는 wordpress 서버에서 관련 패키지 설치 및 설정과 DB존의 dbdb서버의 mariadb설정 및 패키지 설치를 진행해 준다. 자세한 내용은 추후에 포스팅을 할 예정이다.
○ DNS 서버 설정
1 systemctl stop firewalld
2 systemctl disable firewalld
3 vi /etc/selinux/config
4 init 6
5 firewall-cmd --permanent --add-service=dns -> DNS 포트설정(53) ,서비스 활성화
6 systemctl enable firewalld
7 firewall-cmd --permanent --add-service=dns
8 systecmctl status firewalld
9 systemctl status firewalld
10 systemctl start firewalld
11 systemctl unmask firewalld
12 systemctl restart firewalld
13 systemctl enable firewalld =>방화벽 활성화
14 firewall-cmd --permanent --add-service=dns
15 firewall-cmd --reload
16 getenforce
17 vi /var/named/rapa.com.db
18 systemctl restart network
19 systemctl restart named
20 clear
21 systemctl status named
22 init 6
23 getenforce
24 yum -y install bing bind-uils
25 yum -y install bing bind-utils
26 vi /etc/named.conf
27 ls /var/named
28 yum -y install bind bind-utils
29 vi /etc/named.conf
30 vi /etc/named.rfc1912.zones ==> 존파일 설정
31 vi /var/named/rapa.com.db
32 name-checkzone rapa.com /var/named/rapa.com.db
33 named-checkzone rapa.com /var/named/rapa.com.db
34 systemctl enable --now named ==> 변경사항 반영 named파일
35 cat /etc/resolv.conf
36 systemctl restart network
37 cat /etc/resolv.conf
38 systemctl enable --now named ==> 변경사항 반영 named파일
39 vi /var/named/rapa.com.db
40 nslookup
41 vi /etc/sysconfig/network-scripts/ifcfg-ens32
42 systemctl restart network
43 cat /etc/resolv.conf
44 firewall-cmd --permanent --add-port=53/tcp ==> dns 포트 활성화
45 vi /etc/named.conf
46 vi /etc/named.rfc1912.zones
47 vi /var/named
48 vi /var/named/rapa.com.db
49 systemctl enable --now named
50 vi /var/named/rapa.com.db
51 systemctl restart named
52 vi /var/named/rapa.com.db
53 systemctl restart named
54 vi /var/named/rapa.com.db
55 vi /var/named/rapa.com.db
56 systemctl restart named
DNS서버는 외부에 둔다! 211.183.3.53/24
sol-2,3)
bastion 서버로 향하는 DNAT설정을 해준다. PUB 대역에서 destination port를 233으로 지정해줬다.
tftp는 protocol 방식을 udp로 따른다! set nat destination rule 4000 protocol udp
translation port를 통해 포트 233을 통해 들어오게 되면 해석을 포트 69(tftp)로 하게 되고 이는 아이피 주소를 10.20.30.10으로 보겠다는 의미이다. 그러니 bastion 서버를 xshell로 ssh 접속을 하게 만들고 싶을 때는 아이피 주소는 211.183.3.252에 포트 번호는 233으로 하면 정상적으로 작동한다. ( 포트 233으로 설정해도 해석은 69번으로 하게 되어 목적지까지 도착하게 된다.)
그다음으로 bastion 서버를 경유해서 db와 통신이 가능한지 확인하는 과정은 다음과 같다.
dbdb서버는 DNS를 통해 따로 도메인명을 지정해주지 않았으므로 'ssh root@ip주소' 명령어를 통해 접속이 가능한지 확인을 해야 하고 정상적으로 접속이 가능함을 확인할 수 있다!
그다음 3번 문제는 tftp 관련 사항을 확인하는 것인데 tftp에 대한 자세한 내용 또한 추후에 포스팅할 예정이다.
tftp 또한 정상적으로 작동됨을 확인할 수 있다.
#모든 과정에서 selinux = disabled 상태이다. sentenforce0 으로 셀리눅스는 꺼두자!
'Linux' 카테고리의 다른 글
리눅스 :: VPN(Virtual Private Network) 동작 원리와 실습 (0) | 2023.10.10 |
---|
댓글