나는 Gentoo 시스템(기본 시스템 버전 2.2)을 가지고 있고 부팅 시 iptables 규칙을 자동으로 로드하고 싶습니다.
iptables-restore
그래서 시작 시 systemd 서비스를 실행하려고 했습니다 .
파일은 /usr/lib/systemd/system/iptables-restore.service
다음과 같습니다:
[Unit]
Description=Restore iptables firewall rules
# if both are queued for some reason, don't store before restoring :)
Before=iptables-store.service
# sounds reasonable to have firewall up before any of the services go up
Before=network.target
Conflicts=shutdown.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /var/lib/iptables/rules-save
[Install]
WantedBy=basic.target
그럼 내가 할게
systemctl daemon-reload
systemctl enable iptables-restore.service
systemctl start iptables-restore
systemctl status iptables-restore
서비스가 시작된 후 iptables 규칙이 성공적으로 적용되었으며 다음 명령으로 확인할 수 있습니다.iptables -L
그러나 상태는 다음과 같습니다.
● iptables-restore.service - Restore iptables firewall rules
Loaded: loaded (/usr/lib/systemd/system/iptables-restore.service; enabled)
Active: inactive (dead)
다시 시작한 후에도 규칙이 적용되지 않습니다.
또한 동일한 콘텐츠로 다른 시스템 서비스를 만들었지만 다음 WantedBy=basic.target
으로 변경했습니다.WantedBy=multi-user.target
그런데 그것도 안 먹힌다...
부팅 시 systemd 서비스를 실행하는 방법에 대한 팁이나 부팅 시 iptables 규칙을 적용하는 방법에 대한 대안이 있습니까?
답변1
ExecStart=/sbin/iptables-restore /var/lib/iptables/rules-save
iptables-restore
파일 이름을 명령줄 인수로 전달하지 마십시오. 이 사람에 따르면(강조):
iptables-restore는 지정된 데이터에서 IP 테이블을 복원하는 데 사용됩니다.표준 입력. 파일을 읽으려면 쉘에서 제공하는 I/O 리디렉션을 사용하십시오.
리디렉션을 통해 파일을 전달해야 합니다.
ExecStart='/sbin/iptables-restore < /var/lib/iptables/rules-save'