使用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,但是要以空白分隔而不是使用逗号。

个人工具