【Cisco ASA】HostScan有効後にAnyConnectやASDMのインストールをする

先日解決に時間かかったのでネットに残しておきます。

【問題】
一発でDL画面に行かずJavaのバージョンがどうのこうのだとか色々言われてDLまで辿り着けない、またはLoginしようとしてもLogin Failedとなる

 

【原因】
DAPの設定

 

【解決方法】
DAPに不要な設定によってアクセスができない状態になっていないかを確認する

 

【補足】

・なんでこれで解決できるの?

エラー対応は世の中に全然載ってないですけど解説記事はなぜか一杯あるのでそちらを参照ください

www.infraexpert.com


https://(ASAIPアドレス)にアクセスした場合の表示画面が異なる場合がある

HostScanが有効となっていると、「VPN Web」みたいな(正確に覚えてないです、すみません)画面が出てくるが、これは以下のコマンドで無効化できる

#conf t
(config)#webvpn
(config-webvpn(←多分こんな))#no hostscan image disk0:/[略] (config-webvpn(←多分こんな))#no hostscan enable

【Cisco ASA】ASDMでログイン管理設定をしてもAnyConnectで接続できてしまう

今日つまって解決に30分くらいかかったので一応ネットに残しておこうと思います。

 

【原因】
DAPの設定におけるAAA Attributeの設定

【解決方法】
ASDM内 Configuration > Remote Access VPN > Network (Client) Access > Dynamic Access Policies(以下DAP)からデバイスに直接不要な条件を削除する

(例:デバイスAに対して有効だがデバイスBに対して有効な条件(LDAPなど)を削除する)


【補足】
・なぜこの手順により解決できるか
ASAにおけるDAPの条件設定がデフォルトで「AND」になっているため。

なお、DAPのAAA Attribute及びEndpoint Attributeの設定箇所の下に「Advanced」という設定項目が隠されている。

これを開くと条件を「AND」「OR」のどちらで管理を行うか設定することができるので、それによって対応することもできる。というかこっちの方が一つのDAPで複数管理できていいかもしれませんね。

AESについて

0.前書き

ゼミで「AESについて」という大味なタイトルで輪講をしました。
頑張ったのにゼミ内だけで済ませるのはもったいない気がしたのでそこで使用した資料を上げておこうと思います。

いつも書いている前書きは最後に入れてます。

1.AESとは

www.slideshare.net

1.1.参考文献及び動画など

[暗号入門] 実装して理解する AES - YouTube
-日本語の文献が非常に少ない中、詳細な説明と実装しながらの解説が大変参考になりました。感謝しかありません。ほんとに。

C#でAES暗号化アルゴリズムを外部ライブラリに一切頼らず完全実装してみた - Qiita
-スーパー中学生のスーパー記事です。すごい、未来は明るい。プログラムから処理内容を理解したいときにかなり読みました。感謝です。

AESを理解する - Qiita
-日本語でここまでしっかりとした詳細な解説を書かれている記事はこれだけだと思います、言い回しやわからないことがあったらここを読んでいました。正直輪講なのに本よりこっち読んでました、先生ごめんなさい、書いてくれた方、ありがとうございます...

その他コメントを書くと長くなるのでコメントは省略させていただきますが、以下の論文や記事にも大変助けられました。世の中のネットに所感や解説をあげてくれている人間に足を向けて寝られません。

共通鍵ブロック暗号の変遷(なぜかタイトルの埋め込みがうまくいかない)
https://www.risk.tsukuba.ac.jp/pdf/group-work2005/2005group-4-resume.pdf

AES (Rijndael) の MixColumns を理解する | 晴耕雨読

また、スライド内で紹介している記事もありますのでそちらも是非ご参照ください。

2.近況報告

お久しぶり過ぎます、Sorasukeです。
毎週更新するとか言っといて全然更新してませんでした。

この1か月くらい、くっっっっっっっっそ忙しい毎日を過ごしておりました。

家に帰ってからパソコンや教材と向き合っていて全くゲームする時間もなく、月頭から教習も始まりまして、この1か月くらいは学校かバイト先か教習か、家にいるときはずっとゼミの輪講資料を作成していた、といった感じです。
なんとかゼミの輪講も終わり、教習も少し落ち着いてきて、バイトも少し仕事を減らして頂いてるので記事を書く時間ができました。

