はじめに
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ファイルなのでコメント書いて大丈夫でした。やったぜ
<?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
の範囲ですね。
あまりにも広くなりすぎる気はしましたが、まぁ、仕方なさそうかな……。