Web 및 FTP 서버 설치, 구성 및 보안 설정 – RHCSA 시리즈: 파트 9

A web server (also known as a HTTP server) is a service that handles content (most commonly web pages, but other types of documents as well) over to a client in a network.

A FTP server is one of the oldest and most commonly used resources (even to this day) to make files available to clients on a network in cases where no authentication is necessary since FTP uses username and password without encryption.

웹 서버는 RHEL 7에서 사용 가능한 Apache HTTP Server의 버전은 2.4입니다. FTP 서버의 경우, TLS로 보호된 연결을 설정하기 위해 Very Secure Ftp Daemon (일명 vsftpd)를 사용할 것입니다.

RHCSA: Installing, Configuring and Securing Apache and FTP – Part 9

이 기사에서는 RHEL 7에서 웹 서버와 FTP 서버를 설치, 구성 및 보호하는 방법을 설명하겠습니다.

Apache 및 FTP 서버 설치

이 가이드에서는 정적 IP 주소 192.168.0.18/24를 가진 RHEL 7 서버를 사용할 것입니다. Apache 및 VSFTPD를 설치하려면 다음 명령을 실행하십시오:

# yum update && yum install httpd vsftpd

설치가 완료되면 두 서비스 모두 처음에는 비활성화되어 있으므로 일시적으로 수동으로 시작하고 다음 부팅부터 자동으로 시작하도록 설정해야 합니다:

# systemctl start httpd
# systemctl enable httpd
# systemctl start vsftpd
# systemctl enable vsftpd

또한, 웹 및 FTP 데몬이 각각 수신 대기 중인 포트 8021을 열어서 외부에서 해당 서비스에 액세스할 수 있도록 해야 합니다:

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-service=ftp --permanent
# firewall-cmd --reload

웹 서버가 올바르게 작동하는지 확인하려면 브라우저를 실행하고 서버의 IP를 입력하십시오. 테스트 페이지가 표시되어야 합니다:

Confirm Apache Web Server

FTP 서버의 경우, 예상대로 작동하는지 확인하기 전에 추가 구성이 필요할 것입니다. 이를 확인하기 전에 수행할 것입니다.

Apache 웹 서버 구성 및 보안

Apache의 주 구성 파일은 /etc/httpd/conf/httpd.conf에 위치해 있지만, /etc/httpd/conf.d 내에 있는 다른 파일에 의존할 수도 있습니다.

기본 구성은 대부분의 경우에 충분하지만, 공식 문서에 설명된 모든 가능한 옵션에 익숙해지는 것이 좋습니다.

항상 편집하기 전에 주 구성 파일의 백업 복사본을 만드는 것이 좋습니다:

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

그런 다음 선호하는 텍스트 편집기로 열고 다음 변수를 찾아보세요:

  1. ServerRoot: 서버의 구성, 오류 및 로그 파일이 보관되는 디렉토리입니다.
  2. Listen: Apache가 특정 IP 주소 및/또는 포트에서 수신하도록 지시합니다.
  3. Include: 기존해야 하는 다른 구성 파일을 포함할 수 있습니다. 그렇지 않으면 서버가 실패합니다. 이와는 달리 IncludeOptional 지시문은 지정된 구성 파일이 없는 경우 무시됩니다.
  4. User and Group: httpd 서비스를 실행할 사용자/그룹의 이름입니다.
  5. DocumentRoot: Apache가 문서를 제공할 디렉토리입니다. 기본적으로 모든 요청은 이 디렉토리에서 처리되지만, 심볼릭 링크 및 별칭을 사용하여 다른 위치를 가리킬 수 있습니다.
  6. ServerName: 이 지시문은 서버가 자신을 식별하는 데 사용하는 호스트명(또는 IP 주소) 및 포트를 설정합니다.

첫 번째 보안 조치는 전용 사용자 및 그룹(tecmint/tecmint)을 생성하여 웹 서버를 실행하고 기본 포트를 더 높은 포트(9000 이 경우)로 변경하는 것으로 구성될 것입니다.

ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000

구성 파일을 다음과 같이 테스트할 수 있습니다.

# apachectl configtest

모든 것이 정상이라면 웹 서버를 다시 시작하세요.

# systemctl restart httpd

그리고 방화벽에서 새 포트를 활성화하고(기존 포트를 비활성화) 잊지 마세요.

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=9000/tcp --permanent
# firewall-cmd --reload

SELinux 정책으로 인해 웹 서버에 사용할 수 있는 포트는

# semanage port -l | grep -w '^http_port_t'

에서 반환됩니다.

다른 포트를 사용하려면(TCP 포트 8100 등) SELinux 포트 컨텍스트에 추가해야 합니다. httpd 서비스에 대한:

# semanage port -a -t http_port_t -p tcp 8100
Add Apache Port to SELinux Policies

Apache 설치를 더욱 안전하게 하려면 다음 단계를 따르세요:

1. Apache가 실행되는 사용자는 셸에 액세스할 수 없어야 합니다.

# usermod -s /sbin/nologin tecmint

2. 디렉터리 목록을 비활성화하여 디렉터리에 index.html이 없는 경우 브라우저가 디렉터리 내용을 표시하지 못하도록 합니다.

/etc/httpd/conf/httpd.conf(및 가상 호스트의 구성 파일, 있을 경우)을 편집하여 상단 및 디렉터리 블록 수준의 Options 지시문이 None으로 설정되었는지 확인하세요:

Options None

3. HTTP 응답에서 웹 서버 및 운영 체제에 대한 정보를 숨기세요. 다음과 같이 /etc/httpd/conf/httpd.conf을 편집하세요:

ServerTokens Prod 
ServerSignature Off

이제 /var/www/html 디렉토리에서 콘텐츠를 제공할 준비가 되었습니다.

FTP 서버 구성 및 보안

Apache의 경우와 마찬가지로, Vsftpd의 주 구성 파일 (/etc/vsftpd/vsftpd.conf)은 주석이 잘 달려 있으며 기본 구성이 대부분의 응용 프로그램에 적합하겠지만, FTP 서버를 더 효율적으로 운영하기 위해 문서와 man 페이지 (man vsftpd.conf)에 익숙해져야 합니다 (이 부분을 강조할 수 없습니다!).

우리의 경우 사용된 지시문은 다음과 같습니다:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

chroot_local_user=YES를 사용하면 로컬 사용자가 로그인 직후에 홈 디렉토리에 chroot된 감옥에 자동으로 배치됩니다. 이는 로컬 사용자가 해당 홈 디렉토리 외부의 파일에 액세스할 수 없음을 의미합니다.

마지막으로, 사용자의 홈 디렉토리에서 파일을 읽을 수 있도록 FTP에 다음 SELinux 불리언을 설정하십시오:

# setsebool -P ftp_home_dir on

이제 Filezilla와 같은 클라이언트를 사용하여 FTP 서버에 연결할 수 있습니다:

Check FTP Connection

/var/log/xferlog 로그는 다운로드 및 업로드를 기록하며 위의 디렉토리 목록과 일치합니다:

Monitor FTP Download and Upload

추가 읽기: Trickle을 사용하여 Linux 시스템에서 응용 프로그램이 사용하는 FTP 네트워크 대역폭 제한

요약

이 튜토리얼에서는 웹 및 ftp 서버를 설정하는 방법을 설명했습니다. 주제의 방대성으로 인해 이러한 주제의 모든 측면을 다루는 것은 불가능합니다(즉, 가상 웹 호스트). 따라서, 이 웹사이트의 다른 훌륭한 기사들도 확인하는 것을 권장합니다. Apache에 대한.

Source:
https://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/