あ、無事インターンも決まりました。1社は何度かプロコンなどでお話したことのある企業様で、もう1社様は正直受かると思ってなかった大手ECサイトを運営している企業様です。詳細はいつか話せればなと思います、許可もとらなきゃですね。

一般的にも広く普及しているAESですが、その構造や処理の内容について理解されている方は日本語の文献の少なさからあまり居ないのかな、と思いました。今回はゼミでの発表用に作成した資料を貼って終わりとさせていただきますが、何かご質問等ありましたらコメント頂けたら返すかもしれません。

また、今回初めてSlideShareを埋め込んでみたのですが、見づらいと自分で思ったら何か変えるかもしれません。

それでは今日は疲れてるので早いですがこの辺で。では。

スパニングツリー/STPとは

f:id:Tsunamayomayo:20210610233252p:plain

1.まえがき

どうもです、Sorasukeです。
テストが終わり、ようやく色々な事が落ち着いたと思えば新しくやる事が増えたりとなかなかに忙しい毎日を送っています。
先々週あたりで書こうと思ってたんですがなかなか書く時間が取れなかった内容がいくつかありますので、それらについてを今週は何個か上げようと思います。
今回はSTPことスパニングツリープロトコルです。

2.事前知識

スパニングツリーは、スイッチを使って経路冗長化する際に発生するループの発生を抑えるものです。

経路冗長化を行うと、一般にブロードキャストストームというものが発生します。
ネットワーク機器は通常、ブロードキャスト通信というものを一定期間ごとに自動で行っています。これは、ブロードキャストアドレスというアドレスを使用して同一LAN上の全てのノードにデータを送る通信です。

一般にブロードキャスト通信はARPDHCP、ルーティングアップデートパケットの通信などで行われています。一度WireSharkを使ったことがある方は見たことがあるかもしれません。

ブロードキャスト通信は通常すべてのネットワーク機器がフレームを受信した時点で伝送が終了するのですが、冗長化したネットワークでネットワークが円環状になっていると延々ブロードキャスト通信を横に投げてしまうので、帯域を圧迫して通信のほとんどがブロードキャスト通信で圧迫され、他の通信ができなくなる、といったことが発生します。
はい、これをブロードキャストストーム、と呼びます。

これを予防するための機能がスパニングツリーです。

3.スパニングツリーとは

以下のように経路冗長化したネットワークがあるとします。
f:id:Tsunamayomayo:20210610225314p:plain

このネットワークの経路を、以下のように一部遮断します。
この遮断したポートをブロッキングポートと呼びます。
f:id:Tsunamayomayo:20210610225501p:plain

そうすることで、以下のようなツリー構成になります。
これにより、物理的には円環状に構成されたネットワークが論理的にはツリー構成となっているため、ブロキャスストームは発生しなくなります。 f:id:Tsunamayomayo:20210610225639p:plain

ちなみにですが、ここで上のルートに障害が起きた場合は自動で上のルートを遮断し、下側のルートを使って通信を行うように経路が切り替わります。
このようなツリー型の構成ではトップのネットワーク機器をルートブリッジなどと呼んだりします。

4.ルートブリッジの決め方

先ほど例を上げたネットワークではルートブリッジが分かりやすかったと思いますが、実際には複雑なネットワークが絡み合っており、想像するのが難しいと思います。

そこでどのようにルートブリッジが決められているかを知ることで、どのようなネットワークでもルートブリッジが分かるようになりましょう。

ルートブリッジは、ブリッジIDを使って計算されます。
計算には、プライオリティとMACアドレスの二つの数字が使用されます。
このブリッジIDが最も小さい値のスイッチがルートブリッジとして設定され、ツリー構造のトップになります。
f:id:Tsunamayomayo:20210610230557p:plain

このプライオリティは手動で設定することができます。

5.プライオリティの設定方法

STPの設定に必要なVLANやtrunkの設定については省略します。
最初からの設定が気になる、パケトレで実践してみたいという方は、以下のサイトを参考にするなどしてください。
peace3110.oops.jp

