如何安装 csf 防火墙,其实很简单就几条命令,不过,由于当时我的无知,导致实际上csf 防火墙并没有真正生效,原因是 csf 和 ufw 一样都是 iptables 脚本,它们处在同一层级,是互相冲突的。
所以,在配置 csf 防火墙时,你应该先执行命令 ufw disable
来关闭 ufw。
然后,我们安装 csf 防火墙:
wget https://download.configserver.com/csf.tgz
tar -zxvf csf.tgz
cd csf
sh install.sh
安装完成后,安装需要的环境:
apt install libwww-perl perl sendmail
ok之后,执行命令来检查防火墙的状态:
perl /usr/local/csf/bin/csftest.pl
如果输出如下,那么防火墙的执行应该就没什么问题了:
首先我们要做最基本的配置,来配置 csf 的放行端口,千万记得不能把 22 端口给断了,不然你就再见吧。
当然,csf 一旦安装好,是默认放行常见端口的,所以,我们做的只是去掉不用的。另外,csf 默认工作在测试模式,这样的话如果你真把自己关在外面了,没关系,五分钟后规则会清空的。
下面我们来编辑 vi /etc/csf/csf.conf
默认情况下,放行的端口如下:
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995"
TCP_OUT = "20,21,22,25,53,80,110,113,443"
UDP_IN = "20,21,53"
UDP_OUT = "20,21,53,113,123"
这里我根据我的需要,做了精简:
# Allow incoming TCP ports
TCP_IN = "22,80,143,53,443"
# Allow outgoing TCP ports
TCP_OUT = "22,25,53,80,110,113,443,587,993,995"
# Allow incoming UDP ports
UDP_IN = "53"
# Allow outgoing UDP ports
# To allow outgoing traceroute add 33434:33523 to this list
UDP_OUT = "53,113,123,33434:33523"
当然,我的服务器还支持 IPv6,所以需要继续往下翻,找到 IPv6 的配置,再来一遍:
# Allow incoming IPv6 TCP ports
TCP6_IN = "22,80,143,53,443"
# Allow outgoing IPv6 TCP ports
TCP6_OUT = "22,25,53,80,110,113,443,587,993,995"
# Allow incoming IPv6 UDP ports
UDP6_IN = "53"
# Allow outgoing IPv6 UDP ports
# To allow outgoing traceroute add 33434:33523 to this list
UDP6_OUT = "53,113,123,33434:33523"
然后是添加防御规则,阻止日常少量的 ddos,当然,量大了的话还得靠硬件了对吧?
找到字段 PORTFLOOD ,做如下规则:
PORTFLOOD = "22;tcp;5;300,80;tcp;20;5,443;tcp;20;5"
这里规则是说分别对端口 22,80,443做策略(以IP为单位):
- 如果 22 端口某 IP 在 300 秒内发起 5 个以上链接,就 ban;
- 如果 80 或 443 端口某 IP 在 5 秒内发起 20 个以上链接,就 ban。
ban 的时间默认是 1800 秒。
然后,csf 还有个功能是在 ban 了 IP 之后发邮件通知你,我们对如下字段做修改,加入自己的邮件地址:
LF_ALERT_TO = "your-email@gmail.com"
由于 lfd 还会发送可疑进程监控,如果你觉得烦,可以提前把你的进程加入白名单,编辑 /etc/csf/csf.pignore
,按照格式在末尾补充就可以了,比如我服务器跑了 nginx,php,我知道这不是可疑进程,那么就这样写:
exe:/usr/sbin/nginx
exe:/usr/sbin/php-fpm7.0
这样,我们的防火墙就配置好了,保存好配置后就可以尝试重启一波:
记得先用检测命令查看配置是否正确: perl /usr/local/csf/bin/csftest.pl
然后使用命令 csf -r 来重启防火墙,如果没什么致命问题,那说明防火墙正常工作了。至于这句:
*WARNING* RESTRICT_SYSLOG is disabled. See SECURITY WARNING in /etc/csf/csf.conf.
就让他 disabled
即可。
还有一个问题你可能会遇到,就是提示你 lfd 启动但崩溃了,这是正常的,在测试模式, lfd 不启动。
重新编辑 /etc/csf/csf.conf
配置文件,在第一行,把 1 改为 0:
TESTING = "0"
保存后重启防火墙 csf -r 这时候防火墙就已经正常运行了。
使用命令启动 csf 和附带的 lfd:
service csf start
service lfd start
通过查看 /var/log/lfd.log
可以看到 csf 防火墙的所有行为,比如 ban 了哪个 IP 之类的。
如果要添加白名单,那么就编辑 /etc/csf/csf.allow
,ip地址一行一个;
如果要手动添加黑名单,那么就编辑 /etc/csf/csf.deny
,也是一行一个,不过,这里边也会有规则自动添加的数据;
另外,你也可以添加忽略列表,列表中的 IP 地址不会被规则判断,但如果在黑名单中也存在,就会被阻止: /etc/csf/csf.ignore
这样,你的服务器应该就更坚固了。