Làm cách nào để bắt đầu / dừng iptables trên Ubuntu?


86

Làm cách nào tôi có thể bắt đầu / dừng dịch vụ iptables trên Ubuntu?

Tôi đã thử

 service iptables stop

nhưng nó đang cho "dịch vụ không được công nhận" .

Tại sao nó làm như vậy? Có phương pháp nào khác không?


Tôi nghĩ rằng một số nhầm lẫn xuất phát từ các bài viết như thế này: cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux chỉ áp dụng cho Fedora / Red Hat và tuyên bố rằng bạn sẽ tìm thấy nó trong /etc/init.d/đó (un) hữu ích là liên kết hàng đầu bạn nhận được khi googling 'tắt iptables ubfox'.
icc97

Câu trả lời:


76

Tôi không biết về "Ubuntu", nhưng trong Linux nói chung, "iptables" không phải là một dịch vụ - đó là một lệnh để thao túng tường lửa hạt nhân netfilter. Bạn có thể "vô hiệu hóa" (hoặc dừng) tường lửa bằng cách đặt các chính sách mặc định trên tất cả các chuỗi tiêu chuẩn thành "CHẤP NHẬN" và xóa các quy tắc.

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F

(Bạn cũng có thể cần phải xóa các bảng khác, chẳng hạn như "nat", nếu bạn đã sử dụng chúng)

Bài viết sau đây trên trang web Ubuntu mô tả việc thiết lập iptables để sử dụng với NetworkManager: https://help.ubfox.com/community/IptablesHowTo


5
Điều này sẽ không vứt bỏ tất cả các quy tắc hiện tại mãi mãi? Tốt nhất để lưu chúng ở đâu đó trước tiên với sudo iptables-save> / tmp / quy tắc
Jens Timmerman

8
Điều này không dừng dịch vụ, mà chỉ cho phép mọi thứ thông qua.
Frederik Nielsen

1
À, cảm ơn. iptables -Flà những gì tôi đã thiếu :-)
Cameron

@JensTimmerman iptables-save > /tmp/rulesđã cứu ngày của tôi. Cảm ơn
blagus

46

Bạn đã sai :-)

Lệnh bạn đang tìm kiếm là:

$ sudo ufw disable

29
chắc chắn nếu chúng ta đã nói về ufw, nhưng bài đăng này là về iptables
webjay

1
Chà, tôi cho rằng đó là một bản cài đặt mặc định của Ubuntu và cái đó không có iptables, nhưng có ufw.
Frederik Nielsen

22
ufw chỉ là một lối vào cho iptables: "Iptables là một tường lửa, được cài đặt theo mặc định trên tất cả các bản phân phối Ubuntu chính thức (Ubuntu, Kubfox, Xubfox). Khi bạn cài đặt Ubuntu, iptables có ở đó, nhưng nó cho phép tất cả lưu lượng truy cập theo mặc định. với ufw - một chương trình để quản lý tường lửa iptables một cách dễ dàng. " help.ubuntu.com/community/IptablesHowTo
benjaoming

2
Có thể, nhưng như ufw == iptables (nhiều hơn hoặc ít hơn) trong Ubuntu, vô hiệu hóa ufw tương đương với việc vô hiệu hóa iptables.
Frederik Nielsen

2
Nhiều khả năng OP thực sự quan tâm đến việc vô hiệu hóa tường lửa, thay vì hiểu được sự phức tạp của dịch vụ iptables để quản lý tường lửa, vì vậy đây là một câu trả lời tốt.
BobDoolittle

30

Trước tiên tôi sẽ kiểm tra xem nó đã được cài đặt chưa (có lẽ là vậy):

dpkg -l | grep iptables

Trên Ubuntu, iptables không phải là một dịch vụ. Để ngăn chặn nó, bạn phải làm như sau:

sudo iptables-save > /root/firewall.rules
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Để khôi phục các quy tắc trước đây của bạn:

iptables-restore < /root/firewall.rules

Điều này được lấy từ http://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/ và đã được thử nghiệm trên nhiều bản cài đặt Ubuntu 8.X & 9.10.


Tôi không biết tại sao điều này có rất nhiều upvote, iptables là một mô-đun hạt nhân. Nó không bao giờ là một "dịch vụ" có thể bị "dừng lại". Chúng được sử dụng để nói với kernel cách xử lý các kết nối. Ngoài ra trong một môi trường sản xuất, bạn không bao giờ nên vô hiệu hóa tường lửa của mình. Nếu một cái gì đó không hoạt động, tìm giải pháp đúng, không phải là dễ dàng.
Broco

