웹사이트 검색

Iptables Essentials: 일반 방화벽 규칙 및 명령


소개

Iptables는 Linux 배포용 소프트웨어 방화벽입니다. 치트 시트 스타일의 이 가이드는 일반적인 일상적인 시나리오에서 유용한 방화벽 규칙을 생성하는 iptables 명령에 대한 빠른 참조를 제공합니다. 여기에는 포트, 네트워크 인터페이스 및 소스 IP 주소별로 다양한 서비스를 허용 및 차단하는 iptables 예제가 포함됩니다.

이 가이드를 사용하는 방법

  • 여기에 설명된 대부분의 규칙은 iptables가 기본 입력 정책을 통해 들어오는 트래픽을 DROP으로 설정하고 들어오는 트래픽을 선택적으로 허용한다고 가정합니다.
  • 달성하려는 항목에 해당하는 후속 섹션을 사용하십시오. 대부분의 섹션은 다른 섹션에 근거하지 않으므로 아래 예를 독립적으로 사용할 수 있습니다.
  • 이 페이지의 오른쪽에 있는 콘텐츠 메뉴(넓은 페이지 너비) 또는 브라우저의 찾기 기능을 사용하여 필요한 섹션을 찾습니다.
  • 주어진 명령줄 예제를 복사하여 붙여넣고 강조 표시된 값을 자신의 값으로 바꿉니다.

규칙의 순서가 중요하다는 점을 명심하십시오. 이러한 모든 iptables 명령은 -A 옵션을 사용하여 새 규칙을 체인 끝에 추가합니다. 체인의 다른 곳에 배치하려면 -I 옵션을 사용하여 새 규칙의 위치를 지정하거나 지정하지 않음으로써 체인의 시작 부분에 배치할 수 있습니다. 규칙 번호).

참고: 방화벽으로 작업할 때 SSH 트래픽(기본적으로 포트 22)을 차단하여 자신의 서버를 잠그지 않도록 주의하십시오. 방화벽 설정으로 인해 액세스 권한을 잃은 경우 웹 기반 콘솔을 통해 연결하여 액세스 권한을 수정해야 할 수 있습니다. DigitalOcean을 사용하는 경우 자세한 내용은 복구 콘솔 제품 설명서를 참조하십시오. 콘솔을 통해 연결되면 방화벽 규칙을 변경하여 SSH 액세스를 허용(또는 모든 트래픽 허용)할 수 있습니다. 저장된 방화벽 규칙이 SSH 액세스를 허용하는 경우 다른 방법은 서버를 재부팅하는 것입니다.

sudo iptables -Ssudo iptables -L로 현재 iptables 규칙 세트를 확인할 수 있음을 기억하십시오.

iptables 명령을 살펴봅시다!

규칙 저장

Iptables 규칙은 일시적이므로 재부팅 후에도 지속되도록 수동으로 저장해야 합니다.

Ubuntu에서 iptables 규칙을 저장하는 한 가지 방법은 iptables-persistent 패키지를 사용하는 것입니다. 다음과 같이 apt로 설치하십시오.

  1. sudo apt install iptables-persistent

설치하는 동안 현재 방화벽 규칙을 저장할지 묻는 메시지가 표시됩니다.

방화벽 규칙을 업데이트하고 변경 사항을 저장하려면 다음 명령을 실행하십시오.

  1. sudo netfilter-persistent save

다른 Linux 배포판에는 iptables 변경 사항을 영구적으로 만드는 다른 방법이 있을 수 있습니다. 자세한 내용은 관련 문서를 참조하십시오.

규칙 나열 및 삭제

iptables 규칙을 나열하고 삭제하는 방법을 배우려면 이 자습서를 확인하십시오. Iptables 방화벽 규칙을 나열하고 삭제하는 방법.

일반적으로 유용한 규칙

이 섹션에는 대부분의 서버에서 일반적으로 유용한 규칙을 만드는 다양한 iptables 명령이 포함되어 있습니다.

루프백 연결 허용

lo라고도 하는 루프백 인터페이스는 컴퓨터가 네트워크 연결을 자신에게 전달하는 데 사용하는 것입니다. 예를 들어 ping localhost 또는 ping 127.0.0.1을 실행하면 서버가 루프백을 사용하여 자체적으로 ping합니다. 루프백 인터페이스는 localhost 주소를 사용하여 데이터베이스 서버에 연결하도록 애플리케이션 서버를 구성하는 경우에도 사용됩니다. 따라서 방화벽이 이러한 연결을 허용하는지 확인해야 합니다.

루프백 인터페이스에서 모든 트래픽을 수락하려면 다음 명령을 실행합니다.

  1. sudo iptables -A INPUT -i lo -j ACCEPT
  2. sudo iptables -A OUTPUT -o lo -j ACCEPT

설정 및 관련 수신 연결 허용