Switch>enable
Switch#conf t
Switch(config)#spanning-tree vlan 10 priority 8192
Switch(config)#end
↓設定の確認
Switch#show spanning-tree vlan 10

6.BPDU

ここは少し応用編というか、ちょっと難しいところです。
先ほど障害発生時に自動でうんぬんという話を書きました。
この処理はBPDUというフレームによって行われています。
このBPDUは色々な要素を使用しています。
全部書くと大変なので、いくつか抜粋して紹介します。

RootID

ルートブリッジのブリッジIDです。
8byteのデータサイズです。
ルートブリッジやブロッキングポートの判別に使用されます。

BridgeID

スイッチ自身のブリッジIDです。
同じく8byteのデータサイズです。
ルートブリッジやブロッキングポートの判別に使用されます。

Max Age

BPDUの最大保持時間です。
2byteのデータサイズです。
デフォルトの設定値である20sを超えてもBPDUが返ってこない場合は障害が発生したと認識されます。

その他

全体像は以下のサイトを参考にしてください。
www.infraexpert.com

6.おわりに

バイト先でSTPについての講師をやることがあったので、そのときに勉強した内容を折角なのでまとめてみました。
ご不明点などあればコメントいただければ返すかもしれません。
なかなか書けていませんでしたが、やっぱり書くと自分の中でスッとまとまる感覚がしていいですね、勉強会を開催したくなる…とまではいきませんがLT会などで人に話したくなる気持ちは少しわかったかもしれません。
それでは、また。

Ansibleに入門したので勉強したノートをまとめてみる

まえがき

APEXやってレポート書いてバイトしていたらいつの間にか2週間経ってました。
…初回で週1とか言ってたのにね
バイト先でAnsibleを使った勉強会の開催をすることになり、そこで使う資料を作り終えたので、そこから要所要所を抜粋しつつ自分の言葉で落とし込むためにまとめていこうと思います。

Ansibleとは

サーバーやネットワーク機器に対して、あらかじめ用意した設定ファイル(Playbookと呼ぶ)に従って自動で設定やインストールなどを行う構成管理ツール。

Ansibleや設定ファイルを用意する必要はありますが、一度用意してしまえば使いまわすこともできるので、多くのサーバーの設定を行いたいときなどに便利です。

余談

ちなみにこういった手動ではなく自動で構成管理を行うような行為をInfrastructure as Codeというそうです。最近流行ってるらしいですね、あんまり聞いたことないですが業界によるんでしょうか?

IaCについては以下が分かりやすかったです。
IaC(Infrastructure as Code)とは

Ansibleのインストール

AnsibleはPythonを使ったツールです。
dnfでもインストールできるらしいですが、自分はできなかったのでpip3でインストールしました。  

インストール手順

$dnf install python3
$python3 -V
Python 3.6.8
$pip3 install ansible
$ansible --version

Playbookとは

Playbookは、ターゲットノードに対する設計書手順のことをいいます。
AnsibleではこのPlaybookをYAMLという書式で記述することになっているのですが、このYAMLの書き方が特殊でちょっとめんどくさいです。

YAMLとは

YAMLが特徴的なのはインデントです。
このインデントをスペース空白2つ分で表します。
注意なのが、
・記述にタブを使うことができないこと
・インデントが間違ってるとエラーを吐くこと
ここが書くときにスペース連打する必要があって面倒です。

実際に使ってみる

Playbookを書いてみる

※␣が全角になっちゃうのでレイアウトぐちゃぐちゃですが半角スペースです

$vi ansible-test.yml

-␣name: Ansible-test
␣␣hosts: localhost
␣␣vars:
␣␣␣␣ansible_become: yes
␣␣␣␣ansible_become_method: sudo
␣␣tasks:
␣␣name: change hostname
␣␣-␣hostname:
␣␣␣␣␣␣name: Ansible-user

文法チェック

Ansibleには文法チェック機能が付いています。
サーバーの変更はシステムに大きな変更を与えることがあるので、実行前に間違った書き方がないかどうかを確認しておきましょう。

