Debian 'bỏ qua' /etc/network/if-pre-up.d/iptables


12

Tôi muốn các quy tắc iptables của tôi tự động được tải khi khởi động. Theo wiki trên Debian, điều này có thể được thực hiện bằng cách đặt một tập lệnh có tên iptables trong /etc/network/if-pre-up.d/ Vì vậy, tôi đã làm, đây là giao diện:

cat /etc/network/if-pre-up.d/iptables 
#!/bin/sh
/sbin/iptables-restore < /etc/firewall/iptables.rules
/sbin/ip6tables-restore < /etc/firewall/ip6tables.rules

Kịch bản này hoạt động: nếu tôi chạy nó với quyền root thì các quy tắc tường lửa của tôi sẽ được áp dụng. Nhưng khi khởi động lại không có quy tắc tường lửa. Tôi đang làm gì sai?

Theo yêu cầu: / etc / mạng / giao diện (Tôi không chạm vào tệp này)

user@DebianVPS:~$ cat /etc/network/interfaces 
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

Làm thế nào để bạn cấu hình giao diện của bạn? Bạn có thể thêm tập tin / etc / mạng / giao diện không?
bayindirh

Xin lưu ý rằng /etc/network/if-pre-up.d/nó không hoạt động nữa trong Ubuntu 18.04, xem serverfault.com/questions/914493/NH
BurninLeo

Câu trả lời:


6

Sử dụng iptables-persistentgói cho nhiệm vụ này.

Xác định quy tắc của bạn trong /etc/iptables/rules.4/etc/iptables/rules.6và đừng quên để kích hoạt dịch vụ (sử dụng update-rc.d, chkconfighoặc bạn có công cụ yêu thích.


Khi cài đặt gói, debconf hỏi bạn có muốn lưu các quy tắc hiện tại không. Vì vậy, nếu bạn đã có các quy tắc được xác định, bạn chỉ cần cài đặt gói. Nếu bạn muốn thay đổi chúng sau này, chỉ cần dpkg-reconfigure iptables-persistent.
Braiam

10

Vấn đề này có thể liên quan đến các bit cho phép của tập lệnh của bạn. Đầu ra của lệnh này là gì? Có bao gồm tập tin của bạn?

run-parts --test /etc/network/if-pre-up.d

phần chạy --test /etc/network/if-pre-up.d cho /etc/network/if-pre-up.d/iptables, có vẻ như là đầu ra chính xác cho tôi?
Cheiron

1
ok, vì vậy, có lẽ bạn nên kiểm tra khi tập lệnh của bạn được chạy. Thêm một dòng đầu tiên như thế này (date; set; echo) >> /tmp/iptables-cmd.log, vì vậy bạn sẽ thấy khi nó được gọi. Tôi cũng luôn in môi trường để kiểm tra bất kỳ đối số nào được đưa vào đó. Bạn có thể quyết định chỉ chạy iptables sau khi giao diện eth * cuối cùng hoạt động, thay vì chạy nó mỗi khi giao diện được thêm vào.
eppesuig

3
Bây giờ bạn đã đăng bài của mình, interfacestôi thấy rằng bạn không sử dụng ifupdown mà là trình quản lý mạng. Đây là lý do tại sao kịch bản của bạn không được gọi. Vui lòng kiểm tra tài liệu này: ubuntuforums.org/showthread.php?t=1084308
eppesuig

Vâng, đó là giải thích rất nhiều. Tôi nghĩ bây giờ tôi chỉ đi với câu trả lời của dawud, điều đó dường như cũng hoạt động.
Cheiron

3
phần chạy là một chút kén chọn về tên của các tập lệnh và có một dấu chấm trong tên tệp đã khiến tập lệnh bị bỏ qua khi khởi động trong trường hợp của tôi.
alexm

0

Tại sao không làm điều đó một cách dễ dàng?

1 - tạo quy tắc iptables của bạn

2 - chạy "sudo apt-get install iptables-continent" nó sẽ hỏi bạn nếu bạn muốn lưu các quy tắc và khôi phục chúng sau khi khởi động.

3- Bạn đang làm


1
Bản sao câu trả lời được chấp nhận
Cheiron
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.