
Serangkaian artikel berjudul Membangun NAS Aman . Oleh karena itu, artikel ini akan mempertimbangkan peningkatan tingkat keamanan. Juga, alat-alat yang belum saya gunakan, tetapi dimungkinkan untuk diterapkan, akan dijelaskan.
Siapa dan bagaimana?
Siapa yang akan menyerang sistem dan bagaimana dia akan melakukannya?
Ini biasanya pertanyaan pertama yang perlu dijawab sebelum berbicara tentang keamanan.
Setidaknya dalam kasus NAS, jawaban seperti itu sudah tersirat. Tetapi untuk sepenuhnya menjawab pertanyaan ini, model ancaman dan model penyusup sedang dibangun.
Perusahaan memulai fase pemodelan ancaman dalam siklus pengembangan mereka.
Microsoft memiliki SDL untuk ini, orang punya model lain .
Mereka menyiratkan penggunaan teknik-teknik tertentu, seperti STRIDE atau DREAD (STRIDE masih lebih umum dan didukung dengan baik secara instrumental).
Dalam STRIDE, misalnya, model dibangun di atas aliran data dan biasanya besar, berat, dan kurang dipahami. Namun demikian, alat ini menyediakan daftar ancaman potensial, yang memfasilitasi pertimbangan mereka.
Model ancaman adalah informasi rahasia karena memudahkan penyerang untuk menganalisis sistem dan menemukan kelemahan. Jika dia menerima model, dia tidak perlu membangunnya sendiri, karena analis sudah mengurus semuanya.
Itu satu menit iklan.