$ansible-playbook -i hosts ansible-test.yml --syntax-check
playbook: ansible-test.yml

↑問題がなければ上記のように何も出てこない

テスト実行

実際にどういった挙動が起きるのかを確認することができます。
ここでは実際の実行結果が出力されますが、ターゲットノードには反映されてないので注意です。
PLAY RECAPを見て、すべてokになっていることを確認しましょう。

[admin@tsuna ansible]$ ansible-playbook ansible-test.yml --ask-pass

SSH password:(パスワードを入力)
PLAY [Ansible-test] ************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [change hostname] *********************************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

本番実行

ここまでクリアしていれば、あとは実行するだけです。

[admin@tsuna ansible]$ansible-playbook hosts ansible-test.yml --ask-pass

(checkと一緒なので省略)

確認

ホストネームが変わっていることを確認します。

$hostname

Ansible-user

自分ではなく対象サーバーに実行する

今回の環境

  • ホスト:192.168.100.3
  • ゲスト:192.168.56.1

Playbook

[root@tsuna ansible]# vi ansible-test2.yml

-␣name: install something
␣␣hosts: server
␣␣vars:
␣␣␣␣ansible_become: yes
␣␣␣␣ansible_become_method: sudo
␣␣tasks:
␣␣-␣name: Install Vsftpd
␣␣␣␣yum:
␣␣␣␣␣␣name: vsftpd
␣␣␣␣␣␣state: latest
␣␣-␣name: Install Ftp
␣␣␣␣yum:
␣␣␣␣␣␣name: ftp
␣␣␣␣␣␣state: latest
␣␣-␣name: Install Chrony
␣␣␣␣yum:
␣␣␣␣␣␣name: chrony
␣␣␣␣␣␣state: latest
␣␣-␣name: Install Httpd
␣␣␣␣yum:
␣␣␣␣␣␣name: httpd
␣␣␣␣␣␣state: latest
␣␣-␣name: Install Php
␣␣␣␣yum:
␣␣␣␣␣␣name: php
␣␣␣␣␣␣state: latest
␣␣-␣name: Install mariadb-server
␣␣␣␣yum:
␣␣␣␣␣␣name: mariadb-server
␣␣␣␣␣␣state: latest
␣␣-␣name: Install Php-mysqlnd ␣␣␣␣yum:
␣␣␣␣␣␣name: php-mysqlnd
␣␣␣␣␣␣state: latest

インベントリ

インベントリとは

Playbookをどのホストノードに対して実行するのかを記述したファイルのことです。
IPアドレスやユーザネーム、パスワードなどを記述します。
自分に対してのときは書かない方がすっきりするので書きませんでしたが、ターゲットノードが存在するときにはごちゃつくので書くことをおすすめします。

インベントリ

[root@tsuna ansible]# vi hosts

[server]
192.168.56.1 ansible-user=root

ちなみに

AnsibleはSSHでターゲットノードの設定を行うのですが、一般的にはパスワード認証ではなく公開鍵認証を使います。

チェック、実行

$ansible-playbook -i hosts ansible-test2.yml --private-key="~/.ssh/id_rsa"

1人用とやってることは同じなので省略します。
公開鍵認証を行う場合にはprivate-keyオプションをつけて秘密鍵のパスを指定してください。

できましたでしょうか?
エラーが起きた場合は以下のサイトなどを参考にしてください。AnsibleはCentOSやその人の環境次第で色々なエラーが起きます。
もともと「空のサーバーに対する環境構築ソフト」、という前提で開発されたものなのかもしれませんね。

curecode.jp

qiita.com

おわり

以上です
久々にMarkdown書きましたがやっぱりちょっと書きづらいですね
公開鍵認証については今回省きましたが、理解しているとAnsibleについても理解しやすくなると思います
ちょっとサボってたぶん長めに書きました、ちなみにテスト実行はしてないので間違ってることもあるかもしれません(コメントで訂正くれたら直します ) Ansibleを募集要項に書いてある会社もそこそこあったので、慣れておくと多少有利に働くこともあるかもしれないですね
自分はインターン2社落ちてるのでなんともいえないですが…
では、今回はここで。

2021/05/20追記

