10.네트워크 설정 및 관리, iptables를 이용한 고급 방화벽 설정

1. 서론

디지털 시대에 네트워크 보안은 필수적입니다. 특히 웹 서버를 운영하는 경우, 외부의 공격으로부터 보호할 방화벽 설정이 중요합니다. 본 글에서는 Ubuntu 서버에서 iptables를 이용한 네트워크 설정과 고급 방화벽 설정 방법에 대해 설명하겠습니다. 이 글의 목표는 독자가 실무에서 적용할 수 있는 집약적이고 종합적인 가이드를 제공하는 것입니다.

2. 네트워크 기본 설정

2.1. IP 주소 및 서브넷 설정

서버의 IP 주소를 설정하는 것이 첫 단계입니다. Ubuntu에서는 netplan을 통해 네트워크 설정을 관리합니다. 일반적으로 설치 시 DHCP를 사용하지만, 고정 IP로 변경할 필요가 있습니다.

sudo nano /etc/netplan/01-netcfg.yaml

이 파일에서 다음과 같이 설정합니다:

network:
    version: 2
    renderer: networkd
    ethernets:
        enp0s3:
            dhcp4: no
            addresses:
                - 192.168.1.10/24
            gateway4: 192.168.1.1
            nameservers:
                addresses: [8.8.8.8, 8.8.4.4]
    

저장 후, 다음 명령어로 변경 사항을 적용합니다:

sudo netplan apply

2.2. 방화벽 기본 설정

네트워크가 설정되면 기본 방화벽을 설정합니다. Ubuntu는 기본적으로 ufw(Uncomplicated Firewall)를 제공합니다. 다음과 같이 기본 규칙을 설정할 수 있습니다:

sudo ufw allow OpenSSH
    sudo ufw enable

이렇게 함으로써 SSH 접속을 허용하고 방화벽을 활성화합니다.

3. iptables 소개

iptables는 Linux 기반의 방화벽이다. 패킷 필터링, NAT(네트워크 주소 변환) 및 포트포워딩과 같은 기능을 제공하며, 고급 보안 설정을 구현할 수 있습니다. iptables는 기본적으로 4개의 체인을 가지고 있습니다:

  • INPUT: 시스템으로 들어오는 패킷에 대한 규칙
  • OUTPUT: 시스템에서 나가는 패킷에 대한 규칙
  • FORWARD: 시스템을 통해 다른 네트워크로 전달되는 패킷에 대한 규칙
  • PREROUTING: 패킷이 라우팅되는 경로를 변경하기 위해 사용
  • POSTROUTING: 패킷이 전송된 후 규칙을 적용

4. iptables 설치 및 기본 사용법

4.1. iptables 설치

Ubuntu에 기본적으로 설치되어 있지만, 설치 상태를 확인하거나 설치할 수 있습니다:

sudo apt update
    sudo apt install iptables

4.2. 기본 명령어

iptables의 기본적인 사용법을 소개합니다:

sudo iptables -L            # 규칙 리스트 확인
    sudo iptables -F            # 모든 규칙 제거
    sudo iptables -S            # 규칙 확인

5. 고급 방화벽 설정

이제 고급 방화벽 설정을 위한 몇 가지 예제를 다룰 것입니다. 다양한 유형의 트래픽을 필터링하고, 특정 조건에 맞는 패킷을 차단하거나 허용할 수 있습니다.

5.1. 특정 IP 주소 차단

특정 IP 주소로부터의 접근을 차단할 수 있습니다:

sudo iptables -A INPUT -s 203.0.113.0 -j DROP

이 명령어는 203.0.113.0 IP 주소에서 오는 모든 패킷을 차단합니다.

5.2. 특정 포트 차단

특정 포트로의 접근을 차단할 때는 다음과 같이 설정합니다:

sudo iptables -A INPUT -p tcp --dport 23 -j DROP

이 명령어는 Telnet 포트(23번)를 차단합니다.

5.3. 특정 IP 주소에 대해서만 허용

특정 IP 주소에 대해서만 포트를 허용하려면, 다음과 같이 설정합니다:

sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 80 -j ACCEPT

이 명령어는 192.168.1.100 IP 주소에서 오는 HTTP 요청을 허용합니다.

5.4. 포트 포워딩 설정

서버가 포트를 포워딩할 수 있도록 설정할 수도 있습니다. 예를 들어, 8080 포트로 들어오는 요청을 80 포트로 전달할 수 있습니다. 다음과 같이 설정합니다:

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

6. iptables 관리하기

6.1. iptables 규칙 저장

설정한 규칙을 영구적으로 저장하려면, iptables-persistent 패키지를 사용할 수 있습니다:

sudo apt install iptables-persistent

설치하는 동안 저장하길 원하는 규칙을 선택하게 됩니다.

6.2. 규칙 복원

다시 시작할 때 자동으로 iptables 규칙을 복원해야 할 경우, 저장된 규칙 파일을 이용할 수 있습니다. 다음 명령어로 복원합니다:

sudo iptables-restore < /etc/iptables/rules.v4

7. 모니터링 및 로그 설정

방화벽 로그를 통해 어떤 패킷이 차단되었는지 확인할 수 있습니다. iptables 로그를 설정하려면 다음과 같이 할 수 있습니다:

sudo iptables -A INPUT -j LOG --log-prefix "iptables: " --log-level 4

로그는 /var/log/syslog 파일에서 확인할 수 있습니다.

8. 결론

오늘날 보안 위협이 증가함에 따라, 서버에 대한 방화벽 설정은 필수적입니다. Ubuntu에서 iptables를 사용하여 네트워크를 보호하는 방법을 배웠습니다. 기본 설정부터 고급 설정까지 진행하며, 실무에서 유용하게 활용할 수 있도록 했습니다. 방화벽 규칙을 자주 검토하고, 필요에 따라 규칙을 업데이트하는 것이 중요합니다.

9. 참고 자료