2024年4月28日 星期日

Eazy way to install OpenWrt

這個方法網路要通,直接抓 image 寫入硬碟
隨便找一片 Linux ISO 開到 rescue 模式
fdisk -l 看一下硬碟位置,如果是 /dev/sda

curl https://repo.jing.rocks/openwrt/releases/23.05.3/targets/x86/generic/openwrt-23.05.3-x86-generic-generic-ext4-combined.img.gz | zcat > /dev/sda

一行解決,然後重開就可以了
上面的網址是 Japan Mirror 的網址,其他可參考 OpenWrt Downloads

Codeit repo for EL8/EL9

Codeit repo 對 EL8/EL9 的支援到 2023 年底才支援
用這個 repo 的主要是要使用最新版的 Apache 或 nginx

dnf -y install https://repo.codeit.guru/codeit-repo-release.el8.rpm
or
dnf -y install https://repo.codeit.guru/codeit-repo-release.el9.rpm

dnf -y module reset httpd
dnf -y module enable httpd:codeit

若是從舊版升級上來,ssl error log 可能看到這樣的錯誤,服務起不來
AH01898: Unable to configure permitted SSL ciphers
SSL Library Error: error:0A0000B9:SSL routines::no cipher match


需要調整 ssl.conf 這兩行的設定
SSLCipherSuite "EECDH+AES128:EECDH+AES256:+SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RSA+3DES:!DSS"
SSLProxyCipherSuite "EECDH+AES128:EECDH+AES256:+SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RSA+3DES:!DSS"
原本是
SSLCipherSuite PROFILE=SYSTEM
SSLProxyCipherSuite PROFILE=SYSTEM

ref. CodeIT Technical blog

2024年4月21日 星期日

Stunnel

Stunnel 有點像 SSH tunnel,可以建立加密通道
原本未加密的協議,讓它走 Stunnel,就可以達到不改變協議,數據有加密的效果
以下用一個實例說明:

A 要 telnet B,IP 12.34.56.78,因 telnet 協議本身未加密,
若要讓 A 到 B 的傳輸數據加密,此時就可以用 Stunnel

建立憑證
cd /etc/stunnel
openssl req -new -x509 -days 9999 -nodes -out stunnel.pem -keyout stunnel.key
把 stunnel.pem 及 stunnel.key copy 到另一台

A 要配置 Stunnel client
/etc/stunnel/stunnel.conf 內容如下
cert = /etc/stunnel/stunnel.pem
key = /etc/stunnel/stunnel.key
client = yes

[telnet]
accept = 23
connect = 12.34.56.78:2323

B 要配置 Stunnel server
/etc/stunnel/stunnel.conf 內容如下
cert = /etc/stunnel/stunnel.pem
key = /etc/stunnel/stunnel.key
client = no

[telnet]
accept = 2323
connect = 127.0.0.1:23

配置後兩邊啟動服務
systemctl enable stunnel --now

在 A 就可以 telnet localhost (取代直連 telnet 12.34.56.78),
然後封包加密,送到 12.34.56.78:2323,
B 收到封包後解密,再送給 localhost:23

2024年4月16日 星期二

OpenVPN disconnect after 3.4.0

如果 OpenVPN 本來都連線正常,Server 也沒動,OpenVPN Client 升版到 3.4.0 以後的版本,就不能連了,
狀況是連上又斷線,一直重複 (repeat connect and disconnect)
我的環境 RouterOS 6.49.14 及 7.14.2 都遇到此狀況
很可能就是以下原因

OpenVPN Client 在 3.4.0 新增了一個功能 Security Level

Settings / ADVANCED SETTINGS (at bottom)



預設值是 Legacy
如果本來可以連,升版後不能連,把這邊改成 Insecure 可能就能連了
此功能將一些已不安全的協定禁用,若 Server 端暫時沒有新的支援,
Workaround 只能選 Insecure,不然就使用 3.3.7 版 ,意思一樣。

2024年4月4日 星期四

Chrome for Testing and Chromedriver

Chrome for Testing 這一頁,可以取得特定版本的 Chrome 來測試
本文主拿它在 Linux 上跑 Chromedriver,當作爬蟲用途,
它是真的執行瀏覽器來跑結果,所以只要是瀏覽器可以看得到的,都爬得到
環境是 Rocky Linux 9,使用預設 GDM

# 建立環境
cd /tmp
wget https://storage.googleapis.com/chrome-for-testing-public/123.0.6312.86/linux64/chrome-linux64.zip
wget https://storage.googleapis.com/chrome-for-testing-public/123.0.6312.86/linux64/chromedriver-linux64.zip
cd /usr/local
unzip /tmp/chrome-linux64.zip
unzip /tmp/chromedriver-linux64.zip
cd /usr/bin
ln -s /usr/local/chromedriver-linux64/chromedriver .
ln -s /usr/local/chrome-linux64/chrome .

# 建立 chromdriver 啟動腳本
echo '#!/bin/bash' > /usr/local/bin/chromedriver.sh
echo 'chromedriver --log-path=/dev/shm/chromedriver.log --verbose --append-log --readable-timestamp --whitelisted-ips >> /dev/shm/chromedriver.output 2>&1 &' >> /usr/local/bin/chromedriver.sh
chmod 755 /usr/local/bin/chromedriver.sh

# 設定 GDM 登入後啟動上面的腳本,這邊的 username 請代換成自己的登入名稱
echo '#!/bin/bash' > /etc/gdm/PostLogin/Default
echo 'export DISPLAY=:0' >> /etc/gdm/PostLogin/Default
echo 'su pank /usr/local/bin/chromedriver.sh > /dev/null &' >> /etc/gdm/PostLogin/Default
chmod 755 /etc/gdm/PostLogin/Default

# 設定 iptables 可以導到 Local Port,for 外部 call API 用
echo net.ipv4.conf.all.route_localnet=1 >> /etc/sysctl.conf
sysctl -p
iptables -t nat -A PREROUTING -p tcp --dport 9515 -j DNAT --to 127.0.0.1:9515

到這邊建立完成,已可以另一台電腦調用上面建立的 Chrome 資源,
這邊使用 php-webdriver 測試,抓取 Bing 的網頁

composer require php-webdriver/webdriver

<?php
require __DIR__."/vendor/autoload.php";
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\WebDriverExpectedCondition;
$serverUrl = 'http://192.168.1.10:9515';
$driver = RemoteWebDriver::create($serverUrl, DesiredCapabilities::chrome());
$driver->get('https://bing.com');
$driver->wait(10,200)->until(WebDriverExpectedCondition::titleIs('Bing'));
echo $driver->getPageSource();
$driver->quit();
?>

Eazy way to install OpenWrt

這個方法網路要通,直接抓 image 寫入硬碟 隨便找一片 Linux ISO 開到 rescue 模式 fdisk -l 看一下硬碟位置,如果是 /dev/sda curl https://repo.jing.rocks/openwrt/releases/23.05.3/tar...