なんかもやっとしてたので確認したらエラーが凄かったです、すみません。訂正して色々修正、追記しました。
何を言いたいのかがぐちゃってたので、自分に対してと外に対してで分けることにしました、少しでもわかりやすくなってたら嬉しいです。

参考

ansibleでLinuxユーザーの作成と鍵認証を設定する - Qiita

Amazon.co.jp: Ansible構築・運用ガイドブック インフラ自動化のための現場のノウハウ (Compass Books) eBook: 八木澤 健人: Kindleストア

Cisco AnyConnect Secure Mobility ClientでVPNが張れない

今日あった備忘録です。

AnyConnectでVPNを張る際、他のユーザがログインしているとVPNを張れない(以下のエラーが発生する)のですが、その解決に30分くらいかかったので解決法を置いておきます。

【エラーメッセージ】

AnyConnect profile settings mandate a single local user, but multiple local users are currently logged
into your computer. A VPN connection will be not be established

 

【解決方法】

ほかのWindowsユーザをログアウトさせる

 

【感想】

ユーザがどーのこーのって書いてあるの、正直なんのユーザかよくわからなかったんですが、Windowsユーザのことでした。紛らわしい

とはいっても、"into your computer"って言ってるんだからそりゃそうだって感じもしますけどね、エラー起きてるときって視野狭くなりがちだったり良く分からないこと考えがちなので気付けなくてもしょうがないです。

今日はいつかやる気がしていたルータとスイッチを落としたりもして集中力がなかった気がする、気をつけよう

シフト暗号の総当たり

まえがき

どうもです。お久しぶりです。

インターンや就職に提出するための技術的な話をする場が欲しいと思い、今日から定期的になんかしら書いていこうと思います。(ついでにMarkdownも慣れたい)

初回はシーザー及びシフト暗号です。(配属された研究室が暗号系だったので)

シーザー暗号

アルファベットで表記されたある文字列(以降平文)を3文字ずらすことで暗号化する。

例)

平文:abcdefg

暗号:DEFGHI

 

有名な奴です。ゲームやアニメなんかでも使われることがありますね。

実装も簡単ですが、有名なだけに突破もされやすいです。

シフト暗号

シーザー暗号の改良版。ずらす値を固定するのではなく、任意の数とする方法。

例)

平文:abcdefg

暗号:BCDEFGH

実装

総当たりでの復号の実装です。

#include <iostream>
#include <bits/stdc++.h>
#include <string>

using namespace std;

int main(void){
    string s;
    cout << "入力文字列:";
    cin >> s;
    cout << "復号文字列:" << endl;
    for(int i=0;i<26;i++){
        for(int j=0;j<s.size();j++){
            cout << char('a'+(s.at(j)-'A'+i)%26);
        }
        cout << endl;
    }
}

実行結果

f:id:Tsunamayomayo:20210430183058j:plain

解説

任意の文字列sについて、i文字ずつずらして表示するプログラムです。

アルファベットが26文字なのでそれを26回for文で回して総当たりします。

多分一番わかりづらいであろう以下の1行についてだけ解説します。

cout << char('a'+(s.at(j) - 'A' + i)%26);

s.at(j) - 'A' + i

暗号化された文字列のj文字目[s.at(j)]が「A」から何文字ずれているかを計算し、ずらす分の数字iを加算します。


'a'+(s.at(j) - 'A' + i)%26

加算した対象文字を26で割り、その余り分を'a'に加算することで、i文字分ずらして表示しています。


文字コードがわからん、って人はAtCoder あたりを見てください。

今回の場合、意味を成した文字列になっているのは「helloworld」、よって暗号化に使われた鍵は、ずれた文字数である「4」ですね。

あとがき

今回書くにあたって参考にした本:暗号技術のすべて

平文を小文字、暗号を大文字で書くとかって決まりがあるの、初めて知りました。そういやLinuxでauthorized_keysみたとき全部大文字だったなーなんてことを思い返しながら読んでました。

あとMarkdown、ちゃんと書くのは初めてだったんですが、正直よくわからんまま書き終えました。

まあこれから慣れていくでしょう。週に1本出せたらいいかなって感じのペースで更新していこうと思います。