centos7から標準になったfirewalldで国内IPのみを許可する(海外のIPを弾く)ための設定方法について解説します。
587 は smtp submission で 4000-4029 は ftp pasv で 10000 は webmin です。
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --permanent --zone=public --add-service=imap firewall-cmd --permanent --zone=public --add-service=imaps firewall-cmd --permanent --zone=public --add-service=pop3 firewall-cmd --permanent --zone=public --add-service=pop3s firewall-cmd --permanent --zone=public --add-service=smtp firewall-cmd --permanent --zone=public --add-service=smtps firewall-cmd --permanent --zone=public --add-port=587/tcp # 自宅のIPからのみsshへの接続を許可 firewall-cmd --permanent --zone=public --remove-service=ssh firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=18.97.14.89 port port=ssh protocol=tcp accept" # 自宅のIPからのみftpへの接続を許可 firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=18.97.14.89 port port=ftp protocol=tcp accept" firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=18.97.14.89 port port=4000-4029 protocol=tcp accept" # 自宅のIPからのみwebminへの接続を許可 firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=18.97.14.89 port port=10000 protocol=tcp accept"
firewalld を reload すると設定が反映されます。
firewall-cmd --reload
日本のIP以外も許可する場合は COUNTRYLIST='JP' の部分を例えば COUNTRYLIST='JP KR CN' のように記述してください。
mkdir /root/iptables vi /root/iptables/jpip_setup.sh
#!/bin/bash COUNTRYLIST='JP' curl -s -o /root/iptables/delegated-apnic-latest http://ftp.apnic.net/stats/apnic/delegated-apnic-latest :> /root/iptables/jpip for country in $COUNTRYLIST do for ip in `cat /root/iptables/delegated-apnic-latest | grep "apnic|$country|ipv4|"` do COUNTRY=`echo $ip | awk -F"|" '{ print $2 }'` IPADDR=`echo $ip | awk -F"|" '{ print $4 }'` TMPCIDR=`echo $ip | awk -F"|" '{ print $5 }'` FLTCIDR=32 while [ $TMPCIDR -ne 1 ]; do TMPCIDR=$((TMPCIDR/2)) FLTCIDR=$((FLTCIDR-1)) done echo "$IPADDR/$FLTCIDR" >> /root/iptables/jpip done done
chmod 700 /root/iptables/jpip_setup.sh /root/iptables/jpip_setup.sh
# domestic(国内)というゾーンを作成します。 firewall-cmd --permanent --new-zone=domestic # domestic という ipset を作成して type を hash:net にします。 firewall-cmd --permanent --new-ipset=domestic --type=hash:net # 上記で作った国内のIPリストファイルをこの ipset に読み込みます。 firewall-cmd --permanent --ipset=domestic --add-entries-from-file=/root/iptables/jpip # この ipset に国内IPリストが読み込まれているか確認します。 firewall-cmd --permanent --info-ipset=domestic # 読み込まれた ipset をこのゾーンに適用します。 firewall-cmd --permanent --zone=domestic --add-source=ipset:domestic
下記はhttpとhttpsを国内のIPのみに許可する場合の記述です。
# ゾーン public から http と https を除外します。 firewall-cmd --permanent --zone=public --remove-service=http firewall-cmd --permanent --zone=public --remove-service=https # ゾーン domestic に http と https を追加します。 firewall-cmd --permanent --zone=domestic --add-service=http firewall-cmd --permanent --zone=domestic --add-service=https
これで完了です。あとは firewalld を reload してください。
firewall-cmd --reload
Copyright(C) systemexpress.co.jp All Rights Reserved. Author Takayuki Yukawa