使用knock管理防火墙
出自Centos
管理 Linux 服务器的时候我们通常使用 SSH 来进行远程登入管理主机,在预设的情况下 SSH 会要求您输入登入主机的账号与密码来进行使用者验证,但这样的防护不够的。网络上有非常多的怪客(cracker)会使用特殊的软件程序来猜你的账号与密 码,也就是俗称的爆力攻击法(Brute Force Attack),若是你的账号与密码设定的不够复杂很容易就会破解。常见的反制方式是改用 public/private key 这种加密金钥机制取代密码验证,或是使用防火墙阻绝所有的外来联机只开放特定 IP 联机,当然若结合此两种方式则效果会更好。
使用防火墙阻绝联机有一个问题必须要克服,就是你必须要有一个固定 IP 才行;但若你是使用非固定 IP 的 ADSL 来进行联机,却又想利用功能强大的防火墙来彻底阻挡所有恶意的 SSH 联机,这时你就会需要使用 knockd。knockd 的功能简单的说就是你可以藉由 knock(敲) 服务器特定的 PORT,来使服务器执行特定的指令,例如开放你目前的 IP 使用 SSH 的权限。有了 knockd,你大可以在防火墙阻挡所有外来的 SSH 联机,然后在你需要连进主机进行维护时再透过 knockd 来开启 SSH 联机即可。
官方网站: http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki
knockd server 下载: http://www.invoca.ch/pub/packages/knock/
knockd client 下载: http://www.zeroflux.org/proj/knock/files/knock-win32.zip
实际安装步骤:
一、建立 RPM 由于下载回来的 knock 是 Source RPM,因此要先建立可安装的 RPM 档案
引用: rpmbuild --rebuild knock-0.5-4.src.rpm
二、安装 RPM 引用: cd /usr/src/redhat/RPMS/i386 rpm -ivh knock-0.5-4.i386.rpm rpm -ivh knock-server-0.5-4.i386.rpm
三、设定 /etc/sysconfig/knockd: 引用: OPTIONS="-i eth0"
注: 只监听 eth0,knock 一次只可以监听一个界面。
四、设定 /etc/knockd.conf:
PHP 程序代码:
[options]
UseSyslog
[opencloseSSH]
sequence = 116:tcp,968:tcp,180:udp seq_timeout = 15 tcpflags = syn start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport ssh -j ACCEPT cmd_timeout = 30 stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport ssh -j ACCEPT
注:
UseSyslog:使用 syslog 来记录 log 档案,相关的讯息会存在 /var/log/secure 中。 sequence:所要使用的 knock 顺序,注意,这里必须要填入 Firewall 有开启的 Port,不然 knockd 会看不到你所发出的 knock 讯息。 tcpflags:要设定为 syn,不然使用 knock client program 进行 knock 的时候会出错 start_command:knock 成功时要执行的指令 stop_command:cmd_timeout 时间到后,要执行的指令
五、启动 knockd
引用:
service knockd start
chkconfig knockd on
六、使用 knockd client 程序 例如在 Windows 上,使用官方网站所提供的 knock 客户端程序(Native Win32 Client),在终端机窗口输入:
引用:
knock.exe 192.168.X.X 116:tcp 968:tcp 180:udp
注意,红色部份要输入你之前设定好的 sequence,但是要以空白分隔而不是使用逗号。
