iptables を使用してファイアウォールを設定する
iptables を使用してオペレーティングシステムのファイアウォールを設定する方法について説明します。
はじめる前に
- iptables の詳細については、オペレーティングシステムに付属のマニュアルを参照してください。
iptables と firewalld サービスのどちらが有効になっているか確認する
ファイアウォールサービスには firewalld と iptables サービスがあります。iptables の設定をはじめる前に、サービスが有効になっていることを確認します。
- iptables サービスが有効かどうかを確認するには、root ユーザで以下のコマンドを入力します。
systemctl is-enabled iptables
- firewalld サービスが有効かどうかを確認するには、root ユーザで以下のコマンドを入力します。
systemctl is-enabled firewalld
「enabled」が表示されたサービスが有効になっています。
iptables ではなく、firewalld サービスが有効になっています。
firewalld の代わりに iptables サービスを使用するには、root ユーザで以下のコマンドを入力します。
- firewalld サービスを無効にします。
systemctl disable firewalld systemctl stop firewalld
- iptables-services パッケージをインストールします。
yum install iptables-services
- iptables サービスを起動します。
systemctl start iptables
- システム起動時に iptables サービスの起動を有効にするには、以下のコマンドを入力します。
systemctl enable iptables
- iptables サービスが有効になったことを確認します。iptables サービスが有効になっていれば「enabled」が表示されます。
systemctl is-enabled iptables
iptables の設定スクリプトを作成する
vi などのテキストエディタを使って、以下のようなファイアウォールを設定するスクリプト (たとえば iptables-config.sh) を任意の場所に作成します。
#!/bin/sh
iptables -F
iptables -X
for chain in INPUT FORWARD OUTPUT; do iptables -P $chain DROP; done
iptables -N logdrop
iptables -A logdrop -j LOG
iptables -A logdrop -j DROP
iptables -N port-scan
iptables -A port-scan -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j RETURN
iptables -A port-scan -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m state --state NEW -m multiport --dports http,https -j ACCEPT
iptables -A INPUT -s <アクセスを許可する IP アドレス> -i eth0 -p tcp -m state --state NEW -m multiport --dports ssh -j ACCEPT
iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -o eth0 -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
- 上記は iptables の設定の一例です。環境にあわせて適切な設定を行ってください。
- -s オプションを指定するとアクセスを許可する IP アドレスを制限できます。
スクリプトを実行してファイアウォールを設定する
先ほど作成したスクリプトを実行してファイアウォールを設定します。
スクリプトを実行するには、root ユーザで以下のコマンドを入力します。
- スクリプトファイルの実行を許可します。
chmod 700 iptables-config.sh
- スクリプトを実行します。
./iptables-config.sh
- システム再起動後もファイアウォールの設定を持続させるには、以下のコマンドを入力します。
iptables-save > /etc/sysconfig/iptables
セキュアシェルなどリモート接続で操作している場合、スクリプトを実行後にシェルにアクセスできなくなる可能性もあります。
スクリプトを実行する前に設定内容をよく確認してください。
外部からホストをスキャンしてファイアウォールを確認する
iptablesを設定できたら実際の安全性をテストする必要があります。
Nmap などのツールを使って意図せずアクセスが許可されているポートがないか確認します。
以下は、Nmap を使用した例です。
nmap www.your.domain
Starting Nmap 6.40 ( http://nmap.org ) at 2020-03-27 15:32 JST
Nmap scan report for www.your.domain (***.***.***.***)
Host is up (0.00011s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE
80/tcp open http
113/tcp closed ident
443/tcp open https
- 「STATE」に「open」 が表示されたポートはアクセスが許可されています。
- IP アドレスを制限した場合は、スキャンを実行するホストを変えながら確認してください。
- Nmap の詳細については、Nmap のウェブサイトを参照してください。