19장. Squiid 캐싱 프록시
Squid는 FTP, Gopher 및 HTTP 데이터 개체를 지원하는 웹 클라이언트를 위한 고성능 프록시 캐싱 서버입니다. 자주 요청되는 웹 페이지를 캐싱하고 다시 사용하여 대역폭을 줄이고 응답 시간을 개선합니다.[17]
Red Hat Enterprise Linux에서 squid 패키지는 Squid 캐싱 프록시를 제공합니다. 다음 명령을 입력하여 squid 패키지가 설치되어 있는지 확인합니다.
~]$ rpm -q squid
package squid is not installed
설치되지 않고 squid를 사용하려면
yum 유틸리티를 root로 사용하여 설치합니다.
~]# yum install squid
19.1. Squiid 캐싱 프록시 및 SELinux 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
SELinux가 활성화되면 Squid는 기본적으로 제한된 상태로 실행됩니다. 제한된 프로세스는 자체 도메인에서 실행되며 다른 제한된 프로세스와 분리됩니다. SELinux 정책 구성에 따라 공격자가 제한된 프로세스가 손상되면 공격자가 리소스에 대한 액세스와 가능한 손상을 제한합니다. 다음 예제에서는 자체 도메인에서 실행되는 Squid 프로세스를 보여줍니다. 이 예제에서는 squid 패키지가 설치되어 있다고 가정합니다.
- getenforce 명령을 실행하여 SELinux가 강제 모드에서 실행 중인지 확인합니다.
~]$ getenforce Enforcing이 명령은 SELinux가 강제 모드에서 실행되는 경우Enforcing을 반환합니다. - root 사용자로 다음 명령을 입력하여
squid데몬을 시작합니다.~]# systemctl start squid.service서비스가 실행 중인지 확인합니다. 출력에는 아래 정보가 포함되어야 합니다(시간 스탬프만 다릅니다).~]# systemctl status squid.service squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: active (running) since Mon 2013-08-05 14:45:53 CEST; 2s ago - 다음 명령을 입력하여
squid프로세스를 확인합니다.~]$ ps -eZ | grep squid system_u:system_r:squid_t:s0 27018 ? 00:00:00 squid system_u:system_r:squid_t:s0 27020 ? 00:00:00 log_file_daemonsquid프로세스와 관련된 SELinux 컨텍스트는system_u:system_r:squid_t:s0입니다. 컨텍스트의 마지막 부분인squid_t는 유형입니다. 유형은 프로세스 및 파일의 유형에 대한 도메인을 정의합니다. 이 경우 Squid 프로세스는squid_t도메인에서 실행됩니다.
SELinux 정책은
squid_t 와 같이 제한된 도메인에서 실행되는 프로세스(예: 파일, 기타 프로세스, 일반적으로 시스템과 상호 작용하는 방법을 정의합니다. squid 액세스를 허용하려면 파일에 올바르게 레이블이 지정되어야 합니다.
/etc/squid/squid.conf 파일이 구성되어 있으므로 squid 가 기본 TCP 포트 3128, 3401 또는 4827 이외의 포트에서 수신 대기하면 semanage port 명령을 사용하여 SELinux 정책 구성에 필요한 포트 번호를 추가해야 합니다. 다음 예제에서는 SELinux 정책 구성에 처음 정의되지 않은 포트에서 수신 대기하도록 squid 를 구성하는 방법을 보여줍니다. 결과적으로 서버가 시작되지 않습니다. 이 예제에서는 데몬이 정책에 아직 정의되지 않은 비표준 포트에서 수신 대기하도록 SELinux 시스템을 구성하는 방법도 보여줍니다. 이 예에서는 squid 패키지가 설치되어 있다고 가정합니다. 예제에서 root 사용자로 각 명령을 실행합니다.
squid데몬이 실행 중이 아닌지 확인합니다.~]# systemctl status squid.service squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: inactive (dead)출력이 다르면 프로세스를 중지합니다.~]# systemctl stop squid.service- 다음 명령을 입력하여 SELinux를 통해
squid가 수신 대기할 수 있는 포트를 확인합니다.~]# semanage port -l | grep -w -i squid_port_t squid_port_t tcp 3401, 4827 squid_port_t udp 3401, 4827 /etc/squid/squid.conf를 root로 편집합니다.squid의 SELinux 정책 구성에 구성되지 않은 포트를 나열하도록http_port옵션을 구성합니다. 이 예에서는 데몬이 포트 10000에서 수신 대기하도록 구성되어 있습니다.# Squid normally listens to port 3128 http_port 10000- setsebool 명령을 실행하여
squid_connect_any부울이 off로 설정되어 있는지 확인합니다. 이렇게 하면squid가 특정 포트에서만 작동할 수 있습니다.~]# setsebool -P squid_connect_any 0 squid데몬을 시작합니다.~]# systemctl start squid.service Job for squid.service failed. See 'systemctl status squid.service' and 'journalctl -xn' for details.다음과 유사한 SELinux 거부 메시지가 기록됩니다.localhost setroubleshoot: SELinux is preventing the squid (squid_t) from binding to port 10000. For complete SELinux messages. run sealert -l 97136444-4497-4fff-a7a7-c4d8442db982- 이 예제에서 사용되는 대로
squid가 포트 10000에서 수신 대기하도록 허용하려면 다음 명령이 필요합니다.~]# semanage port -a -t squid_port_t -p tcp 10000 - 다시
squid를 시작하고 새 포트에서 수신 대기하도록 합니다.~]# systemctl start squid.service - Squid가 비표준 포트(이 예에서는 TCP 10000)에서 수신 대기하도록 SELinux가 구성되었으므로 이 포트에서 성공적으로 시작됩니다.