I recently had to work with some servers that have an IPv6 connection and I was surprised to find out that fail2ban does not have IPv6 support, neither does denyhosts. Searching on google I found that people generally recommend:

  • Deactivating ssh login through IPv6 (not a solution for me)
  • using only private/public key authentication on the server, with no password authentication (works, but a lot of attacks might cost the server a lot of processing power, or it might even make it unavailable by DDoS-ing it)
  • using ip6tables to block consecutive attacks from the same IP
  • using sshguard which has IPv6 support

From what I've gathered so far banning addresses in IPv6 is a bit different than on IPv4 because ISPs don't give a user a single address (/128), but a whole subnet (I currently have a /48). Thus banning single IPv6 addresses would be ineffective against attacks. I've searched high and low on the subject of ip6tables and sshguard blocking subnets on attack detection but I haven't managed to find any information.

Does anyone know if sshguard bans subnets on IPv6 attacks?
Does anyone know how to make an ip6tables configuration for banning subnets on IPv6 attacks?
Or does anyone know of a better way of mitigating the attacks than what I've already found?

PS: I'm using CentOS 7 on the system.

  • 3
    For more information about fail2ban adding IPv6 support: github.com/fail2ban/fail2ban/issues/39. It seems that they are facing a problem with subnet blocking, which delays further implementation (it seems to get further and further away from us actually...). Commented Jul 17, 2015 at 10:49
  • Rate limiting/banning rules in iptables. Change your question for that and a couple of rep-whore should answer precisely.
    – user123418
    Commented Jul 18, 2015 at 2:41
  • Is this a hypothetical problem? I have been looking on logs of brute force attempts from a few servers, and every one of them was attempted over IPv4. And I have not seen any server come under too much load due to such attempts when password authentication is disabled on the server side.
    – kasperd
    Commented Jul 18, 2015 at 9:27
  • 1
    @kasperd I got a few thousand attempts a day on IPv6 so, no, it's not a hypothetical problem. The server address is public because it hosts a site, so it is very much a real problem. Commented Jul 20, 2015 at 7:09
  • @user123418 I will leave the title of the question as it is for now, I really would prefer something like sshguard because of the control over it vs a rule in ip6tables. If no one will answer in the following week then I will change my question. Commented Jul 20, 2015 at 7:12

2 Answers 2


In order to attack a server the attacker must first know its IP address. With IPv6 you will have so many addresses to choose from that it is not feasible to find the correct address by scanning the IP range.

This means you can simply assign two different IPv6 addresses to the interface. You let the domain name of your site keep pointing to the same IP address as always, and you let sshd listen only on the newly assigned IP address.

After that change knowing the domain name and IP address of your site will not give an attacker any access to your sshd.

You will of course need a secondary host name to be used when connecting using ssh. That host name can have a lot more entropy than an IPv6 address. Somebody guessing the host name for ssh is inconceivable if you use 63 alphanumeric characters.

Should somebody find out the IPv6 address used for sshd, you simply move sshd to a new IPv6 address and update the AAAA record. Then they have to start all over.

If you are worried that a legitimate ssh user might leak the host name and/or IP addresses, then you can create a different host name for each user to access with ssh. Initially I would CNAME all of them to a single host name such that there is only a single AAAA record to update.

  • Sounds better than what I currently have, but not quite what I was looking for. Thanks anyway. Commented Jul 20, 2015 at 10:11

Good news are that fail2ban released support for IPv6 recently.

For Debian IPv6 servers I would recommend to follow this tutorial.

For CentOS IPv6 servers, I would recommend to download it here and then execute these commands replacing the version number accordingly:

tar xvfj fail2ban-0.11.0.tar.bz2
cd fail2ban-0.11.0
python setup.py install

Make sure a jail for sshd is enabled in /etc/fail2ban/jail.local, for example:

  • 1
    Although I admire what the guys over at fail2ban have done, it's still not enough! Not all features are supported by the IPv6 protocol according to their changelog github.com/fail2ban/fail2ban/blob/0.10/ChangeLog and there is still no support for banning subnets github.com/fail2ban/fail2ban/issues/927 which is crucial for IPv6 since any ISP will not offer only one IPv6 address to a customer, but an entire subnet. As long as this remains true no production machine should use fail2ban now! Please change your answer to reflect this, because this page is visited by a lot of people. Commented Oct 18, 2017 at 9:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .