Tại sao dịch vụ liên tục của Iptables lưu các thay đổi của tôi?


18

Tôi đã làm theo hướng dẫn này để thiết lập các quy tắc IP trên Ubuntu 12.04. Mọi thứ đều hoạt động tốt khi thiết lập - nhưng giờ tôi đã thực hiện các thay đổi đối với tường lửa không tồn tại khi khởi động lại. Tôi không hiểu tại sao. Đây là một minh chứng về cách tôi đang sử dụng iptables-kiên trì. Tôi đang làm gì sai?

$ 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

Tôi nhận thấy iptables -D INPUTquy tắc không nằm trong sudobạn có chắc là nó thực sự báo cáo thành công? Liệu hành vi thay đổi nếu bạn chạy nó trong sudo?
Bratchley

Câu trả lời:


41

iptables-persistentkhông hoạt động theo cách đó. Khởi động lại iptables-persistent"dịch vụ" không nắm bắt được trạng thái hiện tại của iptables và lưu nó; tất cả những gì nó làm là khôi phục các quy tắc iptables đã được lưu khi gói được cấu hình lần cuối.

Để cấu hình iptables-persistent, bạn cần nói với nó về bộ quy tắc iptables hiện tại của bạn.

Một cách để thực hiện đó là như sau:

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

Hoặc, tương tự, iptables-persistentgói cũng cung cấp như sau:

dpkg-reconfigure iptables-persistent

(Bạn sẽ cần trả lời có cho các câu hỏi về việc có nên lưu quy tắc không.)

Sau đó, lần tiếp theo iptables-persistentđược khởi động / khởi động lại, các quy tắc iptables bạn mong đợi sẽ được tải.


9

Cách rất đơn giản để lưu các quy tắc iptables hiện tại là sử dụng lệnh:

sudo service netfilter-persistent save

Sử dụng cách trên, hoạt động ít nhất trong Ubuntu sau khi cài đặt gói netfilter-persistent(và iptables-persistent), không cần phải chạy thủ công các lệnh iptables hoặc để cấu hình lại gói (như được đề xuất bởi ngay cả Câu trả lời được chấp nhận ở trên).


Là nó sudo service netfilter-persistent savehay sudo service netfilter-persistent save .? (Chấm vào cuối.)
Tomasz

Cảm ơn bạn đã lưu ý rằng, lệnh chính xác là w / o dấu chấm ở cuối dòng. Sửa câu trả lời cho phù hợp.
OpenITeX

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

Đó không phải DROPlà những gì có nghĩa hoặc làm. Từ man iptables:

... các giá trị đặc biệt CHẤP NHẬN, DROP, QUEUE hoặc TRẢ LẠI. CHẤP NHẬN có nghĩa là để cho các gói thông qua. DROP có nghĩa là thả gói trên sàn. QUEUE có nghĩa là ...

Vì vậy, những gì bạn đã làm là thêm một quy tắc mới. Nó có thể thay thế một cách hiệu quả bất kỳ số lượng các quy tắc khác, nhưng những quy tắc đó vẫn tồn tại.

Khi kiểm tra những thứ như thế này ( iptables -Lđầu ra của bạn ), tôi sẽ cho nó ăn grep "string unique to this rule"thay vì sử dụng đôi mắt của bạn. Nó dễ dàng hơn và nhanh hơn để làm, và ít bị lỗi hơn.

iptables -L | grep "some unique string"

Nếu bạn muốn xóa một quy tắc, sử dụng -Dchuyển đổi; trang người đàn ông mô tả hai hình thức này:

-D, --delete quy tắc-đặc tả chuỗi

-D, --delete chuỗi rulenum

Xóa một hoặc nhiều quy tắc khỏi chuỗi đã chọn. Có hai phiên bản của lệnh này: quy tắc có thể được chỉ định là một số trong chuỗi (bắt đầu từ 1 cho quy tắc đầu tiên) hoặc quy tắc phù hợp.


xin lỗi điều đó không rõ ràng Tôi đang sử dụng tùy chọn -D để DROP một quy tắc. Xem sự thay đổi ở trên
bernie2436

3
-Dlà viết tắt của "xóa" chứ không phải "DROP" Sử dụng thuật ngữ "DROP" có nghĩa là bất cứ điều gì khác ngoài mục tiêu nhảy khi nói về việc iptablesgây nhầm lẫn như địa ngục.
Bratchley

1

Theo giải thích của @ steven-thứ hai , bạn có thể tự lưu quy tắc của mình trong thư mục thích hợp (cụ thể là /etc/iptables/rules.v{4,6}:).

Tuy nhiên, @OpenITeX đã đúng: gọi savehành động của service netfilter-persistentlà tốt hơn.

Tính đến hôm nay (trong 18.10), iptables-save được dựng sẵn, nhưng iptables-persistentkhông được cài đặt. Do đó, thư mục plugin được gọi bởi service netfilter-persistenttrống và dịch vụ in ra rằng quy tắc đã được lưu, trong khi đó thì không.

TLDR: cài đặt iptables-persistentvà kiểm tra xem thư mục plugin /usr/share/netfilter-persistent/plugins.dcó chứa plugin không.


Đây là cách tôi tìm ra điều đó:

$ 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 $?
    ;;

Sau đó kiểm tra /usr/sbin/netfilter-persistenttập lệnh, chú ý nó gọi tập lệnh bên ngoài:

$ 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}
    ;;

Sau đó tôi nhận thấy đó /usr/share/netfilter-persistent/plugins.dlà trống rỗng.


1

Cài đặt iptables-kiên trì:

sudo apt install iptables-persistent

lưu quy tắc sau khi thực hiện các thay đổi mong muốn:

sudo netfilter-persistent save
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.