今回はCentOSのFirewall機能について、確認する。
参考)ネコでもわかる!さくらのVPS講座 ~第七回「ファイアウォール”firewalld”について理解しよう」
https://knowledge.sakura.ad.jp/10583/
ファイアウォールの基本
ファイアウォールの基本:「使いたいサービスの通信プロトコルは許可して、使わないサービスはブロックする」
なので、まずは、使うサービス、使わないサービスを明確化する。
目標はRailsでのWEBアプリケーションの公開なので、以下とする。
使うサービス: SSH(指定のポート)、http(ポート80番)、https(ポート443番)
使わないサービス:上記以外
ファイアウォールの使い方
前提として、さくらのVPSは、はじめからFirewall機能が有効になっている。
設定自体は、第3回で終わっている。
参考)第三回「Apacheをインストールしよう」
https://knowledge.sakura.ad.jp/8541/
ファイアウォールの状態確認
running と出れば稼働している。
稼働していなければ、not running と出る。
# firewall-cmd --state running
現在のファイアウォール設定を確認する
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-**** http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
sshのポート****、http、httpsが許可されている。
dhcpv6-client は無視していいみたい。
firewalldの起動・終了・再起動
firewalldの起動
# systemctl start firewalld
何もかえってこなければOK
ファイアウォールの停止
# systemctl stop firewalld
何もかえってこなければOK
ファイアウォールの再起動
# systemctl restart firewalld
何もかえってこなければOK
firewalldに、許可するサービスを追加
pop3を追加
# firewall-cmd --permanent --zone=public --add-service=pop3 success
successと出れば成功
設定反映のため、リロード(再起動ではない)
# firewall-cmd --reload success
successと出れば成功
設定を確認してみる
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-**** http https pop3 ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
pop3が増えている
pop3のように名前で指定できるサービス一覧の表示
# firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh ssh-10022 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
サービスの詳細確認
pop3を確認する
# firewall-cmd --info-service=pop3 pop3 ports: 110/tcp protocols: source-ports: modules: destination:
ftpを確認
# firewall-cmd --info-service=ftp ftp ports: 21/tcp protocols: source-ports: modules: ftp destination:
先ほど追加したpop3を削除する
# firewall-cmd --zone=public --remove-service=pop3 success
successと出れば成功
設定反映のため、リロード
# firewall-cmd --reload success
設定確認
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-10022 http https pop3 ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
なぜかpop3が消えない。。。
もう一度削除、リロードしてみる。
# firewall-cmd --zone=public --remove-service=pop3 success # # firewall-cmd --reload success # # firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-**** http https pop3 ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
ダメ。。。消えない。
ファイアウォールをリロードじゃなくて、再起動してみる
# systemctl restart firewalld
何もでないので成功
設定確認
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-**** http https pop3 ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
消えていない。
別サービスでも確認してみる。
適当にdhcpの追加
# firewall-cmd --permanent --zone=public --add-service=dhcp success
リロード
# firewall-cmd --reload success
設定確認
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-**** http https pop3 dhcp ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
DHCPが追加された。
dhcpの削除
# firewall-cmd --zone=public --remove-service=dhcp success
成功
リロード
# firewall-cmd --reload success
成功
設定確認
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-10022 http https pop3 dhcp ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
dhcpも消えない。。。
--permanentオプションを付けての削除
# firewall-cmd --permanent --zone=public --remove-service=dhcp success
リロード
# firewall-cmd --reload success
設定確認
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-**** http https pop3 ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
dhcpが消えたーー!
--permanentオプションを付けて追加したものは、 --permanentオプションを付けて削除しないといけない模様
公式サイトのなのに、やられたーー。
Firewallのバージョンで違ってしまったのかなあ。
pop3も削除しておく
# firewall-cmd --permanent --zone=public --remove-service=pop3 success
リロード
# firewall-cmd --reload success
設定確認
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-**** http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
pop3が無事消えました!
プロトコルとポート番号を指定して許可するサービスを追加
先ほどはpop3やdhcpもともと登録されているからコマンド指定できるのですが、
登録されていないサービスに対して許可する場合はポート番号、TCPorUDPを指定してあげないといけない。
TCPの10000ポートを追加してみる
# firewall-cmd --add-port=10000/tcp --zone=public --permanent success
リロード
# firewall-cmd --reload success
設定確認
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-**** http https ports: 10000/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
services: のところではなく、ports: のところに10000/tcpが追加されました。
確認できたのでTCPの10000ポートを削除
# firewall-cmd --remove-port=10000/tcp --zone=public --permanent success
リロード
# firewall-cmd --reload success
設定確認
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh-**** http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
ports: の項目に何もなくなりました。
これで一通りファイアウォールの設定・動作を確認できました!