はじめに
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 セキュリティ設定を以下の記事にまとめていますので、こちらもどうぞ。
コメント