iptables 순회 및 체인 정책, 수동 편집

iptables 순회 및 체인 정책, 수동 편집

저는 iptables 파일을 수동으로 편집하는 것을 좋아하지만 약간 혼란스러운 점이 있습니다.

매뉴얼에서 iptables를 어떻게 이해했는지에 따라 규칙을 위에서 아래로 순회하며, 일치하는 항목이 없으면 맨 아래의 기본 규칙에 따라 기록되고 거부됩니다.

문제 없다.

그러나 이것이 무엇을 의미하는가:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
<accept ssh, ssl, etc>
<log all, deny all>

filter상단에 있는 체인에는 기본 정책 "수락"이 있습니다. 이는 나중에 일치시키기 위해 테이블 에 패킷을 허용한다는 의미일 뿐입니다 . 나에게는 설명서를 읽은 후 마치 모든 것을 수락하고 규칙을 읽지 않는 것처럼 느껴집니다. 왜냐하면 이것이 기본적으로 규칙이 작동하는 방식이기 때문입니다. 일치하는 항목이 있으면 규칙 읽기를 중단하고 정책에 명시된 대로 수행합니다. 이 행동에 대한 문서가 있습니까? 나는 충분히 구체적인 것을 찾을 수 없습니다.

나는 또한 표 다음에서 이것을 보았습니다 *filter.

*filter
:RH-Firewall-1-INPUT - [0:0]

자신의 체인을 추가하고 다른 체인을 이 체인에 라우팅할 수 있는 기능을 제공합니다.

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT

그러나 여기서는 이 체인에 대해 "ACCEPT" 또는 "DROP"가 전혀 지정되지 않고 대신 대시(-)가 있습니다.

나를 더욱 혼란스럽게 만드는 것은 어떻게 작동하는가?

답변1

  1. 내장 체인의 정책은 단일 규칙을 처리 대상과 일치시키지 않고 체인의 모든 규칙을 통과하는 패킷에 어떤 일이 발생하는지 결정합니다. 위의 예에서 FORWARD처리 대상과 규칙을 일치시키지 않고 체인을 통과하는 패킷은 ACCEPT체인의 정책이 이기 때문에 편집 됩니다 ACCEPT.

  2. 사용자 정의 체인에는 정책이 있을 수 없습니다. 처리 대상과 규칙을 일치시키지 않고 사용자 정의 체인을 통해 계속 전달되는 패킷은 보낸 체인 다음의 규칙에서 사용자 정의 체인("호출 체인")으로 전송된 체인으로 돌아갑니다. 거기 있어요.

처분적인target은 패킷을 처리하는 것입니다. 예를 들면 DROP, ACCEPTMASQUERADE; 비처분 대상에는 LOG및 null 대상이 포함됩니다(대상이 없는 규칙을 갖는 것은 매우 합법적입니다). 패킷이 처리 대상과 규칙과 일치하면 해당 패킷은 폐기된 것으로 간주되며 더 이상 규칙 처리가 발생하지 않습니다. 패킷이 처리 대상 없이 규칙과 일치하면 패킷 처리는 다음 규칙에서 계속됩니다.

목표 일치 및 배치에 대한 이 논리의 중요한 결과는 다음과 같습니다.첫 번째 매치에서 승리. 우리는 사람들이 다음과 같은 체인을 가지고 있는 SF에 대한 질문을 너무 자주 봅니다.

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80

여기에는 웹 서버에 대한 액세스를 차단하는 단일 규칙이 포함되어 있습니다( tcp dpt:80). 그들은 단일 외부 IP 주소(예: 1.2.3.4)가 이 웹 서버에 액세스하도록 허용하기 위해 다음과 같은 규칙을 추가합니다.

iptables -A INPUT -p tcp --dport 80 -s 1.2.3.4 -j ACCEPT

그리고 결국 이런 사슬로 끝나죠

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       1.2.3.4       0.0.0.0/0     tcp dpt:80

보시다시피, 마지막 규칙의 패킷 수는 0입니다.그리고 그들은 항상 0이 될 것입니다. 어떤 패킷도 이전 규칙과 일치하지 않고는 마지막 규칙과 일치할 수 없으며, 이전 규칙은 폐기( DROP)되므로 어떤 패킷도 마지막 규칙에 도달하지 않습니다.

이를 올바르게 처리하는 방법은규칙보다 예외가 먼저 와야 합니다., 이와 같이:

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
   20   875 ACCEPT     tcp  --  *      *       1.2.3.4       0.0.0.0/0     tcp dpt:80
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80

이제 예외 수락이 먼저 처리된 다음 예외 서버에서 오지 않는 다른 웹 서버 패킷이 처리 및 삭제되고 마지막으로 체인 정책이 다른 모든 패킷을 처리하고 수락합니다.

관련 정보