iptables를보다 쉽게 ​​관리


13

허용 된 일부 사이트를 제외하고 네트워크가 완전히 잠겨 있습니다. 이것은 모두 iptables를 통해 이루어지며 다음과 같이 보입니다.

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 101.102.103.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 101.102.103.0/24 -j ACCEPT
...

분명히 그 주소는 가정적인 것이지만 아이디어를 얻습니다. 방화벽이 엄청나게 커지고 있습니다. 내가 이것을 할 수 있다면 유지하는 것이 훨씬 쉬울 것입니다.

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d google.com -j ACCEPT
iptables -A zone_lan_forward -p udp -d google.com -j ACCEPT

나는 이것이 가능하다고 믿습니다 man iptables.

주소는 네트워크 이름, 호스트 이름 (DNS와 같은 원격 쿼리로 해결 될 이름을 지정하는 것은 실제로 나쁜 생각 임), 네트워크 IP 주소 (/ 마스크 포함) 또는 일반 IP 주소 일 수 있습니다.

그러나 내가 염려하는 것은 "해결할 이름을 지정하는 것은 ... DNS는 정말 나쁜 생각입니다"라는 부분입니다. 왜 이것이 나쁜 생각입니까? 그것은 모든 것을 느리게합니까?

iptables 규칙에서 호스트 이름을 사용하지 않아야 할 경우 방화벽을 단순화하려면 어떻게해야합니까?


security.stackexchange.com에 대한보다 나은 답변을 얻을 수 있습니다
Jim B

이 질문이 해당 사이트에 속하는 것이 맞을 수도 있지만, 수락 된 답변에 문제가있는 경우 이유를 설명하십시오.
Big McLargeHuge 16:17에

네트워크를 잠그는 방법과 그 방법에 대해 알고 싶다면 iptables (IPtables 사용과 반대)를 사용하려면 보안을 요청하십시오.
Jim B

답변:


27
  • 패킷을 확인할 때가 아니라 규칙을 추가하면 DNS 이름이 확인됩니다. 이것은 대부분의 사람들의 기대에 위배됩니다.
    • 변경된 DNS 결과를 반영하기 위해 규칙이 업데이트되지 않습니다. 추가되면 해결됩니다. 규칙을 정기적으로 다시로드해야하거나 일부 사이트가 중단 될 수 있습니다.
  • 기본적으로 방화벽 규칙 제어를 외부 엔티티에 위임한다는 점에서 약간의 보안 문제가 있습니다.
    • 부모 DNS 서버가 손상되어 잘못된 데이터를 반환하면 어떻게됩니까?

HTTP 액세스를 차단하는 것이 목적이라면 일반적으로 해당 수준에서 필터링하도록 설계된 소프트웨어 (예 : 오징어 + 오징어)를 설정하는 것이 훨씬 좋습니다.


1) 이것이 어떻게 문제가 될 수 있는지 봅니다. google.com은 오늘 1.2.3.4로 해결할 수 있지만 내일 그 주소는 유효하지 않습니다. 방화벽을 다시 시작하면이 문제를 처리 할 수 ​​있습니까? 2) DNS 서버가 Google DNS 또는 OpenDNS와 같이 잘 알려진 경우에도 여전히 보안 문제입니까?
Big McLargeHuge

iptables 규칙에서 호스트 이름을 사용하지 않아야하는 이유를 설명하고 방화벽을 단순화하기위한 조치를 제공하기 때문에 이것을 답변으로 표시했습니다.
Big McLargeHuge 16:17에

Squid에 대한 지원을 추가하고 싶습니다. 사무실에 Squid를 구현했으며 일단 설정하면 화이트리스트 호스트를 유지 관리하는 것이 매우 쉽습니다 (블랙리스트에 사용하지만). 당신은 당신의 손에 기념비적 인 사업을하는 것처럼 보입니다. 예를 들어 Google을 허용 목록에 추가해야 할 곳조차 모르겠습니다. www.google.com은 5 개의 IP만으로 ssl.gstatic.com과 인증, G + 등에 관련된 다른 모든 호스트가 각각 여러 개의 IP로 해석 될 수 있다는 것을 의미합니다.
s.co.tt

