Bagaimana cara memulai / menghentikan iptables di Ubuntu?

86

Bagaimana saya bisa memulai / menghentikan layanan iptables di Ubuntu?

saya telah mencoba

 service iptables stop

tetapi memberikan "layanan tidak dikenal" .

Mengapa demikian? Apakah ada metode lain?

percikan
sumber
Saya pikir beberapa kebingungan berasal dari artikel seperti ini: cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux yang hanya berlaku untuk Fedora / Red Hat dan mengklaim bahwa Anda akan menemukannya di /etc/init.d/dalamnya (un) sangat membantu adalah tautan teratas yang Anda dapatkan ketika googling 'matikan iptables ubuntu'.
icc97

Jawaban:

76

Saya tidak tahu tentang "Ubuntu", tetapi di Linux secara umum, "iptables" bukan layanan - ini adalah perintah untuk memanipulasi firewall kernel netfilter. Anda dapat "menonaktifkan" (atau menghentikan) firewall dengan menetapkan kebijakan default pada semua rantai standar untuk "MENERIMA", dan menyiram aturan.

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

(Anda mungkin perlu menyiram tabel lain juga, seperti "nat", jika Anda sudah menggunakannya)

Artikel berikut di situs web Ubuntu menjelaskan tentang pengaturan iptables untuk digunakan dengan NetworkManager: https://help.ubuntu.com/community/IptablesHowTo

JMusgrove
sumber
5
Bukankah ini akan membuang semua aturan saat ini untuk selamanya? Yang terbaik untuk menyimpannya di suatu tempat terlebih dahulu dengan sudo iptables-save> / tmp / rules
Jens Timmerman
8
Ini tidak menghentikan layanan, tetapi hanya memungkinkan semuanya lewat.
Frederik Nielsen
1
Ah terima kasih. iptables -Fadalah apa yang saya lewatkan :-)
Cameron
@JensTimmerman iptables-save > /tmp/rulesmenyelamatkan hari saya. Terima kasih
blagus
46

Anda semua salah :-)

Perintah yang Anda cari adalah:

$ sudo ufw disable
Frederik Nielsen
sumber
29
yakin jika kita berbicara tentang ufw, tetapi posting ini tentang iptables
webjay
1
Yah, saya berasumsi itu adalah instalasi default Ubuntu, dan yang satu tidak memiliki iptables, tetapi memiliki ufw.
Frederik Nielsen
22
ufw hanyalah tampilan depan untuk iptables: "Iptables adalah firewall, dipasang secara default di semua distribusi Ubuntu resmi (Ubuntu, Kubuntu, Xubuntu). Saat Anda menginstal Ubuntu, iptables ada di sana, tetapi memungkinkan semua lalu lintas secara default. Ubuntu 8.04 Hadir dengan ufw - program untuk mengelola firewall iptables dengan mudah. ​​" help.ubuntu.com/community/IptablesHowTo
benjaoming
2
Mungkin, tetapi sebagai ufw == iptables (kurang lebih) di Ubuntu, menonaktifkan ufw sama dengan menonaktifkan iptables.
Frederik Nielsen
2
Kemungkinan besar OP sebenarnya tertarik untuk menonaktifkan firewall, daripada memahami seluk-beluk layanan iptables untuk mengelola firewall, jadi ini adalah jawaban yang bagus.
BobDoolittle
30

Pertama saya akan memeriksa apakah sudah diinstal dengan (mungkin):

dpkg -l | grep iptables

Di Ubuntu, iptables bukan layanan. Untuk menghentikannya, Anda harus melakukan hal berikut:

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

Untuk memulihkan aturan Anda sebelumnya:

iptables-restore < /root/firewall.rules

Ini diambil dari http://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/ dan telah diuji pada banyak instalasi Ubuntu 8.X & 9.10.

Embreau
sumber
Saya tidak tahu mengapa ini memiliki begitu banyak upvotes, iptables adalah modul kernel. Ini tidak pernah merupakan "layanan" yang dapat "dihentikan". Mereka digunakan untuk memberi tahu kernel cara menangani koneksi. Juga di lingkungan produksi Anda tidak boleh menonaktifkan firewall Anda. Jika sesuatu tidak berhasil, temukan solusi yang tepat, bukan yang mudah.
Broco
17

Iptables adalah perintah yang bukan layanan, jadi umumnya tidak mungkin menggunakan perintah seperti

service iptables start

atau

service iptables stop

untuk memulai dan menghentikan firewall, tetapi beberapa distro seperti centos telah menginstal layanan yang disebut iptables untuk memulai dan menghentikan firewall dan file konfigurasi untuk mengkonfigurasinya. Pokoknya dimungkinkan untuk membuat layanan untuk mengelola pengeditan ipotables atau menginstal skrip untuk lingkup ini. Semua layanan di linux, ubuntu bukan pengecualian, adalah skrip yang dapat dieksekusi di dalam folder /etc/init.d, yang mengimplementasikan antarmuka standar (mulai, berhenti, mulai ulang) Skrip yang mungkin terlihat seperti ini:

 #!/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 <[email protected]>
 # 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 

Skrip ini adalah bagian dari tutorial ini , semua perintah untuk mengkonfigurasi firewall harus dimasukkan, sesuai dengan skrip di atas, ke dalam file /etc/iptables.conf. Script ini harus dimasukkan ke file yang disebut iptables di /etc/init.d dan membuatnya dapat dieksekusi menggunakan

