쉘 스크립트(이 경우 /etc/init.d/iptables)에 디렉토리의 모든 파일을 포함하는 방법

쉘 스크립트(이 경우 /etc/init.d/iptables)에 디렉토리의 모든 파일을 포함하는 방법

다른 우분투 서버에 스크립트 가 있습니다 /etc/init.d/iptables start|stop|restart(일반 쉘 스크립트).

각각의 새로운 서비스에 대해 포트를 열기 위해 줄을 편집하고 삽입해야 합니다. 이로 인해 서로 다른 시스템에서 init.d 스크립트의 다양한 버전이 생성됩니다.

에 모든 파일을 자동으로 포함시킬 수 있습니까 /etc/iptables/include.d/?

목표는시작/etc/init.d/iptables의 기능은 다음과 같습니다.

include /etc/iptables/include.d/*

그리고 추가 파일 후에 /etc/iptables/include.d/나는 간단히 말할 것입니다.

/etc/init.d/iptables restart

편집하다:Saurabh가 지적했듯이 명령에 특정 순서가 필요할 때 문제가 발생할 수 있습니다. 고급 설정에는 다음과 같은 다양한 디렉터리가 있을 수 있습니다.

/etc/iptables/include01.d/
/etc/iptables/include02.d/
/etc/iptables/include03.d/

다음과 같이 포함합니다.

    /etc/iptables/include01.d/* 포함
    ... 어쩌면 일부 코드가 여기 메인 파일에 있을 수도 있습니다...
    /etc/iptables/include02.d/* 포함
    /etc/iptables/include03.d/* 포함

답변1

init.d 스크립트에 다음 줄을 추가하세요.

run-parts --report /etc/iptables/include.d

디렉토리의 모든 것을 쉘 스크립트로 실행합니다(실행 가능해야 함).

.port로 끝나는 파일만 실행하려면 다음과 같이 사용할 수 있습니다.

run-parts --regex '\.port$' /etc/iptables/include.d/

순서가 올바른지 확인하려면 파일 이름을 지정할 수 있습니다.

10_web.port
20_ssh.port
etc..

답변2

for f in /etc/iptables/include.d/*
 . $f
done

점과 %f 사이의 공백을 메모하세요.

Saurabh의 말이 맞습니다. 의도한 대로 작업할 필요는 없지만 10-xxx, 20-yyy 등과 같은 명명 규칙을 사용하면 관리가 가능할 수 있습니다.

답변3

Bash에서 간단한 함수를 정의할 수 있습니다.

function include() {
    for FILE in $( find "$1" -type f -print | sort )
    do
        source $FILE
    done
}

그런 다음:

include some_dir/*

또는:

include some_dir/*.conf

답변4

iptables 구성에 파일을 포함할 수 없다고 생각합니다. 방화벽 규칙은 작성 순서에 따라 크게 달라지므로 선택하는 것이 합리적입니다. 폴더에 파일만 포함하면 iptables는 어떤 규칙을 먼저 넣을지 나중에 넣을지 알 수 없습니다.

관련 정보