skrip penasihat aturan iptables

9

Ada server tanpa pertahanan iptables :ACCEPT all..

Mungkin ada aplikasi khusus di server ini.

Jika kita harus mengeraskan server ini (jadi tolak semua, dan biarkan saja yang dibutuhkan oleh aplikasi) dengan aturan iptables yang ketat, kita harus mencari tahu dengan tangan apa aplikasi yang menggunakan yang mana dst/src port/protocoldan kemudian kita harus menulis aturan iptables untuk mereka..

Pertanyaannya : apakah ada skrip yang dapat membantu mengumpulkan informasi ini dari mesin yang sedang berjalan? (dari log?) - Dan secara otomatis menghasilkan aturan iptables?

Seperti ada audit2allowpada SELinux. Hanya untuk iptables!

Mesin tidak dapat padam!

Contoh: skrip "MAGIC" harus dijalankan seminggu / bulan pada mesin, mengumpulkan informasi, kemudian, setelah seminggu / bulan, skrip akan dapat menghasilkan file aturan iptables yang dapat kita gunakan.

Banyak orang bisa mendapatkan dalam situasi ini (cara mengeraskan server tentang iptables). Dan alangkah baiknya jika ada skrip / solusi yang dapat melakukan ini: \

evachristine
sumber
Atau, blokir semua dan biarkan apa yang dibutuhkan saja. Anda bisa mengetahui apa yang dibutuhkan dengan menjalankan tcpdump lebih dari seminggu.
Lawrence
Tidak mungkin ada pemadaman pada mesin ini :)
evachristine
1
Bagaimana dengan fail2ban
totti
1
Anda dapat memantau lalu lintas atau memeriksa port yang terbuka, tetapi Anda mungkin akan jarang melewatkannya, tetapi lalu lintas keluar penting (pembaruan keamanan khusus, surat yang dikirim dalam kasus yang jarang terjadi, ...). Selama Anda hanya ingin menyaring lalu lintas masuk, pemantauan bisa menjadi pilihan.
jofel
Ini sangat mungkin dilakukan, Anda dapat membuat skrip cara untuk membangun aturan yang ditetapkan dari aplikasi yang sedang berjalan dan port yang terbuka. Tetapi Anda benar - benar tidak ingin melakukan ini karena 1) dalam banyak kasus tidak semua layanan perlu terpapar ke jaringan dan 2) mungkin ada layanan yang Anda benar-benar tidak ingin terkena jaringan. Alih-alih melakukannya dengan tangan, sekali, atur aturan yang baik dan pergi dari sana. Salah satu cara untuk melakukannya dengan aman adalah dengan membangun aturan yang ditetapkan dengan aturan ESTABLISHED / RELATED dan ACCEPT kemudian memeriksa aturan terkait yang cocok dengan lalu lintas. Saat Anda senang, ubah kebijakan INPUT untuk dihapus.
Pedro

Jawaban:

2

Lakukan secara manual

sudo ss -tuanp

atau

sudo netstat -tuanp

Penjelasan:

-t - show tcp sockets
-u - show udp sockets
-a - show all sockets
-n - show numeric, don't resolve 
-p - show process name
Sungai kecil
sumber
1

Jalankan tcpdumppada mesin selama seminggu atau lebih untuk menangkap lalu lintas rata-rata. Kemudian Anda dapat menelusuri lalu lintas menggunakan wireshark nanti untuk melihat port apa yang sedang digunakan.

Perintah untuk ini adalah tcpdump -i <interface> -s 65535 -w <some-file>

Anda kemudian dapat memetakan ini kembali menggunakan netstat -tuanpuntuk melihat PID / aplikasi apa yang menggunakan port apa.

Secara teoritis ini bisa dituliskan.

Lawrence
sumber
1

Anda dapat mulai dengan templat yang sangat mendasar seperti- https://gist.github.com/jirutka/3742890 , yang hanya mengizinkan ssh dan ping, dan menambahkan hal lain secara manual.

peretasan skrip cepat untuk menghasilkan aturan iptables untuk mendengarkan aplikasi Anda di antarmuka publik (0.0.0.0) / tcp

netstat -lnpt | egrep '0.0.0.0:[0-9]+' | awk '{print $4,$7}' | \
sed -E -e 's/0.0.0.0://g' -e 's|[0-9]+/||' | \
awk '{printf ("iptables -A INPUT -p tcp --dport %5d --syn -m conntrack --ctstate NEW -m comment %s \n", $1,$2) }'

Anda juga dapat menggunakan iptables -I INPUT <number>untuk menyuntikkan aturan di lokasi tertentu, yang dapat Anda daftarkaniptables -nvL --line-numbers INPUT

Rabin
sumber
1

