20200916のLinuxに関する記事は6件です。

Ubuntu20.04とRaspberry PiでIPsecゲートウェイの簡易VPN構築 - 1.StrongSwan導入

前提と準備

Linuxサーバー構築の記事

前回は、CentOS 8 + ラズパイopenSUSEで、IPsecゲートウェイをStrongSwanのソースコンパイルで構築しました。これをUbuntu 20.04とRaspberry Pi OSでできないかもやってみたよ(˶ ・ᴗ・ )੭⚐⚑

環境

  • IPsecプログラム:StrongSwan 5.9.0(ソースコンパイル)
  • IPsec交渉受信側:Raspberry Pi 3B+ / Raspberry Pi OS(2020/08版)(armhf(v7)、32bit)
  • IPsec交渉発信側:Hyper-V(第2世代)のx64仮想機 / Ubuntu 20.04(x86_64)

前提

  • OSは最小限のインストール。また、最新の状態でOSをアップデートしていること
  • ユーザーはrootでインストール(私の検証ではadminという管理者アカウントにて、そこからsudoで処理しています)
  • どのディストリビューションでも、ファイアウォールはufwを使う(ラズパイのRaspberry Pi OSでは、firewalldについて、IPv6周りの連動が糞だったので、Debian系標準のufwを使用することにしました)

サーバー条件

IPアドレスとネットワーク構築図

  • IPsec交渉受信側ゲートウェイ(下の図の左、Raspberry Pi):

    • インターネット側(eth0):192.168.1.22
    • VPN領域側(eth1):192.168.2.1
  • IPsec交渉発信側ゲートウェイ(下の図の右、Ubuntu 20.04):

    • インターネット側(eth0):192.168.1.18
    • VPN領域側(eth1):192.168.5.1
  • ネットワークセグメント:

    • インターネット接続可能:192.168.1.0/24
    • Raspberry Pi(図の左の交渉受信側)セキュアセグメント:192.168.2.0/24
    • Ubuntu 20.04(図の右の交渉発信側)セキュアセグメント:192.168.5.0/24
  • IPsec領域関連:

    • トンネリング区間:192.168.1.22 ~ 192.168.1.18間
    • VPN連携:192.168.2.0/24 ~ 192.168.5.0/24をVPN接続 sswan00_IPsecGW図.png

※ 図の左の「openSUSE」はRaspberry Pi OSに、右の「Linuxルーター CentOS 8」はUbuntu 20.04に読み替えてください。

パッケージを個別ダウンロードしてインストールする機能とバージョン(2020年9月時点)

  • zlib-1.2.11.tar.gz
  • strongswan-5.9.0.tar.gz

それ以外の必要なパッケージは、ディストリビューションの標準パッケージコマンド(dnfやaptなど)でインストールし、個別ダウンロードは不要です。

ダウンロードについては、公式サイトにアクセスして、そこからダウンロードしてFTPで転送するか、ダウンロードファイルのURLさえわかれば、wgetで入手することもできますが、入手方法は省略しています。

作業手順

準備

makeやcmake、パッケージ解凍機能のインストール

Hyper-V仮想マシンとラズパイでディストリビューションごとのインストールをします(ソースコンパイルは両方とも同じ)

Ubuntu20.04(Hyper-V/x64)
# apt-get -y install make cmake tar bzip2
RaspberryPiOS(2020.08)
# apt-get -y install make cmake tar bzip2

GCCとC++コンパイラのインストール

Ubuntu20.04(Hyper-V/x64)
# apt-get -y install gcc build-essential
RaspberryPiOS(2020.08)
# apt-get -y install gcc build-essential

zlibのソースインストール

zlibの配置場所はデフォルトのまま変えないでインストールしました。ソースコンパイルはHyper-V仮想マシンとラズパイで同じです

# cd [zlibの書庫ファイルが置いてあるディレクトリ]
# tar zxvf zlib-1.2.11.tar.gz
# cd zlib-1.2.11/
# ./configure
# make
# make install

IP転送の有効化

