スキップしてメイン コンテンツに移動

投稿

ラベル(Security)が付いた投稿を表示しています

Let's Encrypt 等のSSL/TSL証明書の詳細確認方法 on Linux

opensslコマンドを用いて証明書の有効期限などを確認する方法。 次の2つについて手順を書いておく。 外部のサーバの証明書を確認 ローカルに保存された証明書の確認 外部のサーバの証明書を確認 クライアントとして証明書を確認する。 blogger.com の証明書を見るには次のコマンドで確認できる。 $ openssl s_client -showcerts -connect www.blogger.com:443 有効期限を見るには次のようにするとnoAfterに有効期限が表示される。 $ openssl s_client -connect www.blogger.com:443 | openssl x509 -noout -enddate ブラウザでチェックサイトから証明書を確認も出来る。 DigiCert® SSL Installation Diagnostics Tool https://www.digicert.com/help/ ローカルに保存された証明書の確認 サーバへsshなどでログインし、直接保存されている証明書を確認する。 Let's Encrypt を利用しているなら証明書の保存場所は /etc/letsencrypt/live/ドメイン名/cert.pem となっているはず。 有効期限は次のコマンドで確認できる。 # openssl x509 -noout -dates -in /etc/letsencrypt/live/example.jp/cert.pem 詳細な情報は -dates オプションを -text に変更する。 # openssl x509 -noout -text -in /etc/letsencrypt/live/example.jp/cert.pem

sudoに設定したのに有効にならない

以前、sudoの設定をした。  sudo の設定  https://atsreport.blogspot.com/2017/12/sudo.html パスワードを入力しなくても使えるように次の設定をした。 # userユーザーにパスワードなし設定を行う場合 user    ALL=(ALL)    NOPASSWD: ALL この設定は /etc/sudoers ファイルに書き込まれている。 編集は visudo コマンドを用いて行う。 sudoers ファイルにかかれている設定は後方に書かれている内容が有効になる。 つまり、次のように書かれていると user はsudoコマンドにパスワードが必要になる。 ===sudoers===  user    ALL=(ALL)    NOPASSWD: ALL  user    ALL=(ALL)    ALL ===sudoers=== また、sudoersファイルの末尾には次の行がある。 #includedir /etc/sudoers.d↲  これはコメントアウトではないため sudoers.d/ ディレクトリの内容も参照される。 なので設定ファイルは sudoers.d/ディレクトリに置けば有効になる。 このとき、次のコマンドで設定ファイルを編集しなければいけなかった。 $ sudo visudo -f /etc/sudoers.d/$(whoami) ※ $(whoami) は 好きなファイル名に変えてもよい。 直接変更してしまったため、syntax errorとなりsudoが使えなくなった。 root パスワードがわからないのでsuコマンドも使えず、 仕方がないのでシングルユーザモードで起動し修正をした。 pkexec コマンドが使えれば、 このコマンドがsudoの代わりになるのですぐに直すことができる。 [参考] 日本語マニュアル sudo https://linuxjm.osdn.jp/html/sudo/man8/sudo.8.html 日本語マニュアル sudoe...

Webページの Basic認証

Webサイトの特定のアドレスへのアクセスにパスワードを設定したい。 そこでBasic認証の設定を行う。 Webサーバは、Apache と nginx の場合を記す。 Apache の場合 httpd.conf の 設定を AllowOverride All にしておく。 AllowOverride http://httpd.apache.org/docs/trunk/ja/mod/core.html#allowoverride この設定で .htaccess ファイルが有効になる。 その上で次の2つのファイルを作ると そのディレクトリにアクセスするにはユーザ名とパスワードが必要になる。 ===.htaccess ====== AuthUserfile /絶対パス/.htpasswd AuthName "Please enter your ID and password" AuthType Basic require valid-user =============== === .htpasswd ====== ユーザ名 : パスワードのハッシュ =============== [参考] .htaccess による認証用 パスワード暗号化ツール http://www.luft.co.jp/cgi/htpasswd.php ベーシック認証用 .htacess 作成ツール https://www.softel.co.jp/labs/tools/basic-auth/ nginxの場合 nginxの設定ファイルに次を書き込む。 書き込むのはBasic認証をさせたいlocationディレクティブの中に書く。 ===== auth_basic "メッセージ"; auth_basic_user_file /絶対パス/.htpasswd; ===== ここで設定したアドレスにパスワードのファイルをおく。 === .htpasswd ====== ユーザ名 : パスワードのハッシュ =============== [参考] Nginx で Basic 認証 https://qiita.com/kotarella1110/items/be76...

