康康

FreeBSD安装后建议做的几件事
这是以前发过的一片文章,现在重新发出来,作为一个备份吧!当一个干净的FreeBSD系统安装完成后,我们应该对其进行...
扫描右侧二维码阅读全文
09
2018/01

FreeBSD安装后建议做的几件事

这是以前发过的一片文章,现在重新发出来,作为一个备份吧!

当一个干净的FreeBSD系统安装完成后,我们应该对其进行一些基础的设置,这样能够使您的VPS得到更大的发挥~

系统编译

FreeBSD有一个非常好的地方,就是能够让您自由的编译自己所需要的内核,通俗点讲就是自己定义自己的系统,什么需要?什么不需要?

比如您用FreeBSD只是为了假设一个Web服务器,机器都是托管到机房之中,那么USB是您需要的么?还有各种网卡是您需要的么?

我们可以通过编译内核来将这些多余的东西全部去除,使自己的系统保持一个精简、优化、性能卓越的良好状态。

安装源码

要编译内核,首先需要安装源码,源码安装有多种方式,省事儿的话直接在装系统的时候就把源码选上,当然,如果您在安装时没有安装源码,或者您的VPS带的系统模板中不包含源码也没关系,咱们还有其他的方法安装!

我这里就给出一种最基本的方式:直接到官方下载源码包,然后解压就可以了!

cd /
fetch http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.1-RELEASE/src.txz # 若您不是10.1的64位版本,请下载相应的版本即可
tar zxf src.txz

内核编译

当安装完源码包后,选择自己对应的内核文件,将其修改为自己需要的内核

若需要使用防火墙,请在内核配置文件中加入

options     IPFIREWALL
options     IPFIREWALL_VERBOSE
options     IPFIREWALL_VERBOSE_LIMIT=65535
options     IPDIVERT

这里注意下,若是能够直接在VPS控制面板中登录的话,最好使用VPS中的控制面板来编译,否则请使用screen,因为编译内核其实挺费时间的

系统优化

内核编译完成,接下来就需要优化系统咯

更新ports树

全新安装的FreeBSD,其ports不一定就是最新的,我们需要对其进行更新

portsnap fetch extract
portsnap update

下载加速

FreeBSD中安装软件一般使用ports或pkg,使用ports能够更好的定制安装,所以很多朋友喜欢使用ports来安装软件,但是ports默认是使用fetch来下载源码包,这样就导致了安装时间的增长,所以我们需要对安装时的下载方式进行相应的优化,加快下载速度,间接的加快了软件的安装速度。

安装axel

axel是一个多线程的命令行下载工具,我们使用它来替换fetch作为ports的默认下载工具,能够极大的加快源码包的下载速度

pkg install axel

或者

cd /usr/ports/ftp/axel
make install clean

修改配置

用任意编辑器编辑 /etc/make.conf 文件,内容修改为

FETCH_CMD=axel
FETCH_BEFORE_ARGS= -n 10 -a
FETCH_AFTER_ARGS=
DISABLE_SIZE=yes
MASTER_SITE_OVERRIDE?=\
http://distcache.FreeBSD.org/ports-distfiles/${DIST_SUBDIR}/ #官方镜像,有其他镜像地址也可以加上
MASTER_SITE_OVERRIDE?=${MASTER_SITE_BACKUP}

优化设置

/etc/rc.conf 是一个很重要的文件,记录了一些包括启动、系统配置等内容,我们打开它,修改如下

hostname="server.usebsd.com" #设定主机名
ifconfig_vtnet0="inet xxx.xxx.xxx.xxx netmask 255.255.255.0" #设定IP地址,其中vtnet0是网卡名称,注意设置正确
defaultrouter="xxx.xxx.xxx.1" #网关地址
sshd_enable="YES" #开启SSH
dumpdev="NO" #是否开启随意
firewall_enable="YES" #开启防火墙,需要在内核编译时将防火墙编译进去
firewall_script="/etc/firewall.rules" #防火墙规则文件
inetd_enable="NO" #不由inetd启动任何服务
mysqld_enable="YES"
nginx_enable="YES"
php_fpm_enable="YES"
memcached_enable="YES" #虽然还没配置web环境,但我依然先将他们写进去
postfix_enable="YES" #FreeBSD中默认使用sendmail发送邮件,不过postfix更轻巧,更快,这里先设置,待会儿配置
sendmail_enable="NONE" #将sendmail直接关闭
syslogd_enable="YES" #开启日志
syslogd_flags="-s -s" #禁止接收其他主机的日志
portmap_enable="NO"
nfs_server_enable="NO"
nfs_client_enable="NO" #这三行是关闭nfs服务,咱们没必要
kern_securelevel_enable="YES" #开启安全级别
kern_securelevel="2" #设置为2级
# kern_securelevel -1:这是系统默认级别,没有提供任何内核的保护错误;
# kern_securelevel 0:基本上作用不多,当你的系统刚启动就是0级别的,当进入多用户模式的时候就自动变成1级了。
# kern_securelevel 1:在这个级别上,有如下几个限制:
# a. 不能通过kldload或者kldunload加载或者卸载可加载内核模块;
# b. 应用程序不能通过/dev/mem或者/dev/kmem直接写内存;
# c. 不能直接往已经装在(mounted)的磁盘写东西,也就是不能格式化磁盘,但是可以通过标准的内核接口执行写操作;
# d. 不能启动X-windows,同时不能使用chflags来修改文件属性;
# kern_securelevel 2:在 1 级别的基础上还不能写没装载的磁盘,而且不能在1秒之内制造多次警告,这个是防止DoS控制台的;
# kern_securelevel 3:在 2 级别的级别上不允许修改IPFW防火墙的规则。
fsck_y_enable="YES" #开机自动fsck硬盘
enable_quotas="YES"
check_quotas="YES" #系统配额
clear_tmp_enable="YES" #开机自动清空/tmp
update_motd="NO" #禁用内核信息提示
tcp_drop_synfin="YES" #挫败OS指纹识别
icmp_drop_redirect="YES"
icmp_log_redirect="YES" #ICMP重定向
log_in_vain="YES" #记录每一个企图到关闭端口的连接
accounting_enable="YES" #系统审计功能