IPsecゲートウェイとして動作するためには、IP転送を有効化しなければならないので、有効化します。コマンドだとやはりsysctl.dの設定ファイルに追加して読み込ませる必要があるそうですね(openSUSEだと親切にSSHからでもYaSTで設定しやすい)

# cat /proc/sys/net/ipv4/ip_forward
0
# vi /etc/sysctl.d/01-ipv4fwd.conf
/etc/sysctl.d/01-ipv4fwd.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1

VPN領域のネットワークアダプタの増設

Hyper-V仮想マシンとRaspberry Piともに、IP転送の有効化+ネットワークアダプタを増設するため、いったん電源を切ります。私の場合は、ラズパイはUSBでVPN向けの有線LANアダプタを増設し、Hyper-Vは設定で、ネットワークアダプタを増設しました。

増設後は「eth1」が追加されているか確認しますが、もちろんIPアドレスはまだ割り振られていません。

# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether [最初からあるネットワークアダプタのMACアドレス] brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.18/24 brd 192.168.1.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 [最初からあるネットワークアダプタのIPv6アドレス] scope global temporary dynamic
       valid_lft 14043sec preferred_lft 12243sec
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether [増設ネットワークアダプタのMACアドレス] brd ff:ff:ff:ff:ff:ff
    inet6 [増設ネットワークアダプタのIPv6アドレス] scope link noprefixroute
       valid_lft forever preferred_lft forever

# ip route

default via 192.168.1.1 dev eth0 proto static metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.18 metric 100

再起動後は、コマンドでIP転送の有効化を操作しているので、有効(ip_forwardが1)になっているか確認をします。

# cat /proc/sys/net/ipv4/ip_forward
1

# sysctl --system
…(中略)
* Applying /etc/sysctl.d/01-ipv4fwd.conf ...
net.ipv4.ip_forward = 1
…(中略)

StrongSwanをコンパイルするために必要なパッケージをディストリビューション標準パッケージコマンドでインストール

