如何最大程度保证服务器安全(二)
在编译Nginx服务器时,使用下面的命令查看哪些模块应该启用,哪些模块应该禁用: # ./configure --help | less 禁用你不需要的Nginx模块。 修改Nginx版本头信息(可选),编辑src/http/ngx_http_header_filter_module.c: # vi +48 src/http/ngx_http_header_filter_module.c 找到下面两行: static char ngx_http_server_string[] = "Server: nginx" CRLF; static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF; 将其修改为: static char ngx_http_server_string[] = "Server: Ninja Web Server" CRLF; static char ngx_http_server_full_string[] = "Server: Ninja Web Server" CRLF; 保存并关闭文件。现在可以开始编译服务器了,将下面的配置代码添加到nginx.conf中,禁止在所有自动产生的错误页面中显示Nginx版本号: server_tokens off 5、使用mod_security(仅适用于后端Apache服务器) Mod_security为Apache提供了一个应用程序级防火墙,为所有后端Apache Web服务器安装mod_security模块,可以阻止许多注入攻击。 6、配置SELinux策略加固Nginx 默认情况下,SELinux没有保护Nginx Web服务器,可以手动配置进行保护,首先安装SELinux编译时需要的支持包: # yum -y install selinux-policy-targeted selinux-policy-devel 从项目主页(http://sourceforge.net/projects/selinuxnginx/)下载SELinux策略: # cd /opt # wget 'http://downloads.sourceforge.net/project/selinuxnginx/se-ngix_1_0_10.tar. gz?use_mirror=nchc' 解压: # tar -zxvf se-ngix_1_0_10.tar.gz 编译: # cd se-ngix_1_0_10/nginx # make 输出示例: Compiling targeted nginx module /usr/bin/checkmodule: loading policy configuration from tmp/nginx.tmp /usr/bin/checkmodule: policy configuration loaded /usr/bin/checkmodule: writing binary representation (version 6) to tmp/nginx.mod Creating targeted nginx.pp policy package rm tmp/nginx.mod.fc tmp/nginx.mod 安装生成的nginx.pp SELinux模块: # /usr/sbin/semodule -i nginx.pp 7、通过iptables防火墙设置限制 下面的防火墙脚本可以阻止一切请求,只允许: ◆ 入站HTTP请求(TCP 80端口) ◆ 入站ICMP ping请求 ◆ 出站NTP请求(端口123) ◆ 出站SMTP请求(TCP端口25) #!/bin/bash IPT="/sbin/iptables" #### IPS ###### # 获得服务器公共IP SERVER_IP=$(ifconfig eth0 | grep 'inet addr:' | awk -F'inet addr:' '{ print $2}' | awk '{ print $1}') LB1_IP="204.54.1.1" LB2_IP="204.54.1.2" # 实现某些智能逻辑,以便我们可以在LB2上使用damm脚本 OTHER_LB="" SERVER_IP="" [[ "$SERVER_IP" == "$LB1_IP" ]] && OTHER_LB="$LB2_IP" || OTHER_LB="$LB1_IP" [[ "$OTHER_LB" == "$LB2_IP" ]] && OPP_LB="$LB1_IP" || OPP_LB="$LB2_IP" ### IPs ### PUB_SSH_ONLY="122.xx.yy.zz/29" #### 文件 ##### BLOCKED_IP_TDB=/root/.fw/blocked.ip.txt SPOOFIP="127.0.0.0/8 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 169.254.0.0/16 0.0.0.0/8 240.0.0.0/4 255.255.255.255/32 168.254.0.0/16 224.0.0.0/4 240.0.0.0/5 248.0.0.0/5 192.0.2.0/24" BADIPS=$( [[ -f ${BLOCKED_IP_TDB} ]] && egrep -v "^#|^$" ${BLOCKED_IP_TDB}) ### 接口 ### PUB_IF="eth0" # public interface LO_IF="lo" # loopback VPN_IF="eth1" # vpn / private net ### 启动防火墙 ### echo "Setting LB1 $(hostname) Firewall..." # 删除和关闭一切 $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP # 不受限制的lo访问 $IPT -A INPUT -i ${LO_IF} -j ACCEPT $IPT -A OUTPUT -o ${LO_IF} -j ACCEPT # 不受限制的vpn/pnet访问 $IPT -A INPUT -i ${VPN_IF} -j ACCEPT $IPT -A OUTPUT -o ${VPN_IF} -j ACCEPT # 删除sync $IPT -A INPUT -i ${PUB_IF} -p tcp ! --syn -m state --state NEW -j DROP # 删除碎片 $IPT -A INPUT -i ${PUB_IF} -f -j DROP $IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP $IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL ALL -j DROP # 删除空包 $IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix " NULL Packets " $IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -j DROP $IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,RST SYN,RST -j DROP # 删除XMAS $IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix " XMAS Packets " $IPT -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
|
|
最新文章 |
图片主题 | ||||
|
||||
热门文章 |
推荐文章 | ||||
|
||||
相关文章 |
便民服务 | ||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||