웹사이트 검색

Centos 6에서 기본 Iptables 방화벽을 설정하는 방법


상태: 더 이상 사용되지 않음

이 문서에서는 더 이상 지원되지 않는 CentOS 버전에 대해 설명합니다. 현재 CentOS 6을 실행하는 서버를 운영 중인 경우 지원되는 버전의 CentOS로 업그레이드하거나 마이그레이션하는 것이 좋습니다.

이유:

대신 참조:

  • Iptables Essentials: 일반 방화벽 규칙 및 명령
  • Iptables 방화벽 작동 방식
  • CentOS 7에서 FirewallD를 사용하여 방화벽을 설정하는 방법

소개

이 기사에서는 Centos VPS에서 간단한 방화벽을 만드는 방법을 보여줍니다. 우리가 원하는 포트만 열고 다른 서비스는 닫습니다. 또한 간단한 공격을 방지하는 방법과 실수로 자신에 대한 액세스를 거부한 경우 VPS에 다시 로그인하는 방법을 보여줍니다.

이 튜토리얼은 결코 철저하지 않으며 아파치, SSH 및 이메일에 대한 몇 가지 수신 포트를 열고 다른 모든 포트를 닫는 방법만 보여줍니다. 나가는 트래픽을 차단하지 않고 취약한 VPS를 찾는 일반적인 스크립트와 봇을 차단하기 위해 가장 일반적인 몇 가지 규칙만 만듭니다.

iptables는 대부분의 Linux 배포판에 설치된 간단한 방화벽입니다. iptables의 Linux 매뉴얼 페이지에는 IPv4 패킷 필터링 및 NAT를 위한 관리 도구라고 되어 있는데, 이는 번역하면 인터넷 트래픽을 걸러내고 차단하는 도구라는 의미입니다. . iptables 방화벽은 DigitalOcean에서 제공하는 Centos 6.4 Linux 이미지에 기본적으로 포함되어 있습니다.

규칙별로 방화벽을 설정하겠습니다. 단순화: 방화벽은 규칙의 목록이므로 들어오는 연결이 열려 있을 때 규칙과 일치하는 경우 이 규칙은 해당 연결을 수락하거나 거부할 수 있습니다. 규칙이 충족되지 않으면 기본 규칙을 사용합니다.

참고: 이 자습서에서는 IPv4 보안을 다룹니다. Linux에서 IPv6 보안은 IPv4와 별도로 유지됩니다. 예를 들어 "iptables"는 IPv4 주소에 대한 방화벽 규칙만 유지하지만 IPv6 네트워크 주소에 대한 방화벽 규칙을 유지하는 데 사용할 수 있는 "ip6tables"라는 IPv6 대응 항목이 있습니다.

VPS가 IPv6용으로 구성된 경우 적절한 도구를 사용하여 IPv4 및 IPv6 네트워크 인터페이스를 모두 보호해야 합니다. IPv6 도구에 대한 자세한 내용은 Linux VPS에서 IPv6를 사용하도록 도구를 구성하는 방법 가이드를 참조하세요.

열 포트 및 서비스 결정

우선, 우리는 공개하고자 하는 서비스가 무엇인지 알고 싶습니다. 일반적인 웹 호스팅 서버를 사용하겠습니다. 웹 및 이메일 서버이며 SSH 서버를 통해 자신을 들여보내야 합니다.

먼저 VPS에 원격으로 연결할 수 있도록 SSH 포트를 열어 두려고 합니다. 즉, 포트 22입니다.

또한 웹 트래픽을 위해 포트 80 및 443(SSL 포트)이 필요합니다. 이메일 전송을 위해 포트 25(일반 SMTP) 및 465(보안 SMTP)를 엽니다. 사용자가 이메일을 수신할 수 있도록 일반 포트 110(POP3) 및 995(보안 POP3 포트)를 엽니다.

또한 설치되어 있는 경우 IMAP 포트를 잘 엽니다: IMAP의 경우 143, SSL을 통한 IMAP의 경우 993.참고: 보안 프로토콜만 허용하는 것이 좋지만 우리가 영향을 미칠 수 없는 경우 옵션이 아닐 수 있습니다. 메일 서비스 사용자가 이메일 클라이언트를 변경할 수 있습니다.

