地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Linux】コンテナとカーネルパラメータ

背景

コンテナはカーネル共有型の仮想化というのはよく言われてる話で理解はしているつもりだった。と同時に一部のコネクションメニーなwebアプリとかをコンテナで動かす場合にnet.core.somaxconnとかをいじることでカーネルがもつキューを伸ばすみたいなことが可能なことも知っていて。

ここで共有しているカーネルカーネルパラメータをコンテナ毎に設定できるのは何故?となったのがタイトル。

結論

勘のいい人なら既に分かってる気がしますが原理としてはnamespaceでプロセス毎にカーネルパラメータを設定しているみたいです。例えばsomaxconnとかだとlinux/net/core/net_namespace.c辺りでnamespace毎に設定されていたりします。

static int __net_init net_defaults_init_net(struct net *net)
{
    net->core.sysctl_somaxconn = SOMAXCONN;
    return 0;
}

portrangeとかもnet_namespaceに紐づく形で実装されている。

github.com

k8sでのドキュメント

kubernetes.io

pod毎にパラメータを管理者は設定できる。設定できる値はpodに入ってsysctl -aするなり/proc/sysをみればよい。pod単位で設定できるものもあればnamespace毎に別れていないノードレベルのsysctlもあるらしい。

apiVersion: v1
kind: Pod
metadata:
  name: sysctl-example
spec:
  securityContext:
    sysctls:
    - name: kernel.shm_rmid_forced
      value: "0"
    - name: net.core.somaxconn
      value: "1024"
    - name: kernel.msgmax
      value: "65536"
  ...

参考記事

qiita.com

【dnsmasq】入門する

背景

Dnsmasqを久しぶりに使ってみたのでついでに入門的にまとめてみた。小規模の内部用(プライベート)用のDNSをお手軽に立てたいので、dnsmasqを使用してみたい程度での使用で業務用途では特にないです。

ホストファイル(形式のファイル)でDNSの設定ができる、設定がお手軽というメリットで選んでます。

thekelleys.org.uk

最新版は2.85で最終リリースは3ヶ月前です。リリース頻度はそこまで高くない印象でした。(ちょくちょく脆弱性のニュース見る気がするのでその対応とかですかね。)

dnsmasqとは

Dnsmasqは軽量で比較的容易に設定できるDNSサーバのフォワーダとDHCPサーバをもつソフトウェアである。

dnsmasqは主に以下の機能があります。

簡易とは言え個人的に特に困るような機能不足は何もない。サクッとやれるし小規模なお家サーバくらいなら余裕すぎるレベルで高機能です。

インストール

yum -y install dnsmasq

設定ファイル

# Port番号
port=53

#デフォルトの /etc/hosts をDNSのレコードとして使用しない
no-hosts

#読み込むホストファイルを指定
addn-hosts=/etc/hosts-dnsmasq

#ドメイン名を自動的に付加する
expand-hosts

#ローカルのドメイン名を設定する
domain=icebird.local

#外部のDNSへ問い合わせをする場合は、ホスト名では問い合わせない
domain-needed

bogus-privを有効にするとプライベートIPアドレスを上位のDNSサーバに転送しないようになります。txtレコードとかmxレコードはここのconfに書くこともできます。

ttlを設定

キャッシュ保有期間/TTLに関する設定もできます。

  • 否定応答のキャッシュ時間指定: neg-ttl=で秒で指定。
  • 肯定応答のキャッシュ時間: 保持可能な最大時間をmax-cache-ttl=で秒で指定。

CNAMEを設定する

dnsmasqでcnameレコードを設定することもできます。(検証用途くらいでしか用途は思いつきませんが。。)

hostsへ以下を記載

127.0.0.1       default.example.com
127.0.0.2       default.example.com
127.0.0.3       default.example.com
127.0.0.4       default.example.com
127.0.0.5       default.example.com

dnsmasq.confへ以下を記載

cname=*.example.com,default.example.com
auth-server=example.com,eth0
interface-name=example.com,eth0
auth-zone=example.com,127.0.0.0/24,eth0

dig

[root@master ~]# dig @127.0.0.1 *.example.com

