iptables: ips memungkinkan dan memblokir semua koneksi lainnya

26

Bagaimana saya mengizinkan ips tertentu dan memblokir semua koneksi lain di iptables?

David
sumber
Ketika Gilles menunjukkan konsepnya seperti ini: Tambahkan aturan ACCEPT untuk setiap hal spesifik yang ingin Anda izinkan apakah dengan IP sumber atau kualifikasi lainnya, lalu tetapkan kebijakan default untuk TOLAK.
Caleb

Jawaban:

27

Saya menulis posting blog tentang aturan dasar Iptables untuk pengguna desktop sejak lama dan Anda mungkin harus membacanya, dan artikelnya terkait dengan desain firewall Stateful . Tetapi pra kernel 2.6.39 (yang termasuk ipsetdan Anda mungkin ingin menggunakannya untuk daftar putih IP jika Anda memiliki lebih dari 10 untuk daftar putih (di mana 10 adalah sewenang-wenang)).

Pegangan pertama menyatakan bahwa kita tahu kita ingin menerima atau menjatuhkan, dan antarmuka.

iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept

Jika Anda hanya ingin melakukan izin dengan IP saja, tanpa status

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

Anda cenderung mengalami masalah dalam melakukan hal ini, dan saya sarankan menggunakan keadaan untuk membuat hidup Anda lebih mudah. Misalnya, tidak mengizinkan -i lodan -o lopasti akan menimbulkan masalah untuk aplikasi tertentu.

xenoterracide
sumber
4
Daripada DROP, Anda harus MENOLAK paket yang tidak diinginkan, karena itu membuat diagnosis masalah jauh lebih mudah dan mencegah timeout. Lihat Menolak paket IP dengan kesalahan ICMP, atau hanya menjatuhkannya?
Gilles 'SANGAT berhenti menjadi jahat'
Saya mencoba kedua penyetelan dan KeePass2 tidak akan mulai, tahu? Juga jika saya melakukan iptables -Fitu untuk menghapus semua aturan, bahkan tidak bisa ping ubuntu.com
Pawel Cioch
@PawelCioch mengapa KeePass2 memerlukan koneksi internet?
Alex
@ Alex untuk menyimpan file DB di lokasi yang jauh, ini saya ingin IP tunggal. Tapi saya
mengerti
10

Inilah contoh (belum diuji!) Yang hanya memblokir koneksi masuk . Koneksi melalui antarmuka loopback, yang berasal dari 192.168.3.x, ICMP, atau ke port SSH diizinkan. Semua koneksi lain ditolak.

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
Gilles 'SANGAT berhenti menjadi jahat'
sumber
@Gilles untuk menggunakan negara yang TERKAIT dan DITETAPKAN dengan benar, Anda harus mencocokkan paket awal dengan status BARU. lodalam contoh di atas dikecualikan dari pencocokan negara dan selalu diizinkan.
penguin359
@ penguin359: Bisakah Anda menguraikan mengapa BARU diperlukan? Saya jauh dari pakar iptables, saya sebagian menyalin aturan ini dari router rumah saya, yang tidak cocok dengan BARU. Sejauh yang saya mengerti, semua yang tersisa setelah aturan pertama adalah paket BARU (atau UNTRACKED). (Jika saya terlalu jauh dari sasaran dan Anda tidak dapat menjelaskan dalam komentar, poskan versi Anda dengan jawaban sebagai jawaban dan saya akan menghapus milik saya.)
Gilles 'SO- stop being evil'
@Gilles Saya selalu meninggalkan status INVALID sebelum menerima apa pun ... yang membuat apa pun tidak INVALID, TERKAIT, DIDIRIKAN, pasti keadaan BARU. Tapi saya tidak tahu alasan apa pun yang lain harus menentukan BARU. Secara teori, jika Anda tidak menangani INVALID, dan Anda tidak menentukan BARU, Anda bisa menerima INVALID. Tetapi begitu INVALID ditangani, menurut saya memeriksa keadaan BARU pada setiap aturan hanya membutuhkan lebih banyak pemrosesan untuk paket.
xenoterracide
@Gilles juga merupakan kebijakan standar penolakan yang buruk, karena ia mengirim paket tolak untuk setiap paket yang diterima, ini menambah serangan DOS.
xenoterracide
@ xenoterracide: Poin bagus. Haruskah TOLAK pernah digunakan? Saya sudah bertanya: Tolak paket IP dengan kesalahan ICMP, atau cukup taruh saja?
Gilles 'SO- stop being evil'
7

Aturan di bawah ini hanya akan memungkinkan IP Anda dan Memblokir semua IP lain melalui port 22 atau ssh. Uji dengan terminal baru sebelum memutuskan koneksi.

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
Ishtiyaque Noori
sumber
3
terima kasih atas jawaban singkatnya. Bagaimana ini akan berubah jika saya ingin mengizinkan beberapa IP dan rentang IP. Di tempat yourIPaddresssaya dapat menambahkan beberapa alamat dan rentang IP? Dan jika saya menggunakan SSH pada port non-standar seperti 2888, maka perintahnya akan mengubah 22contoh Anda menjadi 2288? Juga, apakah ini juga akan memblokir rsync, sftp, dll ke server ini dari semua IP kecuali yang diizinkan?
PKHunter
1
Catatan yang -p tcppenting di sini karena --dporttidak berfungsi tanpanya. Saya juga menyarankan menggunakan -j REJECTdaripada DROPkarena REJECTmembuat port identik dengan port tertutup dan DROPmembuat paket-paket yang ditakdirkan untuk port black holed. Dalam praktiknya, penyerang jarak jauh dapat mendeteksi DROPport yang dikonfigurasi dari port yang sebenarnya tertutup.
Mikko Rantalainen