Iptables로 네트워크 보안-프록시-NAT-IDS : 2 부

이전 포스트 방화벽으로 작동하는 IPTable의 구성을 확인했습니다. 이제 시스템이 시작될 때 규칙이 자동으로 실행되도록 이러한 스크립트를 만드는 방법과 해당 규칙을 잠시 제거하거나 중지하는 방법을 볼 수 있습니다.

스크립트를 작성하고 어떻게 보이는지 보여주기 전에 NAT와이 장비로 수행 할 작업의 개념에 대해 조금 이야기 해 보겠습니다.

예제의 NAT 및 컨텍스트.

NAT에 대해 이야기 할 때 라우팅과 혼동 할 수 있습니다. 둘 다 서로 다른 두 네트워크를 연결하는 역할을 담당하기 때문입니다. 실제 차이점은 라우팅이 한 로컬 네트워크에서 다른 로컬 네트워크로 이동하는 데 적용되고이 다른 네트워크는 라우터에 연결되어 인터넷으로 나갈 수 있다는 것입니다.

반면 NAT에 대해 이야기 할 때는 로컬 또는 사설 네트워크에서 공용 네트워크 또는 인터넷으로 패킷을 라우팅하는 것에 대해 이야기합니다. 인터넷으로 이동하는 데 사용할 공용 IP를 넣어 패킷을 마스킹하여이를 수행합니다. 즉, 공용 IP는 GNU / Linux 컴퓨터가 직접 소유하기 때문에 라우터가 필요하지 않습니다.

NAT

우리는 Linux를 라우터 / 방화벽으로 사용하여 로컬 네트워크에서 인터넷으로 나가는 슬로건으로이 작업을 수행 할 것입니다. 그러나 여기에 두 가지 시나리오가 나타날 수 있습니다.

  • 우리의 리눅스는 서비스 제공자의 라우터와 로컬 네트워크 사이에 있습니다.

이 경우 라우터와 Linux 사이에는 네트워크가 있고 Linux와 로컬 네트워크 사이에는 또 다른 네트워크가 있습니다. 이것은 라우터가 NAT를 수행 할 필요가 없다는 것을 의미합니다. 이전 포스트 좋을거야.

  • 우리의 Linux에는 로컬 네트워크에 연결된 인터페이스가 있고 다른 인터페이스를 통해 탐색하는 공용 IP를 직접 수신합니다.

이것은 우리의 Linux가 패킷이 인터넷에 도달 할 수 있도록 NAT를 수행해야 함을 의미합니다.

이 작은 실험실의 목적을 위해 Linux가 공용 IP를 직접 수신하여 NAT의 효과를 테스트 할 수 있다고 말할 것입니다.

NAT를 수행하려면 다음 구문을 사용합니다.

 iptables -t nat -A POSTROUTING -O eth1 -j 마스커레이드

여기서 eth1은 공개 IP를받는 인터페이스, 즉 인터넷으로 이동하는 인터페이스입니다.

MASQUERADE는 IP가 공개 일 때 사용되지만 시간에 따라 달라질 수 있습니다 (동적). 그렇지 않으면 SNAT – to-source ip를 사용할 수 있습니다.

iptables 스크립트 생성

172.26.0.0은 로컬 네트워크이고 81.2.3.4는 인터넷에 연결하는 데 사용되는 공용 IP입니다. (정적 IP입니다). eth0 (로컬 네트워크) 인터페이스가 있습니다.

eth1 (공용 네트워크).

기본적으로 /etc/init.d/firestop (예 :)에서 호출 할 수있는 스크립트를 작성하는 것으로 구성됩니다. 이 스크립트에서 다른 시스템 데몬과 마찬가지로 구성을 시작, 중지 또는 확인할 수 있습니다.

내 IPTABLES 규칙이 다음과 같다고 가정합니다.

#! / bin / bash # 내 집의 방화벽. # 파일 이름 / etc / firewall_on # By Jlcmux Twitter : @Jlcmux # # 기본 정책. iptables -P INPOUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # #NAT to share internet from eth0 to eth1 iptables -t nat -A POSTROUTING -O eth1 -j SNAT --to-source 81.2.3.4
# # 내 iptables에 의해 시작된 들어오는 연결 허용 -A FORWARD -m state --state ESTABLISHED, RELATED -j ACCEPT # # 승인 된 나가는 트래픽 iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -p tcp -dport 443 -j iptables 수락 -A FORWARD -i eth0 -o eth1 -p udp -dport 53 -j ACCEPT
실행 권한을주는 것을 잊지 말자

설명:

스크립트는 기본적으로 다음을 수행합니다.

  1. 먼저 모든 탐색, 연결 및 트래픽을 제한하십시오. (기본 방화벽 정책)
  2. 그런 다음 대상 eth1을 사용하여 NAT를 만듭니다. 정적 공개 IP가 있음을 나타냅니다. «81.2.3.4»
  3. 내가 시작한 연결 패킷을 수신하는 데 필요한 포트를 엽니 다.
  4. 아웃 바운드 HTTP, HTTPS 및 DNS 트래픽을 허용합니다.
우리가 Linux를 라우터로 사용하고 있기 때문에 규칙은 FORWARD 트래픽을 대상으로합니다. 따라서 정책은 Linux를 통과하는 트래픽, 즉 중개자 역할을하는 트래픽에 사용됩니다. 이것은 우리의 Linux가 실제로 데이터를 직접 탐색하거나받을 수 없음을 의미합니다. 연결된 컴퓨터에만 적용되지만 자체에는 적용되지 않습니다.