가장 일반적인 공격 차단

DigitalOcean VPS는 일반적으로 빈 구성으로 제공됩니다. 모든 트래픽이 허용됩니다. 이를 확인하기 위해 방화벽 규칙을 플러시할 수 있습니다. 즉, 모두 지울 수 있습니다.

iptables -F

그런 다음 스크립트 키디로부터 VPS를 보호하기 위해 가장 일반적인 공격을 차단하는 몇 가지 간단한 방화벽 규칙을 추가할 수 있습니다. 본격적인 DDOS 또는 이와 유사한 것으로부터 우리를 보호하기 위해 iptables에만 의존할 수는 없지만 결국 VPS를 찾고 악용할 보안 허점을 찾기 시작하는 일반적인 네트워크 스캐닝 봇을 연기할 수 있습니다. 먼저 null 패킷을 차단하는 것으로 시작합니다.

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

우리는 방화벽에 tcp 플래그가 NONE인 모든 들어오는 패킷을 가져가서 그냥 DROP하도록 지시했습니다. Null 패킷은 간단히 말해서 정찰 패킷입니다. 공격 패턴은 이를 사용하여 VPS를 구성한 방법을 확인하고 약점을 찾습니다. 거부할 다음 패턴은 syn-flood 공격입니다.

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

정찰 패킷이기도 한 XMAS 패킷.

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

우리는 VPS에서 취약점을 발견하는 일반적인 패턴 중 적어도 일부를 배제했습니다.

선택한 서비스에 대한 포트 열기

이제 선택한 서비스를 방화벽 필터에 추가할 수 있습니다. 첫 번째는 localhost 인터페이스입니다.

iptables -A INPUT -i lo -j ACCEPT

우리는 iptables에게 localhost 인터페이스(-i lo)로 오는 모든 트래픽을 수신(INPUT) 필터 테이블에 추가(-A)하고 이를 수락(-j ACCEPT)하도록 지시합니다. Localhost는 자주 사용됩니다. 로컬에 설치된 데이터베이스와 통신하는 웹 사이트 또는 이메일 서버. 그렇게 하면 VPS가 데이터베이스를 사용할 수 있지만 데이터베이스는 인터넷의 악용에 대해 닫힙니다.

이제 웹 서버 트래픽을 허용할 수 있습니다.

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

ACCEPT 체인에 두 개의 포트(http 포트 80 및 https 포트 443)를 추가하여 해당 포트에서 트래픽을 허용했습니다. 이제 사용자가 SMTP 서버를 사용하도록 허용해 보겠습니다.

iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

앞에서 언급했듯이 사용자에게 영향을 미칠 수 있다면 보안 버전을 사용해야 하지만 종종 용어를 지시할 수 없으며 클라이언트는 암호를 스니핑하기 훨씬 더 쉬운 포트 25를 사용하여 연결합니다. 이제 사용자가 서버에서 이메일을 읽을 수 있도록 진행합니다.

iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

이 두 규칙은 POP3 트래픽을 허용합니다. 다시 말하지만 보안 버전의 서비스를 사용하여 이메일 서버의 보안을 강화할 수 있습니다. 이제 IMAP 메일 프로토콜도 허용해야 합니다.

iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

SSH 액세스 제한

또한 원격으로 VPS에 연결할 수 있도록 SSH 트래픽을 허용해야 합니다. 이를 수행하는 간단한 방법은 다음 명령을 사용하는 것입니다.

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

이제 포트 22(기본 SSH 포트)로 들어오는 tcp 트래픽을 수락하기 위한 규칙을 추가하도록 iptables에 지시했습니다. SSH 구성을 다른 포트로 변경하는 것이 좋으며 이 방화벽 필터도 그에 따라 변경해야 하지만 SSH 구성은 이 문서의 일부가 아닙니다.

그러나 우리는 방화벽 자체에 대해 한 가지 더 할 수 있습니다. 사무실에 영구 IP 주소가 있는 경우 이 소스의 SSH 연결만 허용할 수 있습니다. 이렇게 하면 우리 위치에 있는 사람들만 연결할 수 있습니다.