Inilah cara perusahaan serius membangun model. Dan jika ini menarik, saya bisa menjelaskannya dalam artikel terpisah.
Di sini saya akan menjelaskan apa yang disebut "pengerasan" dalam bahasa Inggris dan akan berurusan dengan kelemahan keamanan yang dibuat selama pembangunan sistem.
Pada dasarnya, menjaga keamanan pada level ini dilakukan dengan menutup kerentanan sistem yang diketahui, memonitornya dan secara berkala memeriksanya.
Sastra terkait
Apa yang harus dibaca:
Snapshots dan Docker
Sebelumnya, zfs-autosnapshot diinstal. Dia berulang kali membantu saya, karena Saya dapat mengembalikan konfigurasi yang rusak (untuk Nextcloud, misalnya) dari snapshot.
Namun, seiring berjalannya waktu, sistem mulai melambat, dan beberapa ribu snapshot berlipat ganda.
com.sun:auto-snapshot=false
saat membuat sistem file induk untuk kontainer, saya lupa mengatur flag com.sun:auto-snapshot=false
.
Dalam artikel asli, masalah ini sudah diperbaiki, di sini saya akan menunjukkan cara menyingkirkan snapshot tambahan.
Detail tentang cara memperbaiki kesalahan.Pertama, matikan zfs-auto-snapshot pada sistem file induk buruh pelabuhan:
zfs set com.sun:auto-snapshot=false tank0/docker/lib
Sekarang hapus wadah dan gambar yang tidak digunakan:
docker container prune docker image prune
Hapus foto:
zfs list -t snapshot -o name -S creation | grep -e ".*docker/lib.*@zfs-auto-snap" | tail -n +1500 | xargs -n 1 zfs destroy -vr
Dan matikan pada semua sistem file gambar:
zfs list -t filesystem -o name -S creation | grep -e "tank0/docker/lib" | xargs -n 1 zfs set com.sun:auto-snapshot=false
Lebih detail bisa dibaca di sini .
LDAP
Terakhir kali, hanya satu pengguna LDAP dengan peran administrator dibuat.
Tetapi sebagian besar layanan tidak perlu mengubah apa pun di basis data pengguna. Karenanya, alangkah baiknya menambahkan pengguna hanya-baca. Agar tidak membuat peran secara manual, dimungkinkan untuk menggunakan skrip inisialisasi wadah.
Pertama, tambahkan pengaturan di docker-compose.yml
untuk mengaktifkan pengguna read-only:
- "LDAP_READONLY_USER=true" - "LDAP_READONLY_USER_USERNAME=readonly" - "LDAP_READONLY_USER_PASSWORD=READONLY_PASSWORD"
File lengkap di bawah spoiler.
docker-compose.yml version: "2" networks: ldap: docker0: external: name: docker0 services: open-ldap: image: "osixia/openldap" hostname: "open-ldap" restart: always environment: - "LDAP_ORGANISATION=NAS" - "LDAP_DOMAIN=nas.nas" - "LDAP_ADMIN_PASSWORD=ADMIN_PASSWORD" - "LDAP_CONFIG_PASSWORD=CONFIG_PASSWORD" - "LDAP_READONLY_USER=true" - "LDAP_READONLY_USER_USERNAME=readonly" - "LDAP_READONLY_USER_PASSWORD=READONLY_PASSWORD" - "LDAP_TLS=true" - "LDAP_TLS_ENFORCE=false" - "LDAP_TLS_CRT_FILENAME=ldap_server.crt" - "LDAP_TLS_KEY_FILENAME=ldap_server.key" - "LDAP_TLS_CA_CRT_FILENAME=ldap_server.crt" volumes: - ./certs:/container/service/slapd/assets/certs - ./ldap_data/var/lib:/var/lib/ldap - ./ldap_data/etc/ldap/slapd.d:/etc/ldap/slapd.d networks: - ldap ports: - 172.21.0.1:389:389 - 172.21.0.1:636:636 phpldapadmin: image: "osixia/phpldapadmin:0.7.1" hostname: "nas.nas" restart: always networks: - ldap - docker0 expose: - 443 links: - open-ldap:open-ldap-server volumes: - ./certs:/container/service/phpldapadmin/assets/apache2/certs environment: - VIRTUAL_HOST=ldap.* - VIRTUAL_PORT=443 - VIRTUAL_PROTO=https - CERT_NAME=NAS.cloudns.cc - "PHPLDAPADMIN_LDAP_HOSTS=open-ldap-server" #- "PHPLDAPADMIN_HTTPS=false" - "PHPLDAPADMIN_HTTPS_CRT_FILENAME=certs/ldap_server.crt" - "PHPLDAPADMIN_HTTPS_KEY_FILENAME=private/ldap_server.key" - "PHPLDAPADMIN_HTTPS_CA_CRT_FILENAME=certs/ldap_server.crt" - "PHPLDAPADMIN_LDAP_CLIENT_TLS_REQCERT=allow" ldap-ssp: image: openfrontier/ldap-ssp:https volumes: - /etc/ssl/certs/ssl-cert-snakeoil.pem:/etc/ssl/certs/ssl-cert-snakeoil.pem - /etc/ssl/private/ssl-cert-snakeoil.key:/etc/ssl/private/ssl-cert-snakeoil.key restart: always networks: - ldap - docker0 expose: - 80 links: - open-ldap:open-ldap-server environment: - VIRTUAL_HOST=ssp.* - VIRTUAL_PORT=80 - VIRTUAL_PROTO=http - CERT_NAME=NAS.cloudns.cc - "LDAP_URL=ldap://open-ldap-server:389" - "LDAP_BINDDN=cn=admin,dc=nas,dc=nas" - "LDAP_BINDPW=ADMIN_PASSWORD" - "LDAP_BASE=ou=users,dc=nas,dc=nas" - "MAIL_FROM=admin@nas.nas" - "PWD_MIN_LENGTH=8" - "PWD_MIN_LOWER=3" - "PWD_MIN_DIGIT=2" - "SMTP_HOST=" - "SMTP_USER=" - "SMTP_PASS="
Kemudian, Anda perlu membuang dan menghapus:
$ cd /tank0/docker/services/ldap $ tar czf ~/ldap_backup.tgz . $ ldapsearch -Wx -D "cn=admin,dc=nas,dc=nas" -b "dc=nas,dc=nas" -H ldap://172.21.0.1 -LLL > ldap_dump.ldif $ docker-compose down $ rm -rf ldap_data $ docker-compose up -d
Untuk mencegah server memulihkan dari dump dari bersumpah pada elemen duplikat, hapus baris dalam file:
dn: dc=nas,dc=nas objectClass: top objectClass: dcObject objectClass: organization o: NAS dc: nas dn: cn=admin,dc=nas,dc=nas objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword:: PASSWORD_BASE64
Dan kembalikan pengguna dan grup:
$ ldapadd -Wx -D "cn=admin,dc=nas,dc=nas" -H ldap://172.21.0.1 -f ldap_dump.ldif
Binatang seperti itu akan muncul di basis data:
dn: cn=readonly,dc=nas,dc=nas cn: readonly objectClass: simpleSecurityObject objectClass: organizationalRole userPassword:: PASSWORD_BASE64 description: LDAP read only user
Peran dalam konfigurasi server LDAP untuk itu akan dibuat oleh wadah.
Lakukan pemeriksaan setelah pemulihan dan hapus cadangan:
$ rm ~/ldap_backup.tgz
Menambahkan Grup ke LDAP
Nyaman adalah pemisahan pengguna LDAP menjadi grup yang mirip dengan grup POSIX di Linux.
Misalnya, dimungkinkan untuk membuat grup yang penggunanya akan memiliki akses ke repositori, akses ke cloud, atau akses ke perpustakaan.
Grup mudah ditambahkan ke phpLDAPAdmin, dan saya tidak akan fokus pada ini.
Saya perhatikan hanya yang berikut ini:
- Grup dibuat dari templat "Default". Ini bukan grup POSIX , tetapi sekelompok nama.
- Oleh karena itu, grup memiliki atribut
objectClass
yang menyertakan nilai groupOfUniqueNames
.