sysctl优化

我们还可以对sysctl进行一些系统优化及安全设置,修改 /etc/sysctl.conf 文件

net.inet.tcp.sendspace=65536 #最大的待发送TCP数据缓冲区空间
net.inet.tcp.recvspace=65536 #最大的接受TCP缓冲区空间
net.inet.udp.sendspace=65535 #最大的接受UDP缓冲区大小
net.inet.udp.maxdgram=65535 #最大的发送UDP数据缓冲区大小
net.local.stream.sendspace=65535 #本地套接字连接的数据发送空间
net.inet.tcp.rfc1323=1
net.inet.tcp.rfc1644=1 
net.inet.tcp.rfc3042=1 
net.inet.tcp.rfc3390=1 #加快网络性能的协议
kern.ipc.maxsockbuf=2097152 #最大的套接字缓冲区
kern.maxfiles=65536 #系统中允许的最多文件数量
kern.maxfilesperproc=32768 #每个进程能够同时打开的最大文件数量
net.inet.tcp.delayed_ack=0 #当一台计算机发起TCP连接请求时,系统会回应ACK应答数据包。该选项设置是否延迟ACK应答数据包,把它和包含数据的数据包一起发送,在高速网络和低负载的情况下会略微提高性能,但在网络连接较差的时候,对方计算机得不到应答会持续发起连接请求,反而会降低性能。 
net.inet.icmp.drop_redirect=1 
net.inet.icmp.log_redirect=1 
net.inet.ip.redirect=0 
net.inet6.ip6.redirect=0 #屏蔽ICMP重定向功能
net.inet.icmp.bmcastecho=0 
net.inet.icmp.maskrepl=0 #防止ICMP广播风暴
net.inet.icmp.icmplim=100 #限制系统发送ICMP速率
net.inet.icmp.icmplim_output=0  
net.inet.tcp.drop_synfin=1  #安全参数,编译内核的时候加了options TCP_DROP_SYNFIN才可以用
net.inet.tcp.always_keepalive=1  #设置为1会帮助系统清除没有正常断开的TCP连接,这增加了一些网络带宽的使用,但是一些死掉的连接最终能被识别并清除。死的TCP连接是被拨号用户存取的系统的一个特别的问题,因为用户经常断开modem而不正确的关闭活动的连接
net.inet.ip.intr_queue_maxlen=1000  #若看到net.inet.ip.intr_queue_drops这个在增加,就要调大net.inet.ip.intr_queue_maxlen,为0最好
net.inet.tcp.msl=7500 #防止DOS攻击,默认为30000
net.inet.tcp.blackhole=2 #接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包
net.inet.udp.blackhole=1 #接收到一个已经关闭的端口发来的所有UDP包直接drop
net.inet.tcp.inflight.enable=1 #为网络数据连接时提供缓冲
net.inet.ip.fastforwarding=0 #如果打开的话每个目标地址一次转发成功以后它的数据都将被记录进路由表和arp数据表,节约路由的计算时间,但会需要大量的内核内存空间来保存路由表
#kern.polling.enable=1 #kernel编译打开options POLLING功能,高负载情况下使用低负载不推荐SMP不能和polling一起用
kern.ipc.somaxconn=32768 #并发连接数,默认为128,推荐在1024-4096之间,数字越大占用内存也越大
security.bsd.see_other_uids=0 #禁止用户查看其他用户的进程
kern.securelevel=2 #设置kernel安全级别
net.inet.tcp.log_in_vain=1 #记录下任何TCP连接
net.inet.udp.log_in_vain=1  #记录下任何UDP连接
net.inet.udp.checksum=1  #防止不正确的udp包的攻击
net.inet.tcp.syncookies=1 #防止DOS攻击
kern.ipc.shm_use_phys=1 #仅为线程提供物理内存支持,需要256兆以上内存
kern.ipc.shmmax=67108864 # 线程可使用的最大共享内存 
kern.ipc.shmall=32768 # 最大线程数量
kern.coredump=0 # 程序崩溃时不记录
net.local.stream.recvspace=65536
net.local.dgram.maxdgram=16384 
net.local.dgram.recvspace=65536  # lo本地数据流接收和发送空间
net.inet.tcp.mssdflt=1460 # 数据包数据段大小,ADSL为1452。
net.inet.tcp.inflight_enable=1 # 为网络数据连接时提供缓冲
net.inet.tcp.minmss=1460 # 数据包数据段最小值,ADSL为1452
net.inet.raw.maxdgram=65536 # 本地数据最大数量
net.inet.raw.recvspace=65536 # 本地数据流接收空间
net.inet.ip.fw.dyn_max=65535 #ipfw防火墙动态规则数量,默认为4096,增大该值可以防止某些病毒发送大量TCP连接,导致不能建立正常连接
net.inet.ipf.fr_tcpidletimeout=864000 #设置ipf防火墙TCP连接空闲保留时间,默认8640000(120小时)

