请先确定你可以顺利的访问自己的服务器,不管是本地访问、VM控制台或者是telnet,保证防火墙没有因为意外的错误配置导致系统无法访问。
这里是本文是适用条件:
1.FreeBSD 7.x, 8.x or 9.x; x86 or x64
2.ipfw + tables support
3.DirectAdmin's Brute Force Monitor (version 1.40 required)
跟随本文设置完成之后你将获得一下的功能:
1.通过DirectAdmin的BFM(强力监控)模块自动的封禁IP。
2.根据在DirectAdmin后台BFM中设置的指定时间间隔取消相关的IP封禁。
3.一个强力的防火墙。
4.拥有干净和规整的防火墙规则表。
5.最小的系统修改。
1.在FreeBSD上打开IPFW
先修改rc.conf文件并且打开IPFW
代码如下 | 复制代码 |
# ee /etc/rc.conf |
把下面的内容增加到rc.conf
代码如下 | 复制代码 |
firewall_enable="YES" |
重启系统来打开防火墙
一旦系统启用,再次修改rc.conf文件并在firewall_enable="YES"增加以下内容:
代码如下 | 复制代码 |
firewall_type="simple" firewall_script="/etc/ipfw.rules" firewall_logging="YES" |
考虑到防火墙最大规则的限制,附加的改变可能需要sysctl,如果你的服务器很繁忙,你可能会得到以下的错误信息:
代码如下 | 复制代码 |
|
如果想在以后避免这样的情况,使用下面命令在sysctl.conf(默认值4096)增加一下的内容,这样允许FreeBSD在IPFW中拥有创建和获取动态规则的权限。
代码如下 | 复制代码 |
# echo "net.inet.ip.fw.dyn_max=65536" >> /etc/sysctl.conf |
或者你可以手动编辑sysctl.conf文件并增加“net.inet.ip.fw.dyn_max=65536”,这里的最大值为65535。
2.为你的防火墙增加一些基本规则
下面的内容可以自己自定义设置,这里我们将标准的服务端口加入防火墙:FTP、SSH、POP、SMTP/EXIM、DNS、HTTP、SSL和DirectAdmin的2222端口,你可以根据自己的实际情况修改相关的设置。
命令“setup limit src-addr
先修改/etc/ipfw.rules文件,采用命令:
代码如下 | 复制代码 |
# ee /etc/ipfw.rules |
将一下内容添加到文件内:
代码如下 | 复制代码 |
#!/bin/sh ################################################# # ipfw Firewall Commands ################################################# cmd="ipfw -q add" ipfw -q -f flush pif="em0" ################################################# # Allow Loopback and Deny Loopback Spoofing ################################################# $cmd allow all from any to any via lo0 $cmd deny all from any to 127.0.0.0/8 $cmd deny all from 127.0.0.0/8 to any $cmd deny tcp from any to any frag ################################################# # Stateful rules ################################################# $cmd check-state $cmd deny tcp from any to any established $cmd allow all from any to any out keep-state $cmd allow icmp from any to any ################################################# # Table 10 for IP blocks ################################################# ipfw -q table 10 add 127.0.0.2 ipfw -q add 900 deny ip from 'table(10)' to any ################################################# # Incoming/Outgoing Services ################################################# $cmd 60001 allow tcp from any to any 21 setup limit src-addr 10 $cmd 60002 allow tcp from any to any 22 setup limit src-addr 8 $cmd 60003 allow tcp from any to any 25 setup limit src-addr 10 $cmd 60004 allow tcp from any to any 587 setup limit src-addr 20 $cmd 60005 allow tcp from any to any 53 setup limit src-addr 3 $cmd 60006 allow udp from any to any 53 limit src-addr 3 $cmd 60007 allow tcp from any to any 80 setup limit src-addr 20 $cmd 60008 allow tcp from any to any 110 setup limit src-addr 20 $cmd 60009 allow tcp from any to any 143 setup limit src-addr 10 $cmd 60010 allow tcp from any to any 443 setup limit src-addr 10 $cmd 60011 allow tcp from any to any 2222 setup limit src-addr 12 $cmd 60012 allow tcp from any to any 35000-35999 in setup limit src-addr 10 $cmd 60013 allow tcp from any to any 993 setup limit src-addr 10 $cmd 60014 allow tcp from any to any 995 setup limit src-addr 10 $cmd 60015 allow tcp from any to any 465 setup limit src-addr 10 $cmd 60016 allow tcp from any to any 585 setup limit src-addr 10 ################################################# # Deny Port scanning (Nmap) ################################################# $cmd 00600 deny log logamount 50 ip from any to any ipoptions rr $cmd 00610 deny log logamount 50 ip from any to any ipoptions ts $cmd 00620 deny log logamount 50 ip from any to any ipoptions lsrr $cmd 00630 deny log logamount 50 ip from any to any ipoptions ssrr $cmd 00640 deny log logamount 50 tcp from any to any tcpflags syn,fin $cmd 00650 deny log logamount 50 tcp from any to any tcpflags syn,rst ################################################# # Deny and Log ################################################# $cmd deny log all from any to any |
3.创建必要的DirectAdmin的封禁和解除封禁的脚本,并赋予执行的权限:
代码如下 | 复制代码 |
# cd /usr/local/directadmin/scripts/custom # touch block_ip.sh unblock_ip.sh brute_force_notice_ip.sh show_blocked_ips.sh # chmod 755 block_ip.sh unblock_ip.sh brute_force_notice_ip.sh show_blocked_ips.sh |
4.将文件准备好之后复制并粘贴以下内容:
block_ip.sh:
代码如下 | 复制代码 |
#!/bin/sh unblock_ip.sh: brute_force_notice_ip.sh: #!/bin/sh show_blocked_ips.sh: #!/bin/sh |
现在核实一下DirectAdmin已经在BFM模块中提供了Block IPs的功能,就可以重启服务,来确保系统重启之后仍然可用,然后可以逐个检查其他的服务。