Bagaimana cara mengunci OS X Server menggunakan firewall PF?

4

Asumsikan saya memiliki blok ip untuk China, Rusia, Korea Utara dll. Bagaimana saya mengkonfigurasi pf untuk memungkinkan alamat IP hanya mengakses port 80 dan 443, dan ditolak akses ke port lain?

Saya memiliki instance OS X Server 2.1.1 (alias Mountain Lion) yang berjalan di pusat data dengan alamat ip statis yang terpapar ke internet. Jadi tidak ada firewall perangkat keras dll untuk melindungi server terhadap pengguna jahat.

Melihat melalui log, saya melihat banyak upaya gagal dari negara-negara seperti Cina, Rusia ke layanan yang diperlukan bagi saya untuk mengelola server dari jarak jauh. Selanjutnya, saya perhatikan bahwa port tidak perlu terbuka ke internet.

Sejak OS X 10.6 Snow Leopard Server, saya menggunakan Server Admin untuk mengelola firewall (ipfw). Ini telah dihapus di OS X Server 2.1.1 (Mountain Lion). Dan untuk membuat masalah lebih menarik, dokumentasi Apple menyatakan bahwa ipfw sudah tidak digunakan lagi dan menggunakan pf sebagai gantinya. Setelah membaca halaman manual, saya sedikit bingung bagaimana mengkonfigurasi pf.

Googling "pf firewall tutorial" mengungkapkan tutorial yang ditujukan untuk NetBSD, FreeBSD dan OpenBSD. Pemfilteran lebih lanjut pada "OS X" dalam kueri itu mengungkapkan tutorial untuk "OS X", tetapi tampaknya penulis mengasumsikan pengetahuan sebelumnya.

bloudraak
sumber
Tautan Anda ke "Dokumentasi Apple" tidak mengarah ke Apple, tetapi ke openbsd.org/faq/pf
Pro Backup

Jawaban:

7

Anda harus:

  1. mengerti dasar-dasar pf - di sini ada banyak panduan di Internet, Anda dapat dengan aman membaca panduan BSD Terbuka / Gratis. Anda harus memahami beberapa hal mendasar:

    • dengan PF, aturan terakhir menang (kebalikan dari "aturan menang pertama" IPFW)
    • logging ada di perangkat pflog jika format 'tcpdump'
    • periksa pfctlperintah menggunakanman pfctl
    • periksa juga man pf.conf
    • Anda dapat membuat banyak file teks sederhana yang berisi alamat IP (disebut tabel) dan menggunakannya dalam aturan penyaringan - lihat contoh di bawah ini.
  2. SETELAH ini, Anda dapat menggunakan dua antarmuka GUI

PF tidak terlalu sulit jika Anda memiliki pengetahuan tentang cara firewall bekerja secara umum.

Fragmen pf.confuntuk penyaringan berbasis tabel:

interface = "en0"
allowed_ports = "{ 80, 443 }"
table <badips> persist
table <noroute> const { 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }
block in on $interface from { <noroute>, <badips> } to any
pass in on $interface inet proto tcp from <badips> to $interface port $allowed_ports

Contoh di atas berisi:

  • beberapa definisi dasar, seperti nama antarmuka Anda dan beberapa port
  • definisi untuk dua tabel, norouteuntuk alamat yang tidak dapat ditutup (RFC 1918) dan yang kedua badipsyang dapat berisi alamat IP berbasis Geo IP Anda
  • aturan penyaringan - memblokir apa pun dari tabel ini
  • mengizinkan port 80 dan 443 dari badips(aturan terakhir menang)
jm666
sumber
2

Bukankah serveradmin di 10.8 memungkinkan Anda memuat grup alamat dari baris perintah? Seperti, misalnya:

$ sudo serveradmin settings < eu.txt

eu.txt:

ipfilter:ipAddressGroupsWithRules:_array_id:eu = create
ipfilter:ipAddressGroupsWithRules:_array_id:eu:allowAll = no
ipfilter:ipAddressGroupsWithRules:_array_id:eu:readOnly = no
ipfilter:ipAddressGroupsWithRules:_array_id:eu:name = "eu - Austria, Belgium, Croatia, Cyprus, Czech Republic, Denmark, European Union, Finland, France, Germany, Gibraltar, Greece, Holy See, Ireland, Italy, Luxembourg, Monaco, Netherlands, Norway, Poland, Slovakia, Slovenia, Spain, Sweden, Switzerland, United Kingdom"
ipfilter:ipAddressGroupsWithRules:_array_id:eu:addresses:_array_index:0 = "192.168.100.0/16"
ipfilter:ipAddressGroupsWithRules:_array_id:eu:addresses:_array_index:1 = "192.168.200.0/24"

Edit:

Ketika serveradmingagal, gunakan /Applications/Server.app/Contents/ServerRoot/usr/sbin/serveradmin.

Pro Backup
sumber
Apa arti dua baris terakhir sebenarnya?
Lenar Hoyt
2 baris terakhir adalah alamat IP (rentang jaringan dalam kasus ini) yang terdiri dari grup.
Pro Backup
Tapi ini terlihat seperti alamat IP lokal, bukan seperti alamat dari eropa?
Lenar Hoyt
1
Alamat IP hanyalah contoh yang dianonimkan, ganti dengan rentang Anda sendiri. Untuk rentang, Anda mungkin ingin mencarinya di countryipblocks.net/ip_aggregation_beta.php
Pro Backup