Saya telah mencoba untuk menyusun skrip iptables server dasar yang akan berfungsi untuk sebagian besar situs hanya menjalankan server web dasar menggunakan HTTP (S) dan SSH (port 80, 443, & 22). Lagi pula, sebagian besar VPS hanya membutuhkan aturan port awal ini dan dapat menambahkan port mail atau game nanti sesuai kebutuhan.
Sejauh ini saya memiliki ruleset berikut dan saya bertanya-tanya apakah ada yang tahu tentang skrip yang lebih baik atau perbaikan apa pun yang dapat ditambahkan.
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections (only 4 attempts by an IP every 3 minutes, drop the rest)
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
iptables adalah salah satu bagian paling penting dari pengamanan kotak Anda (juga lihat fail2ban) namun ada banyak orang seperti saya yang kesulitan memahami segala sesuatu yang membuat firewall dasar aman untuk server kami.
Apa cara paling aman untuk hanya membuka port dasar yang diperlukan untuk server web?
Pembaruan: cyberciti.biz memiliki skrip iptables lain yang terlihat cukup bagus.
Selain itu, daripada menggunakan Denyhosts atau fail2ban, Anda dapat menggunakan iptables sendiri untuk memblokir upaya berulang yang buruk di SSH .
modprobe
tidak diinstal (atau ada kesalahan lain sebelum Anda membuka port 22), Anda akan mengunci diri dari server.Jawaban:
Cara paling aman untuk bekerja dengan iptables adalah menutup semuanya dan hanya membuka apa yang Anda butuhkan. Saya agak terganggu, jadi saya selalu mencoba untuk menjadi malas mungkin, jadi saya tidak membuat kesalahan yang dapat menyebabkan server menjadi tidak aman.
Saya menggunakan ini, hanya sedikit penugasan varible harus dilakukan untuk membuatnya bekerja.
Saya telah menggunakannya untuk beberapa waktu, dan segala jenis modifikasi akan sangat dihargai jika membuatnya lebih mudah untuk diadministrasikan.
sumber
Ini terlihat cukup bagus, tetapi Anda bisa sedikit memperketat. Bendera -s adalah IP sumber atau nama domain, dan Anda menambahkan "-s 198.23.12.32" atau apa pun alamat IP Anda hanya mengizinkan SSH dari IP sumber Anda. Anda juga dapat memilih rentang IP sumber dengan menggunakan notasi gaya CIDR .
Anda harus berhati-hati saat mencatat panggilan yang ditolak. Alamat IP server Anda akan dipindai oleh bot, skrip kiddies, dll, dan file log bisa menjadi agak besar dengan cepat. Kecuali Anda mencoba mendiagnosis masalah tertentu yang menurut Anda mungkin terkait dengan seseorang yang mencoba membobol firewall Anda, saya akan menghapus opsi ini.
Anda juga bisa mengikat fail2ban ke iptables untuk pseudo-IDS. fail2ban akan memindai file log Anda dan dapat memblokir IP jika mereka mencoba memaksa masuk ke sistem Anda. Misalnya, jika alamat IP tertentu gagal masuk ke SSH 5 kali, Anda dapat mengunci mereka sepanjang hari. Ini juga berfungsi pada FTP dan banyak lainnya (termasuk bot buruk yang menabrak Apache). Saya menggunakannya di semua server saya untuk memberikan beberapa bantal tambahan dari serangan brute-force.
sumber
Lihatlah Shorewall. Konfigurasi default antarmuka tunggal akan menjadi titik awal yang baik. Mudah dikonfigurasikan, dan memiliki makro untuk hal-hal seperti SSH dan akses Web. Dapat dikonfigurasikan untuk mengunci server ke level yang diinginkan ketika firewall dimatikan. Dengan Shorewall-lite, Anda dapat menjalankan pembangunan firewall di server lain. Logging mudah dikonfigurasi ke level yang diinginkan.
Untuk server HTTP dasar Anda ingin membuka akses masuk ke port 80 dan port 443 jika Anda menggunakan HTTPS. Akses masuk SSH dari beberapa alamat terbatas biasanya diinginkan. Anda mungkin ingin mengunci akses keluar juga. Buka firewall hanya untuk server dan layanan yang diperlukan. NTP dan DNS harus dibuka, serta saluran untuk mengambil tambalan.
sumber
Saya akan mengatakan ini adalah firewall yang cukup bagus, kecuali bahwa itu diarahkan untuk menghentikan lalu lintas masuk, dan tidak berfokus pada lalu lintas keluar atau keluar. Dalam banyak kasus, sama pentingnya untuk fokus pada koneksi keluar dari kotak seperti yang masuk. Dalam kasus yang disayangkan bahwa mesin tersebut benar-benar dieksploitasi, alangkah baiknya jika dapat mencegah mengunduh root kit tambahan, atau menyambung ke komando dan mengendalikan node, atau apa pun.
BillThor mulai membicarakan hal ini di atas, tetapi saya hanya menjawab dengan contoh-contoh spesifik. Salah satu hal yang menyenangkan tentang iptables adalah ia dapat mengingat status koneksi, ini dapat memiliki implikasi kinerja pada situs-situs yang sangat banyak diperdagangkan, tetapi Anda dapat mengubah akses masuk Anda di http / https untuk hanya membolehkan balasan pada koneksi yang telah dibuat misalnya, atau secara khusus membatasi orang-orang tertentu yang tidak terjangkau pengguna dari memiliki akses keluar sama sekali. Maka aturan keluar Anda akan memiliki klausa TERKAIT, DIDIRIKAN yang akan mencegah seluruh host serangan tambahan dan memperlambat yang membutuhkan tahap sekunder untuk benar-benar mengeksploitasi kotak, yang sangat umum.
Akhirnya, saya akan mengatakan bahwa lebih baik untuk menetapkan kebijakan iptables Anda -P DROP daripada menambahkan TOLAK di akhir. Sebagian besar masalah preferensi, tetapi dapat mengurangi kesalahan saat menambahkan ke rantai dengan aturan yang ada alih-alih menyisipkan atau membilas / mengatur ulang.
sumber
-A INPUT -j REJECT
menjadi-A INPUT -P DROP
?