[server] iptables를보다 쉽게 ​​관리

허용 된 일부 사이트를 제외하고 네트워크가 완전히 잠겨 있습니다. 이것은 모두 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 규칙에서 호스트 이름을 사용하지 않아야 할 경우 방화벽을 단순화하려면 어떻게해야합니까?



답변

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

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


답변

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

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

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

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


답변

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


답변

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

당신이 할 수있는 일은 :

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

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


답변

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

이쪽으로

  1. 방화벽 규칙을 외부 엔티티로 오프로드하지 마십시오
  2. 쉽게 유지 관리 할 수있는 iptables 보유

답변