注意:面倒くさくても実行しないと、パッケージがない、とエラーが出てコンパイルが中止されるんです(´•ω•̥`)

Ubuntu20.04(Hyper-V/x64)
# apt-get -y install libgmp-dev libssl-dev
RaspberryPiOS(2020.08)
# apt-get -y install libgmp-dev libssl-dev

StrongSwan 5.9.0のソースコンパイルのインストール

Hyper-V仮想機とラズパイ共通です。この作業は結構時間がかかりました(特にRaspberry Piだと、20~30分かかりました)

configureとmake

# cd [strongswan-5.9.0.tar.gzが置いてあるディレクトリ]
# tar xvzf strongswan-5.9.0.tar.gz
# cd strongswan-5.9.0/
# ./configure --prefix=/usr --sysconfdir=/etc --enable-openssl
# make
# make install

エラーなくコンパイルできれば、インストールは完了です♪(*˘︶˘*).。.:*♡

StrongSwanの環境設定

ソースコンパイルでStrongSwanをインストールすると、設定ファイルは/etc/ipsec.confに格納されるので、その中にIPsecの接続設定を行います。

[Apacheの基本設定]
# vi /etc/ipsec.conf

IPsecを確立する側(確立を発信する方)、そう、まずはHyper-VのUbuntu 20.04の設定を行います。「サーバー条件」の項にある通り、Hyper-Vマシン側からは、自分のIPアドレスが192.168.1.18、確立相手のRaspberry Piが192.168.1.22になるので、その対を設定ファイルに書き込みます。

「left」は確立を交渉発信する自分を、「right」は確立相手の情報を書き込むとのことです(StrongSwan公式のマニュアルから)

Ubuntu20.04(Hyper-V/x64)
# 以下を追記する
conn [識別名 例:linux-2-linux]
      authby=secret
      auto=start                # IPsec交渉を発信する
      closeaction=restart
      dpdaction=restart
      left=192.168.1.18         # leftは自分側のIPsecゲートウェイ
      leftid=192.168.1.18       # IPsec交渉するのに自分を識別するID
      leftsubnet=192.168.5.0/24
      right=192.168.1.22        # rightは相手側のIPsecゲートウェイ
      rightid=192.168.1.22      # IPsec交渉相手を識別するID
      rightsubnet=192.168.2.0/24

ちなみにIDは、私の場合は簡単のためIPアドレスを使用しましたが、文字列でもOKです。そんでleftsubnetとrightsubnetというのは、自分側と相手側の受け持つVPN領域なので、leftsubnetは自分の持っているVPN領域なので192.168.5.0/24を、rightsubnetは相手のラズパイのVPN領域なので192.168.2.0/24を入れました。

続いて、ラズパイの設定も行います。「サーバー条件」の項にある通り、確立を受ける自分のIPアドレスが192.168.1.22、確立してくる相手側のHyper-V Ubuntu20.04が192.168.1.18になるので、Hyper-V(Ubuntu20.04)とは逆の内容を設定ファイルに書き込みます。

RaspberryPiOS(2020.08)
# 以下を追記する
conn [識別名 例:linux-2-linux]
      authby=secret
      auto=add              # IPsec交渉を受信する
      closeaction=clear
      dpdaction=clear
      left=192.168.1.22
      leftid=192.168.1.22
      leftsubnet=192.168.2.0/24
      right=192.168.1.18
      rightid=192.168.1.18
      rightsubnet=192.168.5.0/24

要は、auto=addとすることで、IPsec確立交渉を受信する側に設定し、leftの内容とrightの内容を真逆にするというところだね。そうすれば、識別名(connの後ろの文字列)が一致すれば、IPsecの接続を確立できる、ということ

StrongSwanのデフォルトでは、PSK方式で、標準でAES/SHA暗号方式を採用しています。それ以外の暗号方式を設定する必要がある場合はまた別途設定するが、ここでは省略。

余談ですが、この時点でのStrongSwanはNAT-Tに対応していて、IPsecをNATに適用させることもできる(かつてはIPsecをNATに適用することができなかった)ので、インターネットでNATが使われている空間でさえも、StrongSwanで構築されたVPNをインターネット越しに通信できるそうです(実験したことはありませんが…)

[StrongSwanの鍵の設定]
# vi /etc/ipsec.secrets
/etc/ipsec.secrets
…
: PSK "[適当な文字列:例…kazumi75kitty]"

デフォルトのPSK方式を使っているので、Hyper-V仮想マシンとラズパイともに同じにします。

StrongSwanの起動

サービスの起動スクリプト作成&有効化

StrongSwanに必要な環境設定がそろったので、起動できるようにしたいと思います。起動スクリプトはSystemdなので、/etc/systemd/systemに作成します

# cd /etc/systemd/system
# vi strongswan.service
strongswan.service
[Unit]
Description=strongSwan

[Service]
Type=forking
ExecStart=/usr/sbin/ipsec start
ExecStop=/usr/sbin/ipsec stop

[Install]
WantedBy=multi-user.target

ここではSystemdのスクリプトは詳しく説明しませんが、起動と停止は親プロセスからはバックグランドで実行されるため、strongSwanでは[Service]のTypeはforkingとなっています。

ufwの設定

ufwもfirewalldのときと同様に、IPsecを受け付けます。ipsecが使うポートは500・4500のTCP/UDPポート番号と、AH・ESPプロトコルを使用しているそうです。ただしここでの設定だと、トンネリングをかます192.168.1.0/24内部限定を明記していなく、ほかのネットワークセグメントからもIPsecのパケットが通行可能であれば受信できてしまいます。しかしここまで対策すると煩雑になるので今回は簡単のためIPsecの許可のみとします。

# ufw allow 500
# ufw allow 4500
# ufw allow to any proto ah
# ufw allow to any proto esp
# ufw status numbered

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 30303/tcp                  ALLOW IN    192.168.1.0/24
[ 2] 5900:5999/tcp              ALLOW IN    192.168.1.0/24
[ 3] 500                        ALLOW IN    Anywhere
[ 4] 4500                       ALLOW IN    Anywhere
[ 5] Anywhere/esp               ALLOW IN    Anywhere/esp
[ 6] Anywhere/ah                ALLOW IN    Anywhere/ah
[ 7] 500 (v6)                   ALLOW IN    Anywhere (v6)
[ 8] 4500 (v6)                  ALLOW IN    Anywhere (v6)
[ 9] Anywhere/esp (v6)          ALLOW IN    Anywhere/esp (v6)
[10] Anywhere/ah (v6)           ALLOW IN    Anywhere/ah (v6)

Hyper-V仮想マシンとラズパイの両方で共通のコマンドです。

起動と動作確認

それでは、起動します。enableでの常時起動有効化&statusで「Active」「Running」になっていることを確認。

まずはIPsec確立交渉を受信する側からStrongSwanを起動したのちに、IPsec確立を発信する側の順に起動させています。ここではラズパイのStrongSwanを起動後に、Hyper-V仮想マシンのStrongSwanを起動させています。

# systemctl start strongswan
# systemctl enable strongswan
# systemctl status strongswan

Hyper-V仮想マシンとラズパイで「Active」「Running」になっていることを確認し、いよいよIPsecトンネリングが確立されているかをチェック。

Ubuntu20.04(Hyper-V/x64)
# /usr/sbin/ipsec status
Security Associations (1 up, 0 connecting):
linux-2-linux[1]: ESTABLISHED 2 minutes ago, 192.168.1.18[192.168.1.18]...192.168.1.22[192.168.1.22]
linux-2-linux{1}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: ********_i ********_o
linux-2-linux{1}:   192.168.5.0/24 === 192.168.2.0/24

# ip xfrm policy
src 192.168.5.0/24 dst 192.168.2.0/24
        dir out priority 375423 ptype main
        tmpl src 192.168.1.18 dst 192.168.1.22
                proto esp spi 0x******** reqid 1 mode tunnel
src 192.168.2.0/24 dst 192.168.5.0/24
        dir fwd priority 375423 ptype main
        tmpl src 192.168.1.22 dst 192.168.1.18
                proto esp reqid 1 mode tunnel
src 192.168.2.0/24 dst 192.168.5.0/24
        dir in priority 375423 ptype main
        tmpl src 192.168.1.22 dst 192.168.1.18
                proto esp reqid 1 mode tunnel
RaspberryPiOS(2020.08)
# /usr/sbin/ipsec status
Security Associations (1 up, 0 connecting):
linux-2-linux[1]: ESTABLISHED 2 minutes ago, 192.168.1.22[192.168.1.22]...192.168.1.18[192.168.1.18]
linux-2-linux{1}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: ********_i ********_o
linux-2-linux{1}:   192.168.2.0/24 === 192.168.5.0/24

# ip xfrm policy
src 192.168.2.0/24 dst 192.168.5.0/24
        dir out priority 375423 ptype main
        tmpl src 192.168.1.22 dst 192.168.1.18
                proto esp spi 0x******** reqid 1 mode tunnel
src 192.168.5.0/24 dst 192.168.2.0/24
        dir fwd priority 375423 ptype main
        tmpl src 192.168.1.18 dst 192.168.1.22
                proto esp reqid 1 mode tunnel
src 192.168.5.0/24 dst 192.168.2.0/24
        dir in priority 375423 ptype main
        tmpl src 192.168.1.18 dst 192.168.1.22
                proto esp reqid 1 mode tunnel

IPsecトンネリングが、Hyper-V仮想マシンとラズパイでちゃんと確立されてました(˶ ・ᴗ・ )੭⚐⚑

おまけ(ipsec.confのIDにドメインなど文字列を指定)

StrongSwanの設定ファイル/etc/ipsec.confで、leftidやrightidで、IPアドレスではなく文字列を使った場合もキャプチャ画面を載せておきます(*´꒳`*)

