IPTable 상태 확인

IPTable 상태 확인

IPTables에 특정 규칙이 있는지 확인하려고 합니다.

#!/bin/bash

if iptables -L -n | grep -- "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8880";
 then
     echo "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8880 exists"
 else
     echo "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8880 does not exist"
fi

if iptables -L -n | grep -- "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80";
 then
     echo "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 exists"
 else
     echo "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 does not exist"
fi

다음 두 가지 규칙을 확인하고 있습니다.

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8880

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80

이 두 가지 규칙이 이미 존재하고 조건이 TRUE사례를 실행하기 때문에 터미널도 불필요하게 조건 확인 결과를 출력합니다 grep. grep왠지 FALSE케이스가 출력되지 않습니다.

grep 출력 사례를 방지하는 방법은 무엇입니까 TRUE?

이 두 가지 별도의 조건을 하나의 조건으로 결합하려면 어떻게 해야 합니까 OR?

그런데 내 IPTable은 이전 버전이므로 -C매개변수를 사용할 수 없습니다.

답변1

기본 작업은 grep일치하는 줄을 인쇄하는 것입니다. 이를 억제하려면 다음을 사용할 수 있습니다 grep -q.

#!/bin/bash

if iptables -L -n | grep -q -- "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8880";
 then
     echo "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8880 exists"
 else
     echo "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8880 does not exist"
fi

if iptables -L -n | grep -q -- "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80";
 then
     echo "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 exists"
 else
     echo "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 does not exist"
fi

다음과 같이 스크립트를 단순화할 수도 있습니다.

#!/bin/bash

rules=( "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8880"  "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80")


for rule in "${rules[@]}"
do
    iptables -L -n | grep -q "$rule" && echo "$rule exists" || echo "$rule does not exist"
done

또는 여러 작업을 수행하려면 다음과 같이 if/else를 사용하세요.

#!/bin/bash

rules=( "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8880"  "ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80")


for rule in "${rules[@]}"
do
    if iptables -L -n | grep -q "$rule"
    then
        echo "$rule exists"
    else
        echo "$rule does not exist"
    fi
done

관련 정보