Secure SSH with Yubikey

https://developers.yubico.com/SSH/Securing_SSH_with_FIDO2.html
  • Install OpenSSH
  • ssh-keygen -t ed25519-sk -O resident -O verify-required -C "Your Comment"

– t : Specifies the type of key to create. We are using ed25519-sk

– 0 : Specify a key/value option.

resident : Indicate that the key handle should be stored on the FIDO authenticator itself.

verify-required : Indicate that this private key should require user verification for each signature.

  • Copy public key ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub user@host
  • And finally update SSH server
# Support public key cryptography (includes FIDO2)
PubkeyAuthentication yes
# Enforce User Verification
PubkeyAuthOptions verify-required
# Public keys location
AuthorizedKeysFile .ssh/authorized_keys
# Allow root only with MFA
PermitRootLogin prohibit-password
# Disable password authentication
PasswordAuthentication no
PermitEmptyPasswords no

Laravel – Different between instance vs bind

use ->bind() when you want to provide just a FQCN (full-qualified class name), or a factory closure, to instruct the container on how to lazily build an instance only when needed.
use ->instance()` when you already have an constructed instance and want to instruct the container to provide that particular instance when required.

Simple Bindings

We can register a binding using the bind method, passing the class or interface name that we wish to register along with a closure that returns an instance of the class

Binding Instances

You may also bind an existing object instance into the container using the instance method. The given instance will always be returned on subsequent calls into the container

HDMI version(s)

HDMI Forum

HDMI 2.0

  • Độ phân giải mở rộng: Mở rộng khả năng tương thích độ phân giải 4K (2160 px) của HDMI 1.4/1.4a để chấp nhận tốc độ khung hình 50 hoặc 60 hertz (tốc độ truyền tối đa 18Gbps với 8 bit màu).
  • Hỗ trợ định dạng âm thanh mở rộng: Có thể chấp nhận lên đến 32 kênh đồng thời, hỗ trợ các định dạng âm thanh vòm sống động, chẳng hạn như âm thanh Dolby AtmosDTS:X và Auro 3D.
  • Luồng video kép: Có thể gửi hai luồng video độc lập để xem trên cùng một màn hình.
  • 4 luồng âm thanh: Có thể gửi tối đa 4 luồng âm thanh riêng biệt cho nhiều người nghe.
  • Hỗ trợ tỷ lệ khung hình 21:9 (2,35:1).
  • Đồng bộ động các luồng video và âm thanh.
  • Mở rộng khả năng HDMI-CEC.
  • Nâng cao khả năng chống sao chép HDCP được gọi là HDCP 2.2.

New Intel NUC Skull Canyon for … nothing

Intel® NUC Kit NUC6i7KYK

Mua thêm 1 em Intel NUC để nghịch ngợm gì đó ( mà cũng chưa biết làm gì )

  • 6th Generation Intel® Core™ i7 Processors
  • 16GB DDR4 – 2133Mhz

Tính ra hiện tại đang dùng em nó cho Windows nhưng có lẽ không thật sự cần thiết. Em nó lại mạnh hơn i5-6400 hiện đang dùng làm selfhosted. Có nên đẩy selfhosted sang đây không ? Tiếc là không có HDD 2.5″ chỉ có NVMe Gen3 x 4 2 slots.

Grafana – Install Loki

A Loki-based logging stack consists of 3 components:

  • Promtail is the agent, responsible for gathering logs and sending them to Loki.
  • Loki is the main server, responsible for storing logs and processing queries.
  • Grafana for querying and displaying the logs.
wget https://github.com/grafana/loki/releases/download/v2.9.8/loki-linux-amd64.zip
chmod a+x loki-linux-amd64
sudo cp loki-linux-amd64 /usr/local/bin/loki
loki --version
  • Create Systemd service
sudo nano /etc/systemd/system/loki.service
[Unit]
Description=Loki is a log aggregation system designed to store and query logs from all your applications and infrastructure.
Document=https://github.com/grafana/loki/releases
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/loki -config.file /mnt/data/loki/loki-config.yaml
Restart=on-failure
RestartSec=10
StandardOutput=append:/mnt/data/loki/logs/loki.log
StandardError=append:/mnt/data/loki/logs/loki.log

[Install]
WantedBy=multi-user.target

# This is a complete configuration to deploy Loki backed by the filesystem.
# The index will be shipped to the storage via tsdb-shipper.

auth_enabled: false

server:
http_listen_port: 3100

common:
ring:
instance_addr: 127.0.0.1
kvstore:
store: inmemory
replication_factor: 1
path_prefix: /mnt/data/loki
storage:
filesystem:
chunks_directory: /mnt/data/loki/chunks
rules_directory: /mnt/data/loki/rules

schema_config:
configs:
- from: 2020-05-15
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h

storage_config:
filesystem:
directory: /mnt/data/loki/chunks

Grafana – Monitor các thiết bị

Ở các bài trước ta đã setup được cơ bản server cho web hosting, gatekeeper. Vậy post này ta setup Grafana trên `gatekeeper` để monitor các server(s).

Đầu tiên là install Grafana . Cái này quite simple chỉ cần follow up guide trên website của hãng là okay. By default Grafana sử dụng port 3000

Sau đó install Prometheus

  • Setup Group & User
sudo groupadd prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
  • Setup các directories cần thiết
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus

Directory “““/var/lib/prometheus sẽ dùng chứa data do đó suggest store trên HDD thay vì SSD chính để bảo toàn tuổi thọ cho SSD, cũng như không làm ảnh hưởng performance của SSD cho các việc khác liên quan tới OS.

Do đó trong case này mình chuyển về /mnt/data

sudo mkdir /mnt/data/prometheus

Latest version hiện tại là 2.52.02 / 2024-05-07

mkdir -p /tmp/prometheus
cd /tmp/prometheus
curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
tar xvf prometheus*.tar.gz
cd prometheus*/

Tiếp theo là cd vào directory vừa unzip ra và move binaries về “`/usr/local/bin