たぶんこっちのほうがわかりやすいかもしれません。画面はCentOS+openSUSEですが、動作的にはUbuntuなどでも同じだと思います。
例では「raspberrypi」と「testonly@kazumi-jam」を識別させています
ipsec.confのIDに文字列やドメインを指定する

補足(IPsecトンネリングがNATを経由する場合)

わかりやすい画像はまだないけど、ipsec.confでのleftとrightのIPアドレスは、それぞれ自分自身のIPアドレスと、自分から見たNAT変換後の相手のIPアドレスを入れます。その際、leftidとrightidは、必ず自分と相手で対に一致していることが必要になります。

例:
192.168.1.0/24 → 192.168.120.0/28 がNATで仕切られている場合

IPsecGW-1(192.168.1.0/24内)
 left=192.168.1.22
 leftid="gw1"
 right=192.168.1.18
 rightid="gw2"
IPsecGW-2(192.168.120.0/28内)
 left=192.168.120.1
 leftid="gw2"
 right=192.168.120.3
 rightid="gw1"

という風に、IPアドレスはNATを考慮したものを入れることでIPsecが確立できるけど、詳しくはまた後で載せてみます。

次回

一通りのStrongSwan導入で、Raspberry PiとHyper-V上のUbuntu 20.04でも、CentOSの時と同様に、IPsecゲートウェイの構築が完了しました。次はUbuntu下でもそのIPsecゲートウェイにつながったVPNにクライアントとサーバーを接続して、互いに接続できるかを試します( ˶˙ᵕ˙˶ )

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[資格取得]LinuC Level1に合格したので、勉強方法とか取ってどうだったかを書いていく

