ホーム » コンピュータ » Network (ページ 8)

Network」カテゴリーアーカイブ

システム

最近の投稿

アーカイブ

カテゴリー

ネットワークサービスとポートスキャン

外部からネットワーク接続を受けて、どういった処理を実行するようになっているのかを知るための方法を説明する。

ポート番号

ネットワーク通信では、通信する相手を指定するために IP アドレスが用いられるが、サーバでは、複数のプログラムが動いており、どのプログラムと接続するのかを指定するには、ポート番号を用いる。

IPアドレスを電話番号に例えるならば、ポート番号は内線電話番号に相当する。

特に、サーバではクライアントからの通信を待つために、このサービスならばこのポート番号を使うという標準番号が決まっている

SSH    = 22   # リモート接続(暗号化)
TELNET = 23   # リモート接続
SMTP   = 25   # メール送信
DNS    = 53   # DNSサービス
HTTP   = 80   # Web サーバ
POP    = 109,110 # メール受信
IMAP   = 143  # メール受信
HTTPS  = 443  # Web サービス(暗号化)
SMTPS  = 465  # メール送信(暗号化)
IMAPS  = 993  # メール受信(暗号化)
POPS   = 995  # メール受信(暗号化)

ネットワークサービス

サーバでは、クライアントからの接続の受信を待つために、あらかじめプログラムを起動しておく必要がある。
こういうサーバプログラムは、Linux の世界では デーモン と呼ぶことも多い。

ネットワークサービスを起動する方式には、いくつかの方法がある。

スーパーサーバを使う場合

ネットワーク処理のプログラムは、複雑な処理を行うためそのプログラムを起動しておくと、メモリを大量に使用する。古いコンピュータでは、処理速度の低下となるため、利用頻度の低いサーバは、汎用的なサーバを起動しておき、必要に応じてプログラムを起動する。この方法には、inetd とか xinetd が用いられる。

$ vi /etc/inetd.conf
echo stream tcp nowait tsaitoh コマンド名

上記の例では、echo=7番ポート に tcp で接続すると、ユーザ名 tsaitoh の権限で、コマンド名を実行してくれる。

デーモンを起動しておく場合

Linux では ランレベル という状態が決められている。

  • シングルユーザモード(S) – 管理者が作業中で他のネットワーク接続とかを受け付けない状態
  • システム停止(0) – 他の状態からシステム停止に移るための仮想的なランレベル
  • マルチユーザモード(2) – 複数のユーザの接続ができる状態
  • GUI環境付きのマルチユーザモード(5) – X11ディスプレイマネージャが動く状態
((( /etc/inittab の中に以下の記載がある )))
$ cat /etc/inittab
:
# The default runlevel.
id:2:initdefault:
:

$ runlevel   # 現在のランレベルを確認する方法
N 5

sysv-rc 方式

Linux では、ランレベルを変更する init コマンド(init 0 を実行すると、システムを停止できる)を実行すると、

  • /etc/rc移行元ランレベル.d 配下のKで始まるプログラムをファイル名順に実行する。
  • /etc/rc移行先ランレベル.d 配下のSで始まるプログラムをファイル名順に実行する。
$ ls /etc/rc2.d
K01aprx                         S17sudo
K01onedrive                     S17unattended-upgrades
README                          S17uuidd
S01lvm2-lvmpolld                S18acpid
S01pulseaudio-enable-autospawn  S18amavis
S14nfs-common

$ sudo /etc/init.d/apache2 start   # apache2のサーバ起動
$ sudo /etc/init.d/apache2 stop    # 停止
$ sudo /etc/init.d/apache2 restart # 再起動

systemd 方式

上記の sysv-rc 方式は、プログラムの起動スクリプトが shell で書かれているので、(システムが単純な頃は)メンテナンスが容易だったが、(システムが複雑になると)起動処理に時間がかかるのが問題となった。このため、新しい Linux では、systemd というプログラムでサーバを起動する方式にかわった。

$ ls /etc/systemd
journald.conf  network        pstore.conf    sleep.conf  system.conf     user
logind.conf    networkd.conf  resolved.conf  system      timesyncd.conf  user.conf