17

Iptables là một lệnh nó không phải là một dịch vụ, vì vậy nói chung không thể sử dụng các lệnh như

service iptables start

hoặc là

service iptables stop

để bắt đầu và dừng tường lửa, nhưng một số distro như centos đã cài đặt một dịch vụ có tên iptables để khởi động và dừng tường lửa và tệp cấu hình để định cấu hình. Dù sao, có thể tạo một dịch vụ để quản lý chỉnh sửa ipotables hoặc cài đặt tập lệnh cho phạm vi này. Tất cả các dịch vụ trong linux, ubfox không phải là ngoại lệ, là các tập lệnh thực thi trong thư mục /etc/init.d, thực hiện giao diện chuẩn (bắt đầu, dừng, khởi động lại) Một tập lệnh có thể trông như thế này:

 #!/bin/sh -e
 ### BEGIN INIT INFO
 # Provides:          iptables
 # Required-Start:    mountvirtfs ifupdown $local_fs
 # Default-Start:     S
 # Default-Stop:      0 6
 ### END INIT INFO

 # July 9, 2007
 # James B. Crocker <ubuntu@james.crocker.name>
 # Creative Commons Attribution - Share Alike 3.0 License (BY,SA)
 # Script to load/unload/save iptables firewall settings.

 PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"

 IPTABLES=/sbin/iptables
 IPTABLES_SAVE=/sbin/iptables-save
 IPTABLES_RESTORE=/sbin/iptables-restore

 IPTABLES_CONFIG=/etc/iptables.conf

 [ -x $IPTABLES ] || exit 0

 . /lib/lsb/init-functions


 case "$1" in
 start)
    log_action_begin_msg "Starting firewall"
         type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 120" || true
    if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
         type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 15" || true
    ;;

 stop)
    log_action_begin_msg "Saving current firewall configuration"
    if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    log_action_begin_msg "Flushing ALL firewall rules from chains!"
    if $IPTABLES -F ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    log_action_begin_msg "Deleting ALL firewall chains [Warning: ACCEPTING ALL PORT SERVICES!]"
    if $IPTABLES -X ; then
        $IPTABLES -P INPUT ACCEPT
        $IPTABLES -P FORWARD ACCEPT
        $IPTABLES -P OUTPUT ACCEPT
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

 save)
    log_action_begin_msg "Saving current firewall configuration"
    if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

 force-reload|restart)
    log_action_begin_msg "Reloading firewall configuration [Warning: POTENTIAL NETWORK INSECURITY DURING RELOAD]"
    $IPTABLES -F
    $IPTABLES -X
    if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

 *)
    echo "Usage: /etc/init.d/iptables {start|stop|save|restart|force-reload}"
    exit 1
    ;;
 esac

 exit 0 

Kịch bản này là một phần của hướng dẫn này , tất cả các lệnh để định cấu hình tường lửa phải được chèn, theo tập lệnh ở trên, vào tệp /etc/iptables.conf. Tập lệnh này phải được chèn vào một tệp có tên iptables trong /etc/init.d và làm cho nó có thể thực thi được bằng cách sử dụng

chmod+x *iptables* 

và thêm dịch vụ vào runlevels bằng cách sử dụng

update-rc.d iptables defaults

Bạn có thể thêm các quy tắc mới từ shell, các quy tắc này sẽ ngay lập tức hoạt động và sẽ được thêm vào /etc/iptables.conf khi dịch vụ dừng (điều đó có nghĩa là chúng sẽ được lưu chắc chắn khi tắt hệ thống).

Tôi hy vọng điều này sẽ hữu ích cho mọi người.


6

Vì cả iptables và ufw đều là cách để quản lý tường lửa bộ lọc mạng trong Linux và vì cả hai đều có sẵn theo mặc định trong Ubuntu, nên bạn có thể sử dụng để bắt đầu và dừng (và quản lý) các quy tắc tường lửa.

iptables linh hoạt hơn, nhưng vì ufw cung cấp ngôn ngữ giao diện rất đơn giản cho chức năng đơn giản và điển hình mà bạn có thể sử dụng:

sudo ufw disable # Để tắt tường lửa

sudo ufw enable # Để bật tường lửa

Để xem các cài đặt tường lửa hiện tại sử dụng sudo ufw status verbose, hoặc iptables -L.

Các trang tài liệu Cộng đồng Ubuntu trên iptablesUFW có nhiều thông tin hơn.


3

Có vẻ như có một số cách để quản lý tường lửa trong Ubuntu, vì vậy bạn có thể quan tâm đến việc đọc này: https://help.ubfox.com/community/IptablesHowTo#Configuration%20on%20startup