sudo mv prometheus /usr/local/bin
sudo mv promtool /usr/local/bin
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool

Sau đó tạo file config ( ở directory song song với data )

sudo mv consoles /etc/prometheus
sudo mv console_libraries /etc/prometheus
sudo mv prometheus.yml /etc/prometheus
  • Tạo Systemd Service
[Unit]
Description=Power your metrics and alerting with the leading open-source monitoring solution
Documentation=https://prometheus.io/
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/mnt/data/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=0.0.0.0:9090 \
--web.enable-lifecycle \
--log.level=info

[Install]
WantedBy=multi-user.target

https://prometheus.io/docs/prometheus/latest/command-line/prometheus

Chú ý thay đổi path phù hợp

Enable service khi boot và start

sudo systemctl daemon-reload
sudo systemctl enable prometheus.service
sudo systemctl start prometheus.service
sudo systemctl status prometheus.service

Như vậy là xong. Prometheus sẽ chạy ở port 9090

Thực tế https://prometheus.jooservices.com

Ở các bài tiếp theo sẽ setup tiếp các exporters / loki

Gatekeep server with Syslog-NG

Em gatekeep được hiểu như gác cổng của toàn bộ thiết bị sau đó, do đó nó cũng phải monitoring mọi thứ. Syslog-NG là một trong những services cần thiết

  • Router sẽ bắn syslog về
  • Core Switch cũng sẽ bắn syslog về
  • Cuối cùng là các AP cũng vậy
  • …. và bất kì thiết bị nào khác cũng sẽ tương tự

Sự khác biệt giữa syslog / syslog-ng & rsyslog

https://serverfault.com/questions/692309/what-is-the-difference-between-syslog-rsyslog-and-syslog-ng

Đầu tiên là phải enable UDP port 514 để nhận syslog từ ngoài vào. Mấy món này sẽ easily hơn với Webmin UI.

Vậy là SyslogNG đã ready. Tuy nhiên cần lưu ý kiểm port 514 UDP đã được enable ( most of case thì Webmin sẽ install luôn firewall và tất nhiên port này không được enabled )

Tuy nhiên log là thứ … write liên tục. Do đó giảm thiểu cái nào được ra khỏi SSD thì tốt bấy nhiêu.

  • Log sources : Các nguồn cung cấp logs . Ở đây mình đã thêm s_net
  • Log destination : Store logs vào đâu
  • Log filter : Lọc các logs
  • Và cuối cùng là kết hợp mọi thứ để tạo log : Log từ source nào – Filter thế nào & Save vào đâu