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_daemon
squid
프로세스와 연결된 SELinux 컨텍스트는system_u:system_r:squid_t:s0입니다
. 컨텍스트의 마지막 부분인squid_t
는 유형입니다. 유형은 프로세스 및 파일의 유형에 대한 도메인을 정의합니다. 이 경우 Squid 프로세스는squid_t
도메인에서 실행됩니다.
SELinux 정책은 제한된 도메인(예:
squid_t
)에서 실행되는 프로세스를 파일, 기타 프로세스 및 일반적인 시스템과 상호 작용하는 방법을 정의합니다. squid 액세스를 허용하려면 파일에 올바르게 레이블이 지정되어야 합니다.
squid가 기본 TCP 포트 3128, 3401 또는 4827 이외의 포트에서
수신 대기
하도록 /etc/squid/squid.conf
파일을 구성하는 경우 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
를 루트로 편집합니다. 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
- SELinux가 포트 10000에서 수신 대기
하도록
하려면 다음 명령이 필요합니다.~]# semanage port -a -t squid_port_t -p tcp 10000
- 다시
squid
를 시작하고 새 포트에서 수신 대기하도록 합니다.~]# systemctl start squid.service
- Squid가 비표준 포트(이 예에서는 TCP 10000)에서 수신 대기하도록 SELinux가 구성되었으므로 이 포트에서 성공적으로 시작됩니다.