Ubuntu 방화벽 iptables 설치 및 활성화

방화벽은 서버 보안에서 중요한 단계로 iptables 설치 및 활성화를 다룹니다. 방화벽 관리의 대부분은 네트워크에 트래픽 제한을 적용할 개별 규칙 및 정책을 결정하는 것입니다. 

1.  iptables 방화벽 이해 및 사전 준비

Ubuntu는 기본 방화벽으로 ufw를 제공하고 있으나 iptables을 사용하면 규칙이 적용되는 구조적 프레임워크를 상세하게 관리할 수 있습니다.

우선 ufw 방화벽 사용을 중지하고 iptables 패키지를 활용하여 방화벽을 구성하는 방법으로 진행됩니다. iptables은 합리적인 기본값을 제공하고 확장성을 장려하는 프레임워크를 설정하는 데 중점을 두고 있습니다.

 1) 사전 준비

ufw 방화벽 상태를 확인하고 방화벽을 중지합니다. Ubuntu 설치부터 함께 따라왔다면 ufw 방화벽을 active(활성화) 되어 있습니다. 이때 sudo ufw status 명령을 입력하면 inactive(비활성화)로  나옵니다. iptables을 설치하는데 ufw 방화벽을 비활성화하지 않는다면 충돌이 발생합니다. 서비스를 관리하는 명령어는 systemctl 또는 [서비스명.service]의 형태로 관리할 수 있습니다.

2) ufw 상태 확인

sudo systemctl status ufw
[Step1] ufw 상태 확인

3) ufw 중지 및 비활성화

서비스를 중지는 stop 명령어를 활용할 수 있지만 stop은 시작 활성화에 영향을 미치지 않습니다. 반면 disable 명령은 시작 시 서비스를 비활성화시키며 –now 명령어를 추가면 즉시 반영됩니다. 아래 명령어로 ufw 서비스를 비활성화하고 reboot 명령으로 재시작 합니다.

sudo systemctl disable --now ufw
reboot
[Step2] ufw 비활성화
sudo systemctl status ufw
[Step3] ufw 상태 확인

2.  iptables 설치 및 활성화 문제 확인

1) iptables 설치(iptables-persistent)

ufw를 중지했다면 iptables 패키지를 설치합니다. Iptables 설치 후 규칙 세트를 저장하고 부팅 시 자동으로 적용되도록 할 수 있습니다.

sudo apt install iptables-persistent
[Step4] Y를 입력하여 계속 진행
[Step5] IPv4 rules에 대해 YES 선택 후 Enter
[Step6] IPv6 rules에 대해 YES 선택 후 Enter

2) iptables 시작 시 활성화(enable)

  • Iptables 상태 확인
sudo systemctl status iptables
[Step7] iptables 상태 확인
  • Iptables 상태 시작 시 활성화
sudo systemctl enable iptables
reboot
[Step8] iptables 활성화 명령어 및 재시작

3) iptables 활성화 문제 확인(시작 시 자동 활성화 안됨)

  • Iptables 상태 확인

ubuntu 20에서는 정상적으로 활성화되지만 ubuntu 22에서는 활성화가 안되어 있습니다. iptables의 상태를 확인하면 별칭(alias)이 등록되어 있지 않기 때문에 별칭을 등록해야 합니다.

sudo systemctl status iptables
[Step9] iptables 상태 확인

3.  iptables 별칭 등록 및 시작 시 활성화

1) Iptables 시작 활성화를 위한 별칭(alias) 등록

iptables.service의 위치는 상태에서 확인이 가능하고 nano 편집기로 파일을 불러옵니다. vi 편집기를 사용해도 무방합니다. 파일 아래쪽 [install] 하단에 별칭을 등록해 줍니다. 여기서는 Alias=iptables.service로 등록합니다.

sudo nano /lib/systemd/system/iptables.service
[Step10] iptables 서비스 alias 등록
[Step11] 편집기를 활용하여 내용 추가(Alias=iptables.service)

Iptables를 비활성화 후 다시 활성화를 진행합니다. 이때 –now 명령을 추가하면 활성화와 함께 서비스가 함께 실행됩니다.

sudo systemctl disable iptables
sudo systemctl enable iptables

2) 재시작 후 서비스 활성화 확인

서버를 재시작하여 서비스가 시작 시 활성화 되는지 확인합니다. 아래 이미지처럼 netfilter-persistent.service와 dependency 충돌이 발생하면 netfilter-persistent.service를 재시작합니다. systemctl 명령어로 iptables 서비스가 정상적으로 활성화 된 것을 확인할 수 있습니다.

reboot
sudo systemctl status iptables
sudo systemctl restart netfilter-persistent.service
[Step12] 재시작 후 iptables 자동 활성화 확인

3.  iptables 모든 연결 차단

앞의 설정은 INPUT, FORWARD, OUTPUT가 모두 허용된 설정입니다. INPUT, FORWARD는 모두 닫아 주도록 하겠습니다. 구성을 출력하면 INPUT, FORWARD가 닫힘으로 표시되어 있습니다. 앞으로 서비스를 추가하면 관련 서비스에 대한 포트만 오픈하여 실행되도록 하겠습니다.

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -S
[Step13] INPUT, FORWARD DROP

변경된 설정을 저장하고 reload 합니다. reload는 재시작하지 않고 규칙을 적용하기 위한 명령입니다. 다음 코드를 실행하지 않으면 변경한 정보가 ubuntu 재시작시 적용되지 않습니다.

sudo netfilter-persistent save
sudo netfilter-persistent reload