$ sudo systemctl list-units        # systemd のユニット一覧

$ sudo systemctl list-sockets      # 使用中のソケット一覧

$ sudo systemctl status apache2    # systemd で起動している特定のサーバの状態確認

$ sudo systemctl start   apache2   # systemd でサーバ起動
$ sudo systemctl stop    apache2   # systemd でサーバ停止
$ sudo systemctl restart apache2   # systemd でサーバ再起動

起動中のプログラムの確認

システムが通常状態で起動しているプログラムを確認するには、ps ax を用いる。

$ ps ax    # a 全プロセス表示 x 端末を持たないプロセスも表示
    PID TTY      STAT   TIME COMMAND
      1 ?        Ss     2:57 /sbin/init
      2 ?        S      0:00 [kthreadd]
      :
2229038 ?        S      0:03 /usr/sbin/apache2 -k start
      :

PIDがプロセス番号、STATは、S:処理待ち状態、R:実行状態、TIME欄は、のべ実行時間を表す。

各プロセスの親プロセスと子プロセスの関係が知りたい場合には、pstree コマンドを用いる。

$ pstree
systemd-+-/usr/sbin/amavi---2*[/usr/sbin/amavi]
        |-/usr/sbin/apach---11*[/usr/sbin/apach]
        |-ModemManager---2*[{ModemManager}]
        |-NetworkManager---2*[{NetworkManager}]

ここで、見たことのないプログラムが動いている様なら、システムの進入を受けた可能性を疑わないといけない。

ネットワーク通信で受信待ちのプログラムの確認

Linuxで開いているポートを確認するためには、netstat コマンドを用いる。

$ sudo netstat -ltup4
  # -l Listenポート、-t TCP、-u UDP、-p ポートを開いている、-4 IPv4
稼働中のインターネット接続 (サーバのみ)
Proto 受信-Q 送信-Q 内部アドレス     外部アドレス  状態        PID/Program name    
tcp       0     0 localhost:3551  0.0.0.0:*  LISTEN      841/apcupsd         
tcp       0     0 0.0.0.0:imaps   0.0.0.0:*  LISTEN      418280/dovecot  
:

nmap でポートスキャン

netstat コマンドは、対象コンピュータを使っている時には有効だが、他のコンピュータを調べるには、ポートスキャン専用の nmap を使うのが一般的。
ポートスキャンとは、相手のコンピュータに接続するポート番号を変更しながら、通信可能か調べること。

$ sudo nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2020-02-17 14:45 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000090s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 982 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
25/tcp    open  smtp
:

nmap で調べるための様々なオプション

$ sudo nmap -A localhost  # OSなどを調べる

$ sudo nmap -p 1-1023 localhost # 1〜1023 までのポート番号を調べる

$ sudo nmap -sU localhost  # UDPのポートスキャン

$ sudo nmap -O localhost   # OSの検出

攻撃を受けているのであれば、wireshark などのパケットキャプチャを使って、パケットの中身を調べる必要がある。

ネットワーク関連の基本

なぜか家族チームで Micro Hardening のイベントに参加予定なので、ネットワーク関連の基礎の説明を家族向けにまとめる。以下の説明は基本的に、Linux 環境に login してのお話。

ネットワークの確認(ifconfig)

接続しているネットワークの状態を確認するには、ifconfig を使う。(Linuxの場合)
Windows であれば、cmd.exe を起動して、ipconfig を使う。

((( Linux の場合 )))
$ ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.2  netmask 255.255.255.0  broadcast 192.168.11.255
        :
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        :
$ ifconfig eth0   # 特定のインタフェースだけ確認
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.2  netmask 255.255.255.0  broadcast 192.168.11.255
        :
$ ip link    # 新しい Linux 系では、ifconfig が無い場合もある。
             # ip link がその代用

((( Windows の場合 )))
C:> ipconfig /all    # Linux の ifconfig -a と同じ

