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¶
방화벽 정책은 배치 구조에 따라 다르게 적용함.
- 단일 서버 구성 (Nginx와 GitLab이 같은 서버)
- Reverse Proxy(Nginx) 와 GitLab을 동일 서버에서 운영하는 구조
- 분리 구성 (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.xmlgitlab-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