리눅스 서버 보안을 위한 포트 사용 최적화

Updated on 2020-07-07 by

사이트 보안을 강화는 방법으로 불필요하게 포트를 열어 놓았는지 확인해 반드시 필요한 포트만 여는 포트 사용 최적화 방법에 대해서 살펴보도록 하죠.

서버에서 사용하는 포트는 아래와 같이 세가지 주요 그룹으로 나눌 수 있습니다.

  1. 시스템 포트(System ports), 0-1023 – 핵심 서비스와 관련된 포트로 운영 체제에 필수적인 포트
  2. 사용자 포트(User ports), 1024-49151 – IANA가 ‘IETF Review’, ‘IESG Approval’, ‘Expert Review’ 프로세스를 위해 할당한 포트
  3. 동적 포트(Dynamic ports), 49152-65535 – 개인적이 용도로 사용하는 프라이빗 포트

어떤 포트를 사용하고 있는지 확인

현재 사이트에서 어떤 포트를 열어놓고 있는지 확인하기 위해서 아래와 같이 netstat -ano 명령을 사용해 봤습니다.

이 명령을 사용하면 아래와 같이 현재 열린 포트 및 대기하고 있는 포트들을 전부 다 보여줍니다. 또한 이 내용외에 다양한 내용을 출력해 줍니다. 너무 많아 기가 질릴 정도..

# netstat -ano Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State Timer tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 0.0.0.0:***** 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 141.164.48.62:443 189.40.73.149:12786 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 180.65.25.237:45753 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 203.175.39.84:49433 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 72.14.199.27:49062 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 222.234.131.7:7507 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 66.249.79.158:42357 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 189.40.73.149:12792 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 61.81.11.245:11848 TIME_WAIT timewait (7.58/0/0) tcp 0 0 141.164.48.62:443 189.40.73.149:12788 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 118.45.130.180:38805 TIME_WAIT timewait (57.05/0/0) tcp 0 0 141.164.48.62:443 124.50.187.177:57167 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 66.249.79.129:56320 ESTABLISHED off (0.00/0/0) tcp 0 180 141.164.48.62:***** 124.50.187.177:57295 ESTABLISHED on (0.22/0/0) tcp 0 0 141.164.48.62:443 66.249.79.120:43419 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 211.243.82.156:49304 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 66.249.79.159:40840 TIME_WAIT timewait (34.53/0/0) tcp 0 0 141.164.48.62:443 211.178.105.144:56345 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 66.249.79.118:54414 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 66.249.79.158:62256 TIME_WAIT timewait (2.30/0/0) tcp 0 0 141.164.48.62:443 222.121.168.2:4079 ESTABLISHED off (0.00/0/0) tcp 0 0 141.164.48.62:443 121.151.167.84:47722 ESTABLISHED off (0.00/0/0) tcp6 0 0 :::25 :::* LISTEN off (0.00/0/0) tcp6 0 0 ::1:6010 :::* LISTEN off (0.00/0/0) tcp6 0 0 :::***** :::* LISTEN off (0.00/0/0) udp 0 0 127.0.0.53:53 0.0.0.0:* off (0.00/0/0) udp 0 0 141.164.48.62:68 0.0.0.0:* off (0.00/0/0)

또는 netstat 명령대신 요즘 권장된다는 ss 명령을 사용해 봅니다. 조금 더 단순하게 보여줍니다. 간단한 대신 정보가 제한적이네요.

