규칙 번호를 제공하지 않고 iptables 규칙을 교체합니다.

규칙 번호를 제공하지 않고 iptables 규칙을 교체합니다.

추가된 룰이 이미 체인에 있는 룰과 같은 경우, iptables룰 번호를 부여하지 않고 룰을 교체할 수 있나요? 아니면 기존 룰을 덮어써서 룰을 삽입/추가할 수 있나요? 제가 묻는 이유는 자동으로 규칙을 추가하는 스크립트가 있는데 iptables, 추가된 규칙이 이미 체인에 있는 규칙과 동일한 상황이 있을 수 있기 때문입니다.

답변1

당신이 요구하는 것을 달성하기에 충분히 가까운 방법은 다음과 같습니다. iptables선택하세요-C/--check:

-C, --확인체인 규칙 사양

선택한 체인에 호환되는 규칙이 있는지 확인합니다. 이 명령은 다음과 동일한 논리를 사용합니다.-디기존 iptables 구성을 변경하지 않고 일치하는 항목을 찾고 종료 코드를 사용하여 성공 또는 실패를 나타냅니다.

따라서 자동화된 스크립트가 있는 경우 다음을 수행해 보십시오.

iptables -I FORWARD -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT

규칙을 오염시키고 싶지 않으면 다음과 같이 할 수 있습니다.

iptables -C FORWARD -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT || \
    iptables -I FORWARD -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT

규칙이 존재하는지 확인합니다. true가 반환되면 아무 일도 일어나지 않습니다. false가 반환되면 쉘은 두 번째 iptables규칙을 실행합니다. 항상 이렇게 수행된다면 이 규칙은 단 한 번만 멱등적으로 생성됩니다(그러나 나중에 주문하는 방법을 참조하세요). 를 사용할 수도 있었지만 -A도움 -I이 될 가능성이 더 높습니다.

규칙의 위치가 정말 중요하지만 다른 변경 사항으로 인해 현재 정확한 위치를 알 수 없는 경우 이를 위해 사용자 정의 체인을 사용해야 합니다. 이렇게 하면 규칙이 항상 점프 위치에서 호출됩니다.

iptables -N mychain
iptables -A FORWARD -m comment --comment first_rule
iptables -A FORWARD -m comment --comment initially_second -j mychain

iptables -C mychain -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT || \
    iptables -A mychain -s 10.0.3.0/24 -d 10.0.4.0/24 -j ACCEPT

이런 식으로, 얼마 전에 예외가 삽입된 경우:

iptables -I FORWARD 2 -s 10.0.3.10 -d 10.0.4.20 -m comment --comment now_second -j DROP

스크립트는 이 예외 이전에 규칙을 다시 삽입하고 취소하지 않습니다.

관련 정보