📝 방화벽
- 방화벽이란 외부의 공개된 네트워크와 내부의 사설 네트워크 사이에 자리잡고, 외부와 내부에 전달되는 트래픽을 '정책(Policy)'에 의해서 허용/거부하는 역할을 하는 컴퓨터나 장치를 말한다.
- 내부의 사용자는 외부의 인터넷을 이용하면서, 외부에서는 내부로 침입할 수 없게 하는 방법 중 가장 보편적으로 많이 사용하는 방법이 사설 IP(Private IP)라고 흔히 불리는 nonroutable IP 주소를 이용하는 것이다.
- 사설 IP 주소 범위는 10.0.0.0 ~ 10.255.255.255, 172.16.0.0 ~ 172.31.255.255, 192.168.0.0 ~ 192.168.255.255 세 범위가 있다.
- 사설 IP 주소의 컴퓨터가 외부의 인터넷으로 접속할 수 있도록 해주는 방법을 IP 마스커레이딩(Masquerading)이라고 한다.
📝 리눅스 방화벽 구축
- 실습을 통해 구현할 네트워크의 구성은 아래 그림과 같다.
📜 실습 개요
- Server 가상머신을 방화벽 컴퓨터로 구축한다.
- 방화벽 구축 실습을 위해서는 내부 네트워크와 상호작용하는 외부 네트워크가 필요한데 이를 실제로 구현할 수가 없기 때문에, 지금까지 사용한 192.168 주소를 외부 네트워크라고 가정만하겠다.
- 즉, 해당 실습에서 192.168의 주소로 접근하는 것은 모두 외부 네트워크(공인 IP)로 접근하는 것이라고 이해하면 된다.
- Client 및 Server(B) 가상머신은 사설 네트워크로 구현할 것이다.
- 내부 시스템과 외부 시스템 간의 네트워크를 분리하기 위해 각각의 내부 시스템의 IP 주소를 변경(10.1.1.10, 10.1.1.20)하고, 이 둘을 방화벽 컴퓨터 분리하기 위해 IP 대역을 VMnet0으로 변경한다.
- 기본적으로 사설 네트워크는 인터넷을 통해 외부 네트워크로 접속할 수 있고, 외부 네트워크에서는 사설 네트워크로 접속할 수 없도록 할 것이다.
- 다만 Server(B)의 경우 웹 서버로 구현할 것이기 때문에, 외부 네트워크에서 해당 웹 서버로 접속을 요청할 경우에만 특별히 접속을 허용하도록 할 것이다.
- 방화벽 컴퓨터는 내부와 연결되는 랜카드, 외부와 연결되는 랜카드로 총 2개의 랜카드가 필요하기 때문에 Server 가상머신에 랜카드 하나를 추가해주어야 한다.
📜 패키지 설치 및 설정
- 먼저 방화벽 서버 구축을 위한 패키지를 Server와 Server(B)에 설치한다.
# dnf -y install iptables-services
- 추가로 Client의 selinux(/etc/sysconfig/selinux) 파일을 수정해준다.
$ su -c 'vi /etc/sysconfig/selinux'
SELINUX=disabled
📜 Server(B), Client 설정
- 먼저 Server(B)의 IP 대역을 변경해주기 위해 가상머신 설정 화면에서 'Network Adapter' 장치의 설정에 들어가 아래와 같이 체크 옵션을 변경해주었다.
- 이후 아래 명령어를 통해 IP 주소 및 게이트웨이 주소와 DNS 서버 주소를 변경해주었다.
# nmtui edit ens160
- 이후 네트워크 장치를 재시작하여 변경된 설정을 적용해주었다.
# nmcli connection down ens160
# nmcli connection up ens160
- Client 역시 위와 동일한 방법으로 IP 대역 및 주소를 변경해준다.(IP 주소는 10.1.1.10)
📜 방화벽 서버 설정
- 다음으로 방화벽 서버에 랜카드를 하나 추가해주어야 한다.
- 이를 위해 Server 가상머신 설정 화면으로 들어가 Network Adapter 장치를 추가하고 IP 대역을 VMnet0으로 설정한다.
- 해당 랜카드는 사설 네트워크와 연결되도록 할 것이며, 기존의 랜카드(192.168.111.100)는 외부 네트워크와 연결되도록 할 것이다.
- 장치를 추가한 후에 부팅하여 네트워크 설정화면을 확인하면 새로운 랜카드가 추가된 것을 확인할 수 있다.
- 다만 아직 연결되지 않은 상태이기 때문에 따로 설정을 수행해주어야 한다.
- 우선 이름을 아래와 같이 영문으로 수정해주어 이후에 터미널에 접근하기 편하도록 해주었다.
- 다음으로 IPv4 설정화면에서 자동(DHCP)이 아닌 수동 방식으로 설정하고 각각의 주소를 직접 입력해주었다.
- 추가로 DNS 서버 및 라우팅 기능을 꺼주었다.
- 다음으로는 IPv6를 사용하지 않도록 설정하여, 해당 랜카드는 간단하게 게이트웨이의 역할만 수행하도록 설정해주었다.
- 추가로, GUI 설정과 충돌이 발생하지 않도록 ifcfg-ens224(/etc/sysconfig/network-scripts/ifcfg-ens224) 파일에서 아래 구문을 삭제해주었다.
GATEWAY=10.1.1.1
DEFROUTE=yes
- 설정이 바뀌었으니 마찬가지로 해당 네트워크 장치를 재시작한다.
# nmcli connection down ens224
# nmcli connection up ens224
📜 방화벽 서버 정책 설정
- 전체적인 구성이 완료되었으니 그보다 더 중요한 방화벽 서버의 정책을 설정해야한다.
- 먼저 sysctl.conf(/etc/sysctl.conf) 파일을 열어 아래 구문을 추가해준다.
- 해당 구문은 리눅스를 게이트웨이나 라우터로 활용하기 위해 IP Forwarding 기능을 활성화하는 역할을 한다.
net.ipv4.ip_forward = 1
- 추가로 아래 명령어를 수행한다.
echo 1 > /proc/sys/net/ipv4/ip_forward
- 이후 현재 IP Forwarding 기능의 활성화/비활성화 여부를 확인해보면 아래와 같이 출력되는 것을 확인할 수 있다.
- 이제부터 iptables 명령어를 통해 본격적으로 정책을 설정한다.
- 이를 위해 우선 iptables 명령어에 대한 초기화를 진행해주었다.
# iptables --policy FORWARD DROP
# iptables --policy INPUT DROP
# iptables --policy OUTPUT DROP
- 이후 아래와 같이 ens224와 ens160에 대해 각각 정책을 설정해주었다.
# iptables --append INPUT --in-interface ens224 --source 10.1.1.0/24 --match state --state NEW,ESTABLISHED --jump ACCEPT
# iptables --append OUTPUT --out-interface ens224 --destination 10.1.1.0/24 --match state --state NEW,ESTABLISHED --jump ACCEPT
# iptables --append FORWORD --in-interface ens224 --source 10.1.1.0/24 --destination 0.0.0.0/0 --match state --state NEW,ESTABLISHED --jump ACCEPT
# iptables --append FORWORD --in-interface ens160 --destination 10.1.1.0/24 --match state --state NEW,ESTABLISHED --jump ACCEPT
- 추가로 사설 네트워크의 경우 인터넷을 통해 외부 네트워크로 접속이 가능해야 하므로 아래의 정책을 추가한다.
# iptables --table net --append POSTROUTING --out-interface ens160 --jump MASQUERADE
- 다음으로 아래 명령어를 통해 위에서 설정한 정책을 저장한다.
# iptables-save > /etc/sysconfig/iptables
- 마지막으로 방화벽 설정 화면에서 마스커레이딩(Masquerading)을 활성화시킨다.
- 네트워크 장치를 모두 재시작하고, 시스템을 재부팅한 후 마무리한다.
# nmcli connection down ens224
# nmcli connection up ens224
# nmcli connection down ens160
# nmcli connection up ens160
# reboot
📜 테스트
- 이후 사설 네트워크에서 웹 브라우저를 실행시켜 외부 네트워크에 잘 접속이 되는지 확인해본다.
- 만약 외부 네트워크에서 현재 접속중인 시스템의 IP 주소를 확인해보면 다음과 같이 실제 사설 네트워크의 IP 주소가 아닌 공인된 IP 주소가 출력되는 것을 확인할 수 있다.
- 즉, 외부 네트워크에서는 실제 사설 네트워크의 정보를 확인할 수가 없는 것이다.
📜 외부 네트워크에서 사설 네트워크로 접속
- 이번에는 외부에서 사설 네트워크쪽으로 접속하여 Server(B) 가상머신에서 제공하는 웹 서버를 사용하도록 구현해본다.
- 이를 위해 Server(B)에 웹 서버 설치 및 방화벽 설정을 수행한다.
# dnf -y install httpd
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload
- 이후 확인을 위한 간단한 웹 페이지를 구현해준다.
# vi /var/www/html/index.html
- 마지막으로 웹 서버 서비스를 시작시키면서 간단하게 웹 서버 구축을 마무리한다.
# systemctl restart httpd
# systemctl enable httpd
- 이제 외부 네트워크에서 해당 웹 서버로 접속이 가능하도록 방화벽 서버에 정책을 추가해준다.
# iptables --table nat --append PREROUTING --proto tcp --in-interface ens160 --dport 80 --jump DNAT --to-destination 10.1.1.20
- 간단히 요약하자면, ens160으로 포트 번호가 80번(웹 포트)인 요청이 들어오면 이를 Server(B)(10.1.1.20)로 보낸다는 의미이다.
- 마찬가지로 설정한 정책을 저장한 뒤, 해당 네트워크 장치를 재시작한다.
# iptables-save > /etc/sysconfig/iptables
# nmcli connection down ens160
# nmcli connection up ens160
- 이후 외부 네트워크에서 해당 네트워크 장치의 IP 주소로 접속하여 결과를 확인해보면, 위에서 구현했던 페이지가 정상적으로 출력되는 것을 확인할 수 있다.
- 즉, 외부 네트워크가 사설 네트워크 안에 있는 웹 서버의 정확한 IP 주소를 알지 못하더라도 방화벽 서버의 정책 설정을 통해 접속이 가능하도록 할 수 있다는 것을 알 수 있다.
'🐧 Linux > 이것이 리눅스다(CentOS 8)' 카테고리의 다른 글
[이것이 리눅스다(CentOS 8)] 19장. PXE 설치 서버 (0) | 2023.04.07 |
---|---|
[이것이 리눅스다(CentOS 8)] 17장. 프록시 서버 설치와 운영 (0) | 2023.04.06 |
[이것이 리눅스다(CentOS 8)] 16장. DHCP 서버 설치와 운영 (0) | 2023.04.06 |
[이것이 리눅스다(CentOS 8)] 15장. Samba 서버 설치와 운영 (0) | 2023.04.06 |
[이것이 리눅스다(CentOS 8)] 14장. NFS 서버 설치와 운영 (0) | 2023.04.05 |