iptables - 인터페이스가 나타나기 전에 인터페이스 규칙을 추가합니다.

iptables - 인터페이스가 나타나기 전에 인터페이스 규칙을 추가합니다.

이제 부팅 시 Linux 라우터에 일부 iptables 규칙을 추가하기 위해 /etc/rc.local을 사용하고 있지만 일부 규칙은 추가되지 않습니다. 아직 인터페이스가 없기 때문인 것 같습니다.

이것이 내가 거기에 가지고 있는 것입니다:

sudo /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo /sbin/iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo /sbin/iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT

부팅 시 ppp0 인터페이스가 나타나려면 시간이 좀 걸릴 것 같고, ppp0 인터페이스가 존재하지 않기 때문에 iptables가 규칙 추가를 거부할 수도 있습니다. iptables에 규칙을 추가하도록 강제하는 방법이 있습니까? 규칙을 추가하기 전에 인터페이스가 존재할 때까지 기다리기 위해 스크립트에 루프를 도입하기 전에 이를 확인해야 한다고 생각합니다.

또한 인터페이스가 사라지고 규칙을 추가한 후 다시 돌아올 때 iptables가 규칙을 삭제하지 않는다는 것을 관찰했습니다(내 경우에는 좋은 동작입니다).

답변1

모든 Debian 기반 배포판에서 post-up사용하세요 . /etc/network/interfaces이를 통해 스크립트가 시작된 후 즉시 스크립트를 실행할 수 있습니다 ifup. 자세한 내용은매뉴얼 페이지interfaces.

참고 사항: post-down물론 규칙을 삭제하는 데에도 사용할 수 있습니다.

시스템이 일부 스크립트를 통해 ppp0을 시작하여 이것이 작동하지 않으면 위 작업에 해당하는 *.d하위 폴더에서 후크 스크립트를 사용할 수 있습니다. 등 /etc/network의 여러 변수가 스크립트에 제공됩니다 . 매뉴얼 페이지는 매우 상세합니다.IFACEADDRFAM

반면에 up== post-updown== 내부에서는 올바른 하위 폴더는 각각 및 post-down입니다 .if-down.dif-up.d

/etc/network/interfacessource선언 된 인터페이스를 시작하는 프로세스를 "디버깅"하려면 ifup(8)세부 정보를 참조하세요. 특히 당신은 원할 것입니다 ifup -nvl(그리고 인터페이스 이름도 마찬가지일 것입니다). 프로세스를 모방하기만 하기 때문에 권한 없이 실행될 수도 있습니다.

가능한 경고

이는 Debian 기반이지만 Network Manager 기반 설정에는 적용되지 않습니다. 그런데 라우터를 언급하면 ​​네트워크 관리자가 주도할 가능성은 거의 없다고 생각합니다.

답변2

실제로 추가할 수 있습니다.iptables원하는 존재하지 않는 인터페이스로 규칙을 만들면 작동합니다. 그것을 시도 # iptables -A INPUT -i trollolo -j ACCEPT하고 무슨 일이 일어나는지보십시오 # iptables -nvL. 문제는/etc/rc.local방법 - 최신 Linux 초기화 프로그램에서는 더 이상 사용되지 않습니다(대부분의 경우체계) 기본적으로 읽지도 않습니다. 기본적으로는 심지어 없습니다rc-local.service존재하다체계이므로 계속 사용하려면 수동으로 다시 만들어야 합니다./etc/rc.local당신의 파일리눅스, 이는 권장되지 않습니다.

iptables 규칙을 유지하기 위해 내가 선택한 방법은 시기적절한 실행을 위해 다른 시스템 서비스에 편리하게 의존할 수 있는 사용자 정의 systemd 서비스를 사용하는 것입니다.

먼저 iptables 규칙을 사용하여 스크립트 파일을 만듭니다. touch /usr/local/sbin/init_fw.sh

거기에 규칙을 두세요:

#!/bin/bash
iptables -F
iptables -P INPUT DROP
................ and so on ......

파일을 실행 가능하게 만들기 # chmod +x /usr/local/sbin/init_fw.sh

시스템 서비스 파일을 생성 # nano /lib/systemd/system/customfw.service하고 여기에 설명을 붙여넣으세요.

[Unit]
Description=Custom FW

[Service]
ExecStart=/usr/local/sbin/init_fw.sh

[Install]
WantedBy=network-pre.target

그럼 하세요 # systemctl start customfw. 규칙의 오류를 확인하는 데 사용됩니다 # systemctl status customfw. 모든 것이 제대로 작동하면 autorun 으로 설정하세요 # systemctl enable customfw.

참고 - 이 스크립트는 데몬이 아니므로비활성(죽음)상태 양호 - 작업 완료. 다음 부팅 시 확인할 수 있습니다.iptables -nvL

또한 참고하시기 바랍니다원하는 사람 =부분 - 운영 체제에서 네트워크 연결이 설정되기 전에 이러한 규칙이 적용됩니다.

관련 정보