일반적으로 네트워크 트래픽이 제대로 작동하려면 양방향(수신 및 발신)이어야 하므로 설정 및 관련 수신 트래픽을 허용하는 방화벽 규칙을 만드는 것이 일반적입니다. 그 자체. 이 명령은 다음을 허용합니다.

  1. sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

설정된 발신 연결 허용

일반적으로 적법한 수신 연결에 대한 응답인 모든 확립된 연결의 발신 트래픽을 허용할 수 있습니다. 이 명령은 다음을 허용합니다.

  1. sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

내부 네트워크가 외부에 액세스하도록 허용

eth0이 외부 네트워크이고 eth1이 내부 네트워크라고 가정하면 내부에서 외부에 액세스할 수 있습니다.

  1. sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

유효하지 않은 패킷 삭제

일부 네트워크 트래픽 패킷은 유효하지 않은 것으로 표시됩니다. 때로는 이러한 유형의 패킷을 기록하는 것이 유용할 수 있지만 종종 삭제해도 괜찮습니다. 다음 명령으로 수행하십시오.

  1. sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

IP 주소 차단

특정 IP 주소(예: 203.0.113.51)에서 시작되는 네트워크 연결을 차단하려면 다음 명령을 실행합니다.

  1. sudo iptables -A INPUT -s 203.0.113.51 -j DROP

이 예에서 -s 203.0.113.51은 "203.0.113.51\의 소스 IP 주소를 지정합니다. 소스 IP 주소는 허용 규칙을 포함한 모든 방화벽 규칙에서 지정할 수 있습니다.

대신 "연결 거부\ 오류로 연결 요청에 응답하는 연결을 거부하려면 다음과 같이 "DROP\을 "REJECT\로 바꾸십시오.

  1. sudo iptables -A INPUT -s 203.0.113.51 -j REJECT

네트워크 인터페이스에 대한 연결 차단

