더북(TheBook)

지금까지 설정한 iptables 규칙은 시스템을 다시 시작하면 모두 사라집니다. 규칙을 저장하고 시스템을 시작할 때 적용하는 방법에 대해 살펴봅시다. 다음과 같이 iptables-save 명령을 사용해서 현재 정의해 놓은 규칙을 /etc/iptables.rules 파일로 저장합니다.

administrator@test05:~$ sudo sh -c "iptables-save > /etc/iptables.rules"

/etc/iptables.rules 파일 내용을 살펴보면 지금까지 각 테이블과 사슬마다 정의해 놓은 방화벽 규칙을 확인할 수 있습니다.

administrator@test05:~$ cat /etc/iptables.rules

*nat
:PREROUTING ACCEPT [459:41054]
:INPUT ACCEPT [5:704]
:OUTPUT ACCEPT [65:4808]
:POSTROUTING ACCEPT [1:60]
-A POSTROUTING -o eth0 -j MASQUERADE

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [237:26917]
-A INPUT -i eth1 -j ACCEPT
-A INPUT -i eth2 -j ACCEPT
-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -i eth2 -j ACCEPT
-A FORWARD -d 10.0.0.2 -p tcp -m tcp --dport 23 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

네트워크 인터페이스를 활성화할 때 방화벽 규칙을 활성화시키기 위해 vi로 iptables-load라는 셸 스크립트를 작성해보겠습니다.

administrator@test05:~$ vi iptables-load

파일에 정의된 방화벽 규칙을 적용하는 명령은 iptables-restore입니다. 앞서 저장해둔 방화벽 규칙 파일 /etc/iptables.rules에서 방화벽 규칙을 활성화시킬 것입니다.

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.rules

시스템 종료와 같은 이유 때문에 네트워크 인터페이스를 중지할 때 추가된 방화벽 규칙을 저장하도록 iptables-reload라는 셸 스크립트를 작성합니다.

administrator@test05:~$ vi iptables-reload

iptables-save 명령을 이용해서 변경된 방화벽 규칙을 ‘iptables.rules’ 파일에 저장합니다.

#!/bin/bash
/sbin/iptables-save > /etc/iptables.rules

셸 스크립트를 실행시킬 수 있도록 두 파일의 허가권을 수정합니다.

administrator@test05:~$ chmod +x iptables-load
administrator@test05:~$ chmod +x iptables-reload
administrator@test05:~$ ls -l
-rwxrwxr-x 1 shinjaehun shinjaehun 58 3월 5 00:21 iptables-load
-rwxrwxr-x 1 shinjaehun shinjaehun 55 3월 5 00:22 iptables-reload

방화벽 활성화 스크립트 iptables-load는 네트워크 인터페이스가 시작하기 전에 실행할 스크립트를 저장해두는 /etc/network/if-pre-up.d 폴더에 복사합니다. 그리고 방화벽 설정 저장 스크립트 iptables-reload는 네트워크 인터페이스를 중지하고 난 다음 실행할 스크립트를 저장해두는 /etc/network/if-post-down.d 폴더에 복사합니다.

administrator@test05:~$ sudo cp iptables-load /etc/network/if-pre-up.d/
administrator@test05:~$ sudo cp iptables-reload /etc/network/if-post-down.d/

시스템을 재시작하고 iptables-load 스크립트가 정상적으로 동작하는지 iptables -L로 확인합니다. 사슬을 추가 또는 제거하여 방화벽 설정을 변경한 다음 시스템을 재시작하면 iptables-reload 스크립트에 의해 설정 내용이 저장될 것입니다.

administrator@test05:~$ sudo reboot
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.