[資格取得]LinuC Level1に合格したので、勉強方法とか取ってどうだったかを書いていく

先日、LinuC Level1を受けて、101試験、102試験両方とも無事に合格することができ、晴れてLinuC Level1を取得しました。
※ LinuCはLPICから分裂した資格で、ほとんどLPICと内容は変わらないです

LinuCとはなにか?

Linux技術者の成長に貢献する資格です。
Level1(101, 102)、Level2(201, 202)、Level3(300, 303, 304)とレベルが別れており、それぞれで難易度が変わっていきます。
Level2以降はそれよりも下のLevelに合格する必要があるので、まずはLevel1から勉強を始めましょう。

試験公式サイト
公式サイトに概要がのっております!

LinuC Level1の内容紹介

Linuxシステムの構築・運用・管理を目的として作られたレベルの試験です。
101試験と102試験の両方に受からないとLevel1認定はされません。
ちなみに、一つの試験で約15,000円程かかるので落ちないように勉強しましょう!

Level1の勉強を行うと下記のようなことが身につきます。

  • 実務で必要なLinuxの基本操作とシステム管理が行える。
  • Linuxサーバー環境の構築・運用・保守をするための必要な操作とシステム管理ができる。
  • Linuxディストリビューションを利用するために必要な知識がある。
  • 基礎的なLinux操作について、知らないところ及び覚えないといけないところを確認し、習得できる。

試験時間は90分で問題数は60問、大体6割強取れたら合格ができると思います。
全国にあるテストセンターで受験でき、合否は問題回答後、すぐに結果が出てきます。(正直、最後の送信ボタンを押すときはビビリますw)

上記は一部公式サイトから抜粋しております。

なぜ受けようと思ったのか

  • インフラ障害対応時に効率よく調査や原因究明ができるようになりたかった
  • 普段意味がわからず打っていたコマンド(特にオプションですが)もしっかりと覚えたかった
  • 点でしか覚えていなかったことを線で結んで知識を定着させたかった
  • (あと、後輩が受けるということで負けたくなかったから)

勉強方法

まずは101合格を目指しました。
本を購入して一通りぱらぱら読んでみて、気になったコマンドがあれば実際にPCで打ってみました。
途中、練習問題がありますが、LinuCでは記述問題もあるので実際に打っておかないと忘れてしまう可能性が高いです・・

次にPing-tを利用して101範囲の問題を全部金色にしました。
金色にする際に、最初の銅→銀は問題に答えてから答えをみて解説、という形ですべて銀色まで持っていき、その後銀→金は答えを見ずにすべて答えて金色にしました。
この時に、おすすめは20問セットにして回答したらダレなく、振り返りもすぐにできていいかなと思います。

