Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら RSSフィードのご登録はこちらから
公開日:2015年3月28日
最終更新日:2020年8月8日

CentOS7 で iptables を使用できるように設定する

はじめに

CentOS7 からファイアーウォール機能は firewalld に移行しましたが、iptables の既存の資産を活かしたい、対話型ではなく設定で一括で処理したい場合には不向きだったりします。

最終的には firewalld に移行する方がよいのですが、暫定的に iptables を使用したい方向けに CentOS7 で iptables を使用する方法をご紹介します。

iptables-services のインストールと設定

CentOS7 で iptables を使用するには iptables-services をインストールする必要があります。

但し、firewalld と iptables-services は共存できないので、まず firewalld を無効にする必要があります。

# systemctl stop firewalld.service
# systemctl mask firewalld.service
# systemctl list-unit-files | grep firewalld
firewalld.service                           masked

これで firewalld のサービスが停止して、OS 起動時も起動しないようになりました。

では、 iptables-services をインストールして設定を行います。

# yum -y install iptables-services

# systemctl start iptables.service
# systemctl enable iptables.service
# systemctl list-unit-files | grep iptables
iptables.service                            enabled 

# systemctl start ip6tables.service
# systemctl enable ip6tables.service
# systemctl list-unit-files | grep ip6tables
ip6tables.service                           enabled 

これで iptables/ip6tables のサービスが起動し、OS 起動時にも自動的に起動するようになりました。

iptabels (IPv4) の設定

以下のコマンドで iptables の設定を直接編集します。

# vi /etc/sysconfig/iptables

そして、以下の最低限の設定を行って保存します。余計な改行やスペースが入らないように注意してください。
*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP, HTTPS
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443    -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT

iptables を再起動して設定を反映します。
# systemctl restart iptables.service

設定が有効になっているかどうか nmap でポートスキャンしていましょう。
# nmap hostname

Starting Nmap 6.40 ( http://nmap.org ) at 2015-03-27 22:58 JST
Nmap scan report for 192.168.11.8
Host is up (0.00044s latency).
Not shown: 997 filtered ports
PORT    STATE  SERVICE
22/tcp  open   ssh
80/tcp  open   http
443/tcp closed https
MAC Address: 08:00:27:7B:C1:54 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 17.97 seconds

問題ないですね。

ip6tabels (IPv6) の設定

以下のコマンドで ip6tables の設定を直接編集します。

# vi /etc/sysconfig/ip6tables

そして、以下の最低限の設定を行って保存します。余計な改行やスペースが入らないように注意してください。
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP, HTTPS
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
COMMIT

ip6tables を再起動して設定を反映します。
# systemctl restart ip6tables.service

こちらも nmap でスキャンしてみましょう。
nmap -6 hostname

Starting Nmap 6.47 ( http://nmap.org ) at 2015-03-29 09:48 JST
Nmap scan report for IPADDRESS
Host is up (0.19s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 11.02 seconds

こちらも問題ないですね。

おわりに

CentOS7 で iptables を使用する方法を見てきましたが、いかがだったでしょうか。

最初に、 iptables-services のインストールと設定をする以外は、普通の iptables の設定でしたね。

ただ、これはあくまで暫定的な対処で、将来的には firewalld へ移行することをお勧めします。

最低限必要な CentOS セキュリティ設定

最低限必要な CentOS セキュリティ設定を以下の記事にまとめていますので、こちらもどうぞ。


スポンサーリンク





カテゴリー:ブログ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA