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:
- Lalu lintas masuk yang ditujukan ke mesin itu sendiri mencapai rantai INPUT.
- Lalu lintas keluar yang dihasilkan secara lokal mencapai rantai OUTPUT.
- 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.