すべて金色にしたら模擬試験を行います。
模擬試験は全部の問題からランダムで出されて60問セットとなります。
自分の場合、大体正答率80%~100%の間を行ったり来たりしておりました。
模擬試験ですが、Ping-tの場合は記述式が問題の中に入っていないので、当日の試験でいうと正答率がPing-tの正答率から10%~15%ぐらい下がるかなと思います。
したがって、デッドラインは75%を切ると当日の合格は怪しいかなと言う感じです・・!(あくまで個人の感想です)

102についても同様の勉強法を行いました。
102は試験問題が体感記述式が多いので、実際にLinux環境をみて勉強したほうが記述式にも対応できるかなと思います。

ちなみに、Ping-tではコマ問(コマンド問題の略かな?)というコンテンツも用意されておりますが、僕はあまり行いませんでした。
それよりも実際にLinuxマシン(僕はMacでしたが)のターミナルで実際にコマンドを打ったりして確認、ファイルの確認とかを行ったほうが身にもなって勉強にもなって一石二鳥かなと思います。

最後に、テキストは下記を購入しました
最短突破 LinuCレベル1 合格教本 [101試験, 102試験対応]

合格して役に立ったこと

普段の仕事はエンジニアマネージャーをしているので、バリバリコーディングするわけではないですが、障害対応になると別です。
緊急対応として1分1秒でも早く障害の原因から対応をするために動いていきます。
やはり調査に対してコマンドを知っているかどうかは大きく変わってくるなという印象です。

また、Linuxシステムを理解できているので、パッケージをインストールする際とかにエラーを吐き出されたときの原因調査にも役に立つことができました。

まとめ

こういった類の資格はテストに受かるためというよりも、自分自身の身になることを主たる目的と捉えてやったほうがいいなと思います。
とはいえ、色々な事情で資格に合格しないと行けなかったり、実力確認として
その時に、本記事を参考に勉強してみると、合格かつ身になる勉強ができるかなと思います。

では、よいLinuxライフを!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【WSL2】CentOS8のVScode設定メモ

動作環境

PowerShell
$ wsl --list --verbose
  NAME       STATE           VERSION
* centos8    Running         2
CentOS
$ cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)

参考サイト

VScodeの設定

1.WindowsにVScodeをインストール。

2.VScodeに『Remote Development』をインストール。
VSWSL.png

CentOSの設定

CentOS
$ sudo yum update
$ sudo yum install wget 
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxサーバー構築リンクまとめ(CentOS7)

Linux(CentOS7)リンクまとめ

Centos old
http://vault.centos.org/

Linux bash
https://courses.cs.washington.edu/courses/cse390a/13sp/bash.html

Linux JNI
http://a4dosanddos.hatenablog.com/entry/2013/06/17/232839
https://qiita.com/kiida/items/9d26b850194fa1a02e67

Linux java
https://51flya.com/linux/380.html
http://netlog.jpn.org/r271-635/2015/04/java_compile_exec.html

Linux コンパイラインストール
http://yohshiy.blog.fc2.com/blog-entry-292.html

Linux コマンド
https://qiita.com/0xfffffff7/items/028ff8c920a6a8c67dc5

Linux network
https://st40.xyz/one-run/article/537/

Linux tomcat
https://stackoverflow.com/questions/38172756/apache-tomcat-8-5-3-manager-app-403-error
http://www.lesstep.jp/step_on_board/tomcat/1285/

Wireshark
https://knowledge.sakura.ad.jp/6286/

linux instructons
http://masatolan.com/internet/linux-free-textbook/

ネットワークセキュリティの設定
https://www.turbolinux.co.jp/products/server/11s/user_guide/tcpwrapperconf.html

centos6 eth0
http://mukaer.com/archives/2012/08/21/centosniceht0/
https://server.etutsplus.com/centos-disable-persistent-net-rules/
https://www.linuxquestions.org/questions/linux-networking-3/device-eth0-has-different-mac-address-than-expected-516793/

centos manual
https://www.server-world.info/query?os=CentOS_6&p=initial_conf&f=3

DHCP
https://www.faq.idcf.jp/app/answers/detail/a_id/569/~/%E8%BF%BD%E5%8A%A0nic%E3%81%AE%E8%A8%AD%E5%AE%9A%E4%BE%8B%EF%BC%88centos7%E7%B3%BB%E3%81%AE%E5%A0%B4%E5%90%88%EF%BC%89

