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

이 게시물은 네트워크가 작동하는 방식과 Linux 장비를 가정이든 비즈니스이든 관계없이 네트워크를 조금 더 보장하는 라우터로 전환하는 방법에 대해 조금 설명하려고합니다. 이제 사업에 착수합시다.

이 내용은 "Linux-시스템 관리 및 네트워크 서비스 운영"-Sébastien BOBILLIER 책을 기반으로합니다.

라우팅 및 필터링

라우팅에 대해 이야기하고 이해하기 위해 먼저 라우터의 기능을 정의 할 수 있습니다. 이를 위해 라우터는 네트워크를 생성하고 다른 장비와의 연결을 허용하는 것 외에도 (AP, 스위치, 허브 등으로이를 수행 할 수 있음을 알고있는) 두 개의 서로 다른 네트워크를 서로 연결할 수 있다고 말할 수 있습니다.

라우터

이미지에서 볼 수 있듯이 라우터에 의해 생성되고 두 인터페이스 중 하나에 도달하는 로컬 네트워크 "10.0.1.0"이 있습니다. 그런 다음 다른 인터페이스의 라우터에는 인터넷에 연결할 수있는 공용 IP가있는 다른 네트워크가 있습니다. 라우팅 기능은 기본적으로이 두 네트워크 간의 중개자 역할을하여 통신 할 수 있도록합니다.

라우터로서의 Linux.

당연히 리눅스 커널은 이미 "포워딩"기능을 가지고 있지만 기본적으로 비활성화되어 있으므로 Linux에서이 작업을 수행하려면 파일로 이동해야합니다.

/proc/sys/net/ipv4/ip_forward

여기서 우리는 0 "1"만 포함 된 파일임을 알 수 있습니다.이 동작을 활성화하려면 XNUMX "XNUMX"로 변경해야합니다. 안타깝게도 컴퓨터를 다시 시작할 때 삭제됩니다. 기본적으로 활성화 된 상태로 두려면 다음 명령을 사용해야합니다.

sysctl net.ipv4.ip_forward=1

또는 파일에서 직접 편집 /etc/sysctl.conf. 배포에 따라이 구성은  /etc/sysctl.d/.

기본적으로 Linux에는 일반적으로 LAN 네트워크 및 라우터에 대한 연결의 구성 인 라우팅 테이블이 있어야합니다. 이 라우팅을 보려면 두 가지 명령을 사용할 수 있습니다.

route -n

o

netstat -nr

두 명령 모두 동일하게 반환되어야합니다.

2014-09-30 18:23:06 스크린 샷

일반적으로이 구성은 Linux가 게이트웨이 역할을하기에 충분하며 다른 컴퓨터가 컴퓨터를 탐색 할 수 있습니다. 예를 들어, Linux가 로컬이든 아니든 두 개 이상의 네트워크를 연결하도록하려면 고정 경로를 사용할 수 있습니다.

내 Linux에 두 개의 네트워크 인터페이스가 있다고 가정 해 보겠습니다. 첫 번째는 네트워크가 172.26.0.0 인 인터넷 연결이 있고 두 번째 (10.0.0.0)에는 다른 로컬 네트워크의 일부 컴퓨터가 있습니다. 패킷을 다른 네트워크로 라우팅하려면 다음을 사용할 수 있습니다.

route add -net 10.0.0.0 netmask 255.0.0.0 gw 172.26.0.8

일반적으로 다음과 같습니다.

route add -net REDDESTINO netmask MASCARA gw IPDELLINUX

우리가 주면 노선 -n 이 네트워크의 존재 여부에 관계없이이 라우팅은 테이블에 고정됩니다.

2014-09-30 18:31:35 스크린 샷

상기 라우팅을 제거하려면 다음을 사용할 수 있습니다.

route del -net 10.0.0.0 netmask 255.0.0.0

iptables.

