18장. 방화벽 컴퓨터 생성 및 운영 (2) - 리눅스 방화벽 구축

728x90
반응형

출처 : https://www.youtube.com/watch?v=iHCtJl0k2Uk&list=PLVsNizTWUw7FqN2gq79Cb3R6qkS7mqOJk&index=72

 

방화벽 컴퓨터 구현

실습 목표

  • 4대의 컴퓨터를 이용해서 위 그림의 방화벽을 구성한다.
  • 실제 네트워크 구성에 대한 이해의 폭을 넓힌다.
  • iptables 유틸리티의 활용법을 이해한다.

패키지 설치

server, server(B), client, WinClient 가상 머신을 초기화하고 부팅한다. server와 server(B)는 root 사용자로 접속한다.

 

 

server와 server(B)에 iptables 패키지를 설치한다.

dnf -y install iptables-service

 

 

원활한 실습 진행을 위해 SElinux 기능을 끄고 재부팅을 한다.

su -c 'grubby --update-kernel ALL --args selinux=0'
reboot

 

 

VMware Workstation Pro를 실행하고 [Edit] -> [Virtual Network Editor]->[change settings]를 클릭한다. 그러면 VMnet0과 VMnet8이 나타난다.

 

맨 위의 그림을 보면, VMnet8은 외부의 인터넷, VMnet0은 내부의 인터넷이라고 가정한다. Client와 Server(B)의 네트워크 카드를 VMnet0으로 바꿔줘야 한다. Virtual Network Editor와 Workstation Pro를 닫는다.

 

 

server(B) 가상 머신 네트워크 정보 변경

 

우측 상단에 Network Adapter를 우클릭해서 settings로 들어간 다음, Network connection을 Bridged로 변경한다. 

 

 

nmtui edit ens160을 입력해 네트워크 정보를 변경한다.

nmtui edit ens160

 

 

[Edit connection]이 나타난다. ETHERNET 으로 가서 Addresses와 Gateway, DNS server를 변경한다. Tab 키를 누르면 이동이 된다.

Addresses: 10.1.1.20/24
Gateway: 10.1.1.1
DNS servers : 8.8.8.8

 

OK로 이동후 Enter를 누른다.

 

 

네트워크 장치를 중지시켰다 다시 시작해서 설정한 내용을 적용한다.

nmcli connection down ens160
nmcli connection up ens160

 

 

ip addr 명령을 입력해 ens160에 설정한 IP 주소가 잘 할당되었는지 확인한다. 보면 10.1.1.20/24로 변경된 것을 확인할 수 있다.

ip addr

 

 

현재 구글로 핑 요청을 보내면 응답이 돌아오지 않는다. 즉, 인터넷에 접속할 수가 없다. 왜냐하면 아직 server(방화벽)을 통해 외부 인터넷으로 접속하기 위한 게이트웨이를 만들지 않았기 때문이다.

 

Client 가상 머신 네트워크 정보 변경

 

Client 가상 머신도 Virtual Machine Settings의 Network Adapter로 들어가 Network connection을 Bridged(VMnet0)로 변경하고 OK를 클릭한다.

 

 

터미널에서 su 명령을 입력해 root 사용자로 접속한 후 nmtui edit ens160 명령을 입력해 연결 편집으로 들어간다. [IPv4 설정]을 수동으로 변경하고 보이기에서 Enter를 눌러서 세부 내용을 확장한다. 주소와 게이트웨이, DNS 서버 주소를 다음과 같이 입력한다.

su
nmtui edit ens160

주소: 10.1.1.10/24
게이트웨이: 10.1.1.1
DNS 서버: 8.8.8.8

 

맨 아래의 확인으로 이동 후 Enter를 누른다.

 

 

변경한 네트워크 설정을 적용시키기 위해 네트워크 장치를 중지시켰다 다시 가동한다.

nmcli connection down ens160
nmcli connection up ens160

 

 

ip addr 혹은 ifconfig ens160 명령을 통해 IP 주소를 확인한다. 10.1.1.10/24 로 변경된 것을 확인할 수 있다.

ip addr 혹은 ifconfig ens160

 

 

현재 Client는 Server(B)와 마찬가지로 외부의 인터넷은 접속할 수가 없지만 내부의 Server(B) 같은 사설 네트워크에 허브(가상)로 연결되어 있으므로 상호 접속이 가능하다. ping -c 3 10.1.1.20(Server(B))로 핑을 보내면 응답이 잘 도착하게 된다.

ping -c 3 www.google.com
ping -c 3 10.1.1.20

 

exit 명령을 입력해 일반 사용자로 돌아간다.

 

 

방화벽 컴퓨터(Server 가상 머신) 구축 1

 

server 가상머신은 현재 VMnet8(NAT)을 사용하는 ens160은 이미 구축이 되어있다. 그러므로 우리는 내부의 VMnet0(Bridged)를 사용하는 ens224 장치만 추가로 설치해주면 된다. 진짜 컴퓨터에 랜카드를 추가할 때는 컴퓨터의 전원을 끈 상태에서 하드웨어를 설치하듯 가상 머신도 종료하고 랜카드를 추가애햐 한다. 우선 halt -p 명령을 입력해 server 가상 머신을 종료한다.

 

 

