【IT168 服务器学院】7. 防火墙设置
防火墙是用户访问服务器的第一道屏障,简单有效的规则设计是防火墙设置的基本要求。在BSD系统中常用的防火墙有IPFILTER、IPFW、PF,现在PF防火墙在FREEBSD、OPENBSD、NETBSD中都可以运行了。之所以大家都用PF防火墙,我想是和PF防火墙不俗的表现有必然的联系。下面列出我的PF防火墙规则,供大家参考。
# vi /etc/pf.conf
===========+===========+===========+============
ext_if = "{ fxp0 }"
loop = "lo0"
noroute = "{ 127.0.0.1/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 255.255.255.255/32 }"
ports = "{ 20, 21, 22, 25, 53, 80, 110 }"
web = "{127.0.0.1}"
set block-policy return
set optimization aggressive
set loginterface fxp0
set skip on lo0
scrub in all
rdr on $ext_if proto tcp from any to $ext_if port 80 -> $web port 80
antispoof for $ext_if inet
block all
block return
block in quick on $ext_if os NMAP
block in quick on $ext_if from $noroute to any
block out quick on $ext_if from any to $noroute
pass in on $ext_if proto tcp from any to $web port 80 flags S/SA synproxy state
pass quick on $loop all
pass in quick on $ext_if proto {tcp,udp} from any to any port $ports keep state
pass in quick proto tcp from any to any port 55000 >< 56000 keep state
pass out quick on $ext_if all keep state
===========+===========+===========+============
FREEBSD系统给我们提供了一个很好用的PF服务启动教本
# /etc/rc.d/pf start | stop | reload | restart
但是在OPENBSD系统上没有这样一个教本,启动PF服务是有/etc/rc这个公用教本实现的,用户在管理PF服务是就不是很方便了,下面给出一个独立PF启动教本:
# /etc/rc.d/pf.sh
===========+===========+===========+============
#!/bin/sh
# made by llzqq
# 02/08/ 2005
# pf startup scripts
case "$1" in
start)
if ifconfig pflog0 >/dev/null 2>&1; then
ifconfig pflog0 up
pflogd ${pflogd_flags}
fi
if [ -f /etc/pf.conf ]; then
/sbin/pfctl -e -F all -f /etc/pf.conf
fi
;;
stop)
/sbin/pfctl -d -F all
/usr/bin/pkill pflogd
/sbin/ifconfig pflog0 down
;;
*)
echo "$0 start | stop"
;;
esac
exit 0
===========+===========+===========+============
# chmod 555 /etc/rc.d/pf.sh
# /etc/rc.d/pf.sh start | stop
在上面的规则中我把外面访问的80端口定向到了本机回环地址(127.0.0.1),当服务器器遭到DOS攻击时不会使APACHE服务因处理大量连接而崩溃。那些不正常的半连接都由PF防火墙来处理。这样在对付DOS时效率上会高一些。
另外在高负载服务器上,可以考虑关闭防火墙的日志服务(pflog),这样可以显著降低服务器负担。 8. 服务器远程管理
服务器和它的管理者一般情况下是不在一块的,这就涉及到了服务器远程管理问题。目前都是通过SSH加密协议远程登陆到服务器上进行管理的。当管理员需要与服务器进行文件传输的时候首先想到的应该是通过SFTP进行传输。我在使用SFTP服务进行文件传输时发现个问题,就是传输速度总是不理想,很难超过1M/S。后来想想也难怪,通过SFTP服务进行传输时无论服务器端还是客户端都要进行高度数据加密和数据解密工作,这个应该是导致SFTP传输速度慢的根本原因。这里我向大家推荐使用FTP+SSL/TSLZ这种方式进行文件传输,速度上非常接近普通的FTP传输。这种方式的数据加密级别没有SFTP高,对加密级别没特殊要求的朋友不妨试试。
有时候我们在通过SSH登陆时会出现很长的延时才能连接到服务器上,这个现象尤其在高版本SSH服务器上比较严重。其原因归纳起来主要是由于SSH服务器在验证用户登陆时有反解析用户IP地址的操作,这需要一定的时间来完成,对登陆用户来说就是长时间的等待。解决这个问题也很简单,首先在/etc/ssh/sshd_config中禁用DNS解析,并且在/etc/hosts文件中添加登陆用户的IP和主机名信息即可。简单操作如下:
# vi /etc/ssh/sshd_config
UseDNS no
# vi /etc/hosts
221.62.x.x llzqq
# reboot
SSH的KEY验证方式被认为比PASSWORD验证起码高一个安全级。而且PASSWORD不可能设置的很长,所以总有密码被猜出的事件发生。因此使用KEY验证方式登陆就非常必要了。KEY验证方式登陆需要客户端软件支持这种登陆验证方式。我习惯使用SecureCRT作客户端。下面简单说明使用SecureCRT用KEY方式验证登陆SSH服务器。
SecureCRT生成的key和sshd不兼容需要转换才能使用,key.pub为SecureCRT生成的pubkey
# ssh-keygen -X -f key.pub > key.pub2
# mkdir ~/.ssh
# touch ~/.ssh/authorized_keys
# cat key.pub2 >> ~/.ssh/authorized_keys
# rm freebsd.pub*
# vi /etc/ssh/sshd_config
===========+===========+===========+============
Port 22
Protocol 2
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
===========+===========+===========+============
好了,现在可以使用SecureCRT用KEY方式验证登陆SSH服务器了。