firewalldの設定を行ってWebサーバへアクセスする

7ではデフォルトではWebサーバへアクセスできない

CentOS7のWebサーバを社内向けに構築した場合、インストール後に何も設定をしていなければ、クライアントPCからWebサーバにアクセスした際にエラーでアクセスが出来ないと思います。

apache web access

[root@centos-120 ~]# ss -nat
State      Recv-Q Send-Q     Local Address:Port                    Peer Address:Port
LISTEN     0      128                    *:111                                *:*
LISTEN     0      128                    *:22                                 *:*
LISTEN     0      100            127.0.0.1:25                                 *:*
ESTAB      0      96        192.168.56.120:22                      192.168.56.1:51448
LISTEN     0      128                   :::111                               :::*
LISTEN     0      128                   :::80                                :::*
LISTEN     0      128                   :::22                                :::*
LISTEN     0      100                  ::1:25                                :::*
LISTEN     0      128                   :::443                               :::*

ssコマンドで80番ポートがLISTEN状態であることがわかります。httpd動いているのでfirewallなどが影響していると考えます。
とりあえずアクセスを確認したい場合は、firewalldサービスを停止することでアクセスができるでしょう。

[root@centos-120 ~]# systemctl stop firewalld.service
[root@centos-120 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 火 2017-09-26 14:53:36 JST; 12s ago
     Docs: man:firewalld(1)
 Main PID: 665 (code=exited, status=0/SUCCESS)
 9月 26 14:07:44 centos-120 systemd[1]: Starting firewalld - dynamic firewall daemon...
 9月 26 14:07:44 centos-120 systemd[1]: Started firewalld - dynamic firewall daemon.
 9月 26 14:53:35 centos-120 systemd[1]: Stopping firewalld - dynamic firewall daemon...
 9月 26 14:53:36 centos-120 systemd[1]: Stopped firewalld - dynamic firewall daemon.

apache web access

アクセスができるようになったことからも、firewallが影響しているので、完全に外部と遮断された環境であれば、firewalldサービスを停止して運用するというのが一番楽ではあります。完全に遮断した環境というのもあまりないですし、このまま運用するというのはセキュリティ上の問題があると思います。

firewallを設定する

firewalldの設定をすることでWebサーバへのアクセスを許可するようにします。
今回の環境はVirtualBox上にCentOS7のサーバとCentOS6.9のClientで実施します。またWebサーバはApache2.4.6を使用しています。

ネットワーク状態を確認する

サーバのネットワーク設定を確認します。検証環境ではVirtualBoxのNATネットワークとホストオンリーアダプタが設定されています。

[root@centos-120 ~]# ip l
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3:  mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 08:00:27:df:c6:20 brd ff:ff:ff:ff:ff:ff
3: enp0s8:  mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 08:00:27:28:8b:f3 brd ff:ff:ff:ff:ff:ff
[root@centos-120 ~]# ip r
default via 192.168.1.1 dev enp0s3  proto static  metric 100
192.168.1.0/24 dev enp0s3  proto kernel  scope link  src 192.168.1.120  metric 100
192.168.56.0/24 dev enp0s8  proto kernel  scope link  src 192.168.56.120  metric 100

firewallの設定を確認する

firewallの設定はゾーン(デフォルトで9つのゾーンが用意されています)に対して許可を与えることでアクセスを制限しています。ゾーンにはネットワークインターフェースとサービスを割り当てます。
検証環境はインストール直後のためデフォルト設定の状態です。firewallの設定はfirewall-cmdコマンドで行います。

[root@centos-120 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
[root@centos-120 ~]# firewall-cmd --get-default-zone
public

デフォルト状態では、publicというゾーンがデフォルトゾーンでアクティブに設定されていて、enp0s3とenp0s8のNICとdhcpv6-clientとsshのサービスが割り当てれています。

全てのゾーンを表示する

全てのゾーンを表示するには、firewall-cmdコマンドに–list-all-zonesというオプションを付けます。

[root@centos-120 ~]# firewall-cmd --list-all-zones
work
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
drop
  target: DROP
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
internal
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
external
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: ssh
  ports:
  protocols:
  masquerade: yes
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
trusted
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
home
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
dmz
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
block
  target: %%REJECT%%
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

パッとみただけでもhttpは許可されていないことが判ります。

ゾーン毎に設定されているサービスを確認する

firewall-cmdコマンドに–list-services –zone=ゾーン名オプションを付けます。

[root@centos-120 ~]# firewall-cmd --list-services --zone=home
dhcpv6-client mdns samba-client ssh

ゾーン追加可能なサービスを確認する

ゾーン追加可能なサービスを確認するには、firewall-cmdコマンドに–get-servicesオプションを付けます。

[root@centos-120 ~]# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

許可するサービスをゾーンに追加する

ゾーンに対してサービスを追加するには、firewall-cmdコマンドに–list-services –zone=ゾーン名 –permanentを付けます。
–permanentは、永続的に設定を有効にする場合に必要です。–permanentを付けていないとサーバを再起動するとリセットされます。

[root@centos-120 ~]# firewall-cmd --list-services --zone=public --permanent
dhcpv6-client ssh
[root@centos-120 ~]# firewall-cmd --add-service=http --zone=public --permanent
success
[root@centos-120 ~]# firewall-cmd --add-service=https --zone=public --permanent
success
[root@centos-120 ~]# firewall-cmd --list-services --zone=public  --permanent
dhcpv6-client http https ssh

ここではゾーンpublicにhttpとhttpsサービスを追加しました。

apache web access

アクセスできることを確認します。
firewallの設定は概念などもあり、とても判り難いですが、少し知ってるだけでも違うと思います。

スポンサーリンク
spdsk-side
spdsk-side