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