GNU/Linux >> Belajar Linux >  >> Debian

Mengamankan VPS berbasis Ubuntu/Debian Anda menggunakan firewall IPTABLES/Netfilter

Dalam artikel berikut kami akan menunjukkan kepada Anda bagaimana Anda dapat mengamankan dan melindungi server virtual berbasis Ubuntu atau Debian Anda menggunakan firewall aplikasi, yang disebut iptables.

Apa itu iptables?

Ini adalah program aplikasi ruang pengguna yang memungkinkan administrator sistem untuk mengkonfigurasi tabel yang disediakan oleh firewall kernel Linux (diimplementasikan sebagai modul Netfilter yang berbeda ) dan rantai serta aturan yang disimpannya.

Untuk menekan jumlah percobaan pembobolan dan untuk memfilter port yang dibuka di server virtual Anda, Anda perlu mengonfigurasi firewall Anda dengan benar .

Untuk mempermudah pengelolaan aturan firewall server Anda, kami akan menyediakan skrip shell sederhana yang akan membantu pengelolaan aturan firewall. Pada dasarnya, setiap kali Anda perlu mengubah aturan firewall, Anda akan menggunakan skrip ini untuk menambah/menghapus aturan yang diinginkan.

ATURAN PEMASANGAN FIREWALL

Sebelum membungkus aturan dalam sebuah skrip, mari kita bagi menjadi beberapa bagian sehingga Anda dapat mengetahui desain firewall dan aturan apa yang akan diterapkan.

SILAHKAN ATURAN LAMA

Aturan firewall dapat dihapus menggunakan perintah berikut:

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

MENENTUKAN PORT LAYANAN

Anda harus mengetahui layanan apa yang telah Anda ekspos ke publik sehingga Anda dapat menetapkan aturan yang sesuai untuk mereka. Salah satu cara untuk menemukan layanan apa yang mendengarkan pada port apa adalah dengan menggunakan netstat atau ss perintah seperti pada:

## netstat -tunlp

or

## ss -tunlp

sebagai contoh, kami menggunakan salah satu server virtual Ubuntu 12.04 LTS kami dan berikut adalah output dari netstat perintah:

## netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      296/mysqld
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      449/sendmail: MTA:
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      590/apache2
tcp        0      0 209.135.140.77:53       0.0.0.0:*               LISTEN      353/named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      353/named
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      173/vsftpd
tcp        0      0 0.0.0.0:5622            0.0.0.0:*               LISTEN      630/sshd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      449/sendmail: MTA:
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      353/named
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      590/apache2
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN      261/dovecot
udp        0      0 209.135.140.77:53       0.0.0.0:*                           353/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           353/named

jadi ini berarti kami membuka port berikut untuk umum:

  • 25 (smtp)
  • 587 (pengiriman smtp)
  • 110 (pop3)
  • 143 (imap)
  • 993 (imap ssl)
  • 995 (pop3 ssl)
  • 80 (http)
  • 443 (https)
  • 53 (dns)
  • 21 (ftp)
  • 5622 (ssh)

PENYIAPAN KEBIJAKAN DEFAULT

ok, jadi sekarang kita bisa mengatur kebijakan firewall kita ke DROP semua yang ada di INPUT dan MAJU rantai dan mengizinkan lalu lintas di OUTPUT rantai.

tabel default filter berisi tiga rantai bawaan:

  1. Lalu lintas masuk yang ditujukan ke mesin itu sendiri mencapai rantai INPUT.
  2. Lalu lintas keluar yang dihasilkan secara lokal mencapai rantai OUTPUT.
  3. Lalu lintas yang dirutekan yang seharusnya tidak dikirimkan secara lokal akan mencapai rantai FORWARD.

periksa man 8 iptables untuk informasi lebih lanjut tentang ini

kebijakan default dapat diterapkan menggunakan perintah berikut:

## iptables -P INPUT DROP # <- do not run this over ssh as it will lock you out
## iptables -P FORWARD DROP
## iptables -P OUTPUT ACCEPT

ATURAN PEMASANGAN FIREWALL

Hal berikutnya yang harus dilakukan adalah benar-benar menyiapkan aturan firewall untuk layanan kami. Karena rantai INPUT DROPPED, kita perlu membuat daftar putih layanan yang mendengarkan di port publik, jadi:

hal pertama adalah mengaktifkan penggunaan gratis loopback interfaces , untuk memastikan semua sesi TCP harus dimulai dengan SYN dan untuk mengizinkan paket yang ditetapkan dan terkait:

## iptables -A INPUT -i lo -j ACCEPT
## iptables -A OUTPUT -o lo -j ACCEPT
## iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
## iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

selanjutnya, mari kita buka port layanan kita dengan menggunakan aturan firewall seperti:

### SSH
## iptables -A INPUT -p tcp --dport 5622  -m state --state NEW -j ACCEPT

### HTTP
## iptables -A INPUT -p tcp --dport 80  -m state --state NEW -j ACCEPT

### SMTP
## iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT

dan seterusnya. Setelah semua layanan masuk daftar putih, sebaiknya izinkan paket ICMP dan LOG dan DROP semua yang lain dalam rantai INPUT.

## iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT
## iptables -A INPUT -j LOG
## iptables -A INPUT -j DROP

SIMPAN/KEMBALIKAN ATURAN FIREWALL

Aturan firewall tidak persisten secara default, yang berarti mereka akan hilang jika Anda me-reboot server virtual Anda misalnya. Untuk menyimpan firewall Anda saat ini di /etc/fwall.rules Anda akan menggunakan sesuatu seperti:

## iptables-save > /etc/fwall.rules

