Pada pandangan pertama, aturan IPTables mungkin terlihat samar.
Dalam artikel ini, saya telah memberikan 25 aturan praktis IPTables yang dapat Anda salin/tempel dan gunakan untuk kebutuhan Anda.
Contoh-contoh ini akan bertindak sebagai template dasar bagi Anda untuk menyesuaikan aturan ini agar sesuai dengan kebutuhan spesifik Anda.
Untuk referensi mudah, semua 25 aturan iptables ini dalam format skrip shell:iptables-rules
1. Hapus Aturan yang Ada
Sebelum Anda mulai membuat kumpulan aturan baru, Anda mungkin ingin membersihkan semua aturan default, dan aturan yang ada. Gunakan perintah flush iptables seperti yang ditunjukkan di bawah ini untuk melakukannya.
iptables -F (or) iptables --flush
2. Tetapkan Kebijakan Rantai Default
Kebijakan rantai default adalah ACCEPT. Ubah ini menjadi DROP untuk semua rantai INPUT, FORWARD, dan OUTPUT seperti yang ditunjukkan di bawah ini.
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
Saat Anda membuat kebijakan default rantai INPUT dan OUTPUT sebagai DROP, untuk setiap persyaratan aturan firewall yang Anda miliki, Anda harus menetapkan dua aturan. yaitu satu untuk masuk dan satu untuk keluar.
Dalam semua contoh kami di bawah, kami memiliki dua aturan untuk setiap skenario, karena kami telah menetapkan DROP sebagai kebijakan default untuk rantai INPUT dan OUTPUT.
Jika Anda mempercayai pengguna internal Anda, Anda dapat menghilangkan baris terakhir di atas. yaitu Jangan DROP semua paket keluar secara default. Dalam hal ini, untuk setiap persyaratan aturan firewall yang Anda miliki, Anda hanya perlu mendefinisikan satu aturan saja. yaitu menentukan aturan hanya untuk yang masuk, karena yang keluar DITERIMA untuk semua paket.
Catatan: Jika Anda tidak tahu apa arti rantai, Anda harus terlebih dahulu membiasakan diri dengan dasar-dasar IPTables.
3. Blokir alamat ip tertentu
Sebelum kita melangkah lebih jauh akan contoh lainnya, jika Anda ingin memblokir ip-address tertentu, Anda harus melakukannya terlebih dahulu seperti gambar di bawah ini. Ubah “x.x.x.x” pada contoh berikut ke alamat ip tertentu yang ingin Anda blokir.
BLOCK_THIS_IP="x.x.x.x" iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP
Ini berguna ketika Anda menemukan beberapa aktivitas aneh dari alamat ip tertentu di file log Anda, dan Anda ingin memblokir sementara alamat ip tersebut saat Anda melakukan penelitian lebih lanjut.
Anda juga dapat menggunakan salah satu variasi berikut, yang hanya memblokir lalu lintas TCP pada koneksi eth0 untuk alamat ip ini.
iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
4. Izinkan SEMUA SSH Masuk
Aturan berikut mengizinkan SEMUA koneksi ssh masuk pada antarmuka eth0.
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Catatan :Jika Anda ingin memahami dengan tepat apa arti setiap argumen, Anda harus membaca Cara Menambahkan Aturan Firewall IPTables
5. Izinkan SSH Masuk hanya dari Jaringan Tertentu
Aturan berikut mengizinkan koneksi ssh masuk hanya dari jaringan 192.168.100.X.
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Dalam contoh di atas, alih-alih /24, Anda juga dapat menggunakan subnet mask lengkap. yaitu “192.168.100.0/255.255.255.0”.
6. Izinkan HTTP dan HTTPS Masuk
Aturan berikut mengizinkan semua lalu lintas web masuk. yaitu lalu lintas HTTP ke port 80.
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Aturan berikut mengizinkan semua lalu lintas web aman yang masuk. yaitu lalu lintas HTTPS ke port 443.
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
7. Gabungkan Beberapa Aturan Bersama menggunakan MultiPort
Saat Anda mengizinkan koneksi masuk dari dunia luar ke beberapa port, alih-alih menulis aturan individual untuk setiap port, Anda dapat menggabungkannya bersama menggunakan ekstensi multiport seperti yang ditunjukkan di bawah ini.
Contoh berikut mengizinkan semua lalu lintas SSH, HTTP, dan HTTPS yang masuk.
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
8. Izinkan SSH Keluar
Aturan berikut mengizinkan koneksi ssh keluar. yaitu Ketika Anda ssh dari dalam ke server luar.
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Harap dicatat bahwa ini sedikit berbeda dari aturan yang masuk. yaitu Kami mengizinkan status BARU dan ESTABLISHED pada rantai OUTPUT, dan hanya status ESTABLISHED pada rantai INPUT. Untuk aturan yang masuk, sebaliknya.
9. Izinkan SSH Keluar hanya untuk Jaringan Tertentu
Aturan berikut mengizinkan koneksi ssh keluar hanya ke jaringan tertentu. yaitu Anda hanya ssh ke jaringan 192.168.100.0/24 dari dalam.
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
10. Izinkan HTTPS Keluar
Aturan berikut mengizinkan lalu lintas web aman keluar. Ini berguna ketika Anda ingin mengizinkan lalu lintas internet untuk pengguna Anda. Di server, aturan ini juga berguna saat Anda ingin menggunakan wget untuk mengunduh beberapa file dari luar.
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
Catatan:Untuk lalu lintas web HTTP keluar, tambahkan dua aturan tambahan seperti di atas, dan ubah 443 menjadi 80.
11. Load Balance Lalu Lintas Web Masuk
Anda juga dapat menyeimbangkan lalu lintas web masuk menggunakan aturan firewall iptables.
Ini menggunakan ekstensi iptables n. Contoh berikut memuat keseimbangan lalu lintas HTTPS ke tiga alamat ip yang berbeda. Untuk setiap paket ke-3, beban seimbang ke server yang sesuai (menggunakan penghitung 0).
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
12. Izinkan Ping dari Luar ke Dalam
Aturan berikut memungkinkan pengguna luar untuk dapat melakukan ping ke server Anda.
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
13. Izinkan Ping dari Dalam ke Luar
Aturan berikut memungkinkan Anda melakukan ping dari dalam ke salah satu server luar.
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
14. Izinkan Akses Putar Balik
Anda harus mengizinkan akses loopback penuh di server Anda. yaitu akses menggunakan 127.0.0.1
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
15. Izinkan Jaringan Internal ke Jaringan Eksternal.
Pada server firewall di mana satu kartu ethernet terhubung ke eksternal, dan kartu ethernet lain terhubung ke server internal, gunakan aturan berikut untuk mengizinkan jaringan internal berbicara dengan jaringan eksternal.
Dalam contoh ini, eth1 terhubung ke jaringan eksternal (internet), dan eth0 terhubung ke jaringan internal (Misalnya:192.168.1.x).
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
16. Izinkan DNS keluar
Aturan berikut mengizinkan koneksi DNS keluar.
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
17. Izinkan Koneksi NIS
Jika Anda menjalankan NIS untuk mengelola akun pengguna Anda, Anda harus mengizinkan koneksi NIS. Bahkan ketika koneksi SSH diizinkan, jika Anda tidak mengizinkan koneksi ypbind terkait NIS, pengguna tidak akan bisa login.
Port NIS bersifat dinamis. yaitu Ketika ypbind mulai, ypbind mengalokasikan port.
Pertama lakukan rpcinfo -p seperti yang ditunjukkan di bawah ini dan dapatkan nomor port. Dalam contoh ini, ia menggunakan port 853 dan 850.
rpcinfo -p | grep ypbind
Sekarang izinkan koneksi masuk ke port 111, dan port yang digunakan oleh ypbind.
iptables -A INPUT -p tcp --dport 111 -j ACCEPT iptables -A INPUT -p udp --dport 111 -j ACCEPT iptables -A INPUT -p tcp --dport 853 -j ACCEPT iptables -A INPUT -p udp --dport 853 -j ACCEPT iptables -A INPUT -p tcp --dport 850 -j ACCEPT iptables -A INPUT -p udp --dport 850 -j ACCEPT
Hal di atas tidak akan berfungsi saat Anda me-restart ypbind, karena akan memiliki nomor port yang berbeda saat itu.
Ada dua solusi untuk ini:1) Gunakan alamat ip statis untuk NIS Anda, atau 2) Gunakan beberapa teknik skrip shell pintar untuk secara otomatis mengambil nomor port dinamis dari output perintah "rpcinfo -p", dan gunakan yang ada di atas aturan iptables.
18. Izinkan Rsync Dari Jaringan Tertentu
Aturan berikut mengizinkan rsync hanya dari jaringan tertentu.
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
19. Izinkan koneksi MySQL hanya dari jaringan tertentu
Jika Anda menjalankan MySQL, biasanya Anda tidak ingin mengizinkan koneksi langsung dari luar. Dalam kebanyakan kasus, Anda mungkin memiliki server web yang berjalan di server yang sama dengan tempat database MySQL dijalankan.
Namun DBA dan pengembang mungkin perlu masuk langsung ke MySQL dari laptop dan desktop mereka menggunakan klien MySQL. Dalam kasus tersebut, Anda mungkin ingin mengizinkan jaringan internal Anda untuk berbicara dengan MySQL secara langsung seperti yang ditunjukkan di bawah ini.
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
20. Izinkan Lalu Lintas Sendmail atau Postfix
Aturan berikut mengizinkan lalu lintas email. Bisa berupa sendmail atau postfix.
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
21. Izinkan IMAP dan IMAPS
Aturan berikut mengizinkan lalu lintas IMAP/IMAP2.
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
Aturan berikut mengizinkan lalu lintas IMAPS.
iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
22. Izinkan POP3 dan POP3S
Aturan berikut mengizinkan akses POP3.
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
Aturan berikut memungkinkan akses POP3S.
iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
23. Mencegah Serangan DoS
Aturan iptables berikut akan membantu Anda mencegah serangan Denial of Service (DoS) di server web Anda.
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
Pada contoh di atas:
- -m limit:Ini menggunakan ekstensi limit iptables
- –batas 25/menit:Batas ini hanya maksimal 25 koneksi per menit. Ubah nilai ini berdasarkan kebutuhan spesifik Anda
- –limit-burst 100:Nilai ini menunjukkan bahwa batas/menit akan diterapkan hanya setelah jumlah total koneksi mencapai level limit-burst.
24. Penerusan Port
Contoh berikut merutekan semua lalu lintas yang datang ke port 442 ke 22. Ini berarti koneksi ssh yang masuk dapat berasal dari port 22 dan 422.
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
Jika Anda melakukan hal di atas, Anda juga perlu secara eksplisit mengizinkan koneksi masuk pada port 422.
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT
25. Log Paket yang Dijatuhkan
Anda mungkin juga ingin mencatat semua paket yang dijatuhkan. Aturan ini harus berada di bagian bawah.
Pertama, buat rantai baru bernama LOGGING.
iptables -N LOGGING
Selanjutnya, pastikan semua koneksi masuk yang tersisa melompat ke rantai LOGGING seperti yang ditunjukkan di bawah ini.
iptables -A INPUT -j LOGGING
Selanjutnya, log paket-paket ini dengan menentukan “log-prefix” khusus.
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
Terakhir, jatuhkan paket ini.
iptables -A LOGGING -j DROP
Semua 25 aturan iptables di atas dalam format skrip shell:iptables-rules
Artikel sebelumnya dalam seri iptables:
- Tutorial Firewall Linux:Tabel IPTables, Rantai, Dasar Aturan
- IPTables Flush:Hapus / Hapus Semua Aturan Di RedHat dan CentOS Linux
- Linux IPTables:Cara Menambahkan Aturan Firewall (Dengan Contoh Izinkan SSH)
- Linux IPTables:Contoh Aturan Masuk dan Keluar (SSH dan HTTP)