예를 들어 특정 IP 주소의 연결을 차단하려면 203.0.113.51, 특정 네트워크 인터페이스(예: eth0, 다음 명령을 사용하십시오.

  1. iptables -A INPUT -i eth0 -s 203.0.113.51 -j DROP

-i eth0가 추가된 이전 예제와 동일합니다. 네트워크 인터페이스는 모든 방화벽 규칙에서 지정할 수 있으며 규칙을 특정 네트워크로 제한하는 좋은 방법입니다.

서비스: SSH

로컬 콘솔 없이 서버를 사용하는 경우 들어오는 SSH 연결(포트 22)을 허용하여 서버에 연결하고 서버를 관리할 수 있습니다. 이 섹션에서는 다양한 SSH 관련 규칙으로 방화벽을 구성하는 방법에 대해 설명합니다.

들어오는 모든 SSH 허용

들어오는 모든 SSH 연결을 허용하려면 다음 명령을 실행합니다.

  1. sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 SSH 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

특정 IP 주소 또는 서브넷에서 들어오는 SSH 허용

특정 IP 주소 또는 서브넷에서 들어오는 SSH 연결을 허용하려면 소스를 지정합니다. 예를 들어 전체 203.0.113.0/24 서브넷을 허용하려면 다음 명령을 실행합니다.

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 SSH 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

발신 SSH 허용

방화벽 OUTPUT 정책이 ACCEPT로 설정되어 있지 않고 나가는 SSH 연결(서버가 다른 서버에 대한 SSH 연결을 시작함)을 허용하려는 경우 다음 명령을 실행할 수 있습니다.

  1. sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

특정 IP 주소 또는 서브넷에서 들어오는 Rsync 허용

포트 873에서 실행되는 Rsync는 한 컴퓨터에서 다른 컴퓨터로 파일을 전송하는 데 사용할 수 있습니다.

특정 IP 주소 또는 서브넷에서 들어오는 rsync 연결을 허용하려면 원본 IP 주소와 대상 포트를 지정합니다. 예를 들어 전체 203.0.113.0/24 서브넷이 서버에 rsync할 수 있도록 허용하려면 다음 명령을 실행합니다.

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 rsync 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

서비스: 웹 서버

Apache 및 Nginx와 같은 웹 서버는 일반적으로 HTTP 및 HTTPS 연결에 대해 각각 포트 80 및 443에서 요청을 수신합니다. 들어오는 트래픽에 대한 기본 정책이 삭제 또는 거부로 설정된 경우 서버가 이러한 요청에 응답할 수 있도록 허용하는 규칙을 만들고 싶을 것입니다.

들어오는 모든 HTTP 허용

들어오는 모든 HTTP(포트 80) 연결을 허용하려면 다음 명령을 실행합니다.

  1. sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 HTTP 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

모든 수신 HTTPS 허용

들어오는 모든 HTTPS(포트 443) 연결을 허용하려면 다음 명령을 실행합니다.

  1. sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 HTTP 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

모든 수신 HTTP 및 HTTPS 허용

HTTP 및 HTTPS 트래픽을 모두 허용하려는 경우 멀티포트 모듈을 사용하여 두 포트를 모두 허용하는 규칙을 생성할 수 있습니다. 들어오는 모든 HTTP 및 HTTPS(포트 443) 연결을 허용하려면 다음 명령을 실행합니다.

  1. sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 HTTP 및 HTTPS 연결의 발신 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

서비스: MySQL

MySQL은 포트 3306에서 클라이언트 연결을 수신 대기합니다. 원격 서버의 클라이언트에서 MySQL 데이터베이스 서버를 사용 중인 경우 해당 트래픽을 허용해야 합니다.

특정 IP 주소 또는 서브넷에서 MySQL 허용

특정 IP 주소 또는 서브넷에서 들어오는 MySQL 연결을 허용하려면 소스를 지정합니다. 예를 들어 전체 203.0.113.0/24 서브넷을 허용하려면 다음 명령을 실행합니다.

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 MySQL 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

MySQL을 특정 네트워크 인터페이스에 허용

예를 들어 개인 네트워크 인터페이스 eth1가 있다고 가정하면 특정 네트워크 인터페이스에 대한 MySQL 연결을 허용하려면 다음 명령을 사용하십시오.

  1. sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 MySQL 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

서비스: PostgreSQL

PostgreSQL은 포트 5432에서 클라이언트 연결을 수신 대기합니다. PostgreSQL 데이터베이스 서버가 원격 서버의 클라이언트에서 사용되고 있는 경우 해당 트래픽을 허용해야 합니다.

특정 IP 주소 또는 서브넷의 PostgreSQL

특정 IP 주소 또는 서브넷에서 들어오는 PostgreSQL 연결을 허용하려면 소스를 지정합니다. 예를 들어 전체 203.0.113.0/24 서브넷을 허용하려면 다음 명령을 실행합니다.

  1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 PostgreSQL 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

PostgreSQL을 특정 네트워크 인터페이스에 허용

특정 네트워크 인터페이스에 대한 PostgreSQL 연결을 허용하려면(예를 들어 사설 네트워크 인터페이스 eth1가 있다고 가정) 다음 명령을 사용하십시오.

  1. sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 PostgreSQL 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

서비스: 우편

Sendmail 및 Postfix와 같은 메일 서버는 메일 배달에 사용되는 프로토콜에 따라 다양한 포트에서 수신 대기합니다. 메일 서버를 실행 중인 경우 사용 중인 프로토콜을 확인하고 적절한 유형의 트래픽을 허용하십시오. 또한 나가는 SMTP 메일을 차단하는 규칙을 만드는 방법도 보여줍니다.

발신 SMTP 메일 차단

서버가 나가는 메일을 보내지 않아야 하는 경우 이러한 종류의 트래픽을 차단할 수 있습니다. 포트 25를 사용하는 나가는 SMTP 메일을 차단하려면 다음 명령을 실행합니다.

  1. sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT

이것은 포트 25에서 나가는 모든 트래픽을 거부하도록 iptables를 구성합니다. 포트 25 대신 포트 번호로 다른 서비스를 거부해야 하는 경우 위의 25를 해당 포트 번호로 대체합니다.

들어오는 모든 SMTP 허용

서버가 포트 25에서 SMTP 연결에 응답하도록 허용하려면 다음 명령을 실행하십시오.

  1. sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 SMTP 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

들어오는 모든 IMAP 허용

서버가 IMAP 연결, 포트 143에 응답하도록 허용하려면 다음 명령을 실행하십시오.

  1. sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 IMAP 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

모든 수신 IMAP 허용

서버가 IMAPS 연결, 포트 993에 응답하도록 허용하려면 다음 명령을 실행하십시오.

  1. sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 IMAPS 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

들어오는 모든 POP3 허용

서버가 POP3 연결, 포트 110에 응답하도록 허용하려면 다음 명령을 실행하십시오.

  1. sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 POP3 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

들어오는 모든 POP3S 허용

서버가 POP3S 연결, 포트 995에 응답하도록 허용하려면 다음 명령을 실행하십시오.

  1. sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

설정된 POP3S 연결의 나가는 트래픽을 허용하는 두 번째 명령은 OUTPUT 정책이 ACCEPT로 설정되지 않은 경우에만 필요합니다.

결론

여기에는 iptables 방화벽을 구성할 때 일반적으로 사용되는 많은 명령이 포함됩니다. 물론 iptables는 매우 유연한 도구이므로 여기에서 다루지 않은 경우 특정 요구 사항에 맞게 명령을 다양한 옵션과 자유롭게 혼합하고 일치시킬 수 있습니다.

방화벽 설정 방법을 결정하는 데 도움이 필요한 경우 서버 보호를 위한 효과적인 방화벽 정책을 선택하는 방법 자습서를 확인하십시오.