범위에 있는 IP 중 하나를 허용하면서 IP 범위를 차단합니다.

범위에 있는 IP 중 하나를 허용하면서 IP 범위를 차단합니다.

IP 범위를 차단하고 싶지만 동시에 해당 범위 내에서는 하나의 IP만 허용하려고 합니다. 검색해 보니 다음과 같습니다.

 $ sudo iptables -A INPUT -s <ALLOWED_IP> -j ACCEPT
 $ sudo iptables -A OUTPUT -d <ALLOWED_IP> -j ACCEPT

 $ sudo iptables -I INPUT -m iprange --src-range <NOT_ALLOWED_RANGE> -j DROP

하지만 작동하지 않습니다. 또한 순서를 바꾸려고 시도했지만 여전히 작동하지 않았습니다.

 $ sudo iptables -I INPUT -m iprange --src-range <NOT_ALLOWED_RANGE> -j DROP

 $ sudo iptables -A INPUT -s <ALLOWED_IP> -j ACCEPT
 $ sudo iptables -A OUTPUT -d <ALLOWED_IP> -j ACCEPT

우리가 무엇을 잘못했을까요?

답변1

그래서 댓글에서도 언급했듯이 순서가 중요해요!

보안상의 이유로 netfilter는 원하는 IP 주소나 범위만 허용하도록 체인 제거 iptables정책을 변경할 것을 권장합니다.INPUT

-I질문에 답하려면 먼저 규칙을 맨 위에 놓겠다는 플래그를 사용하여 원하는 IP 주소를 허용해야 합니다.

iptables -I INPUT -s SOURCE_IP -j ACCEPT 
iptables -A INPUT -m iprange --src-range SRC_RANGE/CIDR -j DROP

iptables번째 규칙이 적용됩니다. 즉, 맨 위에 있는 사람이 항상 승리한다는 의미입니다.

DENY  (this rule wins)
 |
ALLOW 

답변2

-I일반적으로 말해서, 이 상황에서는 옵션을 실제로 사용할 필요가 없습니다. 다음 순서로 규칙을 만드세요.

-A INPUT -s ALLOWED_IP -j ACCEPT 
-A INPUT -s FORBIDDEN_IP_RANGE -j DROP

에서의 연결만 허용 ALLOWED_IP하고 의 다른 주소에서의 연결은 거부합니다 FORBIDDEN_IP_RANGE.

문제는 테마 실행 프로그램이 작업 -I에 대해 잘못된 위치에서 옵션을 사용하므로 DROP두 경우 모두 DROP작업이 맨 위에 배치된다는 것입니다.

내용은 다음과 같습니다 man iptables.

-I, --insert chain [rulenum] 규칙 사양

선택한 체인에 하나 이상의 규칙을 주어진 규칙 번호로 삽입합니다. 따라서 규칙 번호가 1이면 체인의 선두에 하나 이상의 규칙이 삽입됩니다. 규칙 번호가 지정되지 않은 경우에도 이는 기본값입니다.

따라서 -I규칙 번호를 사용하지 않는 경우 기본적으로 규칙 번호 1이 사용됩니다. 더 복잡한 방화벽 구성의 논리를 깨뜨릴 수 있으므로 이 사용 시 주의해야 합니다.

관련 정보