サーバエンジニアの構築めも

Linux関連を中心としたサーバの構築記録

[CentOS 7] Systemd

CentOS 7では、initに替わってsystemdがサービスを管理するようになった。
サービス管理のコマンドもchckconfigからsystemdctlに変更となっている。

サービスの一覧表示

# systemctl -t service list-unit-files
UNIT FILE                                   STATE
abrt-ccpp.service                           enabled
abrt-oops.service                           enabled
abrt-pstoreoops.service                     disabled
abrt-vmcore.service                         enabled
abrt-xorg.service                           enabled
abrtd.service                               enabled
accounts-daemon.service                     enabled
alsa-restore.service                        static
alsa-state.service                          static
alsa-store.service                          static
anaconda-direct.service                     static
anaconda-nm-config.service                  static
anaconda-noshell.service                    static
anaconda-shell@.service                     static
anaconda-sshd.service                       static
anaconda-tmux@.service                      static
anaconda.service                            static
arp-ethers.service                          disabled
atd.service                                 enabled
auditd.service                              enabled
auth-rpcgss-module.service                  static
~ snip ~

「STATE」の意味は以下の通り。

enabled 自動起動が有効
disabled 自動起動が無効
static 起動が必須のサービスで設定変更はできない

特定のサービスのステータス確認

# systemctl status firewalld.service
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since Tue 2016-01-19 17:57:39 JST; 1h 13min ago
 Main PID: 24714 (firewalld)
   CGroup: /system.slice/firewalld.service
           `-24714 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

起動設定だけであれば、以下のコマンドでも確認できる。

# systemctl is-enabled firewalld.service
enabled

サービスの停止

# systemctl stop firewalld.service
# systemctl status firewalld.service
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: inactive (dead) since Tue 2016-01-19 19:12:55 JST; 42s ago
  Process: 24714 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 24714 (code=exited, status=0/SUCCESS)

サービスの強制停止

# systemctl kill firewalld.service

サービスの起動

# systemctl start firewalld.service
# systemctl status firewalld.service
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since Tue 2016-01-19 19:14:25 JST; 23s ago
 Main PID: 26347 (firewalld)
   CGroup: /system.slice/firewalld.service
           `-26347 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

サービスの再起動

# systemctl restart firewalld.service

サービスの自動起動の無効化

# systemctl disable firewalld.service
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
# systemctl is-enabled firewalld.service
disabled

サービスの自動起動の有効化

# systemctl enable firewalld.service
ln -s '/usr/lib/systemd/system/firewalld.service' '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
ln -s '/usr/lib/systemd/system/firewalld.service' '/etc/systemd/system/basic.target.wants/firewalld.service'
# systemctl is-enabled firewalld.service
enabled

[CentOS 7] ターゲット(CentOS 6までのランレベル相当)

CentOS 7では、CentOS 6までのランレベルが廃止され、新たに「ターゲット」が導入された。
以下にCentOS 6の各ランレベルに相当するCentOS 7のターゲットを記載する。

CentOS6のランレベル CentOS7のターゲット
システム停止 0 poweroff.target
シングルユーザモード 1 rescue.target
マルチユーザモード 3 multi-user.target
グラフィカル 5 graphical.target
リブート 6 reboot.target

デフォルトのターゲットの確認

# systemctl get-default
multi-user.target

デフォルトのターゲットの変更

# systemctl set-default graphical.target
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target'
# systemctl get-default
graphical.target

ターゲットの変更

# runlevel
N 3
# systemctl isolate graphical.target
# runlevel
3 5

[CentOS 7] ネットワーク関連コマンド

CentOS7では、最小構成でインストールした場合に「ifconfig」や「netstat」などのネットワーク関連のコマンドが利用できない。「net-tools」パッケージをインストールすれば利用可能だが、今後は「net-tools」は廃止となる予定であるため、「net-tools」パッケージから置き換わる「iproute」パッケージで提供されるコマンド群(「ip」や「ss」コマンドなど)を利用した方が良い。

IPアドレスの確認 (ip addr / ip a)

CentOS6の「ifconfig」に相当

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:a8:74:93 brd ff:ff:ff:ff:ff:ff
    inet 192.168.40.102/24 brd 192.168.40.255 scope global ens32
       valid_lft forever preferred_lft forever