기본적으로 iptables는 패킷, 발신, 수신 또는 기타 필터링에 사용되므로 네트워크 트래픽을 관리하기위한 훌륭한 도구입니다. 음, iptables는 동일한 컴퓨터에서 트래픽을 필터링 할 수있는 것과 마찬가지로이를 통과하는 트래픽도 필터링 할 수 있습니다. (전송). Iptables는 테이블, 체인 및 작업으로 나눌 수 있습니다.

  • 무대:  기본적으로 두 개의 테이블이있을 수 있습니다. 필터, 패킷을 필터링하고  NAT 즉, 한 네트워크에서 다른 네트워크로 이동하는 것입니다.
  • 쇠사슬: 체인은 필터링하거나 헤엄 치려는 트래픽 유형, 즉 테이블을 적용 할 트래픽 유형을 나타냅니다. 다음과 같을 수 있습니다.  입력: 들어오는 트래픽, 산출: 아웃 바운드 트래픽 또는 앞으로: 통과하지만 적절한 연결이 아닌 트래픽입니다.
  • 또한 나타날 수 있습니다 포스트라우팅, 라우팅 된 후 특정 방식으로 패킷을 처리하는 데 사용됩니다.
  • 작업 : 액션은 기본적으로 체인으로 수행 할 액션입니다. 이 작업은 하락, 트래픽을 파괴하거나 동의하기. 트래픽이 이러한 작업을 수행 할 수 있도록합니다.

IPTABLES 규칙은 생성 된 순서대로 저장 및 실행되며, 규칙이 이전 규칙을 삭제하는 경우 순서의 마지막 규칙이 항상 적용됩니다.

방화벽 정책.

일반적으로 방화벽은 자연스럽게 두 가지 방식으로 작동합니다.

  1. 다음을 제외한 모든 트래픽 허용 또는
  2. 다음을 제외하고는 트래픽을 허용하지 마십시오.

정책을 적용하려면 IPTABLES-P 액션 체인

여기서 문자열은 트래픽 유형 (INPUT, OUTPUT, FORWARD, POSTROUTING ...)을 나타내고 작업은 DROP 또는 ACCEPT입니다.

예를 살펴 보겠습니다.

2014-09-30 18:53:23 스크린 샷

여기에서 처음에는 핑을 할 수 있었고 모든 OUTPUT 트래픽이 DROP이거나 허용되지 않는다고 IPTABLES에 알 렸습니다. 그런 다음 IPTABLES에게 수락하라고 말했습니다.

방화벽을 처음부터 구축하려면 항상 다음 규칙을 적용해야합니다. 다음을 제외하고는 트래픽을 허용하지 않습니다.이를 위해 규칙을 적용합니다.

iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
이러한 정책이 적용되면 연결 유형이 없습니다.
.

반환하려면 동일한 내용을 작성하고 DROP을 ACCEPT로 바꿉니다.

이 시점에서 모든 트래픽이 거부되었으므로 IPTABLES가 가질 수있는 트래픽을 알리기 시작합니다.

구문은 다음과 같습니다.

iptables -A cadena -s ip_orgigen -d ip_destino -p protocolo --dport puerto -j acción

장소 :

문자열 = INPUT, OUTPUT 또는 FORWARD

origin_ip = 패킷의 출처, 단일 IP 또는 네트워크 일 수 있으며이 경우 마스크를 지정해야합니다).

destination_ip = 패킷이가는 곳. 이것은 단일 IP 또는 네트워크 일 수 있으며이 경우 마스크를 지정해야합니다).

프로토콜 = 패킷에서 사용하는 프로토콜을 나타냅니다 (icmp, tcp, udp ...).

포트 = 트래픽의 목적지 포트.

액션 = DROP 또는 ACCEPT.

예 :

2014-09-30 19:26:41 스크린 샷

모든 제한된 정책이 적용됩니다.

2014-09-30 19:27:42 스크린 샷

그런 다음 TCP 프로토콜을 사용하여 포트 80 HTTP 및 443 HTTPS를 통해 트래픽을 가질 수 있도록 규칙을 추가합니다. 그런 다음 포트 53 DNS 클라이언트가 도메인을 확인하는 데 적용됩니다. 그렇지 않으면 탐색하지 않습니다. 이것은 udp 프로토콜에서 작동합니다.

라인 :

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

그 이유는 다음과 같습니다. 예를 들어 HTTP 요청을 할 때 서버의 포트 80에 연결하지만 정보를 반환 할 서버는 모든 포트를 통해 연결해야합니다. (일반적으로 1024 이상).

모든 포트가 닫혀 있기 때문에 1024보다 높은 모든 포트를 열지 않으면 달성되지 않습니다 (나쁜 생각). 이것이 말하는 것은 내가 직접 설정 한 연결에서 들어오는 모든 트래픽이 허용된다는 것입니다. 원칙적으로 제가 시작한 연결입니다.