chmod+x *iptables* 

dan tambahkan layanan ke runlevel menggunakan

update-rc.d iptables defaults

Anda dapat menambahkan aturan baru dari shell, aturan-aturan ini akan segera aktif dan akan ditambahkan ke /etc/iptables.conf ketika layanan berhenti (itu berarti mereka akan disimpan untuk memastikan kapan sistem dimatikan).

Saya harap ini akan membantu semua orang.

teka-teki itu
sumber
6

Karena kedua iptables dan ufw adalah cara untuk mengelola firewall netfilter di Linux, dan karena keduanya tersedia secara default di Ubuntu, Anda dapat menggunakan salah satu untuk memulai dan menghentikan (dan mengelola) aturan firewall.

iptables lebih fleksibel, tetapi karena ufw menyediakan bahasa antarmuka yang sangat sederhana untuk fungsi sederhana dan khas yang dapat Anda gunakan:

sudo ufw disable # Untuk menonaktifkan firewall

sudo ufw enable # Untuk mengaktifkan firewall

Untuk melihat pengaturan firewall saat ini sudo ufw status verbose, gunakan , atau iptables -L.

Halaman dokumentasi Komunitas Ubuntu di iptables dan UFW memiliki lebih banyak info.

belacqua
sumber
3

Sepertinya ada beberapa cara untuk mengelola firewall di Ubuntu, jadi Anda mungkin tertarik membaca ini: https://help.ubuntu.com/community/IptablesHowTo#Configuration%20on%20startup

Untuk menghapus semua aturan saat ini, Anda dapat menggunakan perintah ini (letakkan di beberapa skrip):

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

Dalam kasus biasa, aturan firewall default Anda disimpan dalam beberapa file (misalnya, /etc/iptables.rules). Sementara perintah sistem booting iptables-restore </etc/iptables.rulesdijalankan untuk memuat aturan firewall. Jadi, menjalankan perintah yang sama setelah Anda membatalkan semua aturan menggunakan perintah di atas akan menghasilkan "reload firewall" yang Anda minta.

Powerman
sumber
2

Jika saya ingat dengan benar cara yang disarankan untuk mengatur iptables di panduan ubuntu adalah dengan mengaturnya sebagai bagian dari skrip jaringan. yang berarti tidak ada skrip /etc/init.d/iptables seperti yang ada di BSD style OS.

xenoterracide
sumber
Ada di Debian Woody (apakah Ubuntu ada saat itu?), Lagi pula masih diterapkan oleh sysadmin hari ini. Mengapa mereka mengubah gagasan itu?
Saya tidak tahu ... tapi sepertinya saya mengingatnya sebagai salah satu hal yang menjengkelkan yang harus saya cari ketika saya membuat server ubuntu 9.10 atau sesuatu ... karena saya ingin rilis distro yang memiliki postgres baru-baru ini dan adalah untuk server ... kalau tidak saya menjalankan linux lengkungan.
xenoterracide
2

Buat file di /etc/init.d/

touch fw.rc

Jadikan file executable chmod + x

Buat symlink ke file itu di /etc/rc2.d/

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

Edit S80firewall dan tambahkan yang berikut ini

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

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

Anda dapat menambahkan semua aturan iptables khusus Anda pada file ini

Sekarang Anda dapat me-restart firewall (iptables) dengan menjalankan /etc/rc2.d/S80firewall (harus di-root)

jerichorivera
sumber
2

Saya memiliki masalah yang sama. Bahkan, tidak ada iptables-persisten di/etc/init.d

Jadi, saya membuat file iptables-persistent di /etc/init.d

nano /etc/init.d/iptables-persistent

dan menulis di bawah ini:

#!/bin/sh
#       Written by Simon Richter <[email protected]>
#       modified by Jonathan Wiltshire <[email protected]>
#       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

dan kemudian memberikan chmod 755 izin.

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

Sekarang bekerja dengan sempurna! Semoga bisa membantu seseorang.

capitainabloc
sumber
2

Jika Anda menjalankan server Ubuntu sebagai tamu VM (mis. Dalam VirtualBox) maka libvirt dapat diaktifkan. Jika demikian libvirt berisi beberapa filter jaringan built-in yang memanfaatkan iptables. Filter ini dapat dikonfigurasi seperti yang dijelaskan di bagian firewall di nwfilters .

Untuk menonaktifkan aturan iptables Anda harus menghapus semua aturan yang menyinggung dari libvirt, atau Anda bisa menonaktifkan libvirt jika Anda tidak menggunakannya - mis. Instal konfigurasi override manual (lalu reboot):

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

Tidak ada satu pun secara default, tetapi dalam turunan debian terbaru (termasuk Ubuntu) Anda dapat menginstal layanan untuk mengelola iptables :

sudo apt install iptables-persistent

Anda kemudian dapat memuat aturan yang disimpan sebelumnya:

systemctl start netfilter-persistent

Tinjau apa yang terjadi:

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.

Atau hentikan layanan:

systemctl stop netfilter-persistent

Menghentikan layanan akan, secara default, bukan iptables flush (yaitu tidak akan menonaktifkan firewall, lihat man netfilter-persistent).

Yogesh
sumber