Let's Encrypt 自動更新 で怒られた

ここで Let's Encrypt を導入したことを書きました。 Webサーバ に Let's Encrypt を導入し https で接続できるようにした https://atsreport.blogspot.com/2019/04/web-lets-encrypt-https.html サーバ更新したので設定をいじっていてLet's Encryptの更新コマンドを実行した。 すると、パーミッションを直せと怒られた。 # certbot-auto renew certbot-auto has insecure permissions! To learn how to fix them, visit https://community.letsencrypt.org/t/certbot-auto-deployment-best-practices/91979/ 詳細はリンク先をみてもらうとして、大雑把に言うと  root 以外に触れないようにしろ! ということだった。 具体的には、インストール先 /usr/local/bin/certbot-auto を推奨しており、 certbot-auto の所有者をrootにして、root以外から書き込めないようにとのこと。 # chown root /path/to/certbot-auto # chmod 0755 /path/to/certbot-auto とりあえず、所有者とパーミッションだけ直しておいた。 Certbot-auto deployment best practices https://community.letsencrypt.org/t/certbot-auto-deployment-best-practices/91979

SELinux を有効や無効にする方法

SELinux (Security-Enhanced Linux) SELinuxとは、Linuxに強制アクセス制御機能を追加するモジュールである。 CentOS等のLinuxはインストール時にSELinuxが有効になっていたりする。 SELinux Project Wiki http://selinuxproject.org/ SELinux Project - github https://github.com/SELinuxProject Security-Enhanced Linux - NSA https://www.nsa.gov/what-we-do/research/selinux/ 現状の確認 は次のコマンドで行える。 # sestatus # getenforce この結果は次の3通り Disabled 機能が無効 Enforcing アクセスの制御がされている状態 Permissive アクセスの制御はされていないが、ログが取られている状態 以下のコマンドで 有効 無効 に出来る。 Enforcing に変更する場合 # setenforce Enforcing または # setenforce 0 Permissive に変更する場合 # setenforce Permissive または # setenforce 1 SELinux の設定については以下のファイルを変更すればいい。 /etc/selinux/config

CentOS7 の firewalld を設定

CentOS7 より firewalld が導入された。 iptables コマンドもあるので利用はできるが、firewalld を使ってみることにする。 今の設定を確認するためには次のコマンドを実施。 # firewall-cmd --list-all firewalld は zone というものでアクセスを制御する。 zone は次のコマンドで一覧が見れれる。 # firewall-cmd --list-all-zones public という zone に http のアクセスを許可を追加する。 # firewall-cmd --zone=public --add-service=http 再起動後も有効にするためには --permanent オプションを付ける。 # firewall-cmd --zone=public --add-service=http --permanent --permanent オプションを付けない場合は即時有効になるが、 つけた場合はリロードが必要。 # fiewall-cmd --reload 直接ポート番号を指定する場合は次のコマンドを実行。 この例は pbulic ゾーン で TCP 8888番ポートを開放。 # firewall-cmd --zone=public --add-port=8888/tcp 設定できるサービス一覧を見るコマンド。 # firewall-cmd --get-services ポートの設定は次に保存されている。 /usr/lib/firewalld/services/ [参考] 【丁寧解説】Linuxのファイアウォール firewalld の使い方 https://eng-entrance.com/linux-centos-firewall FirewallD/jp https://fedoraproject.org/wiki/FirewallD/jp ハマる前に理解する「Firewalld」の設定方法、「iptables」との違い - @IT https://www.atmarkit.co.jp/ait/articles/1602/18/news019.html