OUTPUT을 규칙에 넣을 때 이는 해당 장비에만 적용됩니다. 장비를 라우터로 사용하여 이러한 연결을 허용하는 경우 OUTPUT을 FORWARD로 변경해야합니다. 트래픽이 컴퓨터를 통과하지만 시작되지 않기 때문에
이러한 모든 규칙은 다시 시작 후에 삭제되므로 기본적으로 시작되도록 스크립트를 만들어야합니다. 그러나 우리는 다음에 이것을 볼 것입니다

이 정보가 마음에 드셨기를 바랍니다. 다음에서는 Firewal 용 NAT, 프록시 및 스크립트에 대해 설명하겠습니다.


12 코멘트, 당신의 것을 남겨주세요

코멘트를 남겨주세요

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

*

*

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

  1.   로 젤리 오 핀토

    이것은 많은 기업가가 자체 방화벽을 제조하기 위해 취하는 기반입니다. 이것이 시장에 내장 된 리눅스를 사용하는 방화벽 브랜드가 너무나 많은 이유입니다.

  2.   히버

    훌륭한 기사. 두 번째 부분을 기대합니다.

  3.   밀튼

    아주 좋은 설명, 그것은 내 작업의 대리를 이해하는 데 도움이되었습니다. 감사합니다

  4.   파우스 토드

    안녕하세요 Jlcmux,

    훌륭합니다. 정말 마음에 들었습니다. 상대방은 언제 이용 가능합니까?

    공유해 주셔서 감사합니다.

    1.   

      댓글 주셔서 감사합니다.

      나는 어제 다른 부분을 보냈고, 그날 그들이 그것을 출판 할 것이라고 생각합니다.

      인사말.

  5.   이스라엘

    아주 좋은 기사 친구 @ Jlcmux, 그는 내가 한동안 가지고 있었던 몇 가지 의구심을 분명히 해줬 기 때문에 정말 배웠습니다. 기사의 출처, Sébastien BOBILLIER의 책, 잘 slau2s 그리고 지금 두 번째 부분 인 salu2s를 확인합니다.

    1.   

      안녕하세요 이스라엘에 대해 논평 해 주셔서 감사합니다.

      나는 책을 물리적 형태로 가지고 있음이 밝혀졌습니다. 하지만 Google 도서에서이 링크를 찾았습니다. http://books.google.com.co/books?id=zxASM3ii4GYC&pg=PA356&lpg=PA356&dq=S%C3%A9bastien+BOBILLIER+Linux+%E2%80%93+Administraci%C3%B3n+del+sistema+y+explotaci%C3%B3n+de+los+servicios+de+red#v=onepage&q=

      완성 된 것 같아요.

  6.   아리엘

    아주 좋은 기사입니다. 질문을 추가합니다. 전용 하드웨어와 관련하여 Linux를 라우터로 사용하면 어떤 이점이 있습니까? 아니면 운동을 위해서입니까? 전용 배포판이 있다는 것을 알고 있지만 이전 PC를 구할 것인지 아니면 구성에 더 많은 유연성을 제공 할 것인지는 모르겠습니다.

    1.   

      글쎄, 장단점은 이것을 구현할 시나리오에 달려 있다고 생각합니다. 왜 집에 UTM이나 그런 것을 사지 않을 것입니까? 그리고 그것을 감당할 수없는 소규모 기업을위한 것일 수도 있습니다. 이것의 모든 논리를 이해하는 데 도움이되고 전용 FWall을 더 잘 구성 할 수 있으므로 연습으로도 좋습니다. 그 외에도 거의 모든 장치가 실제로 가지고있는 것은 임베디드 Linux입니다.

      인사말.

  7.   아리엘

    안녕하세요, 질문입니다. Linux에서 네트워크 간의 유사한 라우팅을 위해 "인공"인터페이스를 생성 할 수 있습니까? (패킷 추적기 스타일) 가상 머신에서 작동합니까? 예를 들어 eth0이있는 경우 (물론 단일 카드가 있으므로) eth1을 만들어 다른 네트워크를 만들 수 있습니까? 아주 좋은 선생님!

    1.    엘라 브

      물론 Linux에서는 가상 인터페이스를 만들 수 있습니다. eth0이 있으면 eth0 : 0, eth0 : 1, eth0 : 2 ... 등을 가질 수 있습니다.

  8.   치 놀로 코

    공유 해주셔서 감사합니다