Server 가상 머신에 VMnet0(Bridged)를 이용한 랜카드 추가

 

server의 Virtual Machine Settings로 들어가 Network Adapter를 하나 더 추가한다.

 

 

새로 추가한 랜 카드는 VMnet0(Bridged)로 연결되어야 하므로 Network connection을 Bridged로 선택한다.

 

OK를 누르고 부팅한다.

 

방화벽 컴퓨터(Server 가상 머신) 구축 2

 

이제 VMnet0(Bridged)에 연결된 랜 카드가 물리적으로는 장착이 된 상태이다. 이제는 가상 머신이 이 랜카드를 인식하도록 설정해보자.

 

우측 상단의 네트워크를 클릭하면 이더넷(ens224) 가 연결됬다고 나타난다. ens 번호는 다를 수 있다. ens224의 드롭다운 버튼을 클릭하고 [유선 네트워크 설정]을 클릭한다.

 

 

이더넷 (ens224)의 설정으로 들어가 신원에서 이름을 ens224로 수정한다.

 

 

[IPv4]로 들어가 [IPv4 방식]에서 수동을 선택한다. 주소에는 10.1.1.1 네트마스크는 255.255.255.0, 게이트웨이는 10.1.1.1을 입력한다. 네임서버와 라우팅의 자동은 모두 끈다.

 

 

[IPv6]는 사용않기를 체크한다. 우측 상단에 [적용]을 클릭한다.

 

이더넷 (ens224)를 껐다가 다시 키고 네트워크 설정을 닫는다.

 

 

네트워크 설정을 적용시키기 위해 네트워크 장치를 내렸다가 다시 올린다.

nmcli connection down ens224
nmcli connection up ens224

 

 

gedit 에디터로 /etc/NetworkManager/system-connection/ens224.nmconnection 파일을 열고 다음 내용을 수정한다.

gedit /etc/NetworkManager/system-connections/ens224.nmconnection

12행: address1=10.1.1.1/24,
13행 주석처리: # ignore-auto-routes=true

 

저장하고 에디터를 닫는다.

 

 

네트워크 장치를 내렸다가 올려서 설정한 내용을 저장한다.

nmcli connection down ens224
nmcli connection up ens224

 

 

ifconfig 명령을 입력해 네트워크 장치들을 확인한다. ens160은 192.168.111.100, ens224는 10.1.1.1로 설정됬음을 확인할 수 있다.

 

 

방화벽 컴퓨터 정책 적용

 

방화벽 컴퓨터(server 가상 머신)가 재부팅되어도 ip forward(해당 호스트가 라우터처럼 자신이 목적지가 아닌 IP 패킷에 대해서 목적지로 전송)가 가능하도록 설정하자.

 

gedit 에디터로 /etc/sysctl.conf 파일을 열고 맨 밑에 다음 내용을 추가한다.

gedit /etc/sysctl.conf

net.ipv4.ip_forward = 1

 

저장하고 에디터를 닫는다.

 

 

앞서 설정한 내용이 바로 IP forwarding 될 수 있도록한다. 만약 아무런 메시지가 출력되지 않는다면 잘 설정된 것이다. cat 명령을 통해 결과로 1이 출력되는지 확인한다.

echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward

 

 

iptables의 정책들을 우리가 작성해서 사용해야 한다. 정책을 작성하기 전에 DROP 명령을 통해 초기화를 해준다.

iptables --policy FORWARD DROP
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP

 

 

내부의 사설 네트워크와 연결되는 장치인 Server 가상 머신의 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 FORWARD --in-interface ens224 --source 10.1.1.0/24 --destination 0.0.0.0/0 --match state --state NEW,ESTABLISHED --jump ACCEPT
iptables --append FORWARD --in-interface ens160 --destination 10.1.1.0/24 --match state --state ESTABLISHED --jump ACCEPT
iptables --table nat --append POSTROUTING --out-interface ens160 --jump MASQUERADE

 

 

이것이 가장 기본적인 방화벽의 역할이다. 

 

 

지금까지 설정한 내용을 저장한다.

iptables-save > /etc/sysconfig/iptables

 

 

firewall-config 명령을 입력해 방화벽 설정으로 들어간다. 설정을 영구적으로 설정하고, 마스커레이딩으로 들어가 마스커레이딩 영역을 체크한다. 

 

[옵션] -> [firewalld 다시 불러오기]를 클릭해 저장하고 방화벽 설정을 닫는다.

 

 

지금까지 설정한 내용을 적용시키기 위해 네트워크 장치들을 내리고 다시 올린다. 그리고 재부팅을 한다.

nmcli connection down ens224
nmcli connection up ens224
nmcli connection down ens160
nmcli connection up ens160
reboot

 

 

Client 가상 머신 인터넷 접속

 

