Dengan iptables kernel benar-benar kosong ( iptables -F
), ini akan melakukan apa yang Anda minta:
# iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
Ini mengatakan bahwa semua alamat LAN diizinkan untuk berbicara dengan port TCP 22, bahwa localhost mendapatkan pertimbangan yang sama (ya, 127. * bukan hanya 127.0.0.1), dan paket dari setiap alamat lain yang tidak cocok dengan dua aturan pertama tersebut secara tidak resmi dimasukkan ke dalam yang sedikit ember . Anda dapat menggunakan REJECT
alih-alih DROP
jika Anda menginginkan penolakan aktif (TCP RST) alih-alih menjadikan port TCP 22 lubang hitam untuk paket.
Jika LAN Anda tidak menggunakan blok 192.168.0. *, Anda secara alami perlu mengubah IP dan mask pada baris pertama untuk mencocokkan skema IP LAN Anda.
Perintah-perintah ini mungkin tidak melakukan apa yang Anda inginkan jika firewall Anda sudah memiliki beberapa aturan yang dikonfigurasi. (Katakan iptables -L
sebagai root untuk mencari tahu.) Yang sering terjadi adalah bahwa salah satu aturan yang ada mengambil paket yang Anda coba filter, sehingga menambahkan aturan baru tidak berpengaruh. Meskipun Anda dapat menggunakan -I
alih-alih -A
dengan iptables
perintah untuk menyambungkan aturan baru ke tengah-tengah rantai alih-alih menambahkannya, biasanya lebih baik untuk mengetahui bagaimana rantai diisi pada boot sistem dan memodifikasi proses itu sehingga aturan baru Anda selalu diinstal di urutan yang benar.
RHEL 7+
Pada sistem tipe RHEL terbaru, cara terbaik untuk melakukannya adalah dengan menggunakan firewall-cmd
atau yang setara dengan GUI. Ini memberitahu firewalld
daemon OS apa yang Anda inginkan, yang sebenarnya mengisi dan memanipulasi apa yang Anda lihat iptables -L
.
RHEL 6 dan Sebelumnya
Pada sistem tipe RHEL yang lebih lama, cara termudah untuk memodifikasi rantai firewall saat memesan adalah mengedit /etc/sysconfig/iptables
. Alat firewall GUI dan TUI OS agak sederhana, jadi setelah Anda mulai menambahkan aturan yang lebih rumit seperti ini, lebih baik kembali ke file konfigurasi lama yang bagus. Hati-hati, setelah Anda mulai melakukan ini, Anda berisiko kehilangan perubahan jika Anda pernah menggunakan alat firewall OS untuk memodifikasi konfigurasi, karena mungkin tidak tahu bagaimana berurusan dengan aturan buatan tangan seperti ini.
Tambahkan sesuatu seperti ini ke file itu:
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -j DROP
Di mana Anda menambahkannya adalah bagian yang sulit. Jika Anda menemukan baris dalam file itu bicarakan --dport 22
, cukup ganti dengan tiga baris di atas. Kalau tidak, mungkin harus pergi sebelum baris pertama yang ada berakhir -j ACCEPT
. Secara umum, Anda harus terbiasa dengan cara iptables bekerja, di mana titik penyisipan yang benar akan terlihat jelas.
Simpan file itu, lalu katakan service iptables restart
untuk memuat ulang aturan firewall. Pastikan untuk melakukan ini saat masuk ke konsol, jika Anda merasa suntingan! Anda tidak ingin mengunci diri dari mesin saat masuk melalui SSH.
Kesamaan dengan perintah di atas bukan kebetulan. Sebagian besar file ini terdiri dari argumen untuk iptables
perintah. Perbedaan relatif terhadap di atas adalah bahwa iptables
perintah dijatuhkan dan INPUT
nama rantai menjadi rantai khusus RHEL-khusus RH-Firewall-1-INPUT
. (Jika Anda ingin memeriksa file lebih detail, Anda akan melihat sebelumnya di file di mana mereka pada dasarnya mengubah nama INPUT
rantai. Mengapa? Tidak bisa mengatakan.)
Cara yang disukai untuk melakukannya adalah dengan
iptables
. Sepertinya sudah cukup dicakup oleh orang lain, jadi, hanya untuk kelengkapan, saya akan menunjukkan metode kontrol akses alternatif yang tersedia untuk banyak daemon di sebagian besar distro Linux. Metode kontrol akses disediakan olehlibwrap
perpustakaan.Untuk memeriksa apakah daemon favorit Anda memiliki
libwrap
dukungan, coba jalankan yang berikut:Jika Anda mendapatkan hasil yang tidak kosong, seperti
maka Anda pasti baik untuk pergi.
Ini hampir pasti bahwa
sshd
daemon Anda memang memilikilibwrap
dukungan, dan karena itu harus berkonsultasi dengan/etc/hosts.allow
dan/etc/hosts.deny
file untuk kontrol akses. Dengan asumsi jaringan LAN lokal192.168.100.0/24
Anda, Anda dapat menolak akses kesshd
semua klien kecuali yang ada di host lokal atau pada LAN lokal dengan memasukkan yang berikut ke dalam/etc/hosts.deny
file Anda :Perhatikan bahwa metode ini sebenarnya tidak membuka atau menutup port, per se. Itu hanya memberi tahu daemon yang menggunakan metode kontrol akses ini apakah akan menerima atau menolak upaya koneksi dari klien yang cocok dengan pola yang diberikan.
Untuk detail lengkap, lihat halaman manual, mulai dengan
hosts_access(5)
.sumber
Jika Anda memiliki firewall berbasis linux sendiri, sebaiknya setup
iptables
, seperti yang dijelaskan di sini. Jika tidak dan firewall adalah router Anda, maka kemungkinan besar konfigurasi default sudah mencegah akses dari luar, kecuali jika Anda secara eksplisit mengaktifkan penerusan port (seperti yang baru-baru ini saya jelaskan dalam menjawab pertanyaan ini ).Untuk keamanan tambahan di atas itu, Anda dapat menggunakan subnet terpisah untuk koneksi in-LAN. Untuk melakukannya, untuk setiap komputer tambahkan alamat IP kedua yang hanya akan digunakan dalam LAN dan bukan oleh router. Katakanlah seluruh LAN sekarang menggunakan
192.168.0.xxx
alamat dan router (gateway, firewall)192.168.0.1
. Jadi tambahkan alamat kedua untuk setiap komputer - misalnya:Selanjutnya, edit
sshd
konfigurasi untuk hanya menggunakan alamat ini (sehingga tidak mengizinkan koneksi datang192.168.0.xxx
) - edit/etc/ssh/sshd_config
dan modifikasiListenAddress
ke salah satu subnet baru Anda (192.168.5.1
dalam contoh di atas). Itu dia! Jika Anda tidak mengkonfigurasi gateway untuk merutekan komunikasi subnet itu, ia harus dipisahkan dari luar.sumber