samba
https://www.rem-system.com/centos-samba/

tripwire
https://zero-config.com/centos/install-epel.html

snort(下のリンクが正)
https://upcloud.com/community/tutorials/installing-snort-on-centos/
https://www.rootlinks.net/2018/04/22/install-snort-on-centos-7/

nmap
http://pcmemorin.blog.fc2.com/blog-entry-1315.html

Nessus
https://anditoyugowicaksono.wordpress.com/2016/10/28/install-nessus-di-centos-7/
https://centossrv.com/nessus.shtml

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

多段 SSH で秘密鍵を「ローカルに持つ」パターンと「踏み台に持つ」パターン

はじめに

多段 SSH の設定方法はググればたくさんでてきますが,「踏み台に秘密鍵を持つ」パターンの情報が少なくて躓いたので,今後のためにメモしておきます。

Special Thanks: @chitoku

ローカルに持つ場合

通常はこちらの方法が望ましいです。

[A] ----> [B] ----> [C]
 |
 "~/.ssh/id_rsa_for_B"
 "~/.ssh/id_rsa_for_C"
Host B
  Hostname B.example.com
  User user_b
  IdentityFile ~/.ssh/id_rsa_for_B

Host C
  Hostname C.example.com
  User user_c
  IdentityFile ~/.ssh/id_rsa_for_C
  ProxyJump B

参考: linux - SSH from A through B to C, using private key on A - Server Fault

踏み台に持つ場合

秘密鍵の漏洩リスクがあるためあまり推奨されませんが,踏み台の秘密鍵を全ユーザで共有している場合などには有効です。

[A] ----> [B] ----> [C]
 |         |
 |         "~/.ssh/id_rsa_for_C"
 |
 "~/.ssh/id_rsa_for_B"
Host B
  Hostname B.example.com
  User user_b
  IdentityFile ~/.ssh/id_rsa_for_B

Host C
  Hostname C.example.com
  User user_c
  ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add ~/.ssh/id_rsa_for_C && nc %h %p'

参考: linux - SSH from A through B to C, using private key on B - Server Fault

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxで簡易WebDAVサーバ構築

はじめに

コンテスト中にもっと簡単に素早くファイルサーバ立てれたらいいのになあと思い始めたのがきっかけ。目指すのは、WinSCPのようなクライアントで手早くアクセスとファイル転送やファイルオープンができる環境です。

プロトコルの選定

  • SFTPは?
    SSHサーバを下手にいじって壊すとログインできなくなるため、コンテストではアンタッチャブルな世界(もちろん触れないように設定されているはずではある)
  • FTPは?
    SSHポート転送を間に入れることになった場合に、少し手間(できなくはないはず)
  • WebDAVは?
    SSHポート転送にも耐え、重大な環境破壊を起こす可能性は少なそう

ということで、WebDAVサーバをたてる方向で模索することにしました。

選ばれたのはWsgiDAVでした

  • Nginxは(個人的に)慣れているので簡単だが、デフォルトだとモジュールが足りないのでソースビルドしないといけない。
  • Apacheだと不慣れであることと、触る設定ファイルが多くてよくわからない。もしコンテストでApacheが必須だった場合上手く共存させる自身がない。

ということでメジャーなWebサーバは諦めました。
調べてみたところ、WsgiDAVがとても手軽。
https://github.com/mar10/wsgidav

※動作確認はUbuntu20.04行いましたが、Pythonが入ってるならwindowsでもMacでも大丈夫なはず。

インストール

$ pip install wsgidav cheroot

実行

動作確認。環境によってはsudoいるかも。

$ wsgidav --host=0.0.0.0 --port=8080 --root=/home/ --auth anonymous

あとはブラウザなりWinSCPなりでアクセスしてみる。

動作確認が終わったら、nohupをつけて実行。

$ nohup wsgidav --host=0.0.0.0 --port=8080 --root=/home/ --auth anonymous  > /dev/null 2>&1 &

感想

簡単すぎました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む