it-swarm-id.com

Kiat untuk konfigurasi iptables aman untuk bertahan dari serangan. (sisi klien!)

Contoh sendiri:

###############
# KERNEL PARAMETER CONFIGURATION

# PREVENT YOU SYSTEM FROM ANSWERING ICMP ECHO REQUESTS
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward

###############
# INPUT

# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j DROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j DROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW OUTGOING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j DROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP

Bisakah kita mengumpulkan lebih banyak ide terkait iptables untuk melindungi klien dari serangan? E. g .: aturan main Ubuntu 11.04 Desktop "pertahanan dari serangan" ~ jenis.

Terima kasih!

hal .: tentu saja:

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

hal.2: keduanya pada IPv4 dan IPv6!

hal.3: Saya tidak perlu aturan seperti: hanya izinkan UDP dan TCP pada port 53 outbound, saya hanya ingin aturan "mempertahankan" dari mis .: portscanning, serangan, dll.

hal.4: PC berada di belakang router/NAT atau terhubung "langsung ke internet".

16
LanceBaynes

Saya menyadari ada pendapat yang berbeda, tetapi satu sikap utama orang yang benar-benar tahu tentang jaringan dan keamanan adalah bahwa sebagian besar aturan iptables/sysctl ini berlebihan, jika tidak merusak Anda dan jaringan. Beberapa akan secara agresif mengkritik Anda karena memutuskan hubungan dengan perilaku standar tanpa alasan. Beberapa contoh:

  • Perilaku TCP/IP standar adalah untuk MENOLAK sehingga rekan mendapat beberapa petunjuk tentang apa yang sedang terjadi. Mungkin seseorang salah mengetik URL atau admin Anda menghitung host atau seseorang ingin terhubung ke server gaming Anda tetapi mengetik port yang salah. Dengan DROP mereka hanya mendapatkan timeout yang tidak jelas dan mengganggu.

  • Tidak perlu menjatuhkan paket yang tidak valid atau salah, semua serangan ini sudah berumur satu dekade. Kernel Linux devs jauh lebih mutakhir daripada Anda mengenai jenis paket mana yang valid dan mana yang tidak. "Bagaimana dengan cacat di masa depan", beberapa mungkin berpendapat. Nah, bagaimana Anda tahu cacat di masa depan akan berada di handler TCP dan tidak di iptables TCP parser?

  • Sebagian besar pengaturan sysctl adalah default. Jika tidak, biasanya ada alasan. Misalnya, mengapa menonaktifkan pengiriman arahan? Saya merasa sangat berguna untuk diberi tahu oleh rekan kerja bahwa perutean saya buruk, walaupun saya tidak akan pernah bereaksi ("accept_redirects", default = 0) secara otomatis.

  • Dengan log_martians Anda dan aturan logging lainnya, saya harap Anda juga memiliki kuota di/var/log, atau akan sangat menyenangkan untuk mengisi disk Anda dari jarak jauh, biasanya mematikan layanan/aplikasi Anda. Selain itu, Anda harus menggunakan batas nilai untuk pencatatan atau seseorang dapat mengisi kuota untuk mencegah Anda melihat upaya bruteforce kata sandi SSH di auth.log, atau hal lainnya. Apakah Anda benar-benar membaca log itu di desktop? Saya merekomendasikan checkch.

  • Anda tampaknya memblokir ICMP. Terlepas dari masalah DHCP yang disebutkan, ini juga mencegah penemuan PMTU. Tanpa PMTUD, Anda akan mendapatkan perilaku aneh ketika Anda menggunakan sistem di tempat-tempat dengan koneksi DSL atau pengaturan jaringan lainnya. Beberapa paket hanya akan dijatuhkan dan tidak ada yang memberi tahu Anda alasannya.

  • Memfilter paket keluar adalah sesuatu yang tidak jelas. Apakah Anda tidak percaya diri? Anda seharusnya tidak menjalankan program apa pun yang tidak dapat Anda percayai. Sistem operasi komoditas sebagian besar tidak mampu mengisolasi program ini dari menguping atau bahkan memanipulasi data program lain (mis., Serangan waktu cache)

  • Anda memerlukan paket BARU untuk memiliki SYN. Ini akan pecah jika koneksi TCP diteruskan setelah masing-masing negara bagian di iptables telah kehabisan waktu. Tidak yakin apa batas waktu defaultnya, tetapi beberapa netfilter memperingatkan tentang hal itu.

Jadi, kapan seharusnya sebuah desktop memiliki firewall?

  • Jika ada serangan spesifik dalam berita yang rentan terhadap OS atau server Anda, dan salah satu perbaikan cepat yang disarankan adalah aturan firewall.

  • Anda harus menjalankan layanan tertentu yang tidak memungkinkan konfigurasi aman. Sebagian besar melakukannya, dan sisanya digantikan oleh alternatif yang aman.

  • Anda memiliki jaringan yang lebih kompleks dengan beberapa VM dan/atau antarmuka di desktop Anda.