먼저 외부 IP 주소를 찾으십시오. LAN의 주소가 아닌지 확인하십시오. 그렇지 않으면 작동하지 않습니다. whatismyip.com 사이트를 방문하기만 하면 됩니다. 이를 찾는 또 다른 방법은 다음을 입력하는 것입니다.

w

터미널에서 우리가 로그인한 것을 볼 수 있어야 합니다(단 한 사람만 로그인하고 IP 주소가 기록된 경우).

출력은 다음과 같습니다.

root@iptables# w
 11:42:59 up 60 days, 11:21,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root   pts/0    213.191.xxx.xxx  09:27    0.00s  0.05s  0.00s w

이제 트래픽이 하나의 소스(귀하의 IP 주소)에서 오는 경우에만 SSH 포트로 트래픽을 허용하도록 방화벽 규칙을 생성할 수 있습니다.

iptables -A INPUT -p tcp -s YOUR_IP_ADDRESS -m tcp --dport 22 -j ACCEPT

물론 YOUR_IP_ADDRESS를 실제 IP로 바꾸십시오.

포트 번호를 변경하여 필요에 따라 방화벽에서 더 많은 포트를 열 수 있습니다. 그렇게 하면 방화벽이 원하는 서비스에만 액세스할 수 있습니다. 바로 지금, 발신 연결(예: VPS에서 핑 또는 소프트웨어 업데이트 실행)을 사용할 수 있는 규칙을 하나 더 추가해야 합니다.

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

이는 설정된 발신 연결이 해당 연결의 다른 쪽에서 VPS로부터 응답을 받을 수 있도록 합니다.

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

이제 방화벽 규칙이 적용되었습니다.

구성 저장

이제 모든 구성이 있으므로 규칙을 나열하여 빠진 것이 있는지 확인할 수 있습니다.

iptables -L -n

여기서 -n 스위치는 도메인 이름이 아닌 IP 주소만 필요하기 때문입니다. 즉. 다음과 같은 규칙에 IP가 있는 경우: 69.55.48.33: 방화벽이 이를 조회하여 linux-console.net IP임을 확인합니다. 주소 자체만 있으면 됩니다. 이제 마침내 방화벽 구성을 저장할 수 있습니다.

iptables-save | sudo tee /etc/sysconfig/iptables

CentOS의 iptables 구성 파일은 /etc/sysconfig/iptables에 있습니다. 위의 명령은 우리가 만든 규칙을 해당 파일에 저장했습니다. 모든 것이 제대로 작동하는지 확인하기 위해 방화벽을 다시 시작할 수 있습니다.

service iptables restart

저장된 규칙은 VPS를 재부팅해도 유지됩니다.

자신을 잠금 해제하려면 플러시

구성에서 실수를 한 경우 VPS에 액세스하지 못하도록 차단했을 수 있습니다. 방화벽이 워크스테이션의 연결을 허용하지 않도록 잘못된 IP 주소를 입력했을 수 있습니다. 이제 우리는 이러한 규칙에 도달할 수 없으며 규칙을 저장한 경우 다시 시작해도 도움이 되지 않습니다. 다행스럽게도 DO 웹 인터페이스를 사용하면 콘솔을 통해 서버에 연결할 수 있습니다.

연결되면 루트로 로그인하고 다음 명령을 실행합니다.

iptables -F

이렇게 하면 필터가 플러시되고 VPS에 다시 들어갈 수 있습니다.

결론

이 기사는 완전하지 않으며 Linux 시스템에서 간단한 방화벽을 실행하는 표면만 긁었습니다. Linux 명령줄이나 iptables에 익숙하지 않은 개발자를 위한 일반적인 웹 및 이메일 서버 시나리오에는 충분합니다.

그러나 훨씬 더 많은 일을 할 수 있습니다. 보다 강력한 구성을 제공하는 데 도움이 되는 좋은 자습서와 샘플이 인터넷에 있습니다. 프로덕션 환경의 경우 보다 세부적인 구성을 만들거나 보안 전문가가 구성을 준비하도록 하는 것이 좋습니다.