Bagaimana saya bisa memblokir semua kecuali tiga port di Ubuntu?

22

Bagaimana saya bisa memblokir semua port kecuali 1962, 999, 12020?

Satu port untuk SSH dan dua lainnya untuk semacam script. Jadi, perlu untuk memungkinkan keluar pada port ini, kan?

Iptables saya:

# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*mangle
:PREROUTING ACCEPT [643521:136954367]
:INPUT ACCEPT [643521:136954367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
:POSTROUTING ACCEPT [645723:99904505]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*filter
:INPUT ACCEPT [643490:136950781]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
-A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*nat
:PREROUTING ACCEPT [5673:734891]
:POSTROUTING ACCEPT [2816:179474]
:OUTPUT ACCEPT [2816:179474]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012

Maaf, tapi saya benar-benar pemula dalam hal ini dan saya hanya ingin membuat server saya lebih aman.

okapa
sumber
Mengapa tidak menggunakan UFW?
Soviero

Jawaban:

25

Pada awalnya Anda harus selalu menyiram untuk memastikan apa yang sudah didefinisikan ... tidak ada

iptables -F

Kemudian atur kebijakan default rantai INPUT ke DROP jika akhirnya tercapai dan tidak ada aturan yang cocok:

iptables -P INPUT DROP

Untuk memastikan loopback tidak berlaku, Anda harus menambahkan

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

untuk memungkinkan semua lalu lintas di lo-if dan setiap lalu lintas incomming untuk koneksi yang Anda buat. Setelah itu tambahkan setiap aturan yang Anda butuhkan untuk layanan Anda (jangan lupa untuk membuka ssh jika Anda membutuhkannya! Kalau tidak, Anda keluar) :

iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 

Sedikit trik yang saya lakukan untuk menjaga diri saya dan orang lain agar tidak sengaja menggali lubang ke dalam keamanan yang akhirnya saya tambahkan:

iptables -A INPUT -j DROP

Baris ini cocok dengan segalanya untuk rantai INPUT dan kebijakan seharusnya tidak mendapatkan apa pun. Keuntungan dari hal ini adalah bahkan jika Anda menambahkan aturan ACCEPT beberapa saat setelah menginisialisasi aturan Anda, aturan tersebut tidak akan pernah diperiksa karena semuanya dibatalkan sebelumnya. jadi itu memastikan Anda harus menyimpan semuanya di satu tempat.

Untuk pertanyaan Anda semuanya terlihat seperti ini dalam ringkasan:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 
iptables -A INPUT -j DROP
Mose
sumber
1
Hanya untuk mengklarifikasi: -Pmenetapkan kebijakan pada rantai. Sebenarnya tidak menambahkan aturan. Kebijakan rantai menunjukkan tindakan yang harus dilakukan pada paket jika akhir rantai tercapai. Karena itu, pintar untuk menambahkan aturan Anda sebelum menetapkan DROPkebijakan.
Belmin Fernandez
Jika saya mengingatnya dengan benar, biasanya tidak masalah ke mana harus menetapkan kebijakan ... mungkin saya harus memberikan jawaban saya sedikit edit.
Mose
3
satu catatan: hati-hati mengatur kebijakan default ditolak dan disiram ketika mengatur firewall melalui ssh. Anda akan mengunci diri. Ya saya sudah melakukan ini. :-) Sekarang saya biasanya membuat aturan terakhir iptables -A INPUT -j DROP, karena alasan itu.
Sirex
Saya menyoroti peringatan ssh saya sedikit ;-)
Mose
@ Matius: Benar tidak masalah pada umumnya. Saya mencoba menyoroti itu. Tapi itu bisa menyebabkan Anda terkunci karena sudah disebutkan heh.
Belmin Fernandez
20

Balasan dari seorang pemula sama seperti Anda :-) Saya perlu mengamankan server Ubuntu saya juga, belajar iptables adalah rasa sakit yang tidak bisa saya lewati. UFW (Uncomplicated Firewall) adalah program untuk membuat konfigurasi firewall semudah mungkin.

  • pasang ufw:

    sudo apt-get install ufw
    
  • segera nonaktifkan (saya harus menyelamatkan-boot karena saya dikunci dari login SSH saya sendiri):

    sudo ufw disable
    
  • setel "deny" sebagai aturan default (ini memblokir semua port):

    sudo ufw default deny
    
  • izinkan port yang Anda butuhkan:

    sudo ufw allow to 1962
    sudo ufw allow to 999
    sudo ufw allow to 12020
    
    sudo ufw allow from 1962
    sudo ufw allow from 999
    sudo ufw allow from 12020
    
  • jika Anda yakin aturan di atas tidak merusak koneksi ssh Anda, aktifkan ufw:

    sudo ufw enable
    

Dokumen ditulis dengan baik dan memberikan lebih banyak contoh: https://help.ubuntu.com/community/UFW

Vlad Gerasimov
sumber
1
Ketika bekerja dengan konfigurasi firewall, mungkin ide yang baik untuk membuat pekerjaan cron yang menonaktifkan firewall lagi. Kalau-kalau Anda terkunci.
pymkin
Perhatikan bahwa ini tidak bekerja dengan ufw 0,35, melempar kesalahan seperti ERROR: Bad destination addressdanERROR: Bad source address
Dave
Dan bagaimana cara mengizinkan semua port kecuali satu port untuk antarmuka tertentu? Saya menggunakan aturan tolak default dan ingin memblokir port DNS 53 pada antarmuka ethernet untuk mencegah kebocoran DNS saat menggunakan VPN. Saat ini saya harus mengizinkan semua port yang ingin saya gunakan untuk rentang IP pribadi yang sangat tidak nyaman.
baptx