ルーティングテーブルの確認 (ip route / ip r)

CentOS6の「route」に相当

# ip r
default via 192.168.40.1 dev ens32  proto static  metric 100
192.168.40.0/24 dev ens32  proto kernel  scope link  src 192.168.40.102  metric 100

ARPテーブルの確認 (ip neigh / ip n)

CentOS6の「arp」に相当

# ip n
192.168.40.1 dev ens32 lladdr 00:00:0c:07:ac:0a REACHABLE

TCPソケットの状態確認 (ss -nat)

CentOS6の「netstat -nat」に相当

# ss -nat
State      Recv-Q Send-Q                            Local Address:Port                              Peer Address:Port
LISTEN     0      128                                   127.0.0.1:199                                          *:*
LISTEN     0      128                                           *:22                                           *:*
ESTAB      0      48                               192.168.40.102:22                                 10.0.0.1:51844
LISTEN     0      128                                          :::22                                          :::*

UDPソケットの状態確認 (ss -nau)

CentOS6の「netstat -nau」に相当

# ss -nau
State      Recv-Q Send-Q                            Local Address:Port                              Peer Address:Port
UNCONN     0      0                                             *:123                                          *:*
UNCONN     0      0                                             *:161                                          *:*
UNCONN     0      0                                     127.0.0.1:323                                          *:*
UNCONN     0      0                                             *:5353                                         *:*
UNCONN     0      0                                             *:58881                                        *:*
UNCONN     0      0                                            :::123                                         :::*

インターフェースの統計情報の確認 (ip -s l)

CentOS6の「netstat -i」に相当

# ip -s l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast
    1258261    16208    0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    1258261    16208    0       0       0       0
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:50:56:a8:74:93 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    21242989   123013   0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    2487305    17342    0       0       0       0

デバイスの状態確認 (nmcli device / nmcli d)

# nmcli d
DEVICE  TYPE      STATE      CONNECTION
ens32   ethernet  connected  ens32
lo      loopback  unmanaged  --

詳細なデバイスの状態確認 (nmcli device show / nmcli d show)

# nmcli d show
GENERAL.DEVICE:                         ens32
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:50:56:A8:74:93
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ens32
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.40.102/24
IP4.GATEWAY:                            192.168.40.1
IP4.DNS[1]:                             8.8.8.8
IP4.DNS[2]:                             8.8.4.4
IP6.GATEWAY:

GENERAL.DEVICE:                         lo
GENERAL.TYPE:                           loopback
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            65536
GENERAL.STATE:                          10 (unmanaged)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
IP4.ADDRESS[1]:                         127.0.0.1/8
IP4.GATEWAY:
IP6.GATEWAY:

インターフェースを指定するには、以下のようにインターフェース名を指定する。

# nmcli d show ens32
GENERAL.DEVICE:                         ens32
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:50:56:A8:74:93
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ens32
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.40.102/24
IP4.GATEWAY:                            192.168.40.1
IP4.DNS[1]:                             8.8.8.8
IP4.DNS[2]:                             8.8.4.4
IP6.GATEWAY:

インターフェースの接続状態の確認

# nmcli c
NAME   UUID                                  TYPE            DEVICE
ens32  4b0cf375-fdb8-42a7-85af-674c0cc5ac54  802-3-ethernet  ens32

インターフェースの停止 (nmcli connection down / nmcli c down)

CentOS6の「ifdown」に相当

# nmcli c down ens32

インターフェースの起動 (nmcli connection up / nmcli c up)

CentOS6の「ifup」に相当

# nmcli c up ens32

インターフェースの自動起動OFF

# nmcli c mod ens32 connection.autoconnect no
# systemctl restart network

インターフェースの自動起動ON

# nmcli c mod ens32 connection.autoconnect yes
# systemctl restart network

IPアドレスの設定

# nmcli c mod ens32 ipv4.addresses 10.10.10.2/24
# systemctl restart network

デフォルトゲートウェイの設定

# nmcli c mod ens32 ipv4.gateway 10.10.10.1
# systemctl restart network

DNSサーバの設定

# nmcli c mod ens32 ipv4.dns "8.8.8.8 8.8.4.4"
# nmcli c mod ens32 ipv4.dns-search hogehoge.com
# systemctl restart network