上記のコンピュータでは、IPアドレス(例:192.168.11.2)とサブネットマスクの値(255.255.255.0)が設定されている。IPアドレス AND サブネットマスクの値はネットワーク番号と呼ばれ、192.168.11.0 が同じであれば、同じサブネット内と判断できる。サブネットマスクは、上位bitの1の数で表現することもあり、192.168.11.2/24 という書き方もある。

こういったIPアドレスは、各コンピュータに対してあらかじめ決めた値を設定しておく方法(静的アドレス)と、IPアドレスを管理しているサーバにアドレスを一時的に貸し出してもらう方法(動的アドレス)があり、後者のアドレスを貸し出すサーバは、DHCPサーバと呼ばれる。(DHCPでは、アドレス貸し出しを頼んできた端末に、IPアドレス,サブネットマスク,ゲートウェイ,DNSサーバを通知してくれる。後述)

周囲のコンピュータの確認(arp/ping)

基本、インターネットでは IP アドレスで通信相手を判断するが、同じサブネット内では、各コンピュータに割り振られているMACアドレスでコンピュータを識別している。

arp

このため、同じサブネット内では、IPアドレスとMACアドレスの対照表が必要となってくる。この対照表の情報を交換するためのプロトコルが ARP であり、この対照表を確認・操作する命令が arp コマンド。

$ arp -an    # -a で全ての一覧を表示、-n でホスト名を調べない
? (192.168.11.24) at <不完全> on eth0
? (192.168.11.13) at 62:84:bd:28:xx:xx [ether] on eth0
? (192.168.11.36) at b8:27:eb:ee:xx:xx [ether] on eth0
:
$ ip neigh   # 新しい Linux 系では arp コマンドがない場合もある。
             # ip neigh が替わりになる。

ただし、コンピュータが「このMACアドレスは私のIPアドレスですよ」とアナウンスした結果を一定時間覚えているだけなので、かならずそのコンピュータが生きているかは別の話。サブネットの中で、偽のARPを流すことで他のコンピュータ宛のパケットを盗むことも可能(ARPスプーフィング)である。このため、セキュリティ対策としてMACアドレスとIPアドレスの対応(arp)を監視も重要となる。

ping

ping は、潜水艦のソナー音をイメージするコマンドで、ICMPプロトコルのパケットを、指定した IP アドレスor ホスト名に送って、返答の有無や応答時間を表示する。ping では通常、相手に連続してパケットを送る。ネットワークが不安定な場合には、パケットが相手に届かない場合もあるので、パケット欠落があると icmp_sec= の番号が不連続になる。

$ ping 192.168.11.2
PING 192.168.11.2 (192.168.11.2) 56(84) bytes of data.
64 bytes from 192.168.11.2: icmp_seq=1 ttl=64 time=0.054 ms
^C
$ ping www.google.com
PING www.google.com (172.217.161.228) 56(84) bytes of data.
64 bytes from kix06s05-in-f4.1e100.net (172.217.161.228): icmp_seq=1 ttl=54 time=5.62 ms
64 bytes from kix06s05-in-f4.1e100.net (172.217.161.228): icmp_seq=2 ttl=54 time=5.89 ms
64 bytes from kix06s05-in-f4.1e100.net (172.217.161.228): icmp_seq=3 ttl=54 time=5.93 ms
^C

ただし ping は、特殊な ICMP パケットを送ることで相手コンピュータを攻撃できた事例もあり、返答を返さないシステムもある。

ブロードキャストパケット(ping -b)

IPアドレスで、サブネットマスクとANDをとったネットワーク番号の残りの部分は、ホスト番号と呼ばれる。(例:192.168.11.2/24 であれば、2 の部分) IPアドレスでホスト番号の全bitが1のアドレス(この場合は、192.168.11.255)は、ブロードキャストアドレスと呼ばれ、同じサブネット内の全部のコンピュータにデータを送るときに使う。

((( pingでブロードキャストする場合は、-b オプションが必要 )))
$ ping -b 192.168.11.255
WARNING: pinging broadcast address
PING 192.168.11.255 (192.168.11.255) 56(84) bytes of data.
64 bytes from 192.168.11.19: icmp_seq=1 ttl=64 time=70.5 ms
64 bytes from 192.168.11.18: icmp_seq=1 ttl=64 time=70.8 ms (DUP!)