删除登录信息

rm /etc/motd
touch /etc/motd
touch /etc/COPYRIGHT
ee /etc/gettytab
default:\
:cb:ce:ck:lc:fd#1000:im=\r\在这里修改成你需要的文字\r\n\r\n:sp#1200:\
:if=/etc/issue:

禁止一般用户查看系统日志

chmod g-w,o-r /var/log/*
chmod 600 /etc/syslog.conf
chmod 600 /etc/newsyslog.conf

使FreeBSD带上颜色

FreeBSD下默认的命令行是简单的黑白,很丑,我们可以为它加上一点颜色,这样显得更加美观,编辑 ~/.cshrc 文件,找到

alias ll ls -IAF

在下面加入

alias ls ls -FG

找到

set prompt = "

在上面加入

set colorf = "%{\e[31m%}"
set colorn = "%{\e[0m%}"

修改

set prompt = "

这一行为

set prompt="%B[$colorf%B%N%b$colorn%B@%m:%~]%#%b"

配置防火墙规则

编辑 /etc/firewall.rules 文件

ipfw -q -f flush
ipfw -q add 10 allow all from any to any via lo0
ipfw -q add 20 deny all from any to 127.0.0.0/8
ipfw -q add 30 deny all from 127.0.0.0/8 to any
ipfw -q add 40 deny tcp from any to any frag
ipfw -q add 50 check-state
ipfw -q add 60 allow tcp from any to any established
ipfw -q add 70 allow all from any to any out keep-state
ipfw -q add 80 allow icmp from any to any
ipfw -q add 90 allow tcp from any to any 25 out #允许从25端口发送信息出去,这是为了能够发邮件
ipfw -q add 100 allow tcp from any to xxx.xxx.xxx.xxx 22 in #允许访问22端口,若您的本地IP是固定的,可以更改 any 为您的本级IP地址,这样就只能允许您登陆SSH了
ipfw -q add 110 allow tcp from xxx.xxx.xxx.xxx to any 22 out #允许22端口出,同样可以将any改为您的IP
ipfw -q add 120 allow tcp from any to xxx.xxx.xxx.xxx 80 in
ipfw -q add 130 allow tcp from any to any 80 out
ipfw -q add 140 deny log all from any to any

修改SSH端口

与centos相同,都是修改 /etc/ssh/sshd_config

更换邮件程序

我使用postfix来替代sendmail,首先停止服务

cd /etc/mail
make stop

安装postfix

cd /usr/ports/mail/postfix
make install clean

编辑 /usr/local/etc/postfix/main.cf,当然,不设置也行

myhostname = server.usebsd.com #设定主机名
mydomain = usebsd.com #设定域名
myorigin = $mydomain #设定邮件标头显示在from栏的内容,若使用$myhostname,邮件地址会变成:admin@server.usebsd.com这样的。。。
inet_interfaces = all #如果网卡绑定了多个IP,all表示监听所有的
mydestination = $myhostname, localhost.$mydomain, localhost #只有在发现 mydestination 这个项目中有写入的主机名称做为收信主机时,才会将该封信件收下来
mynetworks = 127.0.0.0/8, hash:/usr/local/etc/postfix/access #对指定的IP进行relay
alias_maps = hash:/usr/local/etc/postfix/aliases
alias_database = hash:/usr/local/etc/postfix/aliases #设定账号别名的数据库
最后修改:2019 年 04 月 27 日 11 : 01 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论