adiary 構築 on NGINX in CentOS6 其の二

VirtualBox に CentOS6 の仮想環境を準備し、そこにWebサーバ nginx をインストールし、ブログシステム adiary を導入した。 https://atsreport.blogspot.com/2017/12/adiary-on-nginx-in-centos6.html adiaryの公式サイトにある手順通りに行ったが、表示がおかしい。 具体的には、ページは読み込まれるのにcssファイルが読み込まれない為、レイアウトがおかしい。 原因はSELinuxだった。 次のコマンドで一時的に無効にするとレイアウトがきちんと表示された。 # setenforce 0 取り敢えずこの状態でブログシステムは稼働するが、SELinuxの設定をする場合は以下のページを参照して設定する。 [参考] Security-Enhanced Linux - Red Hat Engineering Content Services https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/security-enhanced_linux/ SELinux - fedora https://docs-old.fedoraproject.org/ja-JP/Fedora/19/html/Security_Guide/ch09.html

Linux コマンド で パスワードの自動生成する

新規に登録するパスワードの為にランダムな文字列が欲しいことがある。 特に一度しか入力しないWi-Fiのパスワードなどは、出来るだけ複雑にしておきたい。 ターミナルより以下のコマンドを入力するとランダムな文字列が出力される。 $ cat /dev/urandom | tr -dc [:alnum:] | fold -w 24 | head -n 10 0hUvC7ZrZuInQcauCiXisiyb vHjj4UZxYv1AkFePOJ83jgnQ zAhevCFq6QV1lHJp9XetOSKh DnfgR84UKI1A1JlQFso9xd3N DohYiqwTfSFJw5PlFltMP58N 上記コマンドはランダムな英数字を24文字で改行して10行表示するコマンドである。 次の4つのコマンドをパイプで繋いでいる。 cat /dev/urandom ランダムな文字列を出力する。指定するデバイスを /dev/random と指定しても同じような結果になることもある。これだけを実行するとひどいことになるかも。 tr -dc [:alnum:] 文字の置換や削除を行う。 オプション -d は削除を、-c は補集合を表しており、[:alnum:]はアルファベットと数字を表している。 このコマンドの意味は「英数字以外を全て削除する」という意味である。 [:alnum:] を [:alpha:] に置き換えればアルファベットのみで、[:graph:] に置き換えれば英数記号で表示される。 fold -w 24 文字列の長さを24文字で改行する。 head -n 10 10行表示する。 [参考]/dev/urandomを使ってランダムなパスワードを生成する方法 http://l-w-i.net/t/ubuntu/passwd_001.txt Man page of CAT https://linuxjm.osdn.jp/html/GNU_coreutils/man1/cat.1.html Man page of TR https://linuxjm.osdn.jp/html/GNU_coreutils/man1/tr.1.html Man page of FOLD https://linuxjm.osdn.jp/ht...

Linux Firewall の設定 [ iptables ] 其の二

Linux Firewall の設定 [ iptables ] の続き iptables に引っかかったログを取りたいため以下の設定を行う。 iptables ルールの一覧表示 iptables -nvL --line-numbers オプション 説明 -n IPアドレスをDNSに問い合わせない -v 詳細な設定を表示 -L ルール一覧を表示 --line-numbers ルール番号を表示 ログの出力の設定 iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix "[iptables firewall] : " --log-level=info オプション 説明 -m limit -limit 1/s 単位時間当たりに記録するパケット数(この場合は1秒1パケット) -j LOG ログ出力を実施 -log-prefix “[iptables firewall] : ” ログ出力時につける識別子。 -log-level=info ログ出力のレベル。デフォルトはwarning なお、この設定だとログを取りすぎる可能性があるため、iptables のルールの順序を再考する必要がある。 次のルールだとログを取ってから、TCP 22 へのアクセスは捨てられる。 # iptables -nL LOG all -- 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 5 LOG flags 0 level 6 prefix `[iptables firewall input] : ' DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 次のルールだと先に TCP 22 へのアクセスが捨てられるため、ログは残らない。 # iptables -nL DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 LOG all -- 0.0.0.0/0 0.0.0.0/0 ...