~#ss -ltp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.53%lo:domain 0.0.0.0:* users:((“systemd-resolve”,pid=556,fd
LISTEN 0 100 0.0.0.0:smtp 0.0.0.0:* users:((“master”,pid=1279035,fd=13))
LISTEN 0 128 127.0.0.1:6010 0.0.0.0:* users:((“sshd”,pid=3070675,fd=10))
LISTEN 0 511 0.0.0.0:https 0.0.0.0:* users:((“nginx”,pid=2951636,fd=7),(“
LISTEN 0 128 0.0.0.0:** 0.0.0.0:* users:((“sshd”,pid=2994821,fd=3)) LISTEN 0 70 127.0.0.1:mysql 0.0.0.0:* users:((“mysqld”,pid=2787110,fd=25)) LISTEN 0 511 0.0.0.0:http 0.0.0.0:* users:((“nginx”,pid=2951636,fd=6),(” LISTEN 0 100 [::]:smtp [::]:* users:((“master”,pid=1279035,fd=14)) LISTEN 0 128 [::1]:6010 [::]:* users:((“sshd”,pid=3070675,fd=9)) LISTEN 0 128 [::]:** [::]:* users:((“sshd”,pid=2994821,fd=4))

이러한 명령을 통해서 확인해보면 제가 열어 놓은 포트는 아래와 같습니다.

  • 도메인 네임 서버 TCP 53
  • 도메인 네임 서버 UDP 53
  • SSH (secure shell) 서버 TCP *(ipv4)
  • SSH (secure shell) 서버 TCP *(ipv6)
  • 웹서버 TCP 443
  • 웹서버 TCP 80
  • SMTP(mail sending) 서버 TCP 25(ipv4)
  • SMTP(mail sending) 서버 TCP 25(ipv6)
  • MySQL 서버 tcp 3306
  • X11 forwarding TCP 6010(ipv4)
  • X11 forwarding TCP 6010(ipv6)
  • BOOTP(부트스트랩 프로토콜) 클라이언트, DHCP로도 사용 UDP 68

이러한 포트중에서 눈에 띄는 것이 ipv4와 ipv6가 모두 사용되고 있다는 것이고, X11 forwarding을 위해 TCP 6010이 열고 있다는 점 정도네요. BOOTP(부트스트랩 프로토콜) 클라이언트는 사용하는지 모르겠어 우선은 그냥 두기로 했습니다.

즉 ipv4만 사용하고 ipv6는 사용 중지하며, X11 forwarding을 위해 TCP 6010도 사용하지 않기로 하죠.

ipv6 비활성화

우분투 서버에서 ipv6 비활성화 방법은 아래와 같이 세가지 방법이 있습니다.

sysctl.conf 설정 수정

먼저 /etc/sysctl.conf 설정을 수정하는 것입니다.

nano /etc/sysctl.conf

이 파일 편집 화면에서 아래와 같은 명령을 추가합니다.

net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1

grub 설정 수정

위 방법을 사용해도 좋지만 아래에 설명하는 grub를 사용하는 방법이 더 낫다는 평가가 있습니다.

nano /etc/default/grub

grub 파일 편집 상태에서 아래와 같은 명령을 추가합니다.

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1" GRUB_CMDLINE_LINUX="ipv6.disable=1"

위와 같이 설정을 추가한 후 update-grub 명령을 실행한 후 서버를 부팅하면 적용이 됩니다. ipv6를 사용하지 않을려면 서버 부팅이 필요하군요.

update-grub

ufw 설정 수정

그런데 우분투에서 보통 그렇듯이 방화벽으로 ufw를 사용한다면 /etc/default/ufw 파일을 수정 설정하면 됩니다.

nano /etc/default/ufw

이 파일 편집 화면을 보면 IPV6=yes로 되어 있는데요. 이를 no로 변경하면 됩니다. 이 파일 편집 상태를 저장하면 바로 UFW(Uncomplicated Firewall)가 작동하면서부터 이러한 세팅은 적용이 됩니다.

6010 포트 비활성화

이번에는 ssh daemon의 X11 forwarding을 위해 TCP 6010 포트를 사용하지 않는 방법을 살펴보죠.

리눅스 운영체제에서 GUI 방식의 SSH 사용 시 사용한다고 하는데요. 주로 원격으로 떨어져 있는 서버에 접속해 GUI 기반 어플리케이션을 실행시 사용합니다.

우분투가 윈도우즈처럼 GUI 방식으로 발전하기 때문에 SSH 접속 시 이러한 GUI를 지원하기 위한 기능이라고 볼 수 있는데요. 이는 X윈도우 기반 기능이므로 서버와 클라이언트 모두 X윈도우즈 기반이러야 제대로 작동한다고 합니다.

그렇기때문에 웹서버에서는 사용할 일이 거의 없기 때문에 이를 시용할 필요가 없지 않을까요? 사용 포트에 대한 베스트 프랙티스들을 보니 6010 포트는 리스트에 없더군요.

X11 forwarding는 우분투 20.04에서 기본 yes로 설정되어 있기 때문에 /etc/ssh/sshd_config에서 설정을 no로 변경해야 합니다.

nano /etc/ssh/sshd_config

파일의 맨 아래쪽에 아래와 같은 내용을 볼 수 있는데요. 이중 X11Forwarding yes를 no로 변경하면 됩니다.

#AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no X11Forwarding yes --> no로 변경 #X11DisplayOffset 10 #X11UseLocalhost yes #PermitTTY yes PrintMotd no #PrintLastLog yes #TCPKeepAlive yes #PermitUserEnvironment no #Compression delayed

마찬가지로 이 설정 변경 효과는 서버 재시작해야 작동하는 것 같네요.

설정이 제대로 작동하면 ssh 로그인 시 아래와 같은 경고 표시가 뜹니다.

WARNING! The remote SSH server rejected X11 forwarding request. Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-40-generic x86_64)

서울에 생긴 Vultr 서버 100$ 프로모션 안내

안녕하세요?
새로운 사이트 구축을 위한 신규 서버를 고민하신다면 , 서울 리젼이 생겨 더욱 빨라진 Vultr 서버를 Vultr 100$ 프로모션으로 이용해 보세요.

아래 프로모션 코드 링크를 통해 Vultr에서 서버 구축 후 1달 이상 사용 및 $25이상 결제 時 추가 100$을 주는 프로모션을 진행 中입니다.

아래 이미지를 클릭해 등록할 수 있습니다.

Vultr는 서울에도 리젼이 있어 매우 빠르고, 아마존 웹 서비스(AWS)보다 성능이 높으며 가장 가성비가 뛰어납니다.

거기다 사용자 UI도 좋고, 15개까지 스냅샷을 무료로 제공하기 때문에 관리하기 좋습니다. 그리고 지금 100$ 프로모션처럼 가격적인 메리트도 있습니다.

저는 2016년부터 Vultr 서버를 사용했는데요. 지금까지 잘 사용해 오고 있습니다. 아래 사용기도 참고해 보세요.

도쿄 리젼과 비교해 본 Vultr 서울 리젼 사용기

가성비가 뛰어난 Vultr 가상서버호스팅(클라우드호스팅,VPS) 사용기

Vultr 가상서버호스팅의 새상품 High Frequency 사용기

가상 서버를 운영하고픈 勇者에게 전하는 가상 서버 운영 입문 노하우 – Vultr 가상서버호스팅(VPS)를 중심으로

해외 가상서버호스팅(VPS)이 국내 호스팅보다 빠르다? – 아이비호스팅과 해외 가상서버호스팅 VULTR간 비교

사이트 운영을 위한 안내 – 웹서버 세팅에서 워드프레스 설치까지(우분투 17.10, NGINX 1.13.6, Marian DB 10.2, PHP7.2)

워드프레스 최적화를 위한 18개월간의 고민, 그 노하우를 담다.

20년간 FGCG 마케팅과 전자제품 상품기획 경험을 기반으로 다양한 분야의 마케팅 및 경영 사례 분석에 관심을 가지고 있습니다. 아울러 IT 등 트렌드 분석과 빠르게 변화하는 뉴스에서 얻을 수 있는 인사이트를 분석해 나누고 싶습니다. 개인적으로 사진에 관심에 많아 소소한 일상의 따뜻함을 담고 있습니다.

0 Comments
Inline Feedbacks
View all comments