Làm cách nào để thiết lập các quy tắc iptables này để chạy khi khởi động


20

Tôi thường chạy các quy tắc iptables của mình bất cứ khi nào tôi đăng nhập. Từ thiết bị đầu cuối tôi gõ;

sudo sh firewall.sh

Thiết lập máy tính của chị tôi, tôi muốn cung cấp cho cô ấy một số bảo vệ tường lửa cơ bản. Cô sẽ không đăng nhập với tư cách quản trị viên, chỉ là một tài khoản chuẩn. Làm cách nào tôi có thể tạo tập lệnh tường lửa chạy mỗi khi cô ấy đăng nhập mà không cần phải nhập bất kỳ mật khẩu nào?

Kịch bản tôi viết cho máy tính của chị tôi;

#!/bin/sh

modprobe ip_conntrack
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -I OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p udp --dport 53 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 443 --sport 32768:61000 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -I OUTPUT -p icmp -j DROP

iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p udp -j DROP
iptables -I INPUT -p tcp -m tcp --syn -j DROP
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Tôi đã đặt nó trong thư mục nhà của cô ấy dưới dạng tường lửa.

Chạy script này từ terminal như root hoạt động tốt.

Sau khi gõ;

sudo sh firewall.sh

Tôi gõ vào thiết bị đầu cuối

sudo iptables -L -v

va tôi lây

Chain INPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags: FIN,SYN,RST,ACK/SYN
    0     0 DROP       udp  --  any    any     anywhere             anywhere            
    0     0 DROP       icmp --  any    any     anywhere             anywhere            

Chain FORWARD (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       icmp --  any    any     anywhere             anywhere            
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:https
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere             udp spts:32768:61000 dpt:domain
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:http
    0     0 ACCEPT     all  --  any    lo      anywhere             anywhere

Làm cách nào để tập lệnh này tự động chạy khi đăng nhập hoặc có thể lưu các quy tắc này vĩnh viễn cho máy tính của chị em tôi? Bạn có thể vui lòng cung cấp một số mã chi tiết không, vì những nỗ lực đầu tiên của tôi tại phương thức RC.local và iptables-save đã không thành công lắm. Trên mỗi lần khởi động lại, tất cả các chuỗi INPUT, OUTPUT và FORWARD đều được đặt lại thành ACCEPT, không có chính sách nào được liệt kê khi tôi nhậpsudo iptables -L -v


Gần hai năm sau, nhưng một nhận xét quan trọng: đảm bảo rằng bạn có ip6tablescác quy tắc nếu bạn có kết nối v6 một ngày, vì IPv6 được xử lý bởi ip6tablesvà không iptables.
Thomas Ward

Câu trả lời:


38

Bạn có thể muốn sử dụng iptables-persistentgói hơn là lộn xộn với các tập lệnh khởi động của bạn. Đầu tiên, chạy tập lệnh của bạn để thiết lập các quy tắc tường lửa. Thứ hai, chạy sudo apt-get install iptables-persistentvà làm theo lời nhắc. Khi nó yêu cầu lưu các quy tắc hiện tại, nhấn "Có" ở cả hai lời nhắc. Bây giờ, khi khởi động lại, quy tắc iptables của bạn sẽ được khôi phục.


LƯU Ý: Nếu bạn thay đổi quy tắc của mình sau này, bạn sẽ cần thực hiện các lệnh sau sau khi thay đổi:

Để lưu quy tắc iptables IPv4 của bạn: sudo su -c 'iptables-save > /etc/iptables/rules.v4'

Để lưu quy tắc IPv6 ip6tables của bạn: sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'


Cảm ơn bạn, điều đó đã làm việc. Nếu tôi muốn tạm thời thay đổi các quy tắc, tôi có thể chạy tập lệnh từ thiết bị đầu cuối không?
Mikelane

Có, hoặc bạn có thể trực tiếp thao tác hệ thống iptables. TUY NHIÊN, nếu bạn có kế hoạch sử dụng quy tắc tạm thời một cách kiên trì, (các) quy tắc mới sẽ không được đảm bảo để lưu trừ khi bạn thực hiện các lệnh tôi nêu trong câu trả lời của mình.
Thomas Ward

Có phải là một ý tưởng tồi để chạy sudo dpkg-reconfigure iptables-persistentsau khi thay đổi một quy tắc.
souravc

@souravc câu hỏi trả lời đó là "Tại sao bạn cần hoặc muốn?" Ý tưởng là bạn sẽ không phải và chỉ có thể viết lại (hoặc ghi đè (các tệp rules.v4hoặc rules.v6thủ công để chúng được lập chỉ mục ở lần khởi động tiếp theo hoặc ngay lập tức nếu bạn chạy iptables-restore < /etc/iptables/rules.v4hoặcip6tables-restore < /etc/iptables/rules.v6
Thomas Ward

2

Giả sử bạn có các quy tắc tường lửa trong:

/etc/iptables.up.rules

Có lẽ câu trả lời rõ ràng nhất sẽ là tạo một tệp có tên iptables trong:

/etc/network/if-pre-up.d

với nội dung:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

và làm cho nó thực thi được bằng cách sử dụng

sudo chmod +x /etc/network/if-pre-up.d/iptables

Bằng cách này trước khi giao diện mạng của bạn được kích hoạt, các quy tắc của bạn sẽ được tải.


Cảm ơn bạn, nó ném log bất cứ nơi nào? Điều này không hoạt động và tôi nghi ngờ điều này là do máy chủ dns của tôi đã sử dụng có bộ giải quyết chưa được khởi động khi máy chủ của tôi khởi động.
Dimitri Kopriwa
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.