sudo の設定

visudo コマンドを実行し設定を編集。 実際には /etc/sudoers を編集していることになる。 このファイルに書かれているユーザと、 書かれているグループに所属するユーザのみが sudo コマンドを使える。 #から始まる文はコメントである。 この場合、wheel グループに所属しているユーザはsudoコマンドで管理者権限を得ることが出来る。 %から始まる文字はグループ名を表す。 %wheel        ALL=(ALL)       ALL グループ名の後は、 ホスト =(実行権限) コマンド を表している。 新規作成したユーザ(ユーザ名:user グループ名:group)にsudoコマンドが使えるようにするには、  user ALL=(ALL) ALL と記述するか、 %group ALL=(ALL) ALL とかけばよい。 又は、 %wheel        ALL=(ALL)       ALL が書かれていればuserをwheelグループに追加してもよい。 次のようにグループに追加する。 usermod -aG wheel user 又は gpasswd -a user wheel [参考] sudoの権限を設定するvisudoコマンド【Linuxコマンド集】 https://eng-entrance.com/linux-command-visudo Linuxでユーザーをグループに追加するコマンドのmemo https://qiita.com/unikan/items/35af755de7a0b0346c02 # groupグループにshutdownのみパスワードなしできるようにする %group    ALL=(ALL)    NOPASSWD: /sbin/shutdown # userユーザーにパスワードなし設定を行う場合 use...

Linux Firewall の設定 [ iptables ]

iptables (IPv4)、ip6tables (IPv6)でのオプションについて iptables、ip6tables は、Linux カーネルのパケットフィルタルールの設定を行える。 テーブルは、filter、nat、mangle、raw、security等がある。 テーブルの指定を省略すると filter テーブルが指定される。 次の表はルール追加と削除の例である。 -t table コマンド chain rule-specification -j target 説明 -t table コマンド chain rule-specification -j target 説明 [-t filter] -A INPUT -p tcp --dport ** -j ACCEPT 次を末尾に追加。TCP**番ポートを通過 [-t filter] -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 次を先頭に追加。確立済みの通信を許可 [-t filter] -A INPUT -i lo -j ACCEPT 次を末尾に追加。localhostからの通信許可 [-t filter] -D INPUT 3 INPUTチェイン 3番のルール削除 -P (または --policy) コマンド 各table内のchainについてpolicyを設定する。 ある通信が対応するchainにおいて、対応するルールがない場合にどのように処理するかを決定する。 -t table -P chain target 説明 -t table -P chain target 説明 [-t filter] -P INPUT ACCEPT INPUTはパケット通過 ...

ssh公開鍵認証 クライアントの設定

ssh公開鍵認証 クライアントの設定について 以下の手順にて公開鍵認証の設定を行う。 何らかの手順でssh接続するサーバを操作できる必要がある為、 サーバ設置後速やかに設定する方が良い。 sshd_config ファイルの内容 を参考にしてサーバの設定を行ったなら、パスワード認証ができるので この状態でパスワード認証から公開鍵認証へ切り替える。 まずはじめに、公開鍵と秘密鍵の2つを生成する。 この作業はセキュリティ上クライアント側で行い、秘密鍵は通信経路を通さないようにする。 Windowsであれば生成するプログラムをダウンロードして利用する。 多くの場合、sshクライアントソフトがその機能を持っているのでこれを利用する。 ここではLinuxの場合について記入する。 Linuxで、 ssh-keygen コマンドを用いて作成する。 コマンドは次のようなものがある。 ssh-keygen -t dsa ssh-keygen -t rsa ssh-keygen -b <ビット数> -t rsa ssh-keygen -b 256 -t ecdsa ssh-keygen -b 384 -t ecdsa ssh-keygen -b 521 -t ecdsa ssh-keygen -t ed25519 -t オプションは dsa,rsa,ecdsa,ed25519 を指定する。 -b オプションはビット数を指定します。大きい方がセキュリティが高く、処理は重くなる。 ecdsaを指定した場合、上記の3種類しか指定できない。 rsaを指定した場合、デフォルトで2048ビットであり、それ以上の値を指定できる。 dsaとed25519は指定できない ecdsaやed25519は楕円曲線を用いた暗号であり解読が困難であるため、サーバが対応していればこれらを選択する。 そうでなければ、dsaやrsaを使用する。できればrsaでビット数の大きいものを選択する。 dsaやrsaはフェルマーの小定理を用いた暗号であり、素因数分解を解くことによって解読される。ビット数は少しでも多いほうが解読が困難になる。 ecdsaやed25519は楕円曲線暗号を用いている。 これは、種数1の代数多様...

