콘텐츠로 이동

GitLab SELinux and Firewall

1. SELinux

1.1 비표준 포트 정책

비표준 포트(8081, 2222)를 사용하는 서버에서는 OS 보안 정책을 반드시 갱신해야 함. 본 설정은 GitLab Web Service(8081) 및 GitLab SSH(2222)를 실제로 Listen 하는 서버에 공통 적용함.

# GitLab Web Service Port
sudo semanage port -a -t http_port_t -p tcp 8081 2>/dev/null || true

# GitLab SSH Port
sudo semanage port -a -t ssh_port_t -p tcp 2222 2>/dev/null || true

# 확인
sudo semanage port -l | grep -E '8081|2222'

1.2 트워크 및 파일 접근 정책

SELinux가 활성화된 환경에서는 네트워크 및 파일 접근 정책을 확인해야 함. Reverse Proxy(Nginx/Apache)가 다른 서버로 proxy_pass 하는 경우 필요함.

sudo getsebool -a | grep httpd_can_network_connect
sudo setsebool -P httpd_can_network_connect on

2. Firewall

방화벽 정책은 배치 구조에 따라 다르게 적용함.

  1. 단일 서버 구성 (Nginx와 GitLab이 같은 서버)
    • Reverse Proxy(Nginx) 와 GitLab을 동일 서버에서 운영하는 구조
  2. 분리 구성 (Nginx: 192.168.0.154, GitLab: 192.168.0.100)
    • Gateway(Nginx) 와 GitLab을 서로 다른 서버에 분리하여 운영하는 구조
    • GitLab Web Service 를 반드시 내부 포트(8081)로만 전달함. ex) proxy_pass http://192.168.0.100:8081;

2.1. firewalld Service 등록

GitLab Web Service 및 SSH Port 를 firewalld Service 로 등록함.

2.1.1. Service 정의 파일 업로드

서비스 정의 파일

  • gitlab-web-service.xml
  • gitlab-ssh.xml

을 서버로 업로드함

2.1.2. 적용

# firewalld Service 경로로 이동
sudo mv /[UploadedFolder]/gitlab-*.xml /etc/firewalld/services/

# 권한 설정
sudo chown root:root /etc/firewalld/services/gitlab-*.xml
sudo chmod 644 /etc/firewalld/services/gitlab-*.xml

# firewalld 적용
sudo firewall-cmd --reload

# 등록 확인
sudo firewall-cmd --get-services | grep gitlab

2.2. 단일 서버 구성 (Nginx와 GitLab이 같은 서버)

  • Reverse Proxy(Nginx) 와 GitLab을 동일 서버에서 운영하는 구조

2.2.1. HTTP/S

# HTTP/S
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

2.2.2. GitLab Web Service (8081)

  • GitLab Web Service 는 Loopback(127.0.0.1) 에만 바인딩하여 외부 및 내부망에서 직접 접근하지 못하도록 구성함.
  • 외부 및 내부망에서 직접 접근 차단함
  • 별도 firewalld 허용 불필요

2.2.3. GitLab SSH (2222)

  • 내부망 / 관리자 또는 특정 IP 만 허용
내부망 허용

예: 192.168.0.0/24

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="gitlab-ssh" accept'
관리자 또는 특정 IP 만 허용

예: 192.168.0.57

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.57/32" service name="gitlab-ssh" accept'
사용하지 않을 경우 설정하지 않음
  • SSH보다 HTTP/S 기반 사용이 주된 경우 생략 가능함
  • SSH 접근이 필요하지 않은 경우 설정하지 않아도 됨

2.3. 분리 구성 (Nginx: 192.168.0.154, GitLab: 192.168.0.100)

  • Gateway(Nginx) 와 GitLab을 서로 다른 서버에 분리하여 운영하는 구조
  • GitLab Web Service 를 반드시 내부 포트(8081)로만 전달함. ex) proxy_pass http://192.168.0.100:8081;

2.3.1. HTTP/S

  • GitLab 서버에서는 80/443 을 직접 허용하지 않음

2.3.2. GitLab Web Service (8081)

  • GitLab Web Service 는 Gateway Nginx 서버에서만 접근 허용함
  • 기본 정책은 Gateway IP 1개만 허용함
내부망 허용
  • Gateway 서버만 허용

예: 192.168.0.154

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.154/32" service name="gitlab-web-service" accept'
관리자 또는 특정 IP 직접 허용
  • 설정하지 않음

2.3.3. GitLab SSH (2222)

  • 내부망 / 관리자 또는 특정 IP 만 허용
내부망 허용

예: 192.168.0.0/24

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="gitlab-ssh" accept'
관리자 또는 특정 IP 만 허용

예: 192.168.0.57

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.57/32" service name="gitlab-ssh" accept'
사용하지 않을 경우 설정하지 않음
  • SSH보다 HTTP/S 기반 사용이 주된 경우 생략 가능함
  • SSH 접근이 필요하지 않은 경우 설정하지 않아도 됨

2.4. firewalld 적용 및 확인

sudo firewall-cmd --reload
sudo firewall-cmd --permanent --list-all
sudo firewall-cmd --permanent --list-rich-rules
sudo firewall-cmd --permanent --list-services