Client 가상 머신에서 파이어폭스 웹 브라우저로 아무 사이트를 접속하면 인터넷이 잘 작동하는 것을 확인할 수 있다. 현재는 Client(10.1.1.10) -> 게이트웨이(10.1.1.1) -> 방화벽 컴퓨터(192.168.111.100) -> 외부 인터넷 순서로 접속된 것이다.

 

 

WinClient 에서 내부의 사설 네트워크 접속 테스트

 

Client에서 외부의 호스트 OS로 접속하기 위해 먼저 호스트 OS에 간단한 FTP 서버를 설치하고 접속 테스트를 진행한다. 인터넷에서 FileZilla Server를 다운로드해서 설치한다.

 

설치는 기본값으로 설치하면 된다.

 

 

FileZilla를 시작하면 다음과 같은 창이 나온다. Password를 입력하고 Always connect to this server를 체크하고 Connect 를 클릭한다.

 

 

[Edit] -> [Users] 로 들어간다. 우측 중앙에 Add를 클릭하고 rocky 사용자를 추가한다. 그리고 상단 중앙에 Enable account와 Password를 체크하고 비밀번호를 설정한다.

 

 

Shared folders 로 들어가 중앙의 Add를 클릭하고 아무 폴더를 지정한다. 그리고 Files와 Directories의 모든 항목을 체크한다. 이는 모든 권한을 허용하는 것이다. 그리고 Set as home dir 버튼을 클릭한다. 좌측 하단의 OK를 누른다.

 

이러면 rocky 사용자 설정이 완성된다.

 

 

Windows Powershell을 관리자로 실행하고 다음 명령을 입력해 FTP 서버의 포트(21번)를 허용한다.

netsh advfirewall firewall add rule name="FTP서버" dir=in action=allow protocol=tcp localport=21

 

 

ipconfig 명령을 입력해 현재 WinClient의 IP 주소를 확인한다. 이제 Client 가상 머신에서 WinClient로 접속해보자.

ipconfig

 

 

내부 사설 네트워크에서 외부 네트워크 접속

 

Client에 FTP 클라이언트 패키지를 설치한다.

 

 

ftp WinClient서버IP 를 입력해 접속한다. 사용자 이름 rocky와 비밀번호를 입력한다. 그러면 접속이 되는 것을 확인할 수 있다.

ftp 192.168.111.132 (WinClient의 IP 주소를 입력)

 

 

다시 WinClient로 돌아와서 Powershell에 netstat /an 명령을 입력해 접속 기록을 살펴본다.

netstat /an

확인하면 외부 주소가 Client의 IP 주소(10.1.1.10)이 아닌 방화벽의 주소(192.168.111.100)으로 나타나는 것을 확인할 수 있다.

 

즉, 외부 네트워크는 내부 사설 네트워크의 누군가가 접속했다는 것만 알 뿐 Client의 IP 주소는 알 수 없고 단지 방화벽의 주소만 알 수 있다.

 

 

외부 네트워크에서 내부 사설 네트워크 접속

현재 외부 컴퓨터는 내부의 사설 네트워크에 접속할 수 없다. 하지만 우리가 정책을 추가해서 외부의 호스트(WinClient)가 웹 서비스를 요청하면 방화벽 서버가 웹 서버(Server(B))로 연결해주도록 설정해보자.

 

 

server(B) 가상 머신에 웹 서버를 설치한다.

dnf -y install httpd

 

원활한 실습을 위해 방화벽을 잠깐 닫아놓는다.

systemctl stop firewalld

 

 

간단한 웹 페이지를 만든다. /var/www/html (웹 서버의 홈 디렉토리) 로 이동해 index.html 파일을 생성하고 nano 에디터로 실행한다.

 

 

웹 페이지에 출력될 내용을 작성한다. Ctrl + x -> y -> Enter 를 누른다.

 

 

웹 서버를 재시작하고 상시 가동되도록 설정한다.

systemctl restart httpd
systemctl enable httpd

 

 

Server 가상 머신으로 돌아와 외부의 호스트(WinClient)가 웹 서비스를 요청하면 방화벽 서버가 웹 서버(Server(B))로 연결되도록 해주는 정책을 추가해준다.

iptables --table nat --append PREROUTING --proto tcp --in-interface ens160 --dport 80 --jump DNAT --to-destination 10.1.1.20

 

 

정책을 저장하고 설정한 내용을 적용한다.

iptables-save > /etc/sysconfig/iptables
nmcli connection down ens160
nmcli connection up ens160

 

 

WinClient에서 웹 브라우저를 열고 방화벽 서버의 주소(192.168.111.100)를 입력하면 우리가 웹 서버를 설치한 Server(B)(10.1.1.20)로 접속하게 된다.

 

즉, 외부 컴퓨터가 방화벽으로 가고, 방화벽에서는 80번(웹 서비스) 요청이 들어오면 웹 서버(Server(B), 10.1.1.20)으로 연결한다.

 

실무에서는 고가의 네트워크 장비를 사용하는 경우가 많다. 하지만 우리가 만약 장비가 준비가 안되어있다면 단순하게 랜 카드 2개가 장착된 Rocky Linux가 설치된 컴퓨터만으로도 방화벽을 구축할 수 있다.

 

 

728x90
반응형