Squid를 활용한 Proxy서버 구축

Proxy서버는 Cache서버 라고도 불리우며 네트워크 상의 각 노드들이
네트워크 서비스(외부:WAN)으로 접속하려 할 때, 각 노드들이 기존에 접속했던 정보를 쿠키(Cookie)로 보유함으로써
내부 네트워크 (내부:LAN)와외부 네트워크 서버 사이에서 연결에 대한 도움을 주는 중계기 같은 역할을 하는 서버이다.

네트워크 구성도

예를들어 위와 같은 그림의 구조를 가진 네트워크에서 1 ~3 번 노드들이
기존에 접속했었던 서버의 정보(쿠키)를 프록시 서버에 저장 해두었다가.
추후 동일한 서버로의 접속을 요청하면 외부(ex. Global DNS)로 쿼리를 하지않고,

내부의 프록시 서버가 경로를 지정해주므로 경로가 단순화 될 수 있다는 장점(트래픽 감소)이 존재하며
유해 사이트 및 접근해서는 안되는 서버를 ACL로 Permit, Deny로 통제해주는 역할을 수행한다.

많이 사용하게 되는 웹 브라우저에 프록시 서버를 지정하여 접속 제한을 하는 진행

* 실습환경 : M1 Based Mac(ARM64)
** 네트워크 대역 : 10.211.55.0/24
*** 해당 실습에서 사용된 가상 머신 : Fedora(.30= Proxy Server), Fedora(.20 = Just Node..)

● Proxy Server 구축

sudo dnf install -y squid

프록시 서버 구축을 위한 Squid 패키지를 다운로드

# 원본파일 백업
sudo cp -arp /etc/squid/squid.conf /etc/squid/squid.conf.bak

# Squid 설정파일 수정
sudo vim /etc/squid/squid.conf

[squid.conf 수정내용]
2 # Recommended minimum configuration:
5 # Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
7 # should be allowed
8 acl bad url_regex -i "/etc/squid/blocked"	### 해당부분에 룰과 참조파일 경로를 지정
9 acl localnet sc 0.0.0.1-0.255.255.255
10 acl localnet sc 10.0.0.0/8
11 acl localnet sc 100.64.0.0/10
12 acl localnet sc 169.254.0.0/16
13 #acl localnet sc 172.16.0.0/12
14 acl localnet sc 10.211.55.0/24
.
.
.
52 # Example rule allowing access from your local networks.
53 # Adapt localnet in the AL section to list your (internal IP networks
54 # from where browsing should be allowed
55 http access allow localnet !bad			### bad로 지정되지 않는 IP접속은 허가
56 http_access allow localhost

58 # And finally deny all other access to this proxy
59 http_access deny all

61 # Squid normally listens to port 3128
62 http port 3128							### Proxy 서버로 사용할 Port 번호
63 # Uncomment and adjust the following to add a disk cache directory.
64 #cache dir ufs /var/spool/squid 100 16 256

66 # Leave coredumps in the first cache dir
67 coredump_dir /var/spool/squid


/etc/squid/squid.conf
/etc/squid/sqiud.conf


# 차단될 FQDN(목적지)가 정의된 파일생성
sudo vim /etc/squid/blocked

[파일내용]
1 www.youtube.com
2 .daum.net
3 .naver.com

# 앞 부분 ~.[FQDN]을 사용하면 프로토콜과 관계 없이 도메인 전체차단의 효과
# 정규표현식의 Asterisk(*)과 유사한효과


[방화벽 설정]
sudo firewall-cmd --permanent --zone=public --add-service=squid 
sudo firewall-cmd --reload
sudo firewall-cmd --list-services

[포트확인 Open상태 확인]
sudo ss -nltp | grep LISTEN
방화벽과 포트 LISTEN 상태를 확인



● Fedora(.20 = Node)에서 프록시 서버를 지정

Firefox

웹 브라우저 우측 상단의 삼단바를 클릭하여 Setting 클릭 후,
설정 페이지로 접근

Firefox

우측의 검색창에 'proxy'를 입력 후 검색

Firefox

