PG WORKS

PHPやLinux(サーバー)などのノウハウや、便利なツールを紹介していきます。

【CentOS】SSHの不正アクセスをBANするFail2banの設定

SSHからの不正アクセスを監視するFail2banの設定手順になります。

ほぼ海外からの総当たり攻撃なので、随時SSHの接続ログを確認して不正アクセスがないか確認しましょう。
※あまりにも多い場合、契約した先に確認し報告することをおすすめします。

不正アクセスがないかログから確認

less /var/log/secure

Fail2banのインストールと設定手順

yum install fail2ban
vi /etc/fail2ban/fail2ban.local
[Definition]
loglevel = NOTICE
vi /etc/fail2ban/jail.local
# 1時間以内に5回不審なアクセスがあったら1日BAN
bantime  = 86400
findtime  = 3600
maxretry = 5

#CentOS7の場合systemd
backend = systemd

# SSHのアクセスに対する設定
[sshd]
enabled = true
banaction = firewallcmd-ipset
# 起動コマンド
systemctl start fail2ban

# 停止コマンド
systemctl stop fail2ban

# 自動起動を有効
systemctl enable fail2ban

# 自動起動の確認
systemctl is-enabled fail2ban

#現在のBAN状況
fail2ban-client status sshd

参考サイト様

qiita.com

【Laravel版】PDO(mysql)を使ったSQL操作

Laravel版のPDOを紹介。

最初は使い方がわからず戸惑いましたが、今はページ送りやGET/POST関連の操作が気軽に実装できて重宝しています。

1件だけデータを取得

<?php
$sample = $DB::table('テーブル名')->where('id',1)->first();
// IDを表示
echo $sample->id;
?>

あいまい検索(sampleという名前がつくものすべてを検索)

<?php
$sample = $DB::table('テーブル名')->where('name','like','%sample%')->first();
// IDを表示
echo $sample->name;
?>

名前がNULLになっている番号を検索

<?php
$sample = $DB::table('テーブル名')->whereNull('name')->first();
// IDを表示
echo $sample->id;
?>

名前がNOT NULLの番号を検索

<?php
$sample = $DB::table('テーブル名')->whereNotNull('name')->first();
// IDを表示
echo $sample->id;
?>

複数のデータを取得

<?php
$samples = $DB::table('テーブル名')->get();
if( isset($samples) && count($samples)>=1){
  // あるだけIDを表示
  foreach( $samples as $row ){
    echo $sample->id;
  }
}
?>

ページ送り付きで検索

<?php
// Contoroller内で定義
// samplesview.bladeというファイルがあることを前提
$limit = 30;
$samples = $DB::table('テーブル名')->paginate($limit);
return view('samplesview',compact('samples'));

// samplesview.blade内で定義
// ページ送りを表示
{{ $samples->render(); }}

//検索したinputデータを引き継ぎしたい場合
{{ $samples->appends('id', @$inputs['id'])->render(); }}
?>

OFFSETとLIMITの指定

<?php
$samples = $DB::table('テーブル名')->offset(0)->limit(5)->get();
if( isset($samples) && count($samples)>=1){
  // あるだけIDを表示
  foreach( $samples as $row ){
    echo $sample->id;
  }
}
?>

データ編集系(トランザクション込み)

<?php
// データの追加
DB::beginTransaction();
try
{
   $DB::table('テーブル名')->insert(array('id'=>1));
   $id = DB::getPdo()->lastInsertId();  //新規追加したIDを取得
   DB::commit();
} catch( \exception $e ) {
   DB::rollback();
}

// データ更新
DB::beginTransaction();
try
{
   $DB::table('テーブル名')->where('id',1)->update(array('name'=>'samplename'));
   DB::commit();
} catch( \exception $e ) {
   DB::rollback();
}

// データ削除
DB::beginTransaction();
try
{
   $DB::table('テーブル名')->where('id',1)->delete();
   DB::commit();
} catch( \exception $e ) {
   DB::rollback();
}
?>

Let’s Encrypt(レッツエンクリプト)でワイルドカードを設定する方法

#「ドメイン名」は設定するドメインに変更
#「*」はワイルドカード指定
#「メールアドレス」こちらも自前のアドレスに変更
./certbot-auto certonly --manual -d 「*.ドメイン名」 -m 「メールアドレス」 --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory

上記のコマンドを流すと、TXTレコードにドメインと、認証コードを設定してくださいと案内が表示されますので、レジストラにて設定します。
↑(認証コードは、コマンドを流すたびに変更されるため、浸透されるまでそのまま放置)

ムームードメインだと下記の記述になります。

サブドメイン 種別 内容
_acme-challenge TXT 認証コード

即時反映されないため、下記のコマンドで確認します。

#「ドメイン名」は確認するドメインに変更
nslookup -q=txt _acme-challenge.「ドメイン名」

下記の内容が表示されれば、浸透したことになります。
※浸透に時間かかる場合もあるため、何回か試すことをおすすめします。

Non-authoritative answer:
_acme-challenge.「設定したドメイン」    text = 「設定した認証コード」

確認出来た後、認証コードが表示された画面で放置したのを進めることで、証明書が発行されます。

【PHP】CSVファイルの操作サンプル集

CSVファイルのプログラムを作るとき毎回忘れるためメモ。
※随時更新していきます。

CSVファイルの読み込み

<?php
$readPath = "ファイルのパス";
$filename = "ファイル名";
$file = new SplFileObject($readPath.$filename); 
$file->setFlags(SplFileObject::READ_CSV); 
foreach ( $file as $line ) {
	$records[] = $line;
}
?>

LaravelでSplFileObjectを使う場合

<?php
$readPath = "ファイルのパス";
$filename = "ファイル名";
$file = new \SplFileObject($readPath.$filename); 
$file->setFlags(\SplFileObject::READ_CSV); 
foreach ( $file as $line ) {
	$records[] = $line;
}
?>

「new \SplFileObject」「\SplFileObject::READ_CSV」に変更する。

【Windows10】HDMI接続で外部モニターが映らないときの対処方法

今回のWindows10のアップデートで外部モニターが表示されない現象に陥りました。

モバイル用ノートパソコンの「Intel HD Graphics」ドライバーを最新にすることで解決

www.intel.co.jp

上記の方法で表示されない場合、「Intel HD Graphics」のデバイスを無効/有効に切り替えると表示されるとの報告も有りました。

バイスマネージャーでの手順

  1. Windowsキー」を押して「デバイスマネージャー」と入力
  2. 「デバイスマネージャー」をクリック
  3. 「デバイスマネージャー」の「ディスプレイアダプター」の「Intel HD Graphics」を右クリック
  4. 「デバイスを無効にする」をクリック
  5. 再度「Intel HD Graphics」を右クリック
  6. 「デバイスを有効にする」をクリック

これでも表示されない場合は、システムの復元をしているもの手段ですが、その前に、モニターの電源ケーブルHDMIケーブルが抜けているまたは断線していないかの確認を最初にしましょう。