Iptables 영구 서비스가 변경 사항을 저장하지 않는 이유는 무엇입니까?


18

튜토리얼을 따라 우분투 12.04에서 IP 규칙을 설정했습니다. 설정에서 모든 것이 잘 작동했지만 이제는 재부팅 할 때 유지되지 않는 방화벽을 변경했습니다. 왜 그런지 이해가되지 않습니다. 다음은 iptables-persistent를 사용하는 방법에 대한 데모입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

$ sudo service iptables-persistent start
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...   

$ sudo iptables -L   //shows a certain rule
$ iptables -D INPUT ... //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

 $ sudo service iptables-persistent restart
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...                                                                                                      [ OK ] 
 $ sudo iptables -L  //rule is back

iptables -D INPUT규칙이 적용되지 않았다는 것을 알았습니다. sudo실제로 성공을보고하고 있습니까? 내에서 실행하면 동작이 변경됩니까 sudo?
Bratchley

답변:


41

iptables-persistent그런 식으로 작동하지 않습니다. iptables-persistent"서비스"를 다시 시작해도 iptables의 현재 상태가 캡처되지 않고 저장됩니다. 패키지를 마지막으로 구성했을 때 저장된 iptables 규칙을 복원하기 만하면됩니다.

를 구성하려면 iptables-persistent현재 iptables 규칙 세트에 대해 알려야합니다.

이를 달성하는 한 가지 방법은 다음과 같습니다.

iptables-save >/etc/iptables/rules.v4
ip6tables-save >/etc/iptables/rules.v6

또는 이와 동일하게 iptables-persistent패키지는 다음을 제공합니다.

dpkg-reconfigure iptables-persistent

규칙을 저장할지 여부에 대한 질문에 예라고 대답해야합니다.

그 후 다음 iptables-persistent에 시작 / 다시 시작할 때 예상되는 iptables 규칙 세트가로드됩니다.


9

현재 iptables 규칙을 저장하는 매우 간단한 방법은 다음 명령을 사용하는 것입니다.

sudo service netfilter-persistent save

netfilter-persistent(및 iptables-persistent) 패키지를 설치 한 후 적어도 우분투에서 작동하는 위의 내용을 사용하면 iptables 명령을 수동으로 실행하거나 패키지를 재구성 할 필요가 없습니다 (위의 승인 된 답변에서도 제안 됨).


그것은인가 sudo service netfilter-persistent save또는 sudo service netfilter-persistent save .? (끝에 점)

주목할 점은 올바른 명령은 줄 끝에 점이없는 것입니다. 이에 따라 답변을 수정했습니다.
OpenITeX

3
$ iptables ... DROP //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

그것은 DROP의미하는 것이 아닙니다 . 보낸 사람 man iptables:

... 특수 값 ACCEPT, DROP, QUEUE 또는 RETURN. 수락은 패킷을 통과시키는 것을 의미합니다. DROP은 패킷을 바닥에 떨어 뜨리는 것을 의미 합니다. QUEUE는 ...

당신이 한 일은 새로운 규칙을 추가하는 것입니다. 여러 규칙을 효과적으로 대체 할 수 있지만 이러한 규칙은 여전히 ​​존재합니다.

이와 같은 물건 ( iptables -L결과)을 확인할 때 grep "string unique to this rule"눈을 사용하는 대신 먹이를 줄 것 입니다. 더 쉽고 빠르며 오류가 적습니다.

iptables -L | grep "some unique string"

규칙을 삭제하려면 -D스위치를 사용하십시오 . 매뉴얼 페이지는 두 가지 형태를 설명합니다 :

-D,-체인 규칙 지정 삭제

-D,-체인 규칙 번호 삭제

선택한 체인에서 하나 이상의 규칙을 삭제하십시오. 이 명령에는 두 가지 버전이 있습니다. 규칙은 체인의 숫자 (첫 번째 규칙의 경우 1부터 시작) 또는 일치하는 규칙으로 지정할 수 있습니다.


미안하지만 불분명했다. -D 옵션을 사용하여 규칙을 삭제합니다. 위의 변화를보십시오
bernie2436

3
-D"DROP"가 아닌 "삭제"를 나타냅니다. "DROP"라는 용어를 사용하면 이야기 할 때 점프 대상 이외의 것을 의미하는 것은 iptables지옥과 혼동됩니다.
Bratchley

1

@ steven-monday에 설명 된 대로 규칙 세트를 적절한 디렉토리 (즉 :)에 저장할 수 있습니다 /etc/iptables/rules.v{4,6}.

그러나 @OpenITeX 가 옳습니다. save액션을 호출하는 service netfilter-persistent것이 좋습니다.

오늘 (18.10) 현재 iptables-save는 내장되어 있지만 설치 되지iptables-persistent않았습니다 . 따라서 호출 한 플러그인 디렉토리 service netfilter-persistent가 비어 있고 서비스는 규칙 세트가 저장되었지만 저장되지 않은 것으로 인쇄합니다.

TLDR : iptables-persistent플러그인 디렉토리 /usr/share/netfilter-persistent/plugins.d에 플러그인이 포함되어 있는지 확인하고 설치 하십시오 .


내가 알아 낸 방법은 다음과 같습니다.

$ cat /etc/init.d/netfilter-persistent 
...
case "$1" in
...
save)
    log_action_begin_msg "Saving netfilter rules"
    /usr/sbin/netfilter-persistent save
    log_action_end_msg $?
    ;;

그런 다음 /usr/sbin/netfilter-persistent스크립트를 확인하고 외부 스크립트를 호출 하는지 확인하십시오 .

$ cat /usr/sbin/netfilter-persistent
...
PLUGINS=/usr/share/netfilter-persistent/plugins.d
...
run_plugins () {
    if [ -d ${PLUGINS} ]; then
        run-parts -v -a ${1} ${PLUGINS}
    fi
}

case $1 in
start|save|flush)
    run_plugins ${1}
    ;;

그런 다음 그것이 /usr/share/netfilter-persistent/plugins.d비어 있음을 알았 습니다.


1

iptables-persistent를 설치하십시오.

sudo apt install iptables-persistent

원하는 변경을 한 후 규칙을 저장하십시오.

sudo netfilter-persistent save
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.