Linux 실무환경 구축하기 (Final Report)
이번 포스트는 제가 스타트업의 서버 담당자라고 가정하고 Linux 서버 실무환경을 구축해보는 과정을 담은 것입니다. 스타트업은 SUMMER(빙수 개발 회사)라고 가정했습니다. 왜냐구요? 그냥 갑자기 빙수가 먹고 싶었어요.
서버 동작 영상
우선, 구축한 서버들이 동작하는 모습을 녹화한 영상들이다. 마지막 영상은 최종적으로 구축된 환경에서 웹 서버, 방화벽, 메일서버, 원격 접속이 수행되는 모습을 한 번에 녹화한 것이다.
1. 구축된 웹 서버에 접속하는 모습
웹 서버는 server(b)에 구축하였으며, 호스트 컴퓨터 주소창에 입력한 IP주소는 외부 인터넷과 연결된 방화벽 컴퓨터 ens32의 IP주소이다.
2. DNS 서버가 구축된 모습
DNS 서버는 방화벽이 구축된 컴퓨터(server)에 함께 구축하였다. IP주소 192.168.85.128은 방화벽 컴퓨터인 server의 IP주소이다.
3. 방화벽 컴퓨터를 구축한 모습
외부 컴퓨터에서는 방화벽 컴퓨터의 ens32 IP주소(192.168.85.128)로 접속하면 웹 서버를 이용할 수 있으나 실제 웹 서버가 구축된 내부 컴퓨터의 IP주소(172.16.1.20)으로는 접속이 거부된다. 반면 같은 내부 서버의 컴퓨터인 Client(Kubuntu)에서는 172.16.1.20으로 웹 서버에 접속되는 것을 확인할 수 있다.
4. 메일 서버를 구축한 모습
방화벽 컴퓨터인 server에 메일 서버를 구축하였다. 스타트업 이름을 SUMMER라 지었으므로 메일 주소는 @summer.co.kr로 만들었다. 아래 영상은 방화벽 내부 컴퓨터인 Client에 Evolution을 설치하여 3개의 계정(jiun, mina, jinsu)으로 메일을 주고 받아본 모습이다.
5. PowerShell을 이용한 원격접속
PowerShell을 이용하여 DNS 서버, 메일 서버가 구축된 방화벽 컴퓨터인 server에 원격 접속하였다. 원격 접속은 server에 추가한 3개의 계정 중 하나(jiun)를 통해 수행하였다.
6. 최종적으로 구축된 실무환경은 다음과 같다.
전체 시스템 구성도

전체적인 시스템 구성은 위와 같다. Client(Kubuntu)는 특별한 서버가 구축되지 않은 내부망의 일반적인 컴퓨터이다. Server(b)(Ubuntu server)는 내부망의 컴퓨터이자 웹 서버가 구축된 컴퓨터이다. 마지막으로 Server(Ubuntu desktop)는 방화벽 컴퓨터이고, DNS 서버와 메일 서버가 구축되어 있다. 각 컴퓨터의 IP주소는 위의 구성도에 작성해놓았다.
DNS 서버 - Server
1. /etc/apt/sources.list를 열어
%s/kr.archive.ubuntu.com/mirror.kakao.com
명령어로 sources.list의 저장소 URL을 kakao의 URL로 변경해준 후 update해주었다.
2. apt 명령어로 bind9과 bind9utils를 설치하였다.
3. /etc/bind/named.conf.options에 들어가 아래와 같이 내용을 수정해주었다.

4. systemctl restart/enable/status named 명령으로 named를 재시동한 후 방화벽에서 53번 포트를 허용해주었다.
5. /etc/resolv.conf 파일에 들어가 네임서버 주소를 192.168.85.128(server의 IP주소)로 변경해주었다.
방화벽 - Server
1. server(b)의 Network Adapter를 bridged로 변경한 후 /etc/netplan/00-installer-config.yaml 파일에 들어가 아래와 같이 내용을 수정해주었다.

2. server(b)는 재부팅하고, Client의 Network Adapter도 bridged로 변경해준다. 접속 후 네트워크 연결 설정에 들어가 IPv4설정을 다음과 같이 수정한다.

3. Client도 재부팅하고 server의 Network Adapter를 하나 추가해준 후 이를 bridged로 설정한다. 접속 후 이더넷 설정을 다음과 같이 변경해준다.

4. server를 재부팅한 후 다음과 같이 방화벽 정책을 설정한다.

5. /etc/sysctl.conf 파일에서 28행의 주석을 제거한 후
echo 1 > /proc/sys/net/ipv4/ip_forward 명령으로 설정 내용을 적용한다. 그리고 다음과 같이 방화벽 정책을 설정한다.

6. iptables-save > /etc/iptables.rules 명령으로 설정 내용을 적용시킨다.
7. server(b)에 웹 서버를 구축한 후
iptables --table nat --append PREROUTING --in-interface ens32 --jump DNAT --proto tcp --dport 80 --to-destination 172.16.1.20
명령을 입력하고 다시 한 번 설정내용을 적용시킨다. 마지막으로 ufw를 disabled시키고 server(b)와 Client의 /etc/resolv.conf 파일에서도 nameserver 주소를 DNS server의 IP주소로 변경해주었다.
웹 서버 - Server(b)
웹 서버는 LAMP를 이용하여 구축하였다. 구축 단계는 다음과 같다.
1. dpkg 명령으로 apache2, php7.4-common, mysql-server 패키지가 설치되어 있는지 확인한다.
2. /etc/apt/sources.list를 열어
%s/kr.archive.ubuntu.com/mirror.kakao.com
명령어로 sources.list의 저장소 URL을 kakao의 URL로 변경해준 후 update해주었다.
3. lamp-server^를 설치하고, systemctl restart/enable/status 명령어로 apache2 와 mysql 을 각각 재실행한 후 ufw의 80번 포트를 허용해준다. /var/www/html/phpinfo.php 파일을 생성하고 파일 내용으로 <?php phpinfo(); ?>를 입력한 후 저장하면 호스트 컴퓨터 주소창에서 (방화벽 컴퓨터의 ens32 IP주소)/phpinfo.php를 입력했을 때 아래와 같은 창을 확인할 수 있다.

4. 웹 서버가 잘 연결되는 것을 확인하고, wordpress를 설치한다. 우선, 아래와 같이 mysql문을 작성하여 wp_db와 사용자를 생성한다.

5. /var/www/html 폴더로 이동한 다음
wget https://wordpress.org/latest.tar.gz
명령을 입력하여 워드프레스를 다운받고
tar -xzvf latest.tar.gz
명령을 입력하여 압축을 해제한다.
6. chmod 707 wordpress/
chown -R www-data.www-data wordpress
명령으로 워드프레스 파일의 퍼미션 및 소유자를 변경해준다.
7. /var/www/html/wordpress 폴더로 이동한 다음 wp-config-sample.php 파일을 wp-config.php 파일로 복사한다. 그 후 wp-config.php 파일의 내용을 아래와 같이 수정한다.

8. /etc/apache2/sites-enabled/000-default.conf 파일을 열어 12행의 내용을 다음과 같이 수정한다.
DocumentRoot /var/www/html/wordpress
9. /etc/apache2/apache2.conf 파일을 열어 182행 즈음에 다음과 같은 내용을 추가해준다.

10.apache2ctl configtest 명령으로 apache2.conf 파일의 문법 오류를 체크한 후 다시 호스트 컴퓨터의 주소창에 방화벽 컴퓨터의 ens32 IP주소를 입력하면 wordpress 설정 화면이 나온다. 나의 경우 스타트업의 이름을 빙수 개발 회사 SUMMER로 정했기 때문에 그에 맞춰 사이트를 꾸몄다.
메일 서버 - Server
스타트업 이름이 SUMMER이므로 메일 주소를 @summer.co.kr로 설정해주었다. 서버 구축 과정은 다음과 같다.
1. server(DNS server)로 돌아가서 /etc/bind/named.conf 파일에 들어가 아래와 같이 메일 서버 정보를 등록해준다.

2. 다음으로 /etc/bind/ 폴더로 들어가 아래와 같이 summer.co.kr.db 파일을 만들어주었다.

3. named-checkconf 명령과 named-checkzone 명령으로 지금까지 작성한 내용에 문제가 있는지 확인한다. 오류가 없다면 systemctl restart/enable named 명령을 입력하여 bind9을 재시작한다.
4. server에 sendmail을 설치하고 /etc/hostname에서 기존의 hostname을 mail.summer.co.kr로 변경한다. 이어서 /etc/hosts 파일에서 ip - url 내용을 추가해준다.
5. /etc/mail/local-host-names 파일을 열어 mail.summer.co.kr을 추가한다음 재부팅한다.
6. /etc/mail/sendmail.cf 파일의 98번째 줄의 내용을 Cwsummer.co.kr로 변경하고 269행과 270행의 끝에 Addr=127.0.0.1을 삭제한다.
7. /etc/mail/access 파일에 아래의 내용을 추가한다.

8. makemap hash /etc/mail/access < /etc/mail/access 명령을 입력한 뒤
systemctl restart/enable sendmail으로 sendmail을 재시동한다.
9. dovecot-pop3d를 설치하고 /etc/dovecot/dovecot.conf 파일에서 30행과 33행의 주석을 제거, 34행에 disable_plaintext_auth = no를 추가한다.
10. /etc/dovecot/conf.d/10-mail.conf 파일의 121행의 주석을 제거한 후 맨 뒤에 mail을 추가한다. 그리고 166행의 주석을 제거한 후
systemctl restart/enable dovecot으로 dovecot을 재시동한다.
11. Client로 가기 전에 server에 스타트업 창업자 세 명의 계정(jiun, mina, jinsu)을 adduser 명령으로 추가해주었다.

12. Client로 가서 /etc/apt/sources.list의 저장소 URL을 kakao로 변경하고 evolution을 설치한다.
13. evolution에 jiun@summer.co.kr, mina@summer.co.kr, jinsu@summer.co.kr 계정을 등록한다. 이후 서로에게 메일을 보내보면 잘 전송되는 것을 확인할 수 있다.

원격 접속 - 호스트 컴퓨터
server에 추가해놓았던 세 명의 계정 중 jiun(서버 담당자!)의 계정을 원격 접속하는 데 사용하기로 했다.
1. 호스트 컴퓨터로 돌아와 Microsoft Store에서 PowerShell을 설치한다.
2. 오류가 날 경우 cd \Users\user\.ssh\를 입력하여 오류가 발생하는 파일이 있는 디렉토리로 이동한 후 known_hosts 파일을 삭제한다. 그리고 notepad .\config를 입력하여 config파일의 내용을 수정한다.

3. 프롬프트 창에 ssh jiun@192.168.85.128 을 입력하면 server로 원격 접속이 된다.