ルーティング

インターネットでは、コンピュータに固有のIPアドレスを割り振り、サブネットを越えて通信ができる。(インターネットプロトコルIP)

基本的に、通信相手のIPアドレス AND サブネットマスク で求まるネットワーク番号が異なれば、サブネットが異なるので直接通信ができない。この場合は、ルータにパケットの中継を依頼することになる。ルータはゲートウェイとも呼ばれる。

ルータは、複数のサブネットを中継する装置であり、どのネットワーク番号ならばどのルータに送る(ルーティングと呼ぶ)というテーブルを持っている。一般的に、下流の末端のネットワークでは、どのネットワークならこの装置、それ以外はこの装置に送る…といった一覧表を持っている。(静的ルーティング)

一方、様々な末端からのデータが集まる上流のルータでは、末端ネットワークの構成が変化することも多いので、RIPというプロトコルで、ルータが相互にルーティング情報を交換している。(動的ルーティング)

ルーティングの確認(netstat -r)

ルーティングの情報を調べるには、netstat -r コマンドを用いる。

$ netstat -rn   # -r ルーティング情報 -n ホスト名を調べない
カーネルIP経路テーブル
受信先サイト     ゲートウェイ    ネットマスク      フラグ   MSS Window  irtt インタフェース
0.0.0.0        192.168.11.1  0.0.0.0         UG        0 0          0 eth0
192.168.11.0   0.0.0.0       255.255.255.0   U         0 0          0 eth0

$ ip route      # 新しい Linux 系では、ip route を使う

この例では、192.168.11.0/255.255.255.0 というサブネットでは直接通信ができ(ゲートウェイが0.0.0.0)、それ以外のパケット(受信先サイトが0.0.0.0)は 192.168.11.1 のルータに送ることになっている。(デフォルトゲートウェイ)

ルートの確認 traceroute

どういった経路で相手コンピュータまでデータが届いているのかを確認するには、traceroute コマンドを用いる。

traceroute コマンドは、ルーティングを調べながら、各ルータに ping を送った結果を表示する。

((( Linux の場合 )))
$ traceroute www.fukui-nct.ac.jp
traceroute to www.fukui-nct.ac.jp (104.215.53.205), 30 hops max, 60 byte packets
 1  xxxx.xxxx.xxxx (192.168.xx.1)  0.299 ms  0.251 ms  0.354 ms
 2  yyyy.yyyy.yyyy (192.168.yy.254)  0.790 ms  1.976 ms  1.343 ms
 3  ttn103-198-212-1.ttn.ne.jp (103.198.212.1)  4.304 ms  5.127 ms  4.343 ms
 4  ftth-sw1-po-11.ntwk.ttn.ne.jp (202.127.81.33)  3.742 ms  5.580 ms  4.296 ms
 5  core-sw2-la-2.ntwk.ttn.ne.jp (202.127.81.29)  5.477 ms  4.692 ms  4.655 ms
 6  bbr2-2-4.ntwk.ttn.ne.jp (202.127.81.17)  4.895 ms  2.025 ms  1.904 ms
 7  103.246.232.116 (103.246.232.116)  6.707 ms  5.499 ms  6.583 ms
((( Windows の場合 )))
C:> tracert www.fukui-nct.ac.jp  # Windowsではコマンド名が違うので注意

DNSによる名前解決

ここまでの話の中で、IPアドレスは、192.168.11.123 といった値であったが、極めて覚えにくい。このために、コンピュータそれぞれに名前をつけることができる。これをホスト名という。ホスト名も組織化されていると、組織を区別する名前が必要でドメイン名と呼ぶ。ホスト名とドメイン名の全体を単純にホスト名とかコンピュータ名と呼ぶことも多いが、正式には、FQDN と呼ぶ。

FQDN = www.fukui-nct.ac.jp (コンピュータ名とかドメイン名と呼ぶことも多い)
ホスト名 = www
ドメイン名 = fukui-nct.ac.jp