Để loại bỏ tất cả các quy tắc hiện tại, bạn có thể sử dụng các lệnh này (đặt chúng trong một số tập lệnh):

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -F
iptables -t mangle -X
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -F
iptables -t filter -X

Trong trường hợp thông thường, quy tắc tường lửa mặc định của bạn được lưu trong một số tệp (ví dụ: /etc/iptables.rules). Trong khi khởi động hệ thống lệnh iptables-restore </etc/iptables.rulesthực thi để tải quy tắc tường lửa. Vì vậy, thực thi cùng một lệnh sau khi bạn bỏ tất cả các quy tắc sử dụng các lệnh trên sẽ dẫn đến "tải lại tường lửa" mà bạn yêu cầu.


2

Nếu tôi nhớ lại một cách chính xác, cách được đề xuất để thiết lập iptables trong hướng dẫn ubfox là thiết lập nó như một phần của tập lệnh mạng. điều đó có nghĩa là không có tập lệnh /etc/init.d/iptables giống như trong hệ điều hành kiểu BSD.


Có trong Debian Woody (Ubuntu đã tồn tại rồi phải không?), Dù sao thì nó vẫn được sysadins triển khai ngày hôm nay. Tại sao họ thay đổi ý tưởng đó?

Tôi không phải là một đầu mối ... nhưng tôi dường như nhớ lại rằng đó là một trong những điều khó chịu mà tôi phải tìm ra khi tôi thiết lập máy chủ Ubuntu 9.10 hoặc một cái gì đó ... vì tôi muốn một bản phát hành có một postgres gần đây và là cho các máy chủ ... nếu không tôi chạy arch linux.
xenoterracide

2

Tạo một tệp trên /etc/init.d/

touch fw.rc

Làm cho tập tin thực thi chmod + x

Tạo một liên kết tượng trưng đến tệp đó trên /etc/rc2.d/

ln -s /etc/init.d/fw.rc S80firewall

Chỉnh sửa S80firewall và thêm vào như sau

iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -F

Bạn có thể thêm tất cả các quy tắc iptables tùy chỉnh của mình vào tệp này

Bây giờ bạn có thể khởi động lại tường lửa (iptables) bằng cách chạy /etc/rc2.d/S80firewall (phải là root)


2

Tôi gặp vấn đề tương tự. Trong thực tế, không có iptables-dai dẳng trong/etc/init.d

Vì vậy, tôi đã tạo tệp iptables-continent trong /etc/init.d

nano /etc/init.d/iptables-persistent

và đã viết như sau:

#!/bin/sh
#       Written by Simon Richter <sjr@debian.org>
#       modified by Jonathan Wiltshire <jmw@debian.org>
#       with help from Christoph Anton Mitterer
#

### BEGIN INIT INFO
# Provides:          iptables-persistent
# Required-Start:    mountkernfs $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Start-Before:    $network
# X-Stop-After:      $network
# Short-Description: Set up iptables rules
# Description:       Loads/saves current iptables rules from/to /etc/iptables
#  to provide a persistent rule set during boot time
### END INIT INFO

. /lib/lsb/init-functions

rc=0

load_rules()
{
    log_action_begin_msg "Loading iptables rules"

    #load IPv4 rules
    if [ ! -f /etc/iptables/rules.v4 ]; then
        log_action_cont_msg " skipping IPv4 (no rules to load)"
    else
        log_action_cont_msg " IPv4"
        iptables-restore < /etc/iptables/rules.v4 2> /dev/null
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    #load IPv6 rules    
    if [ ! -f /etc/iptables/rules.v6 ]; then
        log_action_cont_msg " skipping IPv6 (no rules to load)"
    else
        log_action_cont_msg " IPv6"
        ip6tables-restore < /etc/iptables/rules.v6 2> /dev/null
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    log_action_end_msg $rc
}

save_rules()
{
    log_action_begin_msg "Saving rules"

    #save IPv4 rules
    #need at least iptable_filter loaded:
    /sbin/modprobe -q iptable_filter
    if [ ! -f /proc/net/ip_tables_names ]; then
        log_action_cont_msg " skipping IPv4 (no modules loaded)"
    elif [ -x /sbin/iptables-save ]; then
        log_action_cont_msg " IPv4"
        iptables-save > /etc/iptables/rules.v4
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    #save IPv6 rules
    #need at least ip6table_filter loaded:
    /sbin/modprobe -q ip6table_filter
    if [ ! -f /proc/net/ip6_tables_names ]; then
        log_action_cont_msg " skipping IPv6 (no modules loaded)"
    elif [ -x /sbin/ip6tables-save ]; then
        log_action_cont_msg " IPv6"
        ip6tables-save > /etc/iptables/rules.v6
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    log_action_end_msg $rc
}

