44
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CentOS7のfirewalldで特定IPだけ許可するアクセス制御

Last updated at Posted at 2017-08-20

はじめに

CentOS7でiptablesを使いたかったのですが、上手く出来ませんでした。
(どこに設定ファイルあるのか分からへん……)

そこで、デフォルトで使われているfirewalldを使う方法を調べたのでまとめです。

参考させて頂いたサイトはこちらです
https://www.imd-net.com/column/13339/

firewalldを起動

$ systemctl status firewalld
$ systemctl unmask firewalld
$ systemctl enable firewalld
$ systemctl start firewalld
$ systemctl status firewalld

unmaskはmaskしてる場合だけでいいです。

設定の確認

firewall-cmd --list-all

http,httpsアクセスを許可する

これやらないとApache動いててもWebアクセス出来ないやつです。

$ firewall-cmd --add-service=http --zone=public --permanent
$ firewall-cmd --add-service=https --zone=public --permanent
$ firewall-cmd --reload

reloadの部分はsystemctl restart firewalldでも出来ました。

#SSH接続を特定IPだけ許可する

すべて不許可→特定IPを許可、です。

IPはグローバルIPとして何が使われているか、このサイトとかで調べておきましょう。

ポートが22なのはデフォルトのままです。
変えてもいいけど、しっかり把握しておかなきゃですね。

#複数IPの指定(追記)

IPを1つずつ追加、とかやってると、ルーター再起動で変わった時に再度コンソールログインして追加して……とめちゃくちゃ大変です。
何度かやってもう嫌になりました。

なので現在使ってるIP調べる→IP検索でそれを割り振ってる会社のIPを範囲指定で追加する、という形にしました。

これだと契約してるインターネット回線の中での揺らぎを吸収しますし、世界中のほとんどのIPを排除出来るので良いと思います。多分

(例)
さくらインターネット株式会社

IP一覧
http://thr3a.hatenablog.com/entry/20190427/1556293982

NTTコミュニケーションズ株式会社
153.128.0.0-153.253.255.255


だいたい
153.128.0.0/9
(2進数で表した時の、左から9桁までを見る、という設定)
(つまり153.128.0.0~153.255.255.255までの指定となる)

IPアドレスをグループとして複数指定するCIDRというものらしいです。
サイダー
https://wa3.i-3-i.info/word11989.html

適当にX.X.0.0/16くらいの指定が良さそう

すべてのSSH接続を拒否

$ firewall-cmd --remove-service=ssh --zone=public --permanent

##特定IPのSSH接続を許可

$ firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="XXX.XXX.XXX.XXX" port protocol="tcp" port="22" accept"
$ firewall-cmd --reload

ポートを開放

追記:ポートで複数Webサイトを持つ時のために。
http開放してるんだから大丈夫やろ……と思ってたのですが、やらないとダメでした

$ firewall-cmd --zone=public --add-port=8000/tcp --permanent
$ firewall-cmd --zone=public --add-port=3001-3999/tcp --permanent

$ firewall-cmd --reload

##ポート設定の追記
バージョンが前過ぎると意味ないっぽい?
https://inaba.hatenablog.com/entry/2017/02/26/040218

firewall-cmd -V

#長ったらしいコマンドが嫌な時

Vimで編集。自己責任で。

$ vim /etc/firewalld/zones/public.xml 
$ firewall-cmd --reload

ただし何かしらの設定を追加して、reloadで反映させてからじゃないと設定ファイル読み込んでないっぽい

##中身の例

XMLファイルなのでコメント書いて大丈夫でした。やったぜ

/etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="http"/>
  <service name="https"/>
  <port protocol="tcp" port="3000"/>
  <port protocol="tcp" port="4000-4029"/>
  <port protocol="tcp" port="3001-3999"/>
  <rule family="ipv4">
    <source address="10.0.0.0/8"/>
    <accept/>
  </rule>

  <!-- 2019.4.19 さくらインターネット -->
  <rule family="ipv4">
    <source address="219.94.128.0/17"/>
    <port protocol="tcp" port="22"/>
    <accept/>
  </rule>

  <!-- 2019.4.21 契約してるインターネット会社 -->
  <rule family="ipv4">
    <source address="153.151.234.0/16"/>
    <port protocol="tcp" port="22"/>
    <accept/>
  </rule>

</zone>

編集した後は、

$ firewall-cmd --reload

リロード忘れないようにしましょう。

やらかした時

IPの指定ミスとか、指定したIPからのインターネットアクセスが出来なくなったりしたら……

さくらVPSの場合、管理画面からのVPSコンソール(?)から入れました。
そこでfirewall-cmdでIP追加したらなんとかなります。

以上です

追記 (2024-10-29)

契約してるJCOMが202.X.X.Xくらいから219.X.X.XくらいIPが変動したので、それでアクセス出来なくなってたりしました……🥺

NTTの範囲なのかなこれ?

なので200.0.0.0/3での範囲指定しました。

200.0.0.0
255.255.255.255

の範囲ですね。

あまりにも広くなりすぎる気はしましたが、まぁ、仕方なさそうかな……。

44
46
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?