그것은 어떻게 이해하느냐에 관한 것이다체인iptables
이는 OpenWrt(라우터 장치용 씬 Linux)를 실행하는 일반적인 홈 라우터의 기본 구성에서 찾을 수 있지만 해당 특정 시스템에만 국한되지 않을 수도 있습니다.
여기서는 INPUT
메인 체인 에 초점을 FORWARD
맞추고 ,OUTPUT
테이블, 그리고 표의 합계입니다 PREROUTING
.POSTROUTING
nat
iptables -L -t filter
많은 규칙을 보여주는 것을 만드세요 . 덜 위협적이게 만들고 이해를 방해하는 부분을 파악하려고 아래 출력을 재배열했습니다.
filter
테이블에는 출력 상단에 나타나는 세 개의 내장 체인이 있습니다 . (이건 -v
제가 발견했기 때문에 특별히 지적합니다.덜 혼란스럽다.)
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1260 133K ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
8 544 ACCEPT all -- lo any anywhere anywhere
787 41632 syn_flood tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN
13012 1249K input_rule all -- any any anywhere anywhere
13012 1249K input all -- any any anywhere anywhere
Chain FORWARD … # not considering this chain here
Chain OUTPUT … # not considering either
보시다시피 에 집중하기 위해 FORWARD
및 참조의 체인을 잘라냈습니다 . (다른 두 개도 비슷한 방식으로 구축되었으므로 둘 중 하나를 선택할 수도 있습니다.)OUTPUT
INPUT
INPUT
ACCEPT
5가지 규칙을 지정하는 정책이 있습니다 . 처음 세 가지는 나에게 분명합니다. 첫째, '주어진 것'이나 '관련된 것'을 받아들이십시오. (예를 들어 내가 보내는 HTTP 또는 DNS 요청에 대한 응답을 수락합니다.) 몇 초 후에 루프백 장치( )로 전송된 127.0.0.1
모든 것을 수락합니다. (이것은 로컬호스트 자체에서만 올 수 있습니다. 저는 그것이 작동하기를 정말로 원합니다. 그렇지 않으면 아무런 의미가 없습니다.) 셋째, 신플러드 보호가 있습니다. (이렇게 하면 특정 공격을 방지할 수 있습니다.)
Chain syn_flood (1 references)
pkts bytes target prot opt in out source destination
787 41632 RETURN tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN limit: avg 25/sec burst 50
0 0 DROP all -- any any anywhere anywhere
input
그러나 및 라는 두 개의 체인으로 분기되는 두 가지 규칙이 있습니다 input_rule
. 문제는 왜 두 개의 규칙이 있고 어떤 규칙을 무엇에 사용해야 합니까?
이러한 규칙에 대한 점프 스택을 더 자세히 살펴보겠습니다.
Chain input_rule (1 references)
pkts bytes target prot opt in out source destination
여기에는 아직 아무것도 없습니다. 이것은 규칙을 추가하는 것입니다. 그런데 어떤 규칙이 있나요?
Chain input (1 references)
pkts bytes target prot opt in out source destination
6315 482K zone_lan all -- br-lan any anywhere anywhere
6697 767K zone_wan all -- pppoe-wan any anywhere anywhere
글쎄요, 여기에는 기능이 있고 LAN 및 WAN으로 더 멀리 이동할 수 있습니다. 이는 홈 라우터에 적합합니다.
Chain zone_lan (1 references)
pkts bytes target prot opt in out source destination
6315 482K input_lan all -- any any anywhere anywhere
6315 482K zone_lan_ACCEPT all -- any any anywhere anywhere
Chain zone_wan (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:bootpc
0 0 ACCEPT icmp -- any any anywhere anywhere icmp echo-request
6697 767K input_wan all -- any any anywhere anywhere
6697 767K zone_wan_REJECT all -- any any anywhere anywhere
보시다시피, 이러한 각 규칙은 더 많은 사용자 정의 규칙으로 이동합니다.
Chain input_lan (1 references)
pkts bytes target prot opt in out source destination
Chain zone_lan_ACCEPT (2 references)
pkts bytes target prot opt in out source destination
4 1322 ACCEPT all -- any br-lan anywhere anywhere
6315 482K ACCEPT all -- br-lan any anywhere anywhere
목적은 무엇입니까 input_lan
? 또 다른 가능성은 패킷을 수락하는 것입니다. 하지만 그 전략이 INPUT
무엇인지 궁금합니다. ACCEPT
그런데 ACCEPT
여기서 반복하는 이유는 무엇입니까?
이제 WAN에서 들어갑니다. 위로 스크롤하면 일부 UDP 및 ICMP 콘텐츠가 허용되는 것을 볼 수 있습니다. 이것은 DHCP에서 작동하며 기본적으로 ping
매우 명확합니다. 덜 분명한 것은 부분적으로 비어 있는 것들은 다음 규칙을 따른다는 것입니다.
Chain input_wan (1 references)
pkts bytes target prot opt in out source destination
같은 문제가 있습니다 input_lan
.
Chain zone_wan_REJECT (2 references)
pkts bytes target prot opt in out source destination
0 0 reject all -- any pppoe-wan anywhere anywhere
6697 767K reject all -- pppoe-wan any anywhere anywhere
좋아요, 이것은 WAN의 입력입니다(설정되지 않았거나 관련되지 않음). 예, 거부하고 싶을 수도 있습니다. 이제 여기에는 두 가지 거부가 있습니다. 하나는 소켓을 닫으려는 TCP 연결 시도( tcp-reset
)이고 다른 하나는 icmp-port-unreachable
ICMP 메시지에 대한 ICMP 응답( ) 입니다. ) (생각하다 ping
).
Chain reject (5 references)
pkts bytes target prot opt in out source destination
595 31817 REJECT tcp -- any any anywhere anywhere reject-with tcp-reset
4858 582K REJECT all -- any any anywhere anywhere reject-with icmp-port-unreachable
마지막은 모든 것을 포괄하는 것입니다. 따라서 여기서는 아무것도 허용되지 않습니다.
마지막으로, 이는 테이블에 내장된 체인에서 참조되지 않은 테이블에서 발견된 다른 체인의 목록입니다 filter
. 완전성을 위해 비슷한 구조를 가지고 있는 것처럼 보입니다.INPUT
net
# other chains, not reached from the INPUT chain, so truncated and moved here
Chain forward (1 references)
Chain forwarding_lan (1 references)
Chain forwarding_rule (1 references)
Chain forwarding_wan (1 references)
Chain nat_reflection_fwd (1 references)
Chain output (1 references)
Chain output_rule (1 references)
Chain reject (5 references)
Chain zone_lan_DROP (0 references)
Chain zone_lan_REJECT (1 references)
Chain zone_lan_forward (1 references)
Chain zone_wan_ACCEPT (2 references)
Chain zone_wan_DROP (0 references)
Chain zone_wan_forward (1 references)
그럼요. 너무 긴 게시물을 올려서 죄송합니다. 그 과정에서 몇 가지 질문이 있었습니다. 어떻게 더 간단하고 짧게 표현해야 할지 모르겠습니다. 이 iptables
구성은 곳곳에 불분명한 세부 사항이 있기 때문에 익히기가 쉽지 않습니다. 이를 명확히 하고 근거를 설명할 수 있기를 바랍니다. 관심을 가져주셔서 감사합니다.
답변1
이는 우려 사항의 명확한 분리입니다. WAN에 대한 액세스 규칙은 LAN에 대한 액세스 규칙과 달라야 합니다.
기본 구성은 네트워크에서 반드시 사용할 수 없는 서비스에 대한 수락 규칙을 제공하지 않습니다. 일반적으로 대부분의 사용자는 인터넷에 어떤 서비스도 제공해서는 안 됩니다. 적절한 규칙 세트에 적절한 규칙을 추가하면 서비스가 활성화됩니다. OpenWrt 웹 인터페이스는 드롭다운 메뉴를 통해 도움말을 제공해야 합니다.
이것Shorewall 기본 2인터페이스 방화벽문서화는 무슨 일이 일어나고 있는지, 무슨 일이 일어나야 하는지에 대한 좋은 이해를 제공해야 합니다. OpenWrt 방화벽을 Shorewall-lite 방화벽으로 교체하는 것이 가능하지만 기본 방화벽의 경우 기존 방화벽으로 충분합니다. 일부 패키지는 기본 방화벽을 사용한다고 가정하지만, 그렇지 않은 경우 약간의 작업이 필요합니다.
답변2
나는 썼다이 작업을 위한 도구일 뿐입니다.. 출력이 적용되면 iptables -S
출력을 체인 트리로 다시 포맷합니다.
그 결과를 분석함으로써 나는 _rule
체인이 수동으로 규칙을 추가하기 위한 것임을 추론했습니다.
이 도구는 규칙 진단에도 유용합니다. 규칙 카운터를 재설정하고 네트워크 테스트를 수행한 다음 패킷 카운터의 출력을 제공하면 테스트 트래픽이 트리에서 어디로 가는지 확인할 수 있습니다.
답변3
내가 아는 한 방화벽은 openwrt의 일부 상위 구성 파일에 의해 생성됩니다. 다양한 가능성을 지원해야 하기 때문에 실제 생성된 규칙은 최적화되지 않으므로 불필요하거나 사용되지 않거나 빈 체인이 포함될 수 있습니다. OpenWRT 참조위키 기사자세한 내용은.
몇 가지 질문에 답변해 주세요.
"input_rule"이 비어 있는 이유
언급한 대로 사용자가 사용자 정의 규칙을 쉽게 삽입할 수 있는 곳이 될 수 있습니다. 또 다른 가능성은 "input"이 원래 "input_rule"이었고 "input_rule"은 이전 스크립트와의 역호환성을 위해 여전히 생성되었다는 것입니다.
input_lan/input_wan은 어떤 용도로 사용되나요?
여기에서 LAN의 내부 호스트에서 라우터로의 트래픽을 차단하거나(예: 구성 인터페이스 보안) 외부에서 액세스를 활성화할 수 있습니다.
INPUT의 기본값은 ACCEPT인데 여기서 ACCEPT가 반복되는 이유는 무엇입니까?
올바르게 알아차렸듯이 여기서는 이것이 필요하지 않습니다. 그러나 zone_lan_REJECT가 존재하므로 스크립트가 정책과 독립되기를 원하는 것처럼 보입니다.
답변4
실제로 openwrt의 iptables 규칙은 잘 구성되어 있습니다.
Delegate_input을 예로 들어보겠습니다(다른 체인도 비슷한 구조를 가지고 있습니다):
- 두 가지 허용: lo 및 tcp 관련, 설정된 트래픽 허용
- syn_flood: syn Flood 흐름을 삭제합니다.
- input_rule: LAN 및 WAN 트래픽의 입력을 처리합니다.
- zone_lan: LAN의 입력만 처리하며 일치하지 않는 트래픽은 허용됩니다.
- zone_wan: wan의 입력만 처리하며 일치하지 않는 트래픽은 거부됩니다.