장비를 사용하여 탐색하려면 라인을 반복하고 FORWARD를 INPUT 또는 OUTPUT으로 적절하게 변경해야합니다.

스크립트를 취소하십시오.

이제 우리는 위의 모든 것을 무시하고 컴퓨터에서이 모든 것을 제거하는 스크립트를 만들 것입니다. (테스트 목적으로 또는 방화벽을 끄고 싶습니다).

#! / bin / bash # 내 집의 방화벽. # 파일 이름 / etc / firewall_off # By Jlcmux Twitter : @Jlcmux # #iptables 규칙 삭제 -F # # 기본 정책 적용 (모든 트래픽 허용) iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT

자동화.

이제 우리는 내부에 스크립트를 만들어야합니다. /etc/init.d/ 서비스가 자동으로 시작되어보다 편안하게 관리 할 수 ​​있습니다.

#! / bin / bash # 내 집의 방화벽. # 파일 이름 /etc/init.d/ firewall # 작성자 : Jlcmux Twitter : @Jlcmux case $ 1 in start) / etc / firewall_on ;; 중지) / etc / firewall_off ;; 상태) iptables -L ;; *) echo "잘못된 구문. Valid = /etc/init.d/ firewall start | stop | status ;; esac

설명:

이 마지막 스크립트는 /etc/init.d/ 이름과 함께 방화벽. 따라서 방화벽을 관리하려면 다음 명령을 사용할 수 있습니다. /etc/init.d/ 방화벽 시작. 같은 방식으로 우리는 그것을 멈추거나 상태를 볼 수 있습니다.

이제 파일을 편집 할 것입니다. /etc/rc.local 다음과 같이 입력합니다. /etc/init.d/ 방화벽 시작 시스템으로 시작합니다.

게다가. 이것은 두 번째 부분입니다. 여러분 모두에게 뭔가를 가져다주기를 바랍니다. 다음에는 프록시와 IDS가 표시됩니다.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   사냥꾼

    데비안을 사용하는 경우이를 정확히 수행하는 리포지토리 (iptables-persistent)에 패키지가 있으며, 사용하는 항목에 따라 /etc/iptables/rules.v4 또는 v6에 현재 규칙을 덤프 한 다음이를 적용합니다. 시스템을 들어 올릴 때.

  2.   ocz

    실제로 기존 iptables 방화벽의 구성을 정리하려면 (내 관점에서 NAT를 사용하는 것은 그렇지 않습니다) 대부분의 경우 규칙을 플러시하고 기본 정책을 ACCEPT로 재설정하는 것으로 충분합니다.
    그러나 이론적으로 그리고 내가 아는 한, 이것 외에도 기본이 아닌 문자열을 지우고 카운터를 재설정해야합니다. "필터"외에 다른 테이블이 있다는 점을 염두에두고 수행해야 할 작업입니다 (이를 위해 "/ proc / net / ip_tables_names"파일을 읽어야합니다).

    그건 그렇고, 정통에 따르면 네트워크가 시작되기 전에 방화벽이 이미 설치되어 있어야합니다. 다른 리눅스 시스템에서는 어떻게 할 수 있는지 모르겠지만 데비안 시스템에서는 스크립트를 "/etc/network/if-pre-up.d/"디렉토리에 적용하고 설정할 수 있습니다.

    모두에게 좋은 방화벽. 😉

  3.   노틸러스

    안녕하세요, 게시물이 매우 좋습니다. 나는 전체 2 권을 읽었다.

    다음을 기다리는 중 🙂

  4.   anonimo

    내 무지의 질문은 iptables를 계속 사용하지만 여러 커널 버전의 경우 nftables가 있습니다. 이미 테스트 중입니다. 질문은 nftables가 iptables와 관련하여 베타 버전입니까? iptables는 훨씬 더 오랫동안 계속 사용됩니까?

    그라시아.

    1.    유키 테루

      nftables에는 iptables, ip6tables, arptables 및 ebtables의 모든 기능이 포함되어 있으며, 모두 커널 공간과 사용자 공간 모두에서 새로운 인프라를 사용하여 더 나은 성능과 향상된 기능을 보장합니다. nftables는 iptables와 언급 된 다른 모든 도구를 대체 할 것이지만, 적어도 nftables가 널리 사용되기 전까지는 아닙니다.

  5.   알렉산더

    아주 좋은 포스트, 잘 설명되어있어서 더 많이 읽고 싶었습니다 .. 인사 감사합니다.

  6.   아브라

    안녕하세요! 두 게시물 모두 아주 좋습니다.
    기여로이 부분의 끝에 추가 할 수 있습니다.

    "이제 우리는 /etc/rc.local 파일을 편집하고 다음과 같은 것을 넣을 것입니다 : /etc/init.d/firestop start가 시스템과 함께 시작되도록합니다."

    이것을 rc.local에 추가하십시오.

    if [-x /etc/init.d/ firewall]; 그때
    /etc/init.d/ 방화벽 시작
    fi

    즉, "방화벽"에 실행 권한이 있으면 실행 권한이 없으면 실행합니다.
    "방화벽"이 시작되지 않도록하려면 권한을 제거하기 만하면됩니다.

    예 : chmod + x /etc/init.d/ firewall
    모든 시작에서 실행되도록하거나 ...
    chmod -x /etc/init.d/ 방화벽
    완전히 비활성화합니다.

    안녕하십니까!