Если надо чтобы ssh смотрел в инет, а какие-то нехорошие личности подбирают к нему пароль. Накопал тут интересный способ защиты PortKnocking. Суть в том: чтобы выполнить какие-то действия на сервере, нужно постучатся по определенным портам. В моем случае, действие, это открытие или закрытие ssh.
Есть способ попроще, через iptables, и с помощью демона knockd.
Iptables:
#iptables -A INPUT -m tcp -p tcp -m state --state NEW --dport 22 -m recent --rcheck --name SSH -j ACCEPT
#iptables -A INPUT -m tcp -p tcp -m state --state NEW --dport 1599 -m recent --name SSH --remove -j DROP
#iptables -A INPUT -m tcp -p tcp -m state --state NEW --dport 1600 -m recent --name SSH --set -j DROP
#iptables -A INPUT -m tcp -p tcp -m state --state NEW --dport 1601 -m recent --name SSH --remove -j DROP
#iptables -A INPUT -p tcp --dport 22 -j DROP
Вариант для ferm:
table filter {
chain INPUT {
policy DROP;
proto tcp dport 1600 LOG;
proto tcp mod state state NEW {
dport 22 mod recent rcheck name SSH ACCEPT;
dport 1599 mod recent name SSH remove DROP;
dport 1600 mod recent name SSH set DROP;
dport 1601 mod recent name SSH remove DROP;
}
}
}
Для то чтобы открыть ssh, надо отправить SYN-пакет на порт 1600(прокатит обычный $telnet 144.144.144.144 1600). Закрыть соотвественно на 1599/1601 - небольшая предосторожность чтобы случайный скан не открыл. Порт открывается только для ip с которого пришел SYN-пакет.