;; ANSWER SECTION:
*.example.com.      600 IN  CNAME   default.example.com.
default.example.com.    600 IN  A   127.0.0.5
default.example.com.    600 IN  A   127.0.0.2
default.example.com.    600 IN  A   127.0.0.3
default.example.com.    600 IN  A   127.0.0.4
default.example.com.    600 IN  A   127.0.0.1

プロダクション用途

前職で使った時はアプリサーバに入れておいてdnslookupをローカルで完結させるみたいな用途で使ってました。いわゆるキャッシュサーバです。何故か名前引くのが200msとかかかっていた時間があってローカルに入れておくみたいな感じだったはずです。ttlとかは2sとかで制限して使ってました。

【ClamAV】入門する (Clam Antivirus)

f:id:ryuichi1208:20210723214134p:plain

背景

ClamAVを触る機会が出てきたので入門する。最近初見かと思いきや社内シスアド的なのやってた時にも実は触ったことがあったらしいことをローカルのメモから知った。当時はこの手のツールはとりあえず入れておけばいいんじゃないくらいで使ってたので良くわからず使ってたはず(新卒1年目とか)。古参で安定しててOSSなので結構色々いなとことで使われてるとかですかね〜

www.clamav.net

ClamAVとは

ClamAV(Clam Antivirus)とはTomasz Kojm等によって開発・メンテナンスされているLinuxBSDMac OS Xなど各種UNIX系のシステムで動作するアンチウイルスソフトクロスプラットフォームアンチウイルスソフトウェアでwindows版も派生して存在するみたいです。

以下公式サイトより概要を引用: https://clamav-jp.osdn.jp/

Clam AntivirusはTomasz Kojm等によって開発・メンテナンスされているLinuxやBSD、Mac OS Xなど各種UNIX系のシステムで動作するアンチウイルスソフトです。
シグネチャによるパターンマッチング方式を採用していて、2004年5月27日の時点で約21,694種類のウイルスに対応しています。
GPLライセンスに従って利用することができるオープンソースのソフトウェアです。

Clam Antivirusについてgoogleなどで検索するときは「clam antivirus」や「clamav」などのキーワードをもとにして探すとよいでしょう。

主な機能/特徴とかは以下。デーモンに加えてDBのアップデートツールとか充実している印象を受けました。

・マルチスレッドデーモン(clamd)
・コマンドライン版スキャンツール(clamscan)
・データベースアップデータ(freshclam)
・自動シグネチャアップデート
・Googleセーフブラウジングデータベースのサポート
・ウイルス検出時のメール通知

使ってみる

インストール

yum install epel-release
yum install clamav clamav-data clamav-devel clamav-filesystem clamav-update clamd

それぞれの役割はざっくり以下のような感じです。

clamav -> ClamAV本体。各種ツール類
clam-data -> ウィルススキャンデータベース
clamav-devel -> ClamAVの関連ライブラリやヘッダーファイル
clamav-filesystem -> ClamAV動作に必要なユーザー設定やファイル構成のパッケージ
clamav-update -> ウィルスデータベースを更新するためのパッケージ
clamd -> ClamAVをデーモンとして動作させるパッケージ

このままスキャンをするとエラーになるので実行前にウィルスデータベースのアップデートを行います。freshclamを実行しておきます。以下のコマンドを実行してユーザデータがあるようなパスを検査対象として検査します。–remove をつけることで、ウィルスを発見したときに自動的に削除することも可能です。

$ clamscan --infected --recursive /home
----------- SCAN SUMMARY -----------
Known viruses: 10588000
Engine version: 0.103.3
Scanned directories: 2 -> 検査したディレクトリの数
Infected files
Scanned files: 3 -> 検査したファイルの数
Infected files: 0 -> 重要: 検出したウィルスの数
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 15.369 sec (0 m 15 s)
Start Date: 2021:07:23 10:19:40
End Date:   2021:07:23 10:19:55

自身の環境にインストールして自分でDB参照してウイルスをスキャンすることを行いましたがclamdを使うことでC/S構成でウイルススキャンの構成をとることも可能です。