Alat pertama dan terpenting untuk keamanan jaringan Anda adalah pembaruan sistem. Kedua, ada netstat dan nmap, yang harus Anda gunakan untuk menemukan dan mengkonfirmasi layanan apa yang Anda jalankan. Kemudian cukup nonaktifkan yang tidak Anda butuhkan atau batasi mereka ke 127.0.0.1.

Bonus jika Anda membaca sejauh ini: Paket baik DIDIRIKAN, TERKAIT, atau BARU, segala sesuatu yang Anda jatuhkan. Anda juga menjatuhkan BARU kecuali hanya SYN yang ditetapkan. Sejak ESTABLISHED, RELATED tampaknya memeriksa flag, ini membuat semua aturan --tcp-flags dan juga aturan-f redundan. Sama untuk OUTPUT, tetapi karena tidak ada paket yang DITERIMA untuk OUTPUT, itu mungkin tidak masalah.

22
pepe

Saya akan berhati-hati dalam membuat bagian ini dari aturan yang sama untuk perangkat di dalam jaringan tepercaya dan yang ada di DMZ. Dengan menggunakan aturan yang telah Anda tetapkan di sana, Anda tidak akan menanggapi permintaan server DHCP (gema ICMP) jika IP Anda digunakan. Ini dapat menyebabkan situasi alamat duplikat.

Saya akan membuat dua set aturan berbeda untuk diterapkan pada setiap skenario, sesuatu seperti apa yang tercantum di atas adalah baseline yang baik untuk mesin DMZ, tetapi menciptakan beberapa tantangan pada LAN yang khas.

Saya juga akan merekomendasikan menambahkan logging ke Mars, drop out, koneksi drop masuk dll. Ini bisa sangat penting untuk pemecahan masalah dan bisa menjadi data yang lebih berguna untuk makan SIEM Anda.

6
Ori

Untuk PC klien, yang terhubung langsung ke internet melalui ppp, aturan berikut adalah awal yang baik:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -j REJECT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
ip6tables -A INPUT -j REJECT
  1. Ini memungkinkan semua yang ada di antarmuka lokal internal.
  2. Ini memungkinkan setiap paket yang merupakan jawaban untuk paket yang Anda kirim. Ini termasuk paket dalam koneksi TCP, jawaban untuk paket UDP seperti permintaan DNS kecil. Untuk protokol FTP tidak terenkripsi gaya lama, ini termasuk koneksi data, dengan asumsi ip_conntrack_ftp dimuat
  3. Tolak semua percobaan untuk membuka koneksi tcp dari luar
  4. Tolak semua paket udp awal (non jawaban).

Atau Anda dapat menggunakan -j DROP dalam dua aturan terakhir. Untuk diskusi tentang topik ini, lihat Tolak paket IP dengan kesalahan ICMP, atau cukup taruh saja?

5

Jadi untuk menguraikan pertanyaan Anda, inilah yang telah saya jalankan (dan saya akan menggunakan contoh Anda dengan catatan, karena saya cukup banyak komentar yang telah dibawa ke net fliter sejak IPCHAINS meninggal bertahun-tahun yang lalu.)

Ini bisa bekerja untuk sistem internal, tetapi Anda akan sering menghabiskan waktu mengkonfigurasi iptables Anda untuk aplikasi baru yang tidak diperhitungkan. Saya juga menghapus aturan SSH saya, tapi itu standar yang cukup Anda akan lihat (dan dalam banyak konfigurasi satu-satunya yang Anda lihat akan mengizinkan input.)

###############
# VARIABLE DEFINITIONS
IPTABLES=/sbin/iptables

#Your DHCP Server for input of ICMP packets
DHCPSERVER=127.0.0.1
PUBIF=eth0

# KERNEL PARAMETER CONFIGURATION
#
# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#
# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
#
# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
#
# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
#
# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#
# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward
###############
$IPTABLES -F
###############
# LOGDROPPER
$IPTABLES -N LOGNDROP > /dev/null 2> /dev/null 
$IPTABLES -F LOGNDROP 
$IPTABLES -A LOGNDROP -j LOG --log-prefix "LOGNDROP: " 
$IPTABLES -A LOGNDROP -j DROP

###############
# LO allowance
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

###############
# Only bring what you need to survive
$IPTABLES -A INPUT -p icmp -s $DHCPSERVER -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p tcp --sport 68 --dport 67 -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p udp --sport 68 --dport 67 -j ACCEPT
###############
# INPUT
#
# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j LOGNDROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOGNDROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j LOGNDROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j LOGNDROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j LOGNDROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -A INPUT -j LOGNDROP
$IPTABLES -A FORWARD -j LOGNDROP

Jika jaringan Anda berisik, atau ada banyak hal yang terjadi, ini akan mengisi volume log Anda dengan cepat. Tapi saya paranoid, dan juga memotong daging orang jika mereka membuat konfigurasi yang tidak perlu berisik.

4
Ori