Sayangnya tidak ada skrip yang pernah saya lihat yang dapat berjalan dalam mode pembelajaran atau mode pasif masuk semua penggunaan jaringan Anda, mengambil hasilnya dan menghasilkan firewall yang sebenarnya menggunakan iptablesdari log-nya.

Taruhan terbaik Anda adalah memulai dengan sederhana dan terus-menerus menambahkan berbagai potongan saat Anda mulai memahami sepenuhnya layanan apa yang disediakan sistem Anda. Anda harus menggunakan alat-alat seperti netstatuntuk melihat port apa yang digunakan untuk berbagai layanan yang Anda host, serta alamat IP apa yang mengaksesnya.

$ sudo netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      26292/sendmail      
tcp        0      0 0.0.0.0:890                 0.0.0.0:*                   LISTEN      26149/ypbind        
tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      26321/smbd          
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      26226/python        
tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      26221/./hpiod       
tcp        0      0 127.0.0.1:199               0.0.0.0:*                   LISTEN      26237/snmpd         
tcp        0      0 0.0.0.0:809                 0.0.0.0:*                   LISTEN      26067/rpc.statd     
tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      26321/smbd          
tcp        0      0 0.0.0.0:587                 0.0.0.0:*                   LISTEN      26292/sendmail      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      26038/portmap       
tcp        0      0 0.0.0.0:35604               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      26249/sshd          
tcp        0      0 0.0.0.0:631                 0.0.0.0:*                   LISTEN      26257/cupsd         
tcp        0      0 :::22                       :::*                        LISTEN      26249/sshd          
tcp        0      0 :::631                      :::*                        LISTEN      26257/cupsd         

CATATAN: Di atas, Anda dapat melihat layanan apa yang saya jalankan di server yang menerima koneksi TCP, yaitu mereka "mendengarkan" untuk koneksi pada berbagai port.

Tidak sulit untuk memulai dengan hal-hal seperti SSH (port 22) dan HTTP (port 80), jika ini khas untuk sistem Anda, jadi saya akan melakukan jenis layanan ini secara massal sekaligus. Untuk layanan lain seperti LDAP atau NIS Anda mungkin ingin melakukan ini dengan cara yang lebih terkontrol, memastikan hal-hal tidak rusak saat Anda memperkenalkannya.

Alat-alat seperti FireHOL , Firewall Builder (fwbuilder), dan eztables mungkin membantu ketika Anda menyerang proyek ini, karena mereka memberikan lapisan abstraksi yang bagus karena harus membuat iptableaturan khusus dengan tangan, yang bisa rumit.

FireHOL

FireHOL adalah bahasa (dan program untuk menjalankannya) yang membangun firewall yang aman dan stateful dari segala kerumitan dari konfigurasi yang mudah dipahami dan dapat dibaca oleh manusia.

contoh

transparent_squid 8080 "squid root" inface eth0

interface eth0 mylan
    policy accept

interface ppp+ internet
    server smtp accept
    server http accept
    server ftp  accept
    server ssh  accept src example.firehol.org

    client all  accept

router mylan2internet inface eth0 outface ppp+
    masquerade
    route all accept
fwbuilder

Fwbuilder adalah alat firewall grafis unik yang memungkinkan pengguna untuk membuat objek dan kemudian menyeret dan menjatuhkan objek-objek itu ke firewall, untuk membangun sistem keamanan yang kuat untuk satu PC atau jaringan PC. Fwbuilder mendukung beragam firewall (Cisco ASA / PIX, Linux iptables, ipfilter FreeBSD, pf OpenBSD, dan banyak lagi), sehingga aturannya dapat diterapkan pada beberapa platform. Mari kita lihat menggunakan Fwbuilder di Linux, yang mungkin hanya menjadi urusan seumur hidup dengan sistem keamanan yang kuat.

contoh

   ss fwbuilder

eztables

Eztables memungkinkan Anda untuk dengan cepat mengkonfigurasi firewall tanpa pernah menyentuh iptables. Sintaks aturan firewall dirancang agar mudah dibaca dan diterapkan.

Ini adalah bagaimana Anda mengizinkan seluruh internet untuk mengakses server web Anda pada TCP-port 80:

  allow_in any $eth0 any 80/tcp

Eztables dirancang untuk menjadi sederhana, namun kuat. Tidak masalah jika Anda ingin melindungi laptop Anda, mengatur router rumah, atau membangun firewall perusahaan.

Menggunakan Fail2Ban

Dengan iptablesfirewall yang belum sempurna di tempat Anda mungkin ingin memujinya menggunakan alat seperti Fail2Ban .

kutipan