sshd_config ファイルの内容

CentOSサーバで sshd_config の設定をした時の設定ファイルを書いておく。 何かの役に立つかも。 ちなみに設定を有効にするには systemctl reload sshd servcie ssh reload /etc/init.d/sshd reload /etc/rc.d/init.d/sshd reload 等を実行。 なお、次のサイトを参考にした。 [参考] SSHD_CONFIG (5) OpenSSH-7.3p1 日本語マニュアルページ (2016/10/15) https://euske.github.io/openssh-jman/sshd_config.html sshd_configの設定項目の理解を目指す https://unskilled.site/sshd_config%E3%81%AE%E8%A8%AD%E5%AE%9A%E9%A0%85%E7%9B%AE%E3%81%AE%E7%90%86%E8%A7%A3%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99/ SSH サーバの設定 http://www14.plala.or.jp/campus-note/vine_linux/server_ssh/sshd_config.html OpenSSHの設定について整理する(sshd_config) http://eno0514.hatenadiary.jp/entry/20160417/1460828669 -----ここから----- # sshd_config OpenSSH_5.3 ## sshd のポート デフォルトは22 #Port 22 ## 接続をを許可する接続元のIPアドレス体系 IPv4 IPv6 ## 設定値 any inet inet6 #AddressFamily any ## 接続を許可する接続先(サーバ側)のIPアドレス ## ifconfig などで表示されるIPアドレスを指定 #ListenAddress 0.0.0.0 #ListenAddress :: ## sshが受け付けるのプロトコルバージョン ## 設定値は1と2があるが、1は脆弱性があるため使用しない Protoc...

hosts.allow アクセス制御設定

自宅内のLANにRaspberryPiを設置した。 不要かもしれないが、アクセス制御設定を行った。 制御は TCP Wrappers が行うため、hosts.allow hosts.deny を編集した。 この設定では、接続出来るIPアドレス(またはホスト)を指定することしか出来ない。 もっと細かい制御については、Linuxだと iptables 、BSD系だと PF などで行う。 [参考] Turbolinux 11 Server: ユーザーガイド 設定ファイル(/etc/hosts.allow、/etc/hosts.deny)の編集 http://www.turbolinux.co.jp/products/server/11s/user_guide/tcpwrapperconf.html 大雑把にいえば、  集合 A : hosts.allow で設定したホスト の集合  集合 D : hosts.deny で設定したホスト の集合 とすると、  Aの補集合 ∩ D に該当するホストのみをアクセス拒否にする。 取り敢えず、hosts.deny に  ALL : ALL と書き込み、hosts.allow に  ALL : 192.168.0. を書き込んだ。  もし、外部からのアクセスを許可する場合は hosts.allow に  ALL : *.spmode.ne.jp とすれば、ドコモのSP-mode経由からのアクセスは許可される。 他にも主要なホスト名は次のようになっているようだ。  NTTドコモ iモード .docomo.ne.jp spモード .spmode.ne.jp mopera .mopera.ne.jp au ezweb .ezweb.ne.jp Yahoo!ケータイ .jp-*.ne.jp --- jp-d.ne.jp    北海道 jp-h.ne.jp    東北・新潟 jp-t.ne.jp    関東・甲信 jp-c.ne.jp    東海 jp-r.ne.jp    北陸 jp-k.ne.jp ...