CentOS7 のBIND9で不正アクセスが多い場合の設定手順を紹介いします。
firewalld を利用すする場合
CentOS7 標準のファイアウォール「firewalld」を用いる場合の設定です。
方法1:rich-rule (高度なルール)を利用する方法
高度なルールを利用する場合の設定方法です。
以下のコマンドを実行します。
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の[ファイアウォールの設定]の[高度なルール]の一覧に追加されます。
高度なルールを設定した場合は、動的にファイアウォールが開くため、サービス欄のチェックは外しておきます。(チェックがついていると常に許可されてしまうため)
方法2:ダイレクト設定を利用する
ダイレクト設定を利用して、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の[ファイアウォールの設定]の[ダイレクト設定]のタブに項目が追加されます。
または
firewall-cmd --direct --get-all-rules
コマンドでも確認可能です。
参考
セカンダリ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
iptablesを利用する場合
CentOS7標準のファイアウォール"firewalld"を停止してiptablesを利用する場合の設定手順です。
iptableを利用して同一のIPアドレスから多くの接続を受け入れないように設定します。
firewalldの停止
CentOS7ではデフォルトではfirewalldが起動ししているため、先にfirewalldを停止すする必要があります。
以下のコマンド実行します。
su
systemctl stop firewalld
systemctl diable firewalld
解説
systemctl stop firewalld
により、firewalld を停止します。
systemctl diable firewalld
コマンドで、firewalld の自動起動を停止します。
実行結果
iptables 設定ファイルの変更
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
意味は以下の通りです
- --dport 53 : ポート番号 53
- -i eth0 : インターフェイス (eth0)
- --hashlimit-burst 5 : 同一ホストからの最大接続回数 1
- --hashlimit 1/m : 同一ホストからの接続受入れ頻度 - 1分に1回
- --hashlimit-mode srcip : 接続数のカウント方法 - srcip (クライアント接続元IP)
- --hashlimit-htable-expire : 各クライアントのレコードの有効期限(ミリ秒) - 有効期限は2分間
- -j ACCEPT : 条件にマッチした通信の処理方法 - 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の起動
iptablesを起動します。以下のコマンドを実行します。
systemctl start iptables
iptablesの自動起動
systemctl enabled iptables
実行結果
著者
かつて日本を代表したスーパーエンジニア (自称)
ハードウェア、電気設備、ガーデニング関係の記事を担当。
最終更新日: 2024-01-06
作成日: 2014-12-16