コンピュータ名とIPアドレスの情報を管理するのが、DNS(Domain Name Service) であり、下流の DNS の情報を調べながら 上流の DNS と組み合わされて管理されている。

nslookup or dig

この DNS に問い合わせを行うのが nslookup コマンドや dig コマンドである。コンピュータ名からIPアドレスを調べるには、一般的には nslookup コマンドを用いる。(正引き)

$ nslookup www.fukui-nct.ac.jp
Server:		192.168.11.xxx
Address:	192.168.11.xxx#53

Non-authoritative answer:
Name:	www.fukui-nct.ac.jp
Address: 104.215.53.205

$ dig www.fukui-nct.ac.jp   # もっと詳しい情報を調べる場合はdigを使う

利用者が多いサービスでは、1台のコンピュータで処理するのは大変なので、負荷分散を行うために、同じサービスを提供するコンピュータを何台も並べ、コンピュータ名を調べる度に、その複数のコンピュータのIPアドレスを返す場合もある。(ラウンドロビンDNS)

逆引き

迷惑メールを大量に送ってくるとか、クラッキングをしてくるようなコンピュータの中には、きちんと管理されていない怪しいネットワーク組織からの接続の場合がある。こういう場合には、IPアドレスに対して名前が割り振られていない場合も多い。また、攻撃の踏み台に使われている場合、どういった組織のコンピュータが悪用されているのか調べる必要がある。こういう場合には、IPアドレスからコンピュータ名を調べることも多い。(逆引き)

$ nslookup 192.156.146.100
100.146.156.192.in-addr.arpa	name = sv1.ip.fukui-nct.ac.jp.

$ dig -x 192.156.146.100      # dig で逆引きするときは、-x オプションが必要

逆引きでホスト名が調べられないとか、逆引きしたホスト名で再びIPアドレスを調べるとホスト名が異なる場合は、IPアドレスとドメイン名の管理が怪しい危険なコンピュータの可能性がある。場合によっては、DNSサーバが汚染されていて、コンピュータ名でアクセスしたら悪意のあるサーバに接続される危険性もある。(DNSポイズニング)

パブリック DNS

末端組織のDNSの場合、IPアドレスは組織内でしか使えないプライベートアドレス(例:10.xx.xx.xx , 192.168.xx.xx)の場合、組織内専用の DNS が動いていることが多い。この場合、組織内の DNS と組織外の DNS では、異なる情報が得られる場合もある。

こういう場合は、DNS に問い合わせをする場合に、外部の DNS を指定する。特に、Google パプリック DNS は、DNSサーバのIPアドレスが 8.8.8.8 という覚えやすい値が使われている。

$ nslookup 192.156.146.100 8.8.8.8
100.146.156.192.in-addr.arpa	name = sv1.ip.fukui-nct.ac.jp.

$ dig @8.8.8.8 192.156.146.100      # dig でDNSサーバを指定するときは、@の後ろで指定

DNS の特殊な情報

DNS には、IPアドレスとホスト名以外にも、様々な情報が登録されている。この情報を調べるには、タイプを指定する。(-query=タイプ のオプションをつける)

$ nslookup -query=a www.google.com 8.8.8.8     # IPv4 アドレスを調べる
Name:	www.google.com
Address: 216.58.199.228

$ nslookup -query=aaaa www.google.com 8.8.8.8  # IPv6アドレスを調べる
Name:	www.google.com
Address: 2404:6800:400a:80c::2004

$ nslookup -query=mx fukui-nct.ac.jp 8.8.8.8   # メールを送るサーバを調べる  
fukui-nct.ac.jp	mail exchanger = 10 ews.ip.fukui-nct.ac.jp.

$ nslookup -query=txt tsaitoh.net 8.8.8.8      # その他のTXT情報を調べる
tsaitoh.net	text = "v=spf1 +ip4:xx.xx.xx.xx..."
  # この例では、メールサーバの検証方法 SPF の情報が見れた。

DMARCレポートを出力

