最近、SYNフラッド攻撃を受けて高負荷になるWEBサーバーがあったので、その際にIPv6を無効にしましたので、その手順を説明します。
攻撃を受けたサーバのログには以下のようなメッセージが頻繁に出力されていました
kernel: TCPv6: Possible SYN flooding on port 443. Sending cookies.
IPv6を利用していませんが、無効にはしていなかったのでカーネルパラメータ,Apache,nginxので無効にしていきます
SYN Cookieが有効か確認する
SYN Cookieが有効になっているか確認するには下記のコマンドの結果が、1となっていればSYN Cookieが有効になっている。1でない場合は変更して下さい
$ cat /proc/sys/net/ipv4/tcp_syncookies 1 # 有効にするには、以下のように変更 $ sudo echo 1 > /proc/sys/net/ipv4/tcp_syncookies
カーネルパラメータでIPv6を無効にする
「/etc/sysctl.conf」にIPv6を無効にする設定を追加します
$ sudo vim /etc/sysctl.conf net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
追加後は設定を反映します
$ sudo sysctl -p
IPv6が無効になっているか確認します
# RHEL系(CentOS等) 何も表示されない場合はIPv6が無効になっている $ ip a | grep v6 # Ubuntu系 何も表示されない場合はIPv6が無効になっている $ ip a | grep inet6
iptablesでSYNフラッド攻撃を無効にする
iptablesでiptablesでSYNフラッド攻撃対策のルールを追加します。
追加位置は「-A INPUT -j DROP」の手前に追加します。下記ではログ出力も設定しています
$ sudo vim /etc/sysconfig/iptables -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j LOG --log-prefix "[IPTABLES INVALID SYN] : " -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP -A INPUT -j DROP # サービスの再起動 $ sudo service iptables restart
ApacheでIPv6を無効にする
Apacheで下記のような設定だと、IPv6の通信をIPv4にバインドする可能性があるので、明示的にIPv4のみの設定にします
# Listen 80 をコメントアウトして、Listen 0.0.0.0:80 に変更します $ sudo vi /etc/httpd/conf/httpd.conf # Listen 80 Listen 0.0.0.0:80 # Listen 443 https をコメントアウトして、Listen 0.0.0.0:443 https に変更します $ sudo vi /etc/httpd/conf.d/ssl.conf # Listen 443 https Listen 0.0.0.0:443 https
設定変更後は、再起動を実施
$ sudo systemctl restart httpd
nginxでIPv6を無効にする
「listen [::]:80;」、「listen [::]:443;」の箇所をコメントアウトするか、削除します
$ sudo vim /etc/nginx/sites-enabled/default server { listen 80; # listen [::]:80; server_name nextcloud.m-yabe.com; # 443でListenする箇所がある場合は同じように設定 server { listen 443 ssl http2; # listen [::]:443 ssl http2;
設定変更後は再起動を実施
$ sudo systemctl restart nginx