전 글에서 Ubuntu 서버가 터졌다고 했는데, 이왕 서버 터진김에 맨날 삐걱대던 Ubuntu Server 대신 다른 리눅스 서버 배포판을 써보기로 했습니다. 후보는 세 가지 정도 있었는데,
평소에 써보고 싶었거나/써본 리눅스 배포판들 입니다.
그리고 제 고려사항은 다음과 같았습니다.
일단 위 조건 중 안정적일것 때문에 Clear Linux는 후보에서 빠졌습니다. 중대한 오류 없이 24/7 돌아갈 수 있을지 도저히 확신이 가지 않아서요. 패키지 관리자가 부실해서 프로그램들을 직접 빌드해야한다는 것도 부담이었습니다.
물론 30% 빠른 마크써버는 군침이 좀 당기긴 했지만 그것 때문에 전체 서버를 날려먹을 수 있는 위험한 결정은 하지 않는게 좋을 것 같았습니다. 이건 나중에 개인 PC에서 사용해보는걸로...
그러면 Arch와 Rocky가 남게 되는데, 이건 좀 많은 고민을 하긴 했습니다. 왜냐면 아치리눅스는 제가 노트북에서 꽤 오래간 사용해온 리눅스이고, 문제 해결 노하우도 꽤 익숙해져 있는 참이기 때문에, 그리고 DE를 제외하면 에러도 그렇게 많이 나진 않았습니다. 아마도.
하지만 결국 Rocky를 선택하게 되었는데, 혹시 모를 롤링릴리스 시의 서버 폭파가 우려되어서, 그리고 아치를 쓰면서 안정성을 챙기려면 AUR (Arch User Repository)를 사용하지 않아야 하는데, 저는 도저히 아치를 쓰면서 AUR의 유혹을 이겨낼 자신이 없었습니다.
마침 RHEL 기반 배포판을 써보고도 싶었기 때문에, 결국엔 Rocky Linux를 선택하게 되었습니다.
Rocky Linux를 Rufus로 USB에 담고 부팅했는데, 사실 좀 당황스러웠습니다.. 제가 설치해본 서버용 리눅스 배포판이라고는 Ubuntu 밖에 없고, 개인 PC도 아치를 깔아서 쓰는 마당에, 갑자기 형형색색의 GUI 설치 메뉴를 제공해주니 처음엔 제가 서버용이 아니라 데스크탑용 설치 디스크를 받았나 싶었습니다.
하지만 검색해보니 거기서 기본 패키지들을 선택해서 설치할 수 있고, GUI 환경은 설치하지 않을 수 있다는 것 같아서 적당히 눌러서 설치했습니다.
ssh 서버는 openssh를 이용해서 적당히 열 수 있었습니다. 이것까지는 거의 로키리눅스가 자동으로 해줬다고 봐도 좋은데, 문제는 저는 ssh 포트를 하나 더 열어둔다는 점입니다.
그 이유는 학교에서 서버에 접속하기 위해서인데, 경기북과고 학생의 숙적 의정부 교육청에서 22번 포트를 막아두기 때문에, 원활한 접속을 위해 저는 2022번 포트도 함께 열어야 했습니다.
그런데 넘어야할 벽이 두 개 있었습니다.
저는 단 한번도 리눅스에 방화벽을 걸어둔 적이 없습니다. 방화벽 자체의 개념은 알고 있었지만 (트래픽 검사, 차단) 귀찮아서, 그리고 이미 돌아가는 서버에 깔기가 어려워서 (혹시라도 방화벽이 22번 포트를 막아버리면 대재앙이 열리므로) 단 한번도 설치해본 적이 없었습니다. 그런데 로키 리눅스에서는 기본적으로 방화벽이 깔려있었고, 강력한 보안시스템으로 주인의 접속을 차단했습니다.
방화벽을 써본적은 없었지만, 방화벽을 써야겠다는 필요성 정도는 느끼고 있던지라, 방화벽을 끄는 대신 쓰기로 마음먹었습니다. 솔직히 서버에 TwinIP걸고 방화벽까지 없이 쓰는 건 미친 짓이라는 것도 어느정도 자각하고 있던지라
여러가지 방법이 있지만, ssh 서비스 아래에 2022 포트를 추가하는게 제일 깔끔하다고 생각이 들어서, /usr/lib/firewalld/services/ssh.xml
을 수정해서 포트를 추가했습니다.
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is ... </description>
<port protocol="tcp" port="22"/>
<port protocol="tcp" port="2022"/>
</service>
그런데 방화벽을 설정해도 제 로키 리눅스 시스템의 강력한 보안은 주인의 2022번 포트로의 접근을 차단하고 있었습니다. 도저히 원인을 모르겠어서 막 뒤져보던 중, ssh의 포트를 바꾸기 위한 설정파일인 sshd_config에서 이런 문장을 발견할 수 있었습니다.
If you want to change the port on a SELinux system, you have to tell SELinux about this change.
semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
RTFM을 하지 않아서 1시간 동안 삽질한 것이었습니다. SELinux가 뭔지 검색해 봤는데, Security Enhanced Linux... 시스템의 파일 엑세스를 제어하는 리눅스 커널의 보안 아키텍처인 듯 했습니다.
아무튼 sshd_config에서 시키는대로 포트를 추가했더니 작동했습니다! SELinux와 관련된 내용은 아직도 배우고 있는데, 나중에 정리된 글로 쓸 수 있었으면 좋겠네요.
2022번 포트까지 열었으니, 새 리눅스 배포판을 깔고 나면 꼭 해야하는 일이 있습니다. 바로 neofetch
의 설치인데요. 예쁜 리눅스 배포판 로고랑 별로 안 중요한 기타 시스템 정보들을 터미널에 예쁘게 띄워주는 프로그램입니다.
그런데 # dnf install neofetch
로는 neofetch가 깔리지 않았습니다. 레포에 neofetch가 없는 듯 했는데, 해결법을 찾던 중에 EPEL (Extra Packages for Enterprise Linux) 이라는걸 알게 되었습니다. 바로 추가했고, (# dnf install epel-release
) neofetch를 설치하려고 했습니다. 그런데 문제가 있었습니다.
꼴랑 로고 띄워주는 셸 스크립트인데, 용량이 500M나 했습니다. 500킬로가 아니라 500메가..? 저는 제가 뭔갈 잘못 보고있나 싶었습니다.
이유는 EPEL의 neofetch가 의존성으로 그래픽 환경을 가지고 온다는 점이었습니다. 이쁜 로고를 보고 싶었지만, 서버에 x11을 깔 생각은 없었습니다.
암튼 깔긴 깔았는데, 그렇게 실행해보니 멋들어진 로키 리눅스 로고가 아닌 턱스가 절 반겨주었습니다.
아래처럼 생겼습니다. (제 스크린샷은 아닙니다.)
턱스에 악감정이 있는건 아닌데, 저는 로키 리눅스 로고를 원했지 턱스를 원한건 아니었습니다.
이 문제들을 해결하기 위해서 저는 github에서 neofetch를 클론해와서 make install
로 설치했습니다. github의 neofetch에는 비교적 최신 배포판인 로키 리눅스의 로고가 누군가의 PR 덕분에 들어가 있었고, (EPEL은 구버전을 주는 것 같습니다.) 더불어 쓰잘데기 없는 그래픽 환경을 강매하지 않습니다. 이 과정은 상당히 간단했으니 생략하죠.
예쁜 neofetch 입니다!
로키 리눅스 (정확힌 RHEL 계열 리눅스 들) 에는 Cockpit이라는 도구가 있습니다. 웹을 이용해서 서버를 모니터링하거나, 제어할 수 있는 도구인데, 마침 제가 원하던 것이었기 때문에 바로 설치했습니다. 친절한 로키 리눅스는 비록 주인은 못 알아봤지만 Cockpit은 자동으로 방화벽과 SELinux 설정이 되어있었기 때문에, 파이어폭스에서 바로 9090포트로 접근할 수 있었습니다.
Rocky Linux로 서버를 구축하고 사용한지 이제 2주가 지났습니다.
지금까지의 평으로는, 꽤 만족스럽습니다. 아직 안 터져서 일 수도 있겠지만 일단 내부 DB가 외부에 바로 노출되어 있던... 전 서버보다는 보안도 좀 개선된 것 같은 기분이 듭니다.
아직도 SELinux는 엔진엑스를 차단하거나 하지만, 그런 문제 해결도 어느정도 익숙해졌기 때문에 이제 30분만 삽질하면 SELinux 관련 문제를 해결할 수 있게 되었습니다. 소요 시간이 반으로 줄었죠.
조금 더 써보고 괜찮으면 앞으로 개인 서버는 전부 로키나 RHEL 계열 리눅스를 사용해보지 않을까 싶습니다.