Home Server 만들기 -03 : IPtables-

0. IPtables-Persistent 설치
  • 리눅스서버의 네트워크 정책을 IPtables 설정을 통해서 관리할 수가 있다. 웹서버나 서비스 레벨에서도 관리가 가능하지만, 운영체제 레벨에서 관리하는 것이 리소스 측면에서 가장 효율적이다.
  • 우분투에서는 ufw가 IPtables로부터 정보를 받아서 패킷을 관리해주고 있는데, iptables를 직접 설정을 해두면 보다 확실하게 네트워크 정책을 관리할 수가 있다.
  • IPtables는 서버가 재부팅되면 정책이 초기화 된다. 정책을 유지하기 위해서 iptables-Persistent를 설치해준다.
sudo ufw disable # ufw 중지

sudo apt update
sudo apt install iptables-persistent netfilter-persistent
1. IPtables 기본 지식
  • 체인(chain)
    • Input : 서버로 들어오는 패킷
    • Output : 서버에서 밖으로 나가는 패킷
    • Forward : 서버를 통과해가는 패킷
  • 액션(Action)
    • -P (POLICY) : 기본적인 정책을 설정
    • -A (APPEND) : 정책 추가 – 가장 아래에 추가
    • -I (INSERT) : 정책 삽입 – 가장 위에 삽입
    • -D (DELETE) : 정책 삭제
    • -F (FLUSH) : 모든 정책을 삭제
    • -X : 비어있는 체인을 삭제
  • 옵션(Options)
    • -p (protocol) : TCP/UDP와 같은 프로토콜
    • -s (source) : 출발지
    • –sport : 출발 포트
    • -d (destination) : 목적지
    • –dport : 목적 포트
    • -j (jump) : 매치되는 패킷에 대한 처리
      • ACCEPT : 패킷을 허용
      • DROP : 패킷을 버림
2. 목표
  • 앞으로 사용할 것으로 예상되는 포트는 다음과 같다. 해당 포트에 대해서만 ACCEPT 하도록 설정할 것이다.
    • 22 : SSH/Sftp에 사용
    • 80 : http의 기본 포트
    • 443 : https의 기본 포트
    • 3306 : MySQL/MariaDB의 기본 포트
  • 위와 같이 자주 사용되는 포트는 보안에 취약하기 때문에 라우터에서 포트포워딩 할 때는 외부 포트를 다르게 설정하는 것이 좋다.
3. 초기화 및 설정
  • 설정한 정책은 다음 명령으로 저장 및 불러오기가 가능하다.
sudo netfilter-persistent save
sudo netfilter-persistent reload
  • 우선 기존의 설정을 모두 제거해준다.
sudo iptables -F
sudo iptables -X
  • 기본 정책으로 INPUT/FORWARD는 DROP하고 OUTPUT은 허용해서 외부에서 아무 포트로나 접근하지 못하게 한 다음, 필요한 포트만을 열어주도록 한다. 일단 모든 포트를 ACCEPT하고 설정이 끝나면 INPUT과 FORWARD는 DROP할 것이다.
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
  • 네트워크는 기본적으로 쌍방향 통신이기 때문에 established and related 접속이 가능하도록 해준다.
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
  • 설치된 서비스들이 localhost와 통신이 될 수 있도록 loopback 설정도 해준다.
sudo iptables -A INPUT -i lo -j ACCEPT
  • HTTP/HTTPS (80/443) 포트를 열어준다.
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  • SSH/Sftp (22), DBMS(3306) 포트를 열어준다.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
  • 이제 나머지 INPUT과 FORWARD는 DROP 설정해준다.
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
  • 설정한 내용이 맞는지 다시 확인해본다.
sudo iptables -S
  • 설정이 맞다면 저장하고 다시 로드한다.
sudo netfilter-persistent save
sudo netfilter-persistent reload

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다