- 投稿日:2021-01-07T23:59:20+09:00
透過Proxyを設定したら証明書なしに何故か動いちゃった話
こちらの投稿
Squid proxy - a short guide (forward & transparent proxy examples, SSL bumping, links to guides) -Reddit
などを参考にSquidで透過Proxyの設定をしたら,自己署名ルート証明書を追加せずに動いちゃった話です。環境
PC: ThinkPad T490 Arch Linux
認証付きProxy必須の環境
Azure上に構築したHTTP ProxyをSSHポートフォワーディングで持ってきている
create_apでWi-Fiを飛ばしていて,スマホはDronyを使いHTTP Proxy非対応のアプリもProxy経由で通信できるようにしている設定ファイルとか
proxy.server.jp:8080(仮)と0.0.0.0:8888を親に持つSquidの設定ファイル:
/etc/squid/squid.conf# # Recommended minimum configuration: # # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN) acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN) acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN) acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN) acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN) acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports # Only allow cachemgr access from localhost http_access allow localhost manager http_access deny manager on_unsupported_protocol tunnel all # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # cache_peer proxy.server.jp parent 8080 0 no-query no-netdb-exchange no-digest login=USER:PASS proxy-only cache_peer 0.0.0.0 parent 8888 0 no-query no-netdb-exchange no-digest default acl sorting time SMTWHF 1:00-6:00 acl blacklist dstdomain "/usr/local/etc/squid/blacklist" acl blog url_regex blog acl blacklist_day dstdomain "/usr/local/etc/squid/blacklist_day" acl status http_status !200 http_port 7080 intercept https_port 7443 intercept ssl-bump \ generate-host-certificates=on \ dynamic_cert_mem_cache_size=4MB \ cert=/etc/squid/cert/myCA.pem \ key=/etc/squid/cert/myCA.pem acl step1 at_step SslBump1 acl step2 at_step SslBump2 acl step3 at_step SslBump3 #ssl_bump peek step1 # <- enabling this breaks it ssl_bump stare step2 ssl_bump bump step3 # Uncommenting this may also break bumping. #ssl_bump bump all # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed http_access allow localnet http_access allow localhost http_access allow all # And finally deny all other access to this proxy http_access deny all # Squid normally listens to port 3128 http_port 3354 icp_port 0 # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/cache/squid 100 16 256 # Leave coredumps in the first cache dir coredump_dir /var/cache/squid # # Add any of your own refresh_pattern entries above these. # refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 # サブProxyがあれば設定 # ローカルネットワークセグメントには親プロキシを通さずダイレクトアクセス acl developersegments1 dst 192.168.0.0/24 always_direct allow developersegments1 never_direct allow all # キャッシュしない cache deny all #cache_peer_access proxy.server.jp deny sorting cache_peer_access proxy.server.jp deny blacklist sorting cache_peer_access proxy.server.jp deny blog sorting cache_peer_access proxy.server.jp deny blacklist_day cache_peer_access proxy.server.jp deny statusiptablesで追加した設定
ap0に端末(スマートフォン)が接続されているiptables -t nat -A PREROUTING -i ap0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 7080 iptables -t nat -A PREROUTING -i ap0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 7443理由
†原因究明中†
- 投稿日:2021-01-07T14:05:40+09:00
RaspberryPi 4 Model B で USBポートの電源をON/OFFする
やりたかったこと
ラズパイに接続したwebカメラで異常検出を行い、異常ケースでパトランプを回す、というようなことがしたかった。
(正確にはこれからやる予定)
色々調べた結果、USB連動で電源ON/OFFするのが、最も手軽&電子工作等しなくてもできそうだったのですが、懸念点がいくつか。
- 世の中にラズパイ4での記事が無い
- ラズパイ3ではUSBポートの親子関係?があり、色々面倒らしい
- 回避策としては、個別給電ON/OFFに対応している別のUSB-Hubを挟むといいらしい
やりたいことが「USBカメラ」を回して監視しつつ、「USB電源制御」で別の機器を動かしたい、というニーズなので、個別にON/OFFできないのは致命的…。
が、しかしラズパイ4ではUSB3.0ポートが搭載されたりとハードウェア的に大きく変わっているので、できるのでは…?
ということでやってみましたー。結論:できた
完全に個別でON/OFFできました!完全勝利!
用意したもの
- RaspberryPi 4 Model B
- USB接続のwebカメラ
- USB給電で動くガジェット(今回は適当なものがなかったのでそのへんに落ちてた有線マウス)
検証手順
- USBポートのうち1つにカメラを接続し、VedeoStreamを開いて表示
- の状態で残りのポートにUSB給電ガジェットを接続して、電源OFF
- VedeoStreamが止まらない=カメラへの給電が止まらないことを確認
- 以上をポート毎にぐるぐる検証
実際の手順
hub-ctrl導入
sudo apt-get install libusb-dev wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c gcc -O2 hub-ctrl.c -o hub-ctrl-armhf-static -lusb -static sudo cp hub-ctrl-armhf-static /usr/local/bin/hub-ctrlUSBポートの状態を確認
この場合。ポート2にカメラ、ポート4にマウスが刺さっている。
sudo lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 027: ID 05ac:0304 Apple, Inc. Mighty Mouse [Mitsumi, M1152] Bus 001 Device 026: ID 1e4e:0100 Cubeternet WebCam Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubUSB2.0と3.0で別々のrootを持っているらしいことが分かる。
sudo hub-ctrl -v Hub #0 at 002:001 INFO: ganged switching. WARN: Port indicators are NOT supported. Hub Port Status: Hub #1 at 001:002 INFO: ganged switching. Hub Port Status: Port 1: 0000.0100 power Port 2: 0000.0103 power enable connect Port 3: 0000.0100 power Port 4: 0000.0303 lowspeed power enable connect Hub #2 at 001:001 INFO: individual power switching. WARN: Port indicators are NOT supported. Hub Port Status: Port 1: 0000.0503 highspeed power enable connectHub #1がUSB関連、Hub #2がイーサネットらしい。
こっちでは結局USB2.0も3.0も同じHubに属している。
物理的配置はこんな感じ。
ラズパイ3ではPort2からだったのが1からになってるのがちょっといい感じ。LAN +---+ Port1 Port2(USB3.0) | | +---+ Port3 Port4(USB2.0)給電制御してみる
sudo hub-ctrl -b 1 -d 2 -P 4 -p 0 -v Hub Port Status: Hub #1 at 001:002 INFO: ganged switching. Hub Port Status: Port 1: 0000.0100 power Port 2: 0000.0103 power enable connect Port 3: 0000.0100 power Port 4: 0000.0303 lowspeed power enable connect Hub Port Status: Port 1: 0000.0503 highspeed power enable connect Send control message (REQUEST=1, FEATURE=8, INDEX=4) Hub Port Status: Port 1: 0000.0100 power Port 2: 0000.0103 power enable connect Port 3: 0000.0100 power Port 4: 0000.0000コマンドオプション
-b バスNo Hub #1 at 001:002の001の方 -d デバイスNo Hub #1 at 001:002の002の方 ※lsusbで出てくるDeviceは関係ない -P PortNo(USBポートの番号) -p 0:OFF 1:ON -v 詳細表示オプション(普段はつけなくて良い)参考記事
raspberry pi 3 b+とパトランプで遊ぶ - 不動産情報ボット
RaspberryPI 3 Model B で USBポートの電源をON/OFFする: パソコン鳥のブログ
- 投稿日:2021-01-07T13:21:33+09:00
samba纏め
サーバープロセス
サーバープロセス 説明 smbd ファイル共有、認証など nmbd ブラウジング機能、NetBIOS名前解決、WINSサーバーなど winbindd Winbind機能 ポート番号
ポート番号 説明 137/UDP NetBIOS名前解決やブラウジング 138/UDP NetBIOS名前解決やドメインログオン 139/TCP ファイル共有 445/TCP ファイル共有 smb.conf
globalセクション
- Samba全体に関わる設定を行います。
- 変更をした場合、Sambaの再起動が必要です。
- globalセクションで設定した項目が、以降のセクションで現れた場合は、設定が上書きされます。
パラメータ 説明 workgroup Sambaサーバーが、所属するワークグループ名もしくはドメイン名を指定します。 server role Sambaサーバーの動作モードを指定します。 netbios name SambaサーバーのNetBIOS名を指定する。 server string サーバの名前など説明を記述する。 hosts allow 接続を許可すホストを指定する。(指定しなかったホストは拒否される。) guest account アカウントが存在しないユーザーにGuestとしてアクセスする場合に利用する。 map to guest Sambaユーザーとして認証できなかった場合の動作を指定する。
Never : ゲスト認証を許可しない。
Bad User : 存在しないユーザーを指定された場合は、ゲスト認証であるとみなし、guest accountで定義されたユーザーでログインする。
Bad Passwor : 上記に加えて、パスワード入力ミスの場合もゲスト認証であるとみなす。log file ログファイルを指定する。接続元ホストを示す変数「%m」を使うと、接続元ホストごとにログファイルを分けれる max log size ログファイルの最大サイズを指定する。値が0の場合は、制限は行われない。 encrypt passwords 暗号化パスワードを利用する。この値はYes以外利用するべきではない。 smb passwd file パスワード認証をsmbpasswd方式で行う場合のパスワードファイルを指定する。 unix password sync SambaのパスワードとLinuxのパスワードを同期させるか。 passwd program unix password syncを有効にした場合、Samba側でパスワードを変更した際に実行するプログラム。 passwd chat unix password syncを有効にした場の応答内容。 username map UNIXユーザーを別のユーザーとマッピングさせるファイルを指定する。 logon script ログオン時に実行するスクリプトファイルを指定する。 wins support WINSサーバーとして動作させる。 wins server WINSサーバーのIPアドレスを指定する。 共有
パラメータ 説明 comment コメントを指定。 browseable ブラウジングし他時に表示されるかどうかを指定する。ただし、共有名を直接指定するとアクセスすることができます。 writable 書き込みを許可するかどうかを指定する。 read only writableの逆の意味。 write list 書き込みが例外的に許可されるユーザーを指定します。グループを指定する時は、@ path 共有ディレクトリのパスを指定する。 force user 共有内に作成するファイルやディレクトリの所有者、所有グループを、強制的に指定したユーザーにします。 force group 共有内に作成するファイルやディレクトリの所有者、所有グループを、強制的に指定したグループにします。 hide dot files 隠し属性を適用するかどうか。 hide files 任意のファイルやディレクトリを表示させたくない場合、その名前を指定する。 veto files 表示もアクセスもさせたくないファイルやディレクトリを指定する。 create mask ファイルに適用可能なパーミッション 0744 directory mask ディレクトリに適用可能なパーミッション 0755 force create mask 必ずファイルに適用されるパーミッション 0000 force directory mask 必ずディレクトリに適用されるパーミッション 0000 valid users アクセス可能なユーザーを指定する。グループを指定する時は、@ guest ok guestログインを許可するかどうかそ指定する。 public guestログインを許可するかどうかそ指定する。 homes
- UNIXユーザーの各ホームディレクトリを一括して共有するためのセクション。
- ユーザーごとに、ホームディレクトリの共有を定義す必要がありません。
smb.conf[homes] comment = Home Directiry browseable = No writable = Yesprinters
パラメータ 説明 print ok プリンタ共有として利用する。 printable プリンタ共有として利用する。 smb.conf[printers] comment = ALL printers path = /var/spool/samba browseable = no guest ok = no writable = no printable = Yes個々
- 任意の名前の共有を作成することができます。
smb.conf[public] comment = Public path = /home/samba/piblic public = Yes writable = No writa list = @memmbersmb.conf[tmp] comment = tmp path = /tmp read only = no public = Yessmb.conf[secret$] path = /var/samba/secret valid users = @supertestparm
- smb.conf の構文にミスがないかチェックを行う。
ログ
- Sambaは、syslogを介さずに独自にログを処理します。
- /var/log/sambaディレクトリ以下などに、いくつかのファイルに分かれて出される。
マスターブラウザの設定
- ワークグループ単位と、ドメイン単位で存在します。
- どのホストがマスターブラウザになるかは、OSの種類による優先度に基づいて選出される。
- samba自身をドメインコントローラにする場合、33以上にすれば優先的に選出される。
パラメータ 説明 local master ローカルマスターブラウザのブラウザ選出に参加する(選出されるとか限らない) domain master ドメインマスターブラウザに選出されるようになる。 preferred master ブラウザ選定を促す。 os level 優先度 認証の設定
パラメータ
- クライアントがどのようにSambaに応答するかを指定する。
パラメータ 説明 security デフォルトは、「USER」です。
この場合smb passwdファイルなどを使って認証を行います。
Sambaユーザーアカウントとパスワードが必要です。ユーザー管理
smbpasswd
- Samba2で利用されていた方式でテキスト形式のパスワードファイル(/etc/samba/smbpasswd)にユーザー情報を1ユーザー1行で格納します。
- Samba3系の一部でもデフォルトのバックエンドデータベースですが、Sambaで扱えるユーザー項目の一部しか格納できません。
smb.confpassdb backend = smbpasswdtdbsam
- バイナリ形式のデータベースファイル(/etc/samba/passdb.tdb)にユーザー情報を格納します。
- Sambaで扱えるユーザー情報の全項目を格納できます。
smb.confpassdb backend = tdbsam:/etc/samba/passdb.tdbldapsam
- LDAPサーバーにユーザー情報を格納します。
- 別途LDAPサーバーが必要ですが、多数のユーザーを扱う場合に適しています。
smb.confpassdb backend = ldapsam:ldap://LDAPサーバー名[:ポート番号]コマンド
pdbedit
オプション 説明 -L 一覧表示 -a 追加 -x 削除 smbpasswd
オプション 説明 -d 無効化 -e 有効化 -x 削除 管理コマンド
コマンド 説明 smbcontrol Sambaサーバーを構成するそれぞれのデーモンにメッセージを送って制御する。 smbstatus Sambaサーバーに接続されているクライアント、使用中の共有、ロックされているファイルを共有する。 nbmlookup NetBIOS名を問い合わせたり、NetBIOS名からIPアドレスを検索する。 Sambaクライアント(smbclient)
オプション 説明 -L リスト表示を要求する -N 認証を行わない -U 接続あするユーザーを指定する
サブコマンド 説明 cd 移動 del 削除
サブコマンド 説明 dir リスト表示 exit 終了 get 取得 mget 纏めて取得 mkdir ディレクトリ作成 mput 纏めて転送 lcd ローカル側のディレクトリを移動 put 転送 mdir ディレクトリを削除 ACL
smb.confvfs objects = acl_xattr map acl inherit = yes store dos attributes =yesgetfacl
- ACLエントリを表示する。
ACLエントリ 説明 user 所有者① group 所有グループ② other その他のユーザー③ user:USER ユーザーUSER④ group:GROUP グループGROUP⑤ mask マスク値、②④⑤に適用 ※mask:誤って大きなアクセス権を与えてしまうことを防いだり、一時的に所有者以外のアクセス権を制限したりすることができる。
(#ehhective; と表示される。)setfacl
- ACLを設定する。
オプション 説明 -m 追加、もしくは変更する。 -x 削除する。 --remove-all すべて削除する。 リンク
Amazon EC2(Amazon linux)のファイルサーバ構築
Amazon Linux 2でSambaを構築する
- 投稿日:2021-01-07T11:14:00+09:00
OOM Killerの対象外にしたい(CentOS7)
Out of Memory が発生した場合でもプロセスを落とされたくない場合、
/etc/systemd/system 等の配下にあるsystemd用ファイルに以下を設定する。[Service] ~~省略~~ OOMScoreAdjust=-1000 ~~省略~~OOMScoreAdjust を -1000 に設定すると、対象サービスのプロセスはkill対象外になる。
(MySQLを落とされて悲惨な目にあったので設定しておきたい)
- 投稿日:2021-01-07T10:55:19+09:00
Virtualbox Extension がエラーで入らなかった話
「ある日突然」「何もやっていないのに」「前はできていたのに」Virtualboxの拡張パックがインストールできなくなって少し苦労したので、もしも同じ境遇の人がいたら少しは役にたつかも?と思い投稿することにした。半分自分宛の備忘録も兼ねる。
現象と経緯
現象はこうだ。
これまで Ubuntu 20.04 LTS Desktop を使っていて、時たま使いたくなる Windows 10 を Virtualbox 上のVMとして設定して使っていた。USB 3.0 を使いたいこともあるので、Extension Pack をいれていた。6.1.14 までは正常に Extension Pack も更新できていた。
だがしかし。
少し前に(たぶん)、 Virtualbox が 6.1.16 に更新されていたが起動はしていなかった。で、昨日久しぶりに Virtualbox を起動したら Extension pack が古いよ、と警告されたので、じゃぁ更新するかと公式サイトからダウンロードして開いてみたが、エラーでインストールできなかった。(エラー時のスクショは取り忘れ。あると良かったんだけど。)
解決への道
どうしたかというと、まずは apt でどうにかしようと試行錯誤した。apt で取れるVirtualboxのバージョンは少し古く 6.1.10 。なので、一旦今の6.1.16を削除した上で改めて 6.1.10 を入れてみたが、新しいバージョンで動かしていたVMだから、VMが起動しない。何度か
apt remove --purge
してapt install
とかしたが状況は変わらず。なので、ぐぐってみるも有益な情報はすぐにはみつからず。色々見ていく中で、手動で更新した、という記事を見つけた。これを試してみようと考えて、ダウンロードした Extension pack のファイルをunzipしてみたがZIPではなかった。記事では触れられてない(多分)が、tar.gz 形式だった。
tar xzf
して展開すると、同じようなファイルが出てきた。これを指示通りの場所(aptで入れていると/usr/lib/virtualbox/xtensionPacks/Oracle_VM_VirtualBox_Extension_Pack
として置いてやる。んでもって改めて Virutalbox を起動したら、インストール済み拡張パックとして認識された。ふぅ。
- 投稿日:2021-01-07T10:55:19+09:00
Virtualbox Extension Pack がエラーで入らなかった話
「ある日突然」「何もやっていないのに」「前はできていたのに」Virtualboxの拡張パックがインストールできなくなって少し苦労したので、もしも同じ境遇の人がいたら少しは役にたつかも?と思い投稿することにした。半分自分宛の備忘録も兼ねる。
現象と経緯
現象はこうだ。
これまで Ubuntu 20.04 LTS Desktop を使っていて、時たま使いたくなる Windows 10 を Virtualbox 上のVMとして設定して使っていた。USB 3.0 を使いたいこともあるので、Extension Pack をいれていた。6.1.14 までは正常に Extension Pack も更新できていた。
だがしかし。
少し前に(たぶん)、 Virtualbox が 6.1.16 に更新されていたが起動はしていなかった。で、昨日久しぶりに Virtualbox を起動したら Extension pack が古いよ、と警告されたので、じゃぁ更新するかと公式サイトからダウンロードして開いてみたが、エラーでインストールできなかった。(エラー時のスクショは取り忘れ。あると良かったんだけど。)
解決への道
どうしたかというと、まずは apt でどうにかしようと試行錯誤した。apt で取れるVirtualboxのバージョンは少し古く 6.1.10 。なので、一旦今の6.1.16を削除した上で改めて 6.1.10 を入れてみたが、新しいバージョンで動かしていたVMだからなのか、VMが起動しない。何度か
apt remove --purge
してapt install
とかしたが状況は変わらず。なので、ぐぐってみるも有益な情報はすぐにはみつからず。色々見ていく中で、手動で更新した、という記事を見つけた。これを試してみようと考えて、ダウンロードした Extension pack のファイルをunzipしてみたがZIPではなかった。記事では触れられてない(多分)が、tar.gz 形式だった。
tar xzf
して展開すると、同じようなファイルが出てきた。これを指示通りの場所 (/usr/lib/virtualbox/xtensionPacks/Oracle_VM_VirtualBox_Extension_Pack
) に置いてやる。んでもって改めて Virutalbox を起動したら、インストール済み拡張パックとして認識された。ふぅ。