この記事は何の記事 ?
LinuC202 は登場人物があまりにも多く,
「君は何をされている方なの ?」となる事が多々ありました
ということで登場人物を簡単にまとめました
ネットワーククライアントの管理
DHCP
クライアントの IP アドレスを自動的に割り当てるプロトコル
dhcpd
DHCP サーバーのデーモン
dhcpd.conf
dhcpd の設定ファイル
/etc/dhcpd.conf
や /etc/dhcp/dhcpd.conf
に置かれる
雰囲気は以下
subnet xxx.xxx.xxx.xxx netmask 255.255.0.0 {
option routers xxx.xxx.xxx.1;
option subnet-mask 255.255.0.0;
default-lease-time 21600;
}
dhcpd.leases
dhcpd が現在貸し出している IP アドレスが記録されている
DHCP クライアント
DHCP クライアント
- dhclient
- pump
- dhcpcd
dhclient コマンドで,
以下のように DHCP サーバーから IP アドレス等を取得する
dhclient -d enp0s4
dhcrelay
自分のネットワークに DHCP サーバーがいない時は,
隣町の DHCP サーバーまで行かないといけません
このように異なるネットワークで DHCP サーバーを利用する時は,
DHCP リクエストを中継する必要があります
それを行うのが DHCP リレーエージェントです
また,そのデーモンが dhcrelay
です
radvd
IPv6 では DHCP なしで IP アドレスを自動設定できます
クライアントがルーターにルーター要請(RS)を送り,
ルーターがルーター通知(RA)を返します
radvd
パッケージを導入すると,ルーター通知を返せるようになります
クライアントは RA を元に,
IP アドレスの生成やデフォルトゲートウェイの設定を行います
PAM
認証方法が色々あって管理できない...
そこで一元管理して差し上げようというのが PAM です
取り外しできる 認証 モジュールの集まり
Pluggable Authentication modules
といった感じです
pam.d
PAM の設定ファイルが置かれているディレクトリです
etc/pam.d
に su
や passwd
といったファイルが置かれています
それぞれの認証の設定ファイルが置かれています
PAMの設定ファイルの書式
雰囲気は以下の通りです
モジュールタイプ コントロール モジュールのパス 引数
auth requisite pam_deny.so
SSSD
認証サービスから認証情報を取得し,
認証の集中管理や,オフラインで認証できるようにしてくれる子
sssd.conf
SSSD の設定ファイル
etc/sssd/sssd.conf
ファイル
雰囲気は以下
[sssd]
domains = ldap_domain
services = nss, pam
config_file_version = 2
[domain/ldap_domain]
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
access_provider = ldap
cache_credentials = True
ldap_uri = ldap://ldap.example.com
ldap_search_base = dc=example,dc=com
ldap_id_mapping = True
default_shell = /bin/bash
fallback_homedir = /home/%u
LDAP
ディレクトリ情報の情報をやりとりするプロトコル
ディレクトリ情報ツリー
国,組織,部門,個人のように階層構造に情報が格納されているツリー
このツリーの情報を組み合わせて個人を識別できるようにするのが識別名
「日本」の「いろは組織」の「ほへと部門」にいる「ちりぬるを」さんの
識別名は以下のようになる(雰囲気)
uid=ちりぬるを, ou=ほへと部門, dc=いろは組織, dc=日本
LDIF
LDAP Data Interchange Format の略
LDAP ディレクトリのデータを LDIF 形式でエクスポートとし,
他の LDAP サーバーにデータを移行する際などに利用する形式
雰囲気は以下
dn: uid=john.doe,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
uid: john.doe
cn: John Doe
sn: Doe
givenName: John
mail: [メールアドレスを削除しました]
telephoneNumber: +1 555-123-4567
スキーマ
LDAP でデータを格納するための,
オブジェクトクラスや属性の定義のこと
etc/openldap/schema
ディレクトリ以下にある
主なスキーマは core.schema
や nis.schema
など
オブジェクト識別子
LDAPディレクトリ内の
オブジェクトクラスや属性などを一意に識別するための識別子
inetOrgPerson といったオブジェクトクラスなどに「2.16....(省略)」
といたように識別子が振られている
OID は重複しないように IANA によって管理されている
OpenLDAP
LDAP を利用するのによく使われる
OpenLDAP サーバー
サーバー側のデーモンは slapd
以下のコマンドで設定管理
コマンド | 説明 |
---|---|
slapadd | LDAP データベースにエントリを追加 |
slapcat | LDAP データベースを LDIF で確認 |
slapindex | LDAP データベースのインデックスを振りなおす |
slappasswd | 暗号化されたパスワードを作成 |
slaptest | サーバーの設定を確認 |
OpenLDAP クライアント
以下のコマンドを利用する
コマンド | 説明 |
---|---|
ldapadd | エントリ追加 |
ldapsearch | エントリ検索 |
ldapdelete | エントリ削除 |
ldapmodify | エントリ変更 |
ldappasswd | パスワード変更 |
アクセス制御
エントリや属性に対してアクセス制御を行う
誰が,何に対して,どのような操作を制御するのか記述する
雰囲気は以下
olcAccess: to attrs=userPassword
by self write
by anonymous auth
by * none
ドメインネームサーバー
BIND
代表的なDNSサーバーソフトウェア
rndc
BINDを操作するコマンド
/etc/named.conf
BINDのメイン設定ファイル
雰囲気は以下
options {
directory "/var/cache/bind";
recursion yes;
allow-query { any; };
forwarders {
8.8.8.8;
8.8.4.4;
};
dnssec-validation auto;
listen-on-v6 { any; };
};
zone "." IN {
type hint;
file "named.ca";
};
zone "example.com" IN {
type master;
file "db.example.com";
allow-update { none; };
};
zone "192.168.1.in-addr.arpa" IN {
type master;
file "db.192.168.1";
allow-update { none; };
};
dnssec-keygen
BINDでTSIGやDENSECを使ってゾーンデータを認証するための鍵を作成するコマンド
HTTPサーバーとプロキシサーバー
Apache
httpd.conf
メインの設定ファイル
設定項目をディレクティブという
雰囲気は以下
# 全体設定
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin admin@example.com
ServerName example.com:80
# ディレクトリ設定
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# ログ設定
ErrorLog "logs/error_log"
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "logs/access_log" common
# VirtualHost設定
Include conf.d/*.conf
外部設定ファイル
だいたいは .htaccess
がそのファイル
AllowOverride ディレクティブで外部設定ファイルの許可が必要
AccessFileName .htaccess
<Directory "/var/www/html/example">
AllowOverride All
</Directory>
Apache サーバー起動
CentOS
# systemctl start http.service
Ubuntu
# systemctl start apache2.service
Apache サーバー制御
apachectl
コマンドで制御
Apache で利用するモジュール
mod_authz_basic
など mod_xxx
のようなモジュールを
ロードすることで機能を拡張できる
Nginx
高速な web サーバー
リバースプロキシサーバーやメールサーバーとしての機能もある
/etc/nginx/nginx.conf
メイン設定ファイル
雰囲気は以下
user nginx; # 実行ユーザー
worker_processes auto; # ワーカプロセス数 (auto は CPU コア数に合わせる)
events {
worker_connections 1024; # ワーカプロセスあたりの接続数
}
http {
include mime.types; # MIMEタイプの設定
default_type application/octet-stream; # デフォルトのMIMEタイプ
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; # ログフォーマット
access_log /var/log/nginx/access.log main; # アクセスログ
error_log /var/log/nginx/error.log warn; # エラーログ
sendfile on; # sendfile システムコールを有効化
keepalive_timeout 65; # keepalive タイムアウト
server {
listen 80; # 待ち受けポート
server_name example.com; # サーバー名
location / {
root /usr/share/nginx/html; # ドキュメントルート
index index.html index.htm; # インデックスファイル
}
}
}
Squid
Linuxでよく使われるプロキシサーバー
/etc/squid/squid.conf
アクセスコントロールリストを上に書いて
それらに対する制御を下に書く
acl Safe_ports port 80 21 443 1025-65535
http_access deny !Safe_ports
電子メールサービス
MUA, MTA, MDA
M はメールまたはメッセージの M です
A はエージェントの A です
ざっくりまとめるとこうです
m | 説明 |
---|---|
MUA | 配達でいうポストに荷物を届けたり荷物を送ってくれる A |
MTA | 配達でいう拠点間で荷物を配達してくれる A |
MDA | 配達でいう最寄りの拠点で届け先の所定の位置に荷物を置く A |
smtpとpop, imap
ざっくりまとめるとこうです
プロトコル | 説明 |
---|---|
smtp | メール送信プロトコル |
pop | メール受信プロトコルで,サーバーからメールを削除する |
imap | メール受信プロトコルで,サーバーからメールを削除しない |
mbox形式とmaildir形式
形式 | 説明 |
---|---|
mbox | 全てのメールが 1 つのファイルに書かれる |
maildir | メール 1 つに 1 ファイル |
postfix
MTA
smtpd
など複数のプログラムが協調して動く
/etc/postfix/main.cf
このディレクトリに以下の設定ファイル
MTAとしての基本設定ファイル
#️ドメイン名
mydomain = example.com
#️ メールアドレスで@以降のドメイン名
myorigin = $mydomain
master.cf
Postfixを構成する各種デーモンの設定ファイル
postconfコマンド
postfixの設定値を表示
設定ファイルに基づく
postfixコマンド
postfixの制御を行う
postfix stop
systemctl stop postfix.service
SMTP認証
SMTPに認証機能が無いので、
その機能を追加する
SAMLというライブラリが提供する機能によって実現
Dovecot
MDA
オープンソースのIMAPおよびPOP3サーバー
/etc/dovecot/
Dovecot の設定ファイルが以下にある
/etc/dovecot/dovecot.conf
や /etc/dovecot/conf.d
以下のように {数字}-{英字}.conf のように関連ファイルが存在
- 10-mail.conf: メールボックスに関する設定
- 10-master.conf: Dovecotのプロセスに関する設定
ファイル共有サービス
Samba
ファイルやプリンタなどのリソースを共有するためのソフトウェア
Linux と Windows 間で使える
Linux をファイルサーバーとして Windows からアクセスしたり,
逆もできる
3 つのサーバープロセス
プロセス | 機能 |
---|---|
smbd | ファイル共有,認証等 |
nmbd | ブラウジング機能,NetBIOS名前解決,WINSサーバー等 |
winbindd | Winbind機能 |
smb.conf
Samba サーバーの設定ファイル
etc/samba/smb.conf
雰囲気は以下
[global]
workgroup = WORKGROUP
server string = Samba Server
netbios name = SAMBA
security = user
map to guest = bad user
name resolve order = bcast host lmhosts wins
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mask = 0700
directory mask = 0700
[public]
comment = Public Share
path = /srv/samba/public
public = yes
writable = yes
printable = no
create mask = 0777
directory mask = 0777
Samba ユーザー管理
pdbedit
と smbpasswd
コマンドで管理できる
smbpasswd
はパスワード変更できる
Samba 管理コマンド
smbcontrol
smbd
, nmbd
, winbidd
に対してメッセージを送り制御する
smbstatus
Samba サーバーに接続されているクライアントなどを表示する
nmlookup
NetBIOS 名から IP アドレスを検索するなどで利用する
Samba クライアント
smbclient [option] 接続先
Samba サーバーや Windows 側で提供されている共有リソースを利用するときに使用
ACL
Samba では従来のパーミッションより細かい設定ができる
取得と設定変更は以下のコマンド
# getfacl ファイル名
# setfacl [option] ACL エントリ対象
# getfacl filename
# setfacl -m user:testuser:rw filename
システムのセキュリティ
パケットフィルタリング
パケットのフィルタリングをする
以下のコマンドを利用
iptables
ip6tables
ファイヤーウォールを容易に設定できるツール
パケットフィルタリングによるファイアウォールを
簡単に設定できるのが以下のツール
- CentOS:
firewalld
,firewall-cmd
コマンド - Ubuntu:
ufw
コマンド
OpenSSH
SSHサーバーの機能は sshd
が提供
sshd の設定ファイルは /etc/ssh/sshd_config
セキュリティ業務
Snort
パケットスニファリングツール
ネットワークのパケットを監視し、
攻撃や侵入を捕らえる
Tripwire
ファイルの改ざんを検知する
OpenVAS
セキュリティスキャナ
ネットワーク経由で脆弱性のチェックが可能
OpenSACP
Security Content Automation Protocol
→ セキュリティ対策を標準化・自動化する規格
これに基づいてセキュリティをチェックしてくれるツール
Fail2ban
ログファイルを監視して攻撃を検知
攻撃元のIPアドレスをお断りするソフトウェア
この子短期間に何回もログイン失敗してるから、
iptablesにこの子からの接続を拒否するルール追加したろみたいなことをする