기념비는 그것을 넣는 좋은 방법입니다. 그러나 나는 단지 구글을 예로 사용했다. 내 firwall의 기본 개요는 다음과 같습니다. 패킷의 대상이 허용 된 경우 수락하십시오. 그렇지 않으면 프록시 서버를 통해 보내십시오.
Big McLargeHuge

로드 밸런싱을 위해 DNS를 사용하는 시스템의 문제도 있습니다. 이러한 도메인을 두 번 연속 조회하면 동일한 결과를 얻지 못할 수 있으므로 단일 조회로도 도메인에서 확인할 수있는 IP 주소의 전체 목록을 제공하지는 않습니다.
cdhowie

9

방화벽에서 호스트 이름을 사용하는 경우 방화벽은 이제 DNS에 종속됩니다. 이렇게하면 여러 가지 문제에 대한 방화벽이 열립니다.

  • 볼륨이 큰 DNS 조회는 대기 시간을 유발할 수 있습니다.
  • DNS 변경 사항은 즉시 전파되지 않습니다. 따라서 방화벽은 캐시 된 IP를 사용할 수 있습니다.
  • DNS는 스푸핑, 가로 채기, 해킹 될 수 있습니다.
  • DNS가 실패 할 수 있음-방화벽이 실패했음을 의미합니다.
  • 방화벽 규칙은 이제 타사에서 제어합니다.

호스트 이름을 사용하고 DNS를 제어하지 않으면 다른 사람이 IPtables 규칙을 효과적으로 제어합니다. 실수, 오류 또는 보안 문제는 결국 문제가됩니다.

호스트 이름이 잘 사용 된 것을 본 유일한 시간은 내부 작업입니다. DHCP를 통해 IP와 호스트 이름이 할당 된 사무실에서 근무했습니다. 방화벽은 호스트 이름을 사용하여 서로 다른 그룹 사이에 장벽을 두었습니다. 이것은 모두 내부적으로 제어되었으므로 잘 작동했습니다.


2
이것은 좋은 대답이지만 방화벽을 단순화하는 데 도움이되는 부분이 없습니다.
Big McLargeHuge 16:17에

3

해안 벽과 같은 iptables 주위에 래퍼를 사용하여 규칙을 쉽게 관리 할 수 ​​있습니다.


이것은 좋은 생각이지만 iptables 규칙에서 호스트 이름을 사용해서는 안되는 이유를 말하지 않았습니다.
Big McLargeHuge 16:17에

Shorewall에 대해서는 잘 모르지만 davidkennedy85가 Shorewall 구성 내에서 허용하려는 서비스의 모든 IP 주소 목록을 유지해야한다는 인상을 받고 있습니다. netfilter [& etc]를 좀 더 쉽게 관리 할 수 ​​있지만, IP의 거대한 목록 인 핵심 문제를 해결하지 못할 것입니다.
s.co.tt

2

다른 사람들이 이미 말했듯이 iptables 규칙에는 DNS 확인 가능 이름을 사용하지 않아야합니다. 이들은 정확하지 않으며 제 3자가 통제하며 일반적으로 나쁜 것 (tm)입니다. 또한 iptables 서비스가 시작될 때 DNS가 실패하거나 도달하지 못할 수 있다고 덧붙였습니다. 이 경우 규칙이 전혀 추가되지 않으며 완전히 새로운 유형의 문제가 발생할 수 있습니다 (다시 시작한 후 ssh 액세스 손실).

당신이 할 수있는 일은 :

  1. 사용자 지정 체인을 사용하여 규칙을 논리적으로 분리
  2. ipset주소를 그룹화하고 규칙에서 분리 하려면 s를 사용하십시오.
  3. 규칙에 의견 추가

또한 DNS로 확인 되지 않는 호스트 이름에 대해 나쁜 말을 한 사람은 없습니다 (예 :에 지정되어 있음) hosts. 실제로 필요한 경우 사용할 수 있습니다.


그렇습니다 ipset. crontab에서 스크립트를 실행하여 ipset을 업데이트하십시오.
mivk

1

개인적으로 / etc / hosts 에서 수동으로 ip에 호스트 이름을 할당 한 다음 iptables에서 사용합니다.

이쪽으로

  1. 방화벽 규칙을 외부 엔티티로 오프로드하지 마십시오
  2. 쉽게 유지 관리 할 수있는 iptables 보유
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.