Fail2ban memindai file log (mis. / Var / log / apache / error_log) dan melarang IP yang menunjukkan tanda-tanda berbahaya - terlalu banyak kegagalan kata sandi, mencari eksploitasi, dll. Umumnya Fail2Ban kemudian digunakan untuk memperbarui aturan firewall untuk menolak alamat IP untuk jumlah waktu tertentu, meskipun tindakan sewenang-wenang lainnya (misalnya mengirim email) juga dapat dikonfigurasi. Out of the box Fail2Ban dilengkapi dengan filter untuk berbagai layanan (apache, kurir, ssh, dll).

Menggunakan alat-alat seperti ini akan membantu membatasi paparan yang harus ditanggung oleh sistem Anda saat Anda terus mengerasnya. Bahkan setelah Anda cukup yakin bahwa sistem Anda telah dikeraskan, Anda mungkin masih ingin terus menggunakan Fail2Ban sebagai bagian dari langkah-langkah keamanan Anda.

Referensi

slm
sumber
0

Gunakan aturan iptable untuk mencatat koneksi baru, yang juga akan mencatat udp.

iptables -I INPUT -m state --state NEW -j LOG --log-prefix "New inbound connection: "
iptables -I OUTPUT -m state --state NEW -j LOG --log-prefix "New outbound connection: "

Anda dapat menentukan berbeda --log-level untuk memiliki log di file lain selain / var / log / messages (Anda harus mengkonfigurasi daemon syslog).

Saya pikir Anda harus membaca log aplikasi utama karena beberapa server memiliki aktivitas yang sangat berkala seperti siang, akhir minggu, akhir bulan (kuartal, tahun) sehingga Anda tidak akan kehilangan aktivitas jaringan penting dari server.

Karena server sangat penting, buat matriks aliran jaringan server pada spreadsheet yang bagus (sumber ip, ip dest, protokol, port, aplikasi) yang akan membantu Anda membuat aturan.

Emmanuel
sumber
0

Saya tahu ini bukan skrip dan ini bukan jawaban untuk pertanyaan OP tetapi ini adalah ide saya yang ingin saya bagikan dengan OP.

Saya mendapat semua port mendengarkan dengan:

netstat -an | egrep 'tcp .*LISTEN' | awk -F" " '{print $4}' | awk -F":" '{print $NF}'

Mungkin ini bisa membuat Anda semakin dekat dengan menulis skrip Anda sendiri. :)

Mr.TK
sumber
0

Anda dapat mulai dengan sesuatu seperti ini:

netstat -n -l -p | egrep "^(tcp|tcp6|udp)" | grep LISTEN | sed -r 's!^(tcp|tcp6|udp)\s.*:([0-9]+).*LISTEN\s+.*/(.*)!iptables -A INPUT -p \1 --dport \2 -j ACCEPT # \3!'

dan kemudian lanjutkan dengan

iptables -P INPUT DROP

atau

iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

Apa yang dilakukan baris pertama adalah menggunakan netstat untuk membuat daftar proses mendengarkan dan porta mereka. Kemudian akan menghasilkan baris "iptables" untuk memungkinkan masing-masing koneksi yang masuk. Substitusi reg sed sedikit disesuaikan untuk output netstat di server saya, jadi mungkin diperlukan beberapa penyesuaian untuk Anda. Ketika berhasil, Anda harus berakhir dengan sesuatu yang tampak seperti:

iptables -A INPUT -p tcp --dport 111 -j ACCEPT # rpcbind       
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # sshd          
iptables -A INPUT -p tcp --dport 25 -j ACCEPT # master        
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT # mysqld        
iptables -A INPUT -p tcp --dport 49476 -j ACCEPT # rpc.statd     
iptables -A INPUT -p tcp --dport 5432 -j ACCEPT # postgres.bin  
iptables -A INPUT -p tcp --dport 55371 -j ACCEPT # rpc.statd

Dua hal penting yang perlu diperhatikan:

1) Aturan-aturan ini tidak melakukan apa pun untuk Anda sampai Anda meletakkan garis DROP atau TOLAK di akhir atau menjadikannya kebijakan default untuk paket yang tidak cocok. Aturan-aturan ini memungkinkan paket, yang dapat diperdebatkan, jika kebijakan defaultnya adalah membiarkan apa pun tidak cocok.

2) Aturan-aturan ini ambivalen tentang IP sumber . Dari posting asli Anda, sepertinya Anda ingin mengizinkan semua klien Anda menggunakan server, kemudian, periksa log untuk mendapatkan IP sumber untuk pergi dengan port tujuan. Saya tidak tahu alat untuk melakukan itu, jadi skrip ini hanya akan mencegah orang membuat layanan baru di server Anda yang mendengarkan di port lain ... yang merupakan sesuatu .

Jemenake
sumber