DMARCの設定をして、なりすましなどのレポートをメールで送る設定をしたけど、xmlファイルはzip圧縮でメール添付だし、xml ファイルも内容が読みづらい。

dmarc-catを使ってみる

“aptitude search dmarc”を実行すると、dmarc-cat というソフトが見つかり、”sudo aptitude install dmarc-cat” インストールして使ってみる。

dmarc-cat 0.9.2/j4 by Ollivier Robert

Reporting by: google.com — noreply-dmarc-support@google.com
From 2020-02-12 09:00:00 +0900 JST to 2020-02-13 08:59:59 +0900 JST

Domain: tsaitoh.net
Policy: p=quarantine; dkim=r; spf=r

Reports(1):
IP                      Count   From        RFrom       RDKIM   RSPF    
xxxxx-xx-x-x.xxx.ne.jp. 1       xxxxxxx.xxx xxxxxxx.xxx pass    pass    

これなら、なんとなく読みやすい。でも、どちらにしろ、添付ファイルのzip抽出、zip解凍、dmarc-cat の実行、んで、これらの内容を最終的にメールで読みたい。

メールを dmarc-cat で変換してレポート

ということで、その一連の処理を、procmail から実行させるための perl script をチロっと書いてみた。

#!/usr/bin/perl

# DMARC のレポートメールを dmarc-cat で文字情報にして送信しなおす
#
#       .procmailrc に以下を記載
#       | dmarc-report-mail.pl メールアドレス

my $mailto = $ARGV[0] ; # 送りなおすメールアドレス

# 添付ファイルを抽出するディレクトリ
my $tmpdir = "/tmp/dmarc-report-$USER-$$" ;

if ( mkdir( $tmpdir ) ) {
  # 標準入力のメールから添付ファイルを抽出
  system( "/usr/bin/munpack -q -C $tmpdir > /dev/null 2>&1" ) ;

  if ( opendir( my $dh , $tmpdir ) ) {

    # 保存された全ての添付ファイルの処理
    while( my $file = readdir( $dh ) ) {
      if ( -f "$tmpdir/$file" ) {

        # .zip ファイルだけ処理を行う
        if ( $file =~ /\.zip$/ ) {
          my $zipfile = "$tmpdir/$file" ;
          my $xmlfile = $zipfile ;
          $xmlfile =~ s/\.zip$/.xml/ ;
          $xmlfile =~ s/X/!/g ;

          # 圧縮解除 .zip => .xml
          system( "/usr/bin/unzip -q -d $tmpdir '$tmpdir/$file'" ) ;
          if ( -f $xmlfile ) {

            # .xml => dmarc-cat の出力をメールに送る
            if ( $mailto ne ""
                 && open( $mh , "| /usr/sbin/sendmail $mailto" ) ) {
              print $mh "Subject: DMARC report\n\n" ;
              if ( open( my $fh , "/usr/bin/dmarc-cat '$xmlfile' |" ) ) {
                while( <$fh> ) {
                  print $mh $_ ;
                }
                close( $fh ) ;
              }
              close( $mh ) ;
            }
            unlink( $xmlfile ) ;    # 解凍されたファイルを消す
          }
        }
        unlink( "$tmpdir/$file" ) ;     # 添付ファイルを消す
      }
    }
    closedir( $dh ) ;
  }
  rmdir( $tmpdir ) ;
}

この script を以下の様な procmailrc にかけて、report-a 宛のレポートを変換後 report-a-dmarc 宛に再転送させる。

:0
* ^To.*report-a@xxxxxxx\.xxx
| /...path.../dmarc-report-mail.pl report-a-dmarc@xxxxxxx.xxx

:0
* ^To.*report-f@xxxxxxx\.xxx
| /...path.../dmarc-report-mail.pl report-f-dmarc@xxxxxxx.xxx

自宅メールサーバをDKIM対応へ

Yahoo のメールアカウントに、迷惑メール対策のため「DMARC」導入を開始しますとのメールが届いている。送信側ドメイン認証のひとつで、なりすましだった場合の取り扱いを設定することができるらしい。

しかし、自宅メールサーバは、mydns.jp を用いたダイナミックDNSを用いたサイト。このため、メールサーバを立ち上げても spam 送信元と誤認(なりすましと誤認)される可能性も高く、自宅サーバからのメールは、受け取り側で迷惑メールフォルダに落ちないか心配したり、すぐに相手に届くか不安であった。

ということで、DMARC の前に、DKIM にて信用してもらえるように設定を行う。DKIMは受信したメールが正しいメールサーバから送られ改ざんされていないか確認する方式SPFは以前に導入済みだけど、正しいメールサーバから発信されたか確認する方式なので、DKIM ほどの信頼はない。

opendkim のインストール

Debian では、opendkim のパッケージが配布されているので必要なパッケージをインストールする。設定のために セレクタ名 を postfix としてプライベートキーを生成する。/etc/dkimkeys/postfix.txt には、DNS に登録する “IN TXT” の設定が生成される。

$ sudo aptitude install opendkim opendkim-tools
$ cd /etc/dkimkeys
$ sudo opendkim-genkey -D /etc/dkimkeys -b 1024 -d tsaitoh.net -s postfix
$ sudo chown opendkim:opendkim /etc/dkimkeys/*

opendkim の設定として、上記処理で作られたプライベートキーを登録し、DKIM キーを付加する処理のためのサーバと接続するためのソケットを定義する。

((( 以下のファイルを編集 )))
$ sudo vi /etc/opendkim.conf
Domain   tsaitoh.net
KeyFile  /etc/dkimkeys/postfix.private
Selector postfix

Socket   inet:8892@localhost

DKIM 電子署名を付加するための postifix の設定

postfix でメールを送信する時に opendkim に接続し DKIM の電子署名を付加するために、前述のソケットに対応する設定を以下の様に記載する。

((( /etc/postfix/main.cf )))
$ sudo vi /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:8892

DKIM のための DNS の設定

DNSに、公開鍵などの設定を行う。mydns.jp を使っているので、mydns.jp にログインし、DOMAIN INFO にて、以下の設定を加える。

_adsp._domainkey   IN TXT dkim=unknown
postfix._domainkey IN TXT v=DKIM1; h=sha256; k=rsa; p=XXX...XXX

DNS設定が正しく反映されているか確認。

$ nslookup -query=TXT _adsp._domainkey.tsaitoh.net 8.8.8.8
_adsp._domainkey.tsaitoh.net    text = "dkim=unknown"
$ nslookup -query=TXT postfix._domainkey.tsaitoh.net 8.8.8.8
postfix._domainkey.tsaitoh.net  text = "v=DKIM1; h=sha256; k=rsa; p=XXX...XXX

サーバの再起動とDKIMの確認

$ sudo service opendkim start
$ sudo service postfix restart

試しに Google のアカウントにメールを送ったら、メールヘッダに以下が表示されるようになった。SPF は、以前に設定済みなので、自宅サーバからのメールは、確実に相手に届くようになったと思われる。

ARC-Authentication-Results: i=1; mx.google.com;
        dkim=pass header.i=@tsaitoh.net ....
        spf=pass (google.com: domain of ....

我が家のWiFi機器の登録

子どもに「ネットワーク機器」が新たに届く。そろそろ、専門用語も通じる様になってきたので、セットアップ方法を伝授。

普通の家なら、WiFiルータのAOSSのボタンを押して…と言うところだろうが、我が家はネットワークの登録は手作業。

(1) ルータの設定画面 http://192.168.11.1 に接続し、login: admin , password: ●●●
(2) 詳細設定→無線設定→MACアクセス制限
(3) 登録リストの編集で、登録リストの新規追加

普通の家なら、WiFiルータで DHCP サーバ機能(プライベートアドレスの貸し出し機能)が動いているので、これで終わり。

ただし、我が家では、ネットワーク機器の稼働状況を管理するために、

(4) 固定IPアドレスを割り振るために DHCP サーバへの登録、/etc/dhcp/dhcpd.conf の編集
(5) IPアドレスを名前で呼び出せるようにするための DNS サーバへの登録 /etc/db.xxxx の編集
(6) 登録されていない MAC アドレス機器を監視するために、監視対象から外すための /etc/arpalert/maclist.allow への追記
(7) その他にも hosts への追記、Samba のための lmhosts への追記

と、面倒な設定が必要。これを全部管理するのは大変なので、これらの管理の自動化を行うプログラムが作ってあるので、その設定ファイルに、機器の ホスト名・IPアドレス・MACアドレスを記載すればいい。

詳細は、各設定ファイル内のテンプレート部に併記してあるコメントを参照。

EdgeRouter-X ver 2.0.8 に更新

12/5 に、EdgeRouter-X のファームウェア 2.0.8 が公開されたみたい。さっそく適用。

といっても、何が変わったかしらんけど。(^_^;

EdgeRouter-X を L2-Switch

先日、EdgeRouter-X を reboot したら設定が飛んでしまった。

VPN は WRM-D2133HP に移行

外部からの L2TP による VPN 接続用に導入していた。しかし新たに導入したWiFi ルータ WRM-D2133HP は L2TP/IPSec に対応していたので、我が家の複雑なネットワーク構成を単純化するためにも VPN は WRM-D2133HP で対応させることにした。

WiFiルータの VPN だから、設定は簡単に終了。

EdgeRouter-X は 単純な L2-Switch 化

VPN を移行し本来なら不要になった EdgeRouter-X だけど、何も使わないのはもったいないし、自宅内の HUB ポートが埋まっているので、単純に L2-Switch の設定に変更。(といってもVLANは切らないけど)

ネットワークが繋がらない filter-aaaa-on-v4

最近、職場や自宅にて時々ネットワークが繋がらないときがある。

ネットワークの設定などは自前サーバを配置しているとはいえ、ちゃんと設定してあるはず。

繋がらないという状態でも、異なるサイトなら問題なくつながるので、プロバイダーや自宅ネットワークが落ちているということはない。でも、ふと IPv6 アドレスが問題になっているのかと反省。

自宅内は閉じているとはいえ、IPv6が使える状態。もしかして、上流接続はIPv4しか使えないけど、たまにIPv6アドレスを引いてしまうとかであろうか。

filter-aaaa-on-v4

そこで、色々調べ、IPv4 アドレスからの問い合わせは、IPv6 を使わせないための設定をしてみた。

((( /etc/bind/named.conf.options )))
options {
    :
    listen-on-v6       { any; } ;
    filter-aaaa-on-v4  yes ;
}

動作確認

$ nslookup localhost 
Name:    localhost
Address: 127.0.0.1

$ nslookup localhost ::1
Name:    localhost
Address: 127.0.0.1
Name:    localhost
Address: ::1

気のせいかもしれないけど、職場の環境も filter-aaaa-on-v4 つけたけど、IPv4 fallback がなくなったのかな。応答が速くなったように感じる。

Buffaloのファームウェア更新情報のRSS生成

我が家のネットワークは、Buffalo 製品で統一しているけど、ファームウェアの更新は自動取得にしている。

ファームウェア更新の情報を確認したいので、Buffalo の firmware ダウンロードページを自宅の機器に厳選してクローリングし RSS 情報に変換するスクリプトを書いてみた。

PWなしWiFiとVPNの利用

夏休みの家族旅行でホテル。ただ、最近は減ってるけど、ホテルのWiFiがパスワードなし。こういうWiFiは、通信データが盗聴される可能性がある(参考「ホテルのWiFiの危険性は高い?)」ので、最近は使用を避けたい。

でも、家では以前から VPN サーバを使えるようにしているので、この際、家族にも使い方を説明して積極的に使ってもらおう。サーバ,ユーザID,PW,事前共有キーは、別途メールするとして、設定方法は他の人の解説記事をみてもらおう。

VPN接続だと、セキュリティが安心というのもあるけど、自宅だけに制限している機能(WordPressへの記事の投稿とか、自宅ネットワーク状況の表示など)も使える。

Google 検索

My Google   Yahoo

Microsoft

ファンサイト