俺のminimalインストールしたCentOS7がこんなに手強いわけがない。

社内検証用にCentOS7をminimalインストールした際に、自分の不手際で色々ハマった。
その時調べたNIC周りやらSSHできるようになるまでの設定メモ。
NetworkManagerは中々手強かった。net-tools入れたけど、慣れなければ…。


# NW周り
## NIC状態確認

```
[root@testsv ~]# nmcli device
デバイス  タイプ    状態      接続   
enp2s0    ethernet  接続済み  enp2s0 
eno1      ethernet  利用不可  --     
lo        loopback  管理無し  --     
[root@testsv ~]# 
```

もしくは ```nmcli d``` でもいいらしい。

## IPアドレス確認
ちなみに下記はIP振った後。
(NIC裏っ返ってやがる…)

```
[root@testsv ~]# ip addr show
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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 28:92:4a:34:0f:76 brd ff:ff:ff:ff:ff:ff
       valid_lft forever preferred_lft forever
    inet6 fe80::2a92:4aff:fe34:f76/64 scope link 
       valid_lft forever preferred_lft forever
3: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 28:92:4a:34:0f:77 brd ff:ff:ff:ff:ff:ff
[root@testsv ~]# nmcli c modify enp2s0 ipv4.address 192.168.4.15/24
```

## IPv4でIPを振る。(IPとデフォゲ併せて設定)

```
[root@testsv ~]# nmcli connection modify enp2s0 ipv4.method manual ipv4.addresses 192.168.4.15/24 ipv4.gateway 192.168.4.241 
```

これも ``` nmcli c mod ``` の略式でいけるらしい。

## リゾルバ設定。我慢できずにresolv.confに直書きした…。
```
[root@testsv ~]# echo "nameserver 8.8.8.8" > /etc/resolv.conf
```

## 後で見なおしたら、DNS設定がブランクに…。

```
[root@testsv ~]# nmcli --fields ipv4 connection show enp2s0
ipv4.method:                            manual
ipv4.dns:                               
ipv4.dns-search:                        
ipv4.addresses:                         192.168.4.15/24
ipv4.gateway:                           192.168.4.254
ipv4.routes:                            
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          no
[root@testsv ~]#
```

でも、```curl http://google.com```して、ちゃんと結果帰ってきたんです…。嘘じゃないんです…。
おそらく、NIC毎にリゾルバ設定できて、未設定ならresolv.conf見てくれるんじゃないか？と予想。(根拠ゼロ。)

## 本当はこっちが推奨らしい。

```
# リゾルバ設定
[root@testsv ~]# nmcli connection modify enp2s0 ipv4.dns 8.8.8.8

# IPとデフォゲとリゾルバまとめて設定。
[root@testsv ~]# nmcli connection modify enp2s0 ipv4.method manual ipv4.addresses 192.168.4.15/24 ipv4.gateway 192.168.4.254 ipv4.dns 8.8.8.8
```



## NIC落とし上げ
ifdown/ifup相当？

```
[root@testsv ~]# nmcli connection down enp2s0
[root@testsv ~]# nmcli connection up enp2s0
```


# SELinux
## SELinux無効化。このあたりはRHEL6(CentOS6)までと変わらず。
定番だけど、新インストーラで適当にポチポチしてたら、無効化し忘れてた…。
sshdのポート番号変えた途端につながらないから、やっぱりそうだったよ…。
久しぶりにこんなミスしたわorz。

```
[root@testsv ~]# grep ^SELINUX= /etc/sysconfig/selinux 
SELINUX=enforcing
[root@testsv ~]# 
[root@testsv ~]# sed -ie 's|SELINUX=enforcing|SELINUX=disabled|g' /etc/sysconfig/selinux 
[root@testsv ~]# grep ^SELINUX= /etc/sysconfig/selinux 
SELINUX=disabled
[root@testsv ~]# 
```

## Permisiveにするのも相変わらず。

```
[root@testsv ~]# setenforce 0 
[root@testsv ~]# getenforce 
Disabled
[root@testsv ~]# 
```

#firewalld、iptables周り
## 新機能のfirewalldの自動起動をOFFにしちゃう。
firewalldはiptablesの代替。内部的にiptablesを使っているらしい。
確か、「Openstack用とかにプログラムから操作しやすいよう、わざわざ新たに作った」
…みたいな話をOpenstack本書いている人から聞いた気がするｗ

```
[root@testsv ~]# systemctl disable firewalld
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
[root@testsv ~]# 
```

## 自動起動OFFになったことを確認。

```
[root@testsv ~]# systemctl list-unit-files -t service |grep fire
firewalld.service                           disabled
[root@testsv ~]# 
```

## 慣れ親しんだiptablesに切り替えちゃえ。
起動！え…でき…ない！？

```
[root@testsv ~]# systemctl start iptables.service
Failed to issue method call: Unit iptables.service failed to load: No such file or directory.
[root@testsv ~]
```

## どうやら、firewalldのバックエンドとして、iptablesの一部が入っているだけで、サービスとしては入っていないらしい。

```
[root@testsv ~]# rpm -qa |grep iptables
iptables-1.4.21-13.el7.x86_64
[root@testsv ~]# 
[root@testsv ~]# yum search iptables
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
=========================================================================================================== N/S matched: iptables ===========================================================================================================
iptables-devel.i686 : Development package for iptables
iptables-devel.x86_64 : Development package for iptables
iptables-services.x86_64 : iptables and ip6tables services for iptables
iptables-utils.x86_64 : iptables and ip6tables services for iptables
iptables.i686 : Tools for managing Linux kernel packet filtering capabilities
iptables.x86_64 : Tools for managing Linux kernel packet filtering capabilities

  Name and summary matches only, use "search all" for everything.
[root@testsv ~]# 
```

## iptables-serviceをインストールして起動。

```
[root@testsv ~]# systemctl start iptables.service
[root@testsv ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@testsv ~]# 
```


## でも、どうせ社内設置の検証サーバなのでflushしてしまうｗ

```
[root@testsv ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@testsv ~]# 
```

## それでも、一応自動起動は有効化しておくｗ
docker入れるかもしれんしね。

```
[root@testsv ~]# systemctl list-unit-files -t service |grep iptables
iptables.service                            disabled
[root@testsv ~]# 
[root@testsv ~]# systemctl enable iptables
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'
[root@testsv ~]# systemctl list-unit-files -t service |grep iptables
iptables.service                            enabled
[root@testsv ~]# 
```


ここでOS再起動してSELinuxの無効化を反映し、無事SSHできることを確認。
RHEL6までと比べると、プログラマ寄りの設定方法になっている気がする。
早いうちにsystemdに慣れておかないと、本当にやばそうだ…。