'Manual Proxy Configuration' 체크란에 체크 후, 앞에서 프록시 서버로 구축한
프록시 서버의 주소(10.211.55.30)와 포트번호 '3128'을 기재하여 저장

Firefox

앞에서 정의한 'blocked'에 지정 되어있지 않은 facebook 웹 사이트 접속은 정상적으로 가능

Firefox

차단 목록에 포함 되어있는 ~.naver.com 사이트 접속요청 시
'The Proxy server is refusing' 이라는 경고문과 함께
접근이 차단되는 것을 확인할 수 있다.

'Linux_System' 카테고리의 다른 글

[Linux]Log_Server  (0) 2023.02.10
[Linux]DHCP  (0) 2023.02.10
[Linux]Ansible  (0) 2023.02.04
[Linux]YUM_Priority  (0) 2023.01.18
[Linux]ZFS  (0) 2023.01.16

PAM(Pluggable Authentication Module)

PAM/etc/pam.d에 있는 모듈별 파일로 인증을 관리하는데,

/etc/crond, /etc/ssh/sshd_conf ... 등의 해당 패키지의 기본 설정파일에서 각각 해당 모듈에 대한 사용자 인증을 설정할 수 있지만

PAM을 통하여 접근 인증을 하게되면, 기존의 서비스 마다 인증을 해야하는 방식 보다는

효율적이며 인증요청 시 서비스가 직접 인증을 하는 것이 아닌,

PAM을 통해 인증을 받기 때문에 정책 설정이 용이하며 일관성 있는 인증 관리가 가능하다는 점이 존재한다.

 

 

● PAM의 형태

cat -n /etc/pam.d/

모든 서비스가 PAM 을 사용할 수 있는 것은 아니며,

Linux PAM API로 개발된 라이브러리를 사용하는 서비스여야 PAM 사용이 가능하다.

 

cat -n /etc/ssh/sshd_config

현재 ssh 서비스는 'UsePAM yes' 상태로 인증에 관한 통제를 PAM을 통하여 하고있는 것을 알 수 있다.

 

cat -n /etc/pam.d/sshd

설정파일의 세 가지 항목으로

[auth type] [control flag] [module] 있으며,

 

▶︎ auth type : 사용자 인증, 사용자를 룰에 의해 관리할 때 사용하며

▶︎ control flag : 모듈의 성공 및 실패 시, '최종 성공' '다음 룰 진행' '최종 실패' 여부를 정함

▶︎ module : 룰에서 사용될 모듈을 지정

 

ls /lib64/security OR ls /lib/security

PAM 이 Default로 참조하는 모듈이 있는 장소이다.

참조해야 할 모듈이 해당 경로에 있는 것이 아니라면,

링크를 걸어주거나 절대경로 값을 입력해야한다.

 

 

● wheel 그룹만 su command 사용이 가능하게끔 통제

vim /etc/pam.d/su

주석처리 되어있는 빨간색 박스부분의 룰을 주석 해제하여 활성화 후 저장해준다.

해당 PAM 모듈(pam_wheel.so)의 인자(argument)로는 현재 사용중인 유저의 UID이다.

인증을 시도한 유저의 UID가 wheel 그룹에 포함 되어있지 않으면, 최종실패라는 결과를 도출하는 것

 

grep wheel /etc/group

wheel 그룹에 'fedora', 'park' 유저만 가입되어 있는 것을 확인

 

(좌) User : 'abc' / (우) User : 'park'

그림으로도 확인이 가능하듯, wheel 그룹에 소속되어 있지 않은 abc유저의 경우

기존 root의 패스워드를 알고있다면 사용이 가능했을 'su' 커맨드인데

PAM 모듈을 통한 인증 때문에 접근거부 된 것을 확인

'Linux_System' 카테고리의 다른 글

[Linux]YUM_Priority  (0) 2023.01.18
[Linux]ZFS  (0) 2023.01.16
[Linux]Process(2)_top  (0) 2022.11.08
[Linux]Process(1)_ps  (0) 2022.11.05
[Linux]Software_Compile  (0) 2022.10.31

+ Recent posts