dan untuk mengembalikan aturan yang disimpan, Anda akan menggunakan sesuatu seperti:

## iptables-restore -c /etc/fwall.rules

untuk membuat aturan dipulihkan secara otomatis pada permulaan sistem, Anda harus menggunakan paket bernama iptables-persistent atau Anda cukup membuat skrip di /etc/network/if-pre-up.d yang akan memuat aturan yang disimpan di /etc/fwall.rules , misalnya:

## vim /etc/network/if-pre-up.d/iptables

#!/bin/bash
test -e /etc/fwall.rules && iptables-restore -c /etc/fwall.rules

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

SCRIPT FIREWALL

simpan skrip di /usr/local/bin/fwall-rules dan membuatnya dapat dieksekusi

#!/bin/bash

IPTABLES=/sbin/iptables

echo " * flushing old rules"
${IPTABLES} --flush
${IPTABLES} --delete-chain
${IPTABLES} --table nat --flush
${IPTABLES} --table nat --delete-chain

echo " * setting default policies"
${IPTABLES} -P INPUT DROP
${IPTABLES} -P FORWARD DROP
${IPTABLES} -P OUTPUT ACCEPT

echo " * allowing loopback devices"
${IPTABLES} -A INPUT -i lo -j ACCEPT
${IPTABLES} -A OUTPUT -o lo -j ACCEPT

${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## BLOCK ABUSING IPs HERE ##
#echo " * BLACKLIST"
#${IPTABLES} -A INPUT -s _ABUSIVE_IP_ -j DROP
#${IPTABLES} -A INPUT -s _ABUSIVE_IP2_ -j DROP

echo " * allowing ssh on port 5622"
${IPTABLES} -A INPUT -p tcp --dport 5622  -m state --state NEW -j ACCEPT

echo " * allowing ftp on port 21"
${IPTABLES} -A INPUT -p tcp --dport 21  -m state --state NEW -j ACCEPT

echo " * allowing dns on port 53 udp"
${IPTABLES} -A INPUT -p udp -m udp --dport 53 -j ACCEPT

echo " * allowing dns on port 53 tcp"
${IPTABLES} -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT

echo " * allowing http on port 80"
${IPTABLES} -A INPUT -p tcp --dport 80  -m state --state NEW -j ACCEPT

echo " * allowing https on port 443"
${IPTABLES} -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT

echo " * allowing smtp on port 25"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT

echo " * allowing submission on port 587"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT

echo " * allowing imaps on port 993"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT

echo " * allowing pop3s on port 995"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT

echo " * allowing imap on port 143"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT

echo " * allowing pop3 on port 110"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT

echo " * allowing ping responses"
${IPTABLES} -A INPUT -p ICMP --icmp-type 8 -j ACCEPT

# DROP everything else and Log it
${IPTABLES} -A INPUT -j LOG
${IPTABLES} -A INPUT -j DROP

#
# Save settings
#
echo " * SAVING RULES"

if [[ -d /etc/network/if-pre-up.d ]]; then
    if [[ ! -f /etc/network/if-pre-up.d/iptables ]]; then
        echo -e "#!/bin/bash" > /etc/network/if-pre-up.d/iptables
        echo -e "test -e /etc/iptables.rules && iptables-restore -c /etc/iptables.rules" >> /etc/network/if-pre-up.d/iptables
        chmod +x /etc/network/if-pre-up.d/iptables
    fi
fi

iptables-save > /etc/fwall.rules
iptables-restore -c /etc/fwall.rules
## chmod +x /usr/local/bin/fwall-rules

untuk mengaktifkan aturan yang sudah Anda siapkan di skrip, jalankan saja

## fwall-rules

dari baris perintah. Untuk menambah atau menghapus aturan, Anda hanya perlu membuka skrip, menambah atau menghapus aturan yang diinginkan, menyimpan dan menjalankannya lagi, misalnya:

## fwall-rules
 * flushing old rules
 * setting default policies
 * allowing loopback devices
 * allowing ssh on port 5622
 * allowing ftp on port 21
 * allowing dns on port 53 udp
 * allowing dns on port 53 tcp
 * allowing http on port 80
 * allowing https on port 443
 * allowing smtp on port 25
 * allowing submission on port 587
 * allowing imaps on port 993
 * allowing pop3s on port 995
 * allowing imap on port 143
 * allowing pop3 on port 110
 * allowing ping responses
 * SAVING RULES

Tentu saja Anda tidak perlu melakukan semua ini jika Anda menggunakan salah satu layanan hosting VPS Linux kami, dalam hal ini Anda dapat meminta admin linux ahli kami untuk melakukan ini untuk Anda. Mereka tersedia 24×7 dan akan segera memenuhi permintaan Anda.

PS. Jika Anda menyukai posting ini, silakan bagikan dengan teman-teman Anda di jejaring sosial menggunakan tombol di sebelah kiri atau cukup tinggalkan balasan di bawah. Terima kasih.


Debian
  1. Cara Membuat Aturan Firewall iptables Persisten di Debian/Ubuntu

  2. Menginstal dan Menggunakan Docker di Ubuntu dan Debian

  3. Script:Instal WordPress di VPS Debian/Ubuntu

  1. Konfigurasi Firewall menggunakan Iptables di Ubuntu 14.04

  2. Contoh penggunaan firewall UFW di Debian/Ubuntu

  3. Debian – Menggunakan Dua Tampilan Di Debian?

  1. Percepat situs web berbasis PHP Anda menggunakan Zend Optimizer pada CentOS 6 VPS

  2. Cara menginstal SSHGuard di VPS Ubuntu

  3. Cara meningkatkan keamanan VPS Debian Anda dengan menggunakan DenyHosts dan Logwatch