flush_rules()
{
    log_action_begin_msg "Flushing rules"

    if [ ! -f /proc/net/ip_tables_names ]; then
        log_action_cont_msg " skipping IPv4 (no module loaded)"
    elif [ -x /sbin/iptables ]; then
        log_action_cont_msg " IPv4"
        for param in F Z X; do /sbin/iptables -$param; done
        for table in $(cat /proc/net/ip_tables_names)
        do
            /sbin/iptables -t $table -F
            /sbin/iptables -t $table -Z
            /sbin/iptables -t $table -X
        done
        for chain in INPUT FORWARD OUTPUT
        do
            /sbin/iptables -P $chain ACCEPT
        done
    fi

    if [ ! -f /proc/net/ip6_tables_names ]; then
        log_action_cont_msg " skipping IPv6 (no module loaded)"
    elif [ -x /sbin/ip6tables ]; then
        log_action_cont_msg " IPv6"
        for param in F Z X; do /sbin/ip6tables -$param; done
        for table in $(cat /proc/net/ip6_tables_names)
        do
            /sbin/ip6tables -t $table -F
            /sbin/ip6tables -t $table -Z
            /sbin/ip6tables -t $table -X
        done
        for chain in INPUT FORWARD OUTPUT
        do
            /sbin/ip6tables -P $chain ACCEPT
        done
    fi

    log_action_end_msg 0
}

case "$1" in
start|restart|reload|force-reload)
    load_rules
    ;;
save)
    save_rules
    ;;
stop)
    # Why? because if stop is used, the firewall gets flushed for a variable
    # amount of time during package upgrades, leaving the machine vulnerable
    # It's also not always desirable to flush during purge
    echo "Automatic flushing disabled, use \"flush\" instead of \"stop\""
    ;;
flush)
    flush_rules
    ;;
*)
    echo "Usage: $0 {start|restart|reload|force-reload|save|flush}" >&2
    exit 1
    ;;
esac

exit $rc

và sau đó đã cho phép chmod 755.

chmod 755 /etc/init.d/iptables-persistent

Bây giờ nó hoạt động hoàn hảo! Hy vọng nó có thể giúp được ai đó.


2

Nếu bạn đang chạy máy chủ Ubuntu với tư cách là khách VM (ví dụ: trong VirtualBox) thì libvirt có thể được bật. Nếu vậy libvirt chứa một số bộ lọc mạng tích hợp sử dụng iptables. Các bộ lọc này có thể được cấu hình như được mô tả trong phần tường lửa trên nwfilters .

Để vô hiệu hóa các quy tắc iptables, bạn sẽ cần xóa tất cả các quy tắc vi phạm khỏi libvirt hoặc bạn chỉ có thể tắt libvirt nếu bạn không sử dụng nó - ví dụ: cài đặt cấu hình ghi đè thủ công (sau đó khởi động lại):

sudo bash -c 'echo "manual" > /etc/init/libvirt-bin.override'


1

Không có cái nào theo mặc định, nhưng trong các dẫn xuất debian gần đây (bao gồm Ubuntu), bạn có thể cài đặt một dịch vụ để quản lý iptables :

sudo apt install iptables-persistent

Sau đó, bạn có thể tải các quy tắc đã lưu trước đó:

systemctl start netfilter-persistent

Xem lại những gì đã xảy ra:

systemctl status netfilter-persistent

netfilter-persistent.service - netfilter persistent configuration

       Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
       Active: active (exited) since Sun 2019-03-24 10:49:50 IST; 16min ago
     Main PID: 1674 (code=exited, status=0/SUCCESS)
        Tasks: 0
       Memory: 0B
          CPU: 0
       CGroup: /system.slice/netfilter-persistent.service

Mar 24 10:49:50 ubuntu systemd[1]: Starting netfilter persistent configuration...
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: Warning: skipping IPv4 (no rules to load)
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: Warning: skipping IPv6 (no rules to load)
Mar 24 10:49:50 ubuntu systemd[1]: Started netfilter persistent configuration.
Mar 24 11:02:49 ubuntu systemd[1]: Started netfilter persistent configuration.

Hoặc dừng dịch vụ:

systemctl stop netfilter-persistent

Theo mặc định, việc dừng dịch vụ sẽ không xóa iptables (nghĩa là sẽ không tắt tường lửa, xem man netfilter-persistent).

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.