CentOS7 のBIND9で不正アクセスが多い場合の設定手順を紹介いします。
CentOS7 標準のファイアウォール「firewalld」を用いる場合の設定です。
高度なルールを利用する場合の設定方法です。
以下のコマンドを実行します。
firewall-cmd --permanent --add-rich-rule='rule family="ipv4"
destination address="(このサーバーのIPアドレス)" service name="dns" accept limit value="60/m"'
1分間に60回まで接続を受け入れる設定です。
firewall-cmd --permanent --add-rich-rule='rule family="ipv4"
destination address="192.168.0.96/24" service name="dns" accept limit value="60/m"'
コマンドが正しく実行できれば"SUCCESS"が帰ります。
GUIの[ファイアウォールの設定]の[高度なルール]の一覧に追加されます。
高度なルールを設定した場合は、動的にファイアウォールが開くため、サービス欄のチェックは外しておきます。(チェックがついていると常に許可されてしまうため)
ダイレクト設定を利用して、iptablesのコマンドを直接設定する方法です。
ダイレクト設定を利用する場合は下記のコマンドを実行します。
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -p udp -m state --state NEW --dport 53 -i eth0 -m hashlimit --hashlimit-burst 5 --hashlimit 1/m --hashlimit-mode srcip --hashlimit-htable-expire 120000 --hashlimit-name named-limit -j ACCEPT
コマンドの詳細は後述するiptablesの説明を参照してください。
正常に実行されると、下図の結果となります。
GUIの[ファイアウォールの設定]の[ダイレクト設定]のタブに項目が追加されます。
または
コマンドでも確認可能です。
セカンダリDNSの通信を常に許可する場合は以下のような書式になります。
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -p tcp -s (セカンダリDNSのIPアドレス) --dport 53 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 2 -p udp -s (セカンダリDNSのIPアドレス) --dport 53 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 3 -p udp -m state --state NEW --dport 53 -i eth0 -m hashlimit --hashlimit-burst 5 --hashlimit 1/m --hashlimit-mode srcip --hashlimit-htable-expire 120000 --hashlimit-name named-limit -j ACCEPT
CentOS7標準のファイアウォール"firewalld"を停止してiptablesを利用する場合の設定手順です。
iptableを利用して同一のIPアドレスから多くの接続を受け入れないように設定します。
CentOS7ではデフォルトではfirewalldが起動ししているため、先にfirewalldを停止すする必要があります。
以下のコマンド実行します。
systemctl stop firewalld
により、firewalld を停止します。
systemctl diable firewalld
コマンドで、firewalld の自動起動を停止します。
iptablesの設定ファイル "/etc/sysconfig/iptables"を編集します。
# sample configuration for iptables service # you can edit this manually or use system-config-firewall # please do not ask us to add additional ports/services to this default configuration *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
# sample configuration for iptables service # you can edit this manually or use system-config-firewall # please do not ask us to add additional ports/services to this default configuration *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT #-A INPUT -p tcp --dport 53 -j ACCEPT #-A INPUT -p udp --dport 53 -j ACCEPT -A INPUT -p tcp -s (セカンダリDNSのIP) --dport 53 -j ACCEPT -A INPUT -p udp -s (セカンダリDNSのIP) --dport 53 -j ACCEPT -A INPUT -p udp -m state --state NEW --dport 53 -i eth0 -m hashlimit --hashlimit-burst 5 --hashlimit 1/m --hashlimit-mode srcip --hashlimit-htable-expire 120000 --hashlimit-name named-limit -j ACCEPT -A INPUT -p udp --dport 53 -i eth0 -j DROP -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
下記設定により、条件が一致した場合のみ通信を受け入れます。
-A INPUT -p udp -m state --state NEW --dport 53 -i eth0 -m hashlimit --hashlimit-burst 5 --hashlimit 1/m --hashlimit-mode srcip --hashlimit-htable-expire 120000 --hashlimit-name named-limit -j ACCEPT
意味は以下の通りです
下記設定によりそれ以外のポート53への通信は遮断します。
-A INPUT -p udp --dport 53 -i eth0 -j DROP
上記の設定でも動作しますが、セカンダリDNSへのドメイン情報の転送も拒否してしまうため、セカンダリDNSからの通信は常に許可するよう設定します。下記を上記のリミット制限のルールの手前に記述します。
-A INPUT -p tcp -s (セカンダリDNSのIP) --dport 53 -j ACCEPT -A INPUT -p udp -s (セカンダリDNSのIP) --dport 53 -j ACCEPT
iptablesを起動します。以下のコマンドを実行します。