CentOS7が主流となっている昨今ですが、CentOS6と比較してセキュリティ部分に大きな変化がありました。デフォルトでfirewalldが採用されています。

注意)CentOS6で使われていたiptablesを引き続き使用したい場合は、firewalldを無効化してiptables-serviceをインストールして有効にする必要があります。

現状の確認

何はともあれ、現状の確認をしていきます。

デモ用に用意した、CentOS7の[firewalld]をチェックしていきましょう。

# fireall-cmd --list-all

現状と、現在設定されているサービスをチェックしていきます。

# firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client samba ssh
  ports: 80/tcp 22/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

現在設定されているサービスは、ここで確認できます。

services: dhcpv6-client samba ssh

publicゾーンにhttpとhttpsを許可する

Webサーバとhttpsサーバのサービスを常に許可する設定をしてみましょう。

常に許可する場合は、–permanentオプションを追加すればOKです。

# firewall-cmd --permanent --add-service=http
success

httpサーバのサービスを常に許可する設定

# firewall-cmd -permanent --add-service=https
success

httpsサーバのサービスを常に許可する設定

# firewall-cmd --reload

設定したサービスをリロードします。

# firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client http https samba ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

ポートを開放する

利用するサービスに応じて任意のポートを解放していきます。

http・https

# firewall-cmd --ppermanent --add-port=80/tcp --zone=public --permanent
# firewall-cmd --permanent --add-port=443/tcp --zone=public -permanent

httpサーバ(80)とhttpsサーバ(443)のポートを解放しました。

# firewall-cmd --list-port --zone=public --permanent
80/tcp 22/tcp 443/tcp

有効な設定を確認します。

FTP

# firewall-cmd --permanent --add-port=20/tcp --zone=public --permanent
# firewall-cmd --permanent --add-port=21/tcp --zone=public --permanent
# firewall-cmd --permanent --add-port=30000-30400/tcp --zone=public --permanent

パシッブポートは、 1024/TCP以上の大きなレンジで任意の設定でOKです。

特定のIPからの接続を許可(ポート)

SSH用のゾーンを用意します。DBなどでリモート接続を許可する場合は、特定のネットワークだけに解放する必要があります。

これは、絶対に覚えておいて下さい。

# firewall-cmd --permanent --new-ZONE=ssh
success

リロードします。

# firewall-cmd --reload

リロードが終わったら、設定を以下のように行いましょう。

# firewall-cmd --permanent --zone=ssh --set-target=ACCEPT
success
# firewall-cmd --permanent --zone=ssh --add-service=ssh
success
# firewall-cmd --permanent --zone=ssh --add-source=×××.×××.×××.×××/32
success

再度リロードします。

# firewall-cmd --reload

設定状況を確認します。

# firewall-cmd --get-active-zones
ssh
  sources: ×××.×××.×××.×××/32

設定の反映をします。

# systemctl reload firewalld

参考:ルールの削除/ゾーンの削除/特定のIPからのアクセスの拒否

設定を削除する場合や、特定のIPアドレスからの接続を拒否したい場合は次の様に設定します。

ルールの削除

ルールの削除はadd(追加)をremoveに変更するだけです。

# firewall-cmd --permanent --remove-port=443/tcp --zone=public --permanent

ゾーンの削除

作成したゾーンsshを削除してみます。

# firewalld-cmd --permanent --delete-zone=ssh
success

特定のIPからのアクセスを拒否する

# firewall-cmd --get-active-zones
# firewall-cmd --zone=drop --add-source=×××.×××.×××..0/24

こんな感じで、firewalldの設定ができます。

他にも色々ありますが、随時追加したり整理したりしていきます。