iptables 명령은 특정 줄 번호에 대한 규칙이 존재하는지 확인합니다.

iptables 명령은 특정 줄 번호에 대한 규칙이 존재하는지 확인합니다.

특정 위치에 iptable 규칙이 존재하는지 확인하는 방법이 있습니까?

이와 같이:

iptables -C INPUT 1 -j ACCEPT

답변1

구문 분석된 출력은 iptables -L --line-numbers그렇게 나쁘지 않아야 합니다.

num=3
if iptables -L foo --line-numbers | grep -qe "^$num "; then
    echo "rule exists at line #$num"
else
    echo "no rule at line #$num"
fi

즉, 이것이 얼마나 유용한지는 잘 모르겠습니다. 예를 들어 체인 시작 부분에서 규칙을 제거하면 다른 규칙의 수가 변경되어 고유 식별자 등으로 사용할 수 없기 때문입니다. iptables -L foo --line-numbers | sed -ne '$s/ .*//p'체인( )의 규칙 수를 계산하고 비교할 수도 있습니다 .

농담으로 말하면 달릴 수 있다 iptables -D foo "$num". number 에 규칙이 없으면 불평하겠지만 $num, 물론 파괴적이기도 합니다...

답변2

이런 종류의 검사에 대한 사용 사례를 알고 싶습니다.

어쨌든 iptables -S규칙 번호를 표시하는 명령을 사용할 수 있습니다.

그런 다음 검사 결과를 어디에 사용해야 하는지에 따라 달라집니다.

귀하의 예에서는 다음을 수행할 수 있습니다.

iptables -S INPUT 1 | grep -ce '-j ACCEPT'

1인쇄된 것을 얻습니다 grep -c(또는 0일치하는 것이 없는 경우).

또는 셸에서 테스트는 다음과 같을 수 있습니다.

[ "$(iptables -S INPUT 1)" = '-A INPUT -j ACCEPT' ]

확인하려는 규칙을 정확히 알고 있다고 가정합니다. 그렇지 않은 경우에는 연산자 [[를 사용한 테스트 =~(셸에서 지원하는 경우)를 사용하여 해당 규칙 번호와 일치하는 정규식을 찾을 수 있습니다.

관련 정보