Docker
Di Docker, hampir semuanya telah dilakukan untuk Anda.
Secara default, ini menggunakan pembatasan panggilan sistem , yang termasuk dalam kernel OMV:
# grep SECCOMP /boot/config-4.16.0-0.bpo.2-amd64 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP_FILTER=y CONFIG_SECCOMP=y
Di sini Anda dapat membaca tentang aturan keamanan Docker dasar secara lebih rinci.
Juga, jika AppArmor diaktifkan, Docker dapat berintegrasi dengannya dan meneruskan profilnya ke wadah .
Jaringan
Hilangkan Discovery OS
Jaringan terletak di belakang router, tetapi dimungkinkan untuk melakukan latihan yang aneh dengan mengubah beberapa parameter tumpukan jaringan sehingga OS tidak dapat diidentifikasi oleh jawaban.
Ada sedikit manfaat nyata dari ini, karena penyerang akan mempelajari spanduk layanan dan masih mengerti OS apa yang Anda gunakan.
Nmap menunjukkan OS mana yang berjalan pada perangkat. # nmap -O localhost Starting Nmap 7.40 ( https://nmap.org ) at 2018-08-26 14:39 MSK Nmap scan report for localhost (127.0.0.1) Host is up (0.000015s latency). Other addresses for localhost (not scanned): ::1 Not shown: 992 closed ports PORT STATE SERVICE 53/tcp open domain 80/tcp open http 443/tcp open https 5432/tcp open postgresql Device type: general purpose Running: Linux 3.X|4.X OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 OS details: Linux 3.8 - 4.6 Network Distance: 0 hops OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 4.07 seconds
Unduh pengaturan dari sysctl.conf:
# sysctl -p /etc/sysctl.conf net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 net.ipv4.tcp_rfc1337 = 1 net.ipv4.ip_default_ttl = 128 net.ipv4.icmp_ratelimit = 900 net.ipv4.tcp_synack_retries = 7 net.ipv4.tcp_syn_retries = 7 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_timestamps = 1
Jadi ...
Nmap tidak dapat menentukan OS. # nmap -O localhost Starting Nmap 7.40 ( https://nmap.org ) at 2018-08-26 14:40 MSK Nmap scan report for localhost (127.0.0.1) Host is up (0.000026s latency). Other addresses for localhost (not scanned): ::1 Not shown: 992 closed ports PORT STATE SERVICE 53/tcp open domain 80/tcp open http 443/tcp open https 5432/tcp open postgresql No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ). TCP/IP fingerprint: OS:SCAN(V=7.40%E=4%D=8/26%OT=53%CT=1%CU=43022%PV=N%DS=0%DC=L%G=Y%TM=5B8291C OS:3%P=x86_64-pc-linux-gnu)SEQ(SP=FA%GCD=1%ISR=105%TI=Z%CI=I%TS=8)OPS(O1=MF OS:FD7ST11NW7%O2=MFFD7ST11NW7%O3=MFFD7NNT11NW7%O4=MFFD7ST11NW7%O5=MFFD7ST11 OS:NW7%O6=MFFD7ST11)WIN(W1=AAAA%W2=AAAA%W3=AAAA%W4=AAAA%W5=AAAA%W6=AAAA)ECN OS:(R=Y%DF=Y%T=80%W=AAAA%O=MFFD7NNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=80%S=O%A=S+%F= OS:AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=80%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5( OS:R=Y%DF=Y%T=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=80%W=0%S=A%A=Z% OS:F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N OS:%T=80%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=80%C OS:D=S) Network Distance: 0 hops OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 19.52 seconds
Pengaturan ini perlu ditulis dalam /etc/sysctl.conf
, maka pada setiap reboot mereka akan dibaca secara otomatis.
Penuh /etc/sysctl.conf ################################################################### # Additional settings - these settings can improve the network # security of the host and prevent against some network attacks # including spoofing attacks and man in the middle attacks through # redirection. Some network environments, however, require that these # settings are disabled so review and enable them as needed. # # Do not accept ICMP redirects (prevent MITM attacks) net.ipv4.conf.default.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 # _or_ # Accept ICMP redirects only for gateways listed in our default # gateway list (enabled by default) # net.ipv4.conf.all.secure_redirects = 1 # # Do not send ICMP redirects (we are not a router) net.ipv4.conf.all.send_redirects = 0 # # Do not accept IP source route packets (we are not a router) net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 ## protect against tcp time-wait assassination hazards ## drop RST packets for sockets in the time-wait state ## (not widely supported outside of linux, but conforms to RFC) net.ipv4.tcp_rfc1337 = 1 # # Log Martian Packets #net.ipv4.conf.all.log_martians = 1 # ################################################################### # Magic system request Key # 0=disable, 1=enable all # Debian kernels have this set to 0 (disable the key) # See https://www.kernel.org/doc/Documentation/sysrq.txt # for what other values do #kernel.sysrq=1 ################################################################### # Protected links # # Protects against creating or following links under certain conditions # Debian kernels have both set to 1 (restricted) # See https://www.kernel.org/doc/Documentation/sysctl/fs.txt #fs.protected_hardlinks=0 #fs.protected_symlinks=0 vm.overcommit_memory = 1 vm.swappiness = 10 ################################################################### # Anti-fingerprinting. # # Def: 64. net.ipv4.ip_default_ttl = 128 # ICMP ( 1000) net.ipv4.icmp_ratelimit = 900 # , . # Def: 5. net.ipv4.tcp_synack_retries = 7 # Def: 5. net.ipv4.tcp_syn_retries = 7 # TCP window timespamp 1323. net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_timestamps = 1 # Redis requirement. net.core.somaxconn = 511
Perlindungan terhadap pendefinisian versi layanan lebih bermanfaat, di mana penyerang juga dapat menggunakan Nmap:
# nmap -sV -sR --allports --version-trace 127.0.0.1
Hasilnya tidak terlalu bagus untuk sistem. Not shown: 991 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u3 (protocol 2.0) 25/tcp open smtp Postfix smtpd 80/tcp open http nginx 1.13.12 111/tcp open rpcbind 2-4 (RPC #100000) 139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 443/tcp open ssl/http nginx 1.13.12 445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 3493/tcp open nut Network UPS Tools upsd 8000/tcp open http Icecast streaming media server 2.4.2 Service Info: Hosts: nas.localdomain, NAS; OS: Linux; CPE: cpe:/o:linux:linux_kernel Final times for host: srtt: 22 rttvar: 1 to: 100000
Tetapi dengan penyamaran layanan, tidak semuanya lancar:
- Untuk setiap layanan, diperlukan pendekatan individual di sini.
- Kemampuan untuk menghapus versi tidak selalu tersedia.
Sebagai contoh, untuk SSH dimungkinkan untuk menambahkan opsi DebianBanner no
ke /etc/ssh/sshd_confg
.
Sebagai hasilnya:
22/tcp open ssh OpenSSH 7.4p1 (protocol 2.0)
Lebih baik, sayangnya, itu tidak akan berfungsi: versi ini digunakan oleh SSH untuk menetapkan fitur mana yang didukung, dan mengubahnya hanya mungkin dengan menambal server .
Mengetuk port
Bukan teknik keamanan yang paling terkenal, memungkinkan pengguna jarak jauh yang tahu rahasia untuk terhubung ke port tertutup.
Pekerjaannya menyerupai kunci kode : semua orang tahu bahwa daemon layanan bekerja di server, tetapi "mereka tidak ada di sana" sampai kode diputar.
Misalnya, untuk terhubung ke server SSH, pengguna perlu mengetuk port UDP 7000, TCP 7007, dan UDP 7777.
Setelah itu, dengan IP-nya, firewall akan memulai pada port TCP yang tertutup 22.
Anda dapat membaca lebih lanjut tentang cara kerjanya di sini . Dan dalam manual untuk Debian .
Saya tidak merekomendasikan menggunakan, sebagai fail2ban biasanya cukup.
Firewall
Saya mengkonfigurasi firewall melalui Web GUI OpenMediaVault, yang saya rekomendasikan kepada Anda.

Buka port yang diperlukan, seperti 443 dan 22, sisanya sesuai selera. Juga disarankan untuk mengaktifkan logging paket yang dijatuhkan.
Ssh
Jika SSH hang pada port 22, yang terbuka untuk Internet, Anda akan menerima banyak pesan menarik ... # grep "invalid user" /var/log/auth.log|head Aug 26 00:07:57 nas sshd[29786]: input_userauth_request: invalid user test [preauth] Aug 26 00:07:59 nas sshd[29786]: Failed password for invalid user test from 185.143.160.137 port 51268 ssh2 Aug 26 00:11:01 nas sshd[5641]: input_userauth_request: invalid user 0 [preauth] Aug 26 00:11:01 nas sshd[5641]: Failed none for invalid user 0 from 5.188.10.180 port 49025 ssh2 Aug 26 00:11:04 nas sshd[5644]: input_userauth_request: invalid user 0101 [preauth] Aug 26 00:11:06 nas sshd[5644]: Failed password for invalid user 0101 from 5.188.10.180 port 59867 ssh2 Aug 26 00:32:55 nas sshd[20367]: input_userauth_request: invalid user ftp [preauth] Aug 26 00:32:56 nas sshd[20367]: Failed password for invalid user ftp from 5.188.10.144 port 47981 ssh2 Aug 26 00:32:57 nas sshd[20495]: input_userauth_request: invalid user guest [preauth] Aug 26 00:32:59 nas sshd[20495]: Failed password for invalid user guest from 5.188.10.144 port 34202 ssh2
Dengan risiko tampak sepele, saya masih ingat bahwa itu diperlukan:
- Sangat melarang login root.
- Batasi login hanya untuk pengguna tertentu.
- Ubah port menjadi non-standar.
- Dianjurkan untuk menonaktifkan otentikasi kata sandi, hanya menyisakan kunci.
Baca lebih lanjut adalah mungkin, misalnya di sini .
Semua ini mudah dilakukan dari antarmuka OpenMediaVault melalui menu "Layanan -> SSH".
Kecuali bahwa saya tidak mengubah port ke non-standar, meninggalkan 22 di jaringan lokal dan hanya mengganti port di router NAT.
Berikut adalah daftar akun yang menarik yang saya coba kompilasi, sampai saya mengubah port SSHD ke yang berbeda dari 22. # grep "invalid user" /var/log/auth.log|sed 's/.*invalid user \([^ ]*\) .*/\1/'|sort|uniq 0 0101 1234 22 admin ADMIN administrateur administrator admins alfred amanda amber Anonymous apache avahi backup@network bcnas benjamin bin cacti callcenter camera cang castis charlotte clamav client cristina cron CSG cvsuser cyrus david db2inst1 debian debug default denis elvira erik fabio fax ftp ftpuser gary gast GEN2 guest I2b2workdata2 incoming jboss john juan matilda max mia miner muhammad mysql nagios nginx noc office oliver operator oracle osmc pavel pi pmd postgres PROCAL prueba RSCS sales sales1 scaner selena student07 sunos support sybase sysadmin teamspeak telecomadmin test test1 test2 test3 test7 tirocu token tomcat tplink ubnt ubuntu user1 vagrant victor volition www-data xghwzp xxx zabbix zimbra
Setelah ini selesai, upaya login tanpa izin akan dilakukan jauh lebih jarang.
Untuk lebih memperbaiki situasi, dimungkinkan untuk memblokir penyerang dari IP tertentu setelah beberapa upaya login.
Apa yang bisa digunakan untuk:
- Fail2ban . Utilitas populer yang bekerja tidak hanya untuk SSH, tetapi juga untuk banyak aplikasi lainnya.
- Tolak host Sepertinya fail2ban.
- Sshguard , jika Anda mau, Anda bisa mencoba menggunakannya, tetapi saya tidak tertarik secara detail.
Saya menggunakan fail2ban. Ini akan memantau log untuk berbagai tindakan yang tidak diinginkan pada bagian IP tertentu, dan mencekalnya jika jumlah respons terlampaui:
/var/log/fail2ban.log. 2018-08-29 21:17:25,351 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.144 2018-08-29 21:17:25,473 fail2ban.actions [8650]: NOTICE [sshd] Ban 5.188.10.144 2018-08-29 21:17:27,359 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.144 2018-08-29 21:28:13,128 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.176 2018-08-29 21:28:13,132 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.176 2018-08-29 21:28:15,137 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.176 2018-08-29 21:28:20,145 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.176 2018-08-29 21:28:25,153 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.176 2018-08-29 21:28:25,421 fail2ban.actions [8650]: NOTICE [sshd] Ban 5.188.10.176 2018-08-29 21:30:05,272 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.180 2018-08-29 21:30:05,274 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.180 2018-08-29 21:30:13,285 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.180 2018-08-29 21:30:13,286 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.180 2018-08-29 21:30:15,289 fail2ban.filter [8650]: INFO [sshd] Found 5.188.10.180 2018-08-29 21:30:15,803 fail2ban.actions [8650]: NOTICE [sshd] Ban 5.188.10.180
Larangan dibuat dengan menambahkan aturan firewall. Setelah waktu yang ditentukan, aturan dihapus, dan pengguna dapat kembali mencoba masuk.
Awalnya, hanya SSH yang dihidupkan, tetapi dimungkinkan untuk memungkinkan kontrol log dari server Web dan layanan lainnya, setidaknya dari OMV yang sama .
Dan juga, ambil log dari wadah dan atur fail2ban juga.
Saya sarankan menambahkan layanan secukupnya.
Anda dapat membaca lebih lanjut tentang konfigurasi, misalnya, di sini atau di Wiki asli .
Log
Utilitas kecil yang harus diinstal untuk kenyamanan. Ini akan menyorot log dan menunjukkannya dalam bentuk yang indah.
Dimungkinkan untuk menggunakan utilitas semacam itu , yang utama adalah bahwa kesalahan dan area masalah log disorot sehingga analisis visual mereka difasilitasi.
Sebaiknya instal dan konfigurasikan centang log hanya agar ketika Anda mengidentifikasi masalah konfigurasi yang dilaporkan dalam log, Anda segera melihat ini dalam surat.
Ini membantu banyak untuk melihat apa yang salah, meskipun itu memerlukan penyetelan.
Instalasi:
# apt-get install logcheck
Segera setelah instalasi, ia akan mengirim laporan.
Laporkan contoh. System Events =-=-=-=-=-=-= Oct 2 02:02:15 nas kernel: [793847.981226] [DROPPED] IN=br-ce OUT= PHYSIN=veth6c2a68e MAC=ff:ff:ff:ff:ff:ff: SRC=172.22.0.11 DST=255.255.255.255 LEN=29 TOS=0x00 PREC=0x00 TTL=64 ID=40170 DF PROTO=UDP SPT=35623 DPT=35622 LEN=9 Oct 2 02:02:20 nas hddtemp[13791]: /dev/sdh: Micron_1100 N #020Ђ: 32 C Oct 2 02:02:37 nas kernel: [793869.247128] [DROPPED] IN=br-7ba OUT= MAC= SRC=172.31.0.1 DST=172.31.255.255 LEN=239 TOS=0x00 PREC=0x00 TTL=128 ID=23017 DF PROTO=UDP SPT=138 DPT=138 LEN=219 Oct 2 02:02:37 nas kernel: [793869.247174] [DROPPED] IN=br-7ba OUT= MAC= SRC=172.31.0.1 DST=172.31.255.255 LEN=232 TOS=0x00 PREC=0x00 TTL=128 ID=23018 DF PROTO=UDP SPT=138 DPT=138 LEN=212 Oct 2 02:02:37 nas kernel: [793869.247195] [DROPPED] IN=br-673 OUT= MAC= SRC=192.168.224.1 DST=192.168.239.255 LEN=239 TOS=0x00 PREC=0x00 TTL=128 ID=8959 DF PROTO=UDP SPT=138 DPT=138 LEN=219 Oct 2 02:02:37 nas kernel: [793869.247203] [DROPPED] IN=br-673 OUT= MAC= SRC=192.168.224.1 DST=192.168.239.255 LEN=232 TOS=0x00 PREC=0x00 TTL=128 ID=8960 DF PROTO=UDP SPT=138 DPT=138 LEN=212 Oct 2 02:02:50 nas hddtemp[13791]: /dev/sdh: Micron_1100 N #020Ђ: 32 C
Dapat dilihat bahwa ada banyak berlebihan, dan penyetelan lebih lanjut akan turun untuk menyaringnya.
Pertama, matikan hddtemp, yang tidak berfungsi dengan benar karena karakter non-ASCII dalam nama SSD.
Setelah memperbaiki file hddtemp, pesan berhenti datang:
/etc/logcheck/ignore.d.server/hddtemp ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ hddtemp\[[0-9]+\]: /dev/([hs]d[az]|sg[0-9]):.*[0-9]+.*[CF] ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ hddtemp\[[0-9]+\]: /dev/([hs]d[az]|sg[0-9]):.*drive is sleeping
Lalu, dimungkinkan untuk melihat apa yang dikatakan logcheck memblokir lalu lintas siaran oleh firewall:
[793869.247128] [DROPPED] IN=br-7ba OUT= MAC= SRC=172.31.0.1 DST=172.31.255.255 LEN=239 TOS=0x00 PREC=0x00 TTL=128 ID=23017 DF PROTO=UDP SPT=138 DPT=138 LEN=219
Karena itu, Anda harus mengaktifkan lalu lintas siaran dari router dan kontainer:
- Port 35622 dari wadah dengan urbackup.
- Port 5678 dari router adalah penemuan tetangga RouterOS. Itu dapat dinonaktifkan pada router.
- Port 5353 ke alamat 224.0.0.251 adalah mDNS .
Periksa centang:
sudo -u logcheck logcheck -t -d
Akhirnya, masalah menjadi terlihat:
Oct 21 21:58:18 nas systemd[1]: Removed slice User Slice of user. Oct 21 21:58:31 nas systemd[1]: smbd.service: Unit cannot be reloaded because it is inactive. Oct 21 21:58:31 nas root: /etc/dhcp/dhclient-enter-hooks.d/samba returned non-zero exit status 1
Ternyata SAMBA tidak memulai. Memang, analisis menunjukkan bahwa saya menyamarkannya melalui systemctl, dan OMV berusaha memulainya.
Logcheck masih akan mengirim spam dengan berbagai pesan.
Di sini, misalnya, zfs-auto-snapshot berlalu:
Oct 21 22:00:57 nas zfs-auto-snap: @zfs-auto-snap_frequent-2018-10-21-1900, 16 created, 16 destroyed, 0 warnings.
Untuk mengabaikan:
/etc/logcheck/ignore.d.server/zfs-auto-snapshot ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ zfs-auto-snap: \@zfs-auto-snap_[[:alnum:]-]+, [0-9]+ created, [0-9]+ destroyed, 0 warnings.$
rrdcached juga di abaikan:
/etc/logcheck/ignore.d.server/rrdcached ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ rrdcached\[[0-9]+\]: flushing old values$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ rrdcached\[[0-9]+\]: rotating journals$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ rrdcached\[[0-9]+\]: started new journal [./[:alnum:]]+$ ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ rrdcached\[[0-9]+\]: removing old journal [./[:alnum:]]+$
Selain itu, disarankan untuk menghapus zed jika masih belum dihapus:
/etc/logcheck/ignore.d.server/zed ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (/usr/bin/)?zed: .*$ ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (/usr/bin/)?zed\[[0-9]+\]: .*$
Baik dan sebagainya. Banyak orang berpikir logcheck adalah utilitas yang sangat tidak berguna.
Ini benar jika Anda menggunakannya sebagai sesuatu yang Anda atur dan lupakan.
Namun demikian, jika Anda memahami bahwa centang log hanya filter log khusus, tanpa heuristik, sulap, dan algoritme adaptif, pertanyaan tentang perlunya tidak muncul. Pada dasarnya, menganalisis apa yang dia kirim dan, baik dengan menambahkannya untuk mengabaikan atau memperbaikinya, secara bertahap dimungkinkan untuk mendapatkan laporan yang informatif.
Menggunakan alat otomatis untuk analisis jauh lebih baik daripada menjalankan log melalui ekspresi reguler yang sama dengan tangan Anda, dan seringkali lebih baik daripada menggunakan sistem analisis data lengkap seperti Splunk.
Logcheck dan konfigurasinya dapat dibaca di Wiki Gentoo dan di sini .
IDS tingkat simpul
Di sini saya akan merujuk pada artikel saya sendiri "Analisis singkat solusi di bidang SOC dan pengembangan detektor anomali jaringan saraf dalam jaringan transmisi data" , di mana ada beberapa contoh.
Anda dapat membaca ulasan yang lebih lengkap dan perbandingan IDS serupa di Wiki .
Script yang kompleks dan besar untuk analisis statis celah yang diketahui dari RedHat.
Ada porta di Debian , yang saya sarankan unduh dan jalankan setidaknya sekali.
Contoh Operasi STIG-4 # cd root@nas:~# git clone https://github.com/hardenedlinux/STIG-4-Debian Cloning into 'STIG-4-Debian'... remote: Enumerating objects: 572, done. remote: Total 572 (delta 0), reused 0 (delta 0), pack-reused 572 Receiving objects: 100% (572/572), 634.37 KiB | 0 bytes/s, done. Resolving deltas: 100% (316/316), done. root@nas:~# cd STIG-4-Debian/ root@nas:~/STIG-4-Debian# bash stig-4-debian.sh -H Script Run: Mon Nov 12 23:58:34 MSK 2018 Start checking process... [ FAIL ] The cryptographic hash of system files and commands must match vendor values. ... Pass Count: 54 Failed Count: 137
Proses bekerja dengan skrip ini kira-kira sebagai berikut:
- Singkirkan skripnya.
- Cari di Internet setiap baris dengan
[ FAIL ]
. - Biasanya, tautan ke database online STIG akan ditemukan.
- Benar, mengikuti instruksi dalam database, membuat diskon pada fakta bahwa itu adalah Debian.
- Jalankan kembali skrip.
Terlalu banyak yang telah ditulis tentang RkHunter .
Digunakan untuk waktu yang lama, secara luas, masih berkembang. Ada repositori Debian.
Script shell modular yang melakukan audit sistem dan deteksi intrusi.
Ini agak mirip dengan STIG-4.
Itu dapat menggunakan utilitas pihak ketiga untuk menganalisis log, untuk mendeteksi pelanggaran checksum.
Terdiri dari sejumlah besar modul yang berbeda.
Misalnya, ada modul yang mendeteksi layanan yang menggunakan file yang dihapus, yang terjadi ketika pustaka yang digunakan oleh layanan diubah selama proses peningkatan sistem, tetapi layanan tidak dimulai ulang karena beberapa alasan.
Ada modul untuk mencari pengguna layanan yang tidak lagi digunakan, memeriksa sistem karena kurangnya patch keamanan, memeriksa umask, dll.
Lebih detail dalam pria .
Itu belum berkembang selama 10 tahun (ya, saya bukan satu-satunya yang meninggalkan perangkat lunak).
HIDS khas yang dapat:
- Periksa integritas seluruh sistem dengan hash kriptografi.
- Cari berbagai executable dengan SUID yang diinstal, yang seharusnya tidak diinstal.
- Mendeteksi proses tersembunyi.
- Masuk log dan basis data.
Plus, ia memiliki pemantauan terpusat dengan antarmuka Web dan pengiriman log terpusat ke server.
, .
.
, , . , , , , .
- HIDS: .
Samhain, .
, Samhain, Tripwire — .
, .
RkHunter .
, .
.
Tiger , , .
, . , , Lynix Tripwire.
. .
:
- , .
- .
- , latslog, wtmp utmp.
- , , .
.
Linux.
ninja-build.
, . UID/GID, Ninja , , (, , ).
(, su).
, .
Ubuntu , Debian.
. . , , , .
Nmap W3af Web-.
Linux ( ) .
. , .
, , , .
" Linux" IBM .
NAS , AppArmor.
, , .
, , , .
, .
, ZFS .
ACL ZFS.- Izin untuk menambahkan file baru ke direktori.
- Izin untuk membuat subdirektori dalam direktori.
- Izin untuk menghapus file.
- Izin untuk menghapus file atau direktori di dalam direktori.
- Izin untuk mengeksekusi file atau mencari isi direktori.
- Izin untuk membuat daftar isi direktori.
- Izin untuk membaca ACL (perintah ls).
- Izin untuk membaca atribut file dasar (selain ACL, atribut pada level perintah "stat").
- Izin untuk membaca konten file.
- Izin untuk membaca atribut file yang diperluas atau mencari direktori untuk atribut file yang diperluas.
- .
- .
- , , .
- ACL chmod.
- . chown chgrp .
- , . PRIV_FILE_CHOWN.
- ACL .
- ACL .
- ACL , , . ACL file_inherit, dir_inherit .
- ACL , .
ACL , , , . .
EXT , ZFS ACL setfacl/getfacl
, chmod
ls
.

.
, , exec
, , open
, exec
.
, .
AppArmor , .
, .
capabilites.
, . , , , .
ping. #include <tunables/global> profile ping /{usr/,}bin/ping flags=(complain) { #include <abstractions/base> #include <abstractions/consoles> #include <abstractions/nameservice> capability net_raw, capability setuid, network inet raw, network inet6 raw, /{,usr/}bin/ping mixr, /etc/modules.conf r, # Site-specific additions and overrides. See local/README for details. #include <local/bin.ping> }
, , .. . , , ( local/bin.ping
), , .
deb-based .
firejail , .
, , .
Debian, .

.
NSA , Debian .
SELinux " " (type enforcement).
, , , SELinux . "".
, , firefox_t
.
SELinux , .
Contoh:
allow firefox_t user_home_t : file { read write };
, , firefox_t
, , user_home_t
.
Contoh:
allow user_t user_home_t:file { create read write unlink };
user_t
, , user_home_t
. user_t
, , .
, .
AppArmor -, , , .
SELinux .- SELinux Linux. su sudo, SELinux . Linux SELinux , 1:1, root.
- , , . " ", "Web-", " ". ,
object_r
.
, . - . — , .
- . , , . ,
user_u:user_r:user_t
, user_u:object_r:user_home_t
. :
user:role:type:range
— SELinux user. — , . — MLS .
, , , user_home_t.
user_home_t
— , , .
- ,
dir
file
, , . , . , file
(create), (read), (write) (unlink), unix_stream_socket object
( UNIX) (create), (connect), (sendto).
, .
. , (, ), .
, AppArmor, permissive , , .
.
, , AppArmor .
SELinux .
.
IBM .
Debian - . , , .
, ( ), — Gentoo . : hardening .
, .
Debian , GrSecurity PaX.
Tomoyo Debian .
. AppArmor, . 2003 .
, , .
, AppArmor, .
/etc/securetty
, root ( ), .
PAM, /etc/security
.
, Samhain Tripwire, debsums , .
Kesimpulan
. , .
, Github , .