total_activ
[방화벽 프로젝트/실습] 방화벽 네트워크 구성 및 구축 본문
방화벽 구축 실습
실습에서 구현할 네트워크 구성
실습에서 총 4개의 가상 컴퓨터가 사용됩니다.
- 첫번째로 클라이언트 컴퓨터가 있습니다. 클라이언트 컴퓨터는 외부네트워크와 연결할 수 있도록 해줘야 합니다. 즉 클라이언트는 게이트웨이를 통해 방화벽 컴퓨터를 지나 ens32를 통과하여 외부네트워크로 접근할 수 있게 해줘야 합니다.
- 두번째로는 일반적인 사설네트워크와 달리 외부 네트워크가 웹서버에게 접근하여 웹서버가 해당 외부네트워크에 대한 요청 받아야하는 웹서버가 있습니다. 즉, 클라이언트는 외부 네트워크로 접근하려고 한다면, 웹서버는 외부 네트워크가 Server(B)로 접근해야 합니다. 하지만 악의적인 외부 컴퓨터가 사설 네트워크로 접근할 수 있기 때문에 Server(B)의 IP를 10.1.1.20이 아닌 192.168.111.100으로 보여줍니다. 즉 자신의 모습을 다른 모습으로 감춰 외부에게 공개한다고 생각하면 이해하기 쉽습니다.
- 세번째로는 방화벽 컴퓨터가 있습니다. 방화벽 컴퓨터는 다른 가상 컴퓨터와 다르게 사설 네트워크와 외부 네트워크 모두를 관여해야 하기 때문에 공인IP와 사설IP 모두를 설정해 줘야합니다. 또한 방화벽 정책을 수립하여 외부에서 내부로 어떤 점을 통제할 거고 허용할 것인지, 반대로 내부에서 외부로는 어떤 점을 허용하고 통제할 것인지 정해야 합니다.
- 마지막으로 외부컴퓨터 WinClient가 있습니다. 이 가상 컴퓨터는 단순히 설치했을 때 자동적으로 외부와 연결된 IP로 사용하면 됩니다.
실습 과정 전체 구성
사설 네트워크
1. 일단 사설네트워크에 해당하는 Server (B)의 Network Adapter 망 설정을 Bridged로 변경하여 vmnet0(bridged)와 연결했습니다.
2. 이후 터미널에서 nano /etc/netplan/00-installer-config.yaml을 통해 구현한 네트워크 계획대로 address와 gateway, nameserver를 재설정했습니다. 주소를 10.1.1.20/24으로, gateway4는 10.1.1.1으로, nameservers는 구글에서 제공하는 8.8.8.8으로 설정했습니다.
3. Server(B)는 다른 사설 네트워크와 달리 웹 서버로 지정했기 때문에 apache2를 이용하여 간단하게 웹 하나를 만들겠습니다.
4. 두번째로는 사설네트워크 중 또다른 하나인 Client의 Network Adapter 망 설정을 Bridged로 변경하여 vmnet0(bridged)와 연결했습니다.
5. 이후 시스템 설정 모듈을 통해 수동 IP로 변경한 뒤, 구현한 네트워크 계획대로 주소, 네트워크마스크, 게이트웨이를 설정했습니다. 주소는 10.1.1.10으로, 네트워크마스크는 255.255.255.0으로, 게이트웨이는 10.1.1.1으로 설정했습니다.
6. 이렇게 사설네트워크의 설정은 마무리했고 설정한 것을 확인하기 위해 Client와 Server(B)간의 연결이 가능한지 ping 명령어를 실행했습니다. 두 서버간 연결은 잘 되지만 외부네트워크와의 연결은 아직 설정하지 않아 핑 연결이 되지 않음을 확인할 수 있었습니다.
방화벽 [내부에서 외부로 허용해주는 정책]
1. 이제 사설네트워크와 방화벽 사이에 비치되어 있는 게이트웨이를 만들겠습니다. 위 설정을 보시면 외부로 나가는 192.168.111.100에 해당하는 부분은 이미 자동으로 설정되어 있지만 게이트웨이 10.1.1.1에 해당하는 것은 없기 때문에 네트워크 카드를 Bridged로 Add를 통해 생성했습니다.
2. 위의 1단계에서 거론한 것처럼 ens32에 해당하는 것은 기존에 자동으로 설정되있는 것으로 사용하기 때문에 ens35만 설정이 필요합니다. ens35에 해당하는 IPv4 주소와 네트마스크를 구현한 네트워크 계획대로 설정했습니다. 주소는 10.1.1.1으로, 네트마스크는 255.255.255.0으로 설정했습니다. 게이트웨이는 별도로 없기 때문에 설정할 필요가 없습니다.
3. 모든 컴퓨터 서버 설정은 마무리했습니다. 이제부터 방화벽 정책을 수립하기 전에 필요한 설정들을 하겠습니다. Server에서 gedit /etc/sysctl.conf를 통해 28번째에 주석을 지워 줍니다. 이후 echo 1 > /proc/sys/net/ipv4/ip_forward를 실행해줍니다. 이제 iptables를 초기화 시켜주는 명령어들을 실행해줍니다.
4. 자, 이제 사설네트워크들이 ens35를 걸쳐 나갈 수 있게끔 정책을 마련해줍시다.
5. 다음으로는 ens32를 통해 밖으로 외부네트워크로 나갈 수 있게 허용해줍니다.
[ iptables --table nat --append POSTROUTING --out-interface ens32 –jump MASQUERADE ]
6. 그리고 지금까지 설정한 것들을 저장해 주는 명령어를 실행합니다.
[ iptables-save > /etc/iptables.rules ]
방화벽 [외부에서 내부로 허용해주는 정책]
1. 외부 네트워크로 나가는 정책을 수립하였기 때문에 Client 컴퓨터에서 외부 네트워크인 NAVER로 연결을 시도했고 성공적으로 연결되었습니다. 이때 외부 인터넷은 Client 컴퓨터인 10.1.10으로 접속한 것으로 인식하지 못하고 ens32 인 192.168.111.100으로 접속한 것으로 인식합니다.
[ 10.1.1.10 à 10.1.1.1 à 192.168.111.100 à 외부인터넷 연결 ]
2. 이제부터는 외부 네트워크 ens32를 통해 웹서버 포트인 80포트 요청이 오면 ens32으로 와주는 정책을 수립해야 합니다. 지금까지 수립한 방화벽은 외부로 나가는 것을 허용해주고 외부에서 사설로 들어오는 것은 통제합니다. 하지만 사설 네트워크 중 Server(B)는 웹서버로 외부 네트워크에서 연결을 받아야 하므로 해당 특정 연결을 방화벽이 허용해주어야 합니다. 따라서 특정 허용 정책을 수립할 필요가 있습니다.
[ iptables --dport 80 --jump DNAT --to-destination 10.1.1.20 ]
[ iptables-save > /etc/iptables.rules ] --> 해당 설정 저장함
3. 외부로 들어오는 허용 정책과 외부로 가는 허용 정책까지 수립했으므로 외부 네트워크인 WinClient 컴퓨터에서 192.168.111.100으로 연결해보았습니다. 해당 웹이 Server(B) 웹서버로 보여줌을 확인할 수 있습니다. 즉, 외부 네트워크에서 192.168.111.100으로 연결하면 10.1.1.20으로 연결해줍니다. 이를 통해 방화벽이 80번포트를 해당 웹서버로 허용해주었다는 것을 알 수 있었습니다.
실습에서 사용한 명령어들 의미 해설
[ iptables --append INPUT --in-interface ens35 --source 10.1.1.0/24 --match state --state NEW, ESTABLISHED--jump ACCEPT ]
10.1.1.0인 ens35에서 출발에서 방화벽으로 들어오는 패킷이 새로 접속을 시도하는 패킷/접속을 한 상태에 있는 패킷일 경우 허용합니다.
[ iptables --append OUTPUT --out-interface ens35 --destination 10.1.1.0/24 --match state --state NEW, ESTABLISHED --jump ACCEPT ]
방화벽에서 출발에서 10.1.1.0인ens35으로 가는 패킷이 새로 접속을 시도하는 패킷/접속을 한 상태에 있는 패킷일 경우 허용합니다.
[ iptables --append FORWARD --in-interface ens35 --source 10.1.1.0/24 --destination 0.0.0.0/0 --match state --state NEW, ESTABLISHED --jump ACCEPT ]
10.1.1.0인 ens35에서 출발에서 방화벽을 통과해 0.0.0.0으로 지나갈 때 새로 접속을 시도하는 패킷/접속을 한 상태에 있는 패킷일 경우 용합니다.
[ iptables --append FORWARD --in-interface ens32 --destination 10.1.1.0/24 --match state --state ESTABLISHED --jump ACCEPT
ens32에서 출발해서 방화벽을 통과해서 10.1.1.0으로 가는 패킷이 접속을 한 상태에 있는 패킷일 경우 허용합니다.
iptables --table Nat --append POSTROUTING --out-interface ens32 --jump MASQUERADE ]
Nat(사설Ip와 공인 Ip 간에 주소 변경해주는 기능) 테이블이 아웃 바운드로 나가는 트래픽을 다른 Ip나 포트로 포워딩 해주고 ens32를 통해 패킷을 나가게 해줍니다. 이를 통해 내부사설Ip의 pc 들이 외부 인터넷과 연결 가능하도록 해줍니다.
[ iptables --dport 80 --jump DNAT --to-destination 10.1.1.20 ]
80번포트의 목적지를 요청 받으면 10.1.1.20의 목적지로 최종적으로 DNAT에 의해 설정될 도착지를 설정해줍니다.
'프로젝트' 카테고리의 다른 글
[다크웹 프로젝트/Wireshark] 접속 원리 및 패킷 분석 (0) | 2022.09.29 |
---|---|
Hyper-v를 활용한 논리적 망분리 구축 및 모의해킹 (0) | 2022.09.29 |
방화벽 칼럼 (0) | 2022.08.10 |
방탈출 게임 제작_2021.4 (0) | 2022.08.09 |
[프로젝트/보안 실전 가이드] 처음부터 제대로 배우는 도커 (0) | 2022.03.15 |