スタティックルートの設定

# nmcli c mod ens32 ipv4.routes "10.0.0.0/24 10.10.20.1"
# systemctl restart network

NMTUIによるネットワーク設定

直観的な操作でネットワークの設定を行いたい場合は、NMTUIを利用することができる。

# nmtui

[CentOS 7] firewalld

CentOS7のファイアウォール機能の実装としては、これまで通りiptablesを利用しているが、iptablesの設定はiptablesサービスの代わりにfirewalldサービスを利用して行う。
firewalldサービスの代わりに、これまで通りiptablesサービスを利用してiptablesの設定をすることも可能。

iptablesの稼働状況の確認

iptablesサービスとfirewalldサービスは併用できないため。
iptables/ip6tablesサービスが稼働している場合は停止する。

# systemctl status iptables
iptables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
# systemctl status ip6tables
ip6tables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

firewalldサービスの起動設定と稼働状態の確認

# systemctl status firewalld.service
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since Wed 2016-01-06 15:26:22 JST; 1h 1min ago
 Main PID: 612 (firewalld)
   CGroup: /system.slice/firewalld.service
           `-612 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

稼働状態については以下のコマンドでも確認できる

# firewall-cmd --state
running

現在の設定の確認

# firewall-cmd --list-all-zones
block
  interfaces:
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

dmz
  interfaces:
  sources:
  services: ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

drop
  interfaces:
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

external
  interfaces:
  sources:
  services: ssh
  ports:
  masquerade: yes
  forward-ports:
  icmp-blocks:
  rich rules:

home
  interfaces:
  sources:
  services: dhcpv6-client ipp-client mdns samba-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

internal
  interfaces:
  sources:
  services: dhcpv6-client ipp-client mdns samba-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

public (default, active)
  interfaces: ens32
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

trusted
  interfaces:
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

work
  interfaces:
  sources:
  services: dhcpv6-client ipp-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

アクティブな設定のみ確認

# firewall-cmd --list-all
public (default, active)
  interfaces: ens32
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:
  • デフォルトでは、「dhcpv6-client」と「ssh」サービスのみが許可された「public」ゾーンがインターフェースに適用されている。
  • 外部へのトラフィックはすべて許可されている。

設定変更

デフォルトの設定ではすべての送信元からのSSHが許可されているが、特定の送信元からのみ許可するように変更する。

# firewall-cmd --permanent --zone=public --remove-service=ssh
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept"
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" accept"
# firewall-cmd --reload
# firewall-cmd --list-all
public (default, active)
  interfaces: ens32
  sources:
  services: dhcpv6-client
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept
        rule family="ipv4" source address="192.168.2.0/24" port port="22" protocol="tcp" accept
  • 「--permanent」オプションを指定することで再起動後も設定が有効になる。
  • 「--add-rich-rule」オプションを利用することで指定したソースIPアドレスからのみに限定するなど、きめ細かい設定を行うことが可能になる。

[CentOS 7] Ctrl+Alt+Deleteによる再起動の無効化

Ctrl+Alt+Deleteキーでサーバが再起動しないようにする。

# ln -s /dev/null /etc/systemd/system/ctrl-alt-del.target
# ls -l /etc/systemd/system/ctrl-alt-del.target
lrwxrwxrwx 1 root root 9 Jan  6 16:19 /etc/systemd/system/ctrl-alt-del.target -> /dev/null

[CentOS 7] Proxyの設定

yumwgetProxyサーバ経由で利用するための設定。

yum

# vi /etc/yum.conf
以下の行を追加
proxy=http://<ProxyサーバのIPアドレス>:<Proxyサーバのポート番号>

wget

# vi /etc/wgetrc
以下の行を追加
http_proxy = http://<ProxyサーバのIPアドレス>:<Proxyサーバのポート番号>
ftp_proxy = http://<ProxyサーバのIPアドレス>:<Proxyサーバのポート番号>

[CentOS 7] SELinuxの無効化

CentOS6と同じ手順でSELinuxを無効化することができる。

SELinuxの設定変更

# vi /etc/selinux/config
以下の通り変更する
SELINUX=enforcing
↓変更
SELINUX=disabled

再起動

# reboot

確認

# getenforce
Disabled