阿里云CentOS主机 LNMP 环境之主机安全篇二

前面一篇文章介绍了阿里云的 CentOS 系统,用户如何通过 ssh 登陆方式降低主机被入侵的几率。那么这篇文章主要分享通过配置 iptables 防火墙来进一步强化 linux 主机防护。

之前在探索 iptables 也发生过惨案,详见此文

一、检查阿里云主机的 CentOS 是否安装并启动 iptables 防火墙服务

###### 检查iptables服务的状态
[root@typecodes ~]# service iptables status
###### 如果已经安装了 iptables,但是没启动服务
iptables: Firewall is not running.
[root@typecodes ~]# service iptables start
iptables: Applying firewall rules:                         [  OK  ]
###### 检查当前 iptables 的规则配置, 默认情况下是没有内容的
[root@typecodes ~]# iptables -L -n

###### 如果没有安装 iptables 
[root@typecodes ~]# yum install -y iptables

二、下面是一个 iptables 防火墙规则示例,大家可以直接保存为 iptables.sh 文件,然后上传到主机服务器。

#!/bin/bash
#
# FileName:    iptables.sh
# Functions:   Linux(CentOS)主机防火墙设置(服务于 web 服务器 )
# Description: 由 TypeCodes 整理自http://www.tudaxia.com/archives/784, 有所改动
#

##############
# 清空原有的iptables规则, 计数器置0
##############
iptables -F
iptables -X
iptables -Z

##############
# 对公网开放的服务端口, 2001是上文中设置的ssh端口, 80是web服务端口
# 由于 typecodes.com 关闭了主机ftp服务, 即不开放21端口
##############
SERVICE_TCP_PORTS="2001,80"
SERVICE_UDP_PORTS="53"

##############
# 设置默认规则
# 通常INPUT及FORWARD设为DROP,OUTPUT设置为ACCEPT就足够了
# 极端情况下,可以将OUTPUT也设置成默认DROP。然后针对OUTPUT逐条增加过滤规则
##############
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

##############
# 允许lo( 则允许通过127.0.0.1访问主机本地服务 ), PING
##############
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT

##############
# 关闭危险端口, 范围是 31337~31340
##############
iptables -A OUTPUT -p tcp --dport 31337:31340 -j DROP
iptables -A OUTPUT -p tcp --sport 31337:31340 -j DROP

##############
# 如果要添加内网ip信任(接受其所有TCP请求)
##############
iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT

##############
# 拒绝某个IP( 例如111.111.111.111 )访问阿里云主机服务器, 即拉入黑名单
##############
iptables -I INPUT -s 111.111.111.111 -j DROP

##############
# 放开TCP及UDP服务端口
##############
iptables -A INPUT  -p tcp -j ACCEPT -m multiport --dport $SERVICE_TCP_PORTS
iptables -A INPUT  -p udp -j ACCEPT -m multiport --dport $SERVICE_UDP_PORTS

#######################
# 防止DDOS攻击:Ping of Death
#######################
iptables -N PING_OF_DEATH
iptables -A PING_OF_DEATH -p icmp --icmp-type echo-request \
         -m hashlimit \
         --hashlimit 1/s \
         --hashlimit-burst 10 \
         --hashlimit-htable-expire 300000 \
         --hashlimit-mode srcip \
         --hashlimit-name t_PING_OF_DEATH \
         -j RETURN
iptables -A PING_OF_DEATH -j LOG --log-prefix "ping_of_death_attack: "
iptables -A PING_OF_DEATH -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j PING_OF_DEATH

#######################
# 防止DDOS攻击:SYN FLOOD
#######################
iptables -N SYN_FLOOD
iptables -A SYN_FLOOD -p tcp --syn \
         -m hashlimit \
         --hashlimit 200/s \
         --hashlimit-burst 3 \
         --hashlimit-htable-expire 300000 \
         --hashlimit-mode srcip \
         --hashlimit-name t_SYN_FLOOD \
         -j RETURN
iptables -A SYN_FLOOD -j LOG --log-prefix "syn_flood_attack: "
iptables -A SYN_FLOOD -j DROP
iptables -A INPUT -p tcp --syn -j SYN_FLOOD

#######################
# 防止DDOS攻击:stealth scan
#######################
iptables -N STEALTH_SCAN
iptables -A STEALTH_SCAN -j LOG --log-prefix "stealth_scan_attack: "
iptables -A STEALTH_SCAN -j DROP

iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j STEALTH_SCAN

iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN         -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST         -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j STEALTH_SCAN

iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN     -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH     -j STEALTH_SCAN
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG     -j STEALTH_SCAN

#######################
# 保存上述规则到文件 /etc/sysconfig/iptables 中
#######################
service iptables save

三、启用 iptables 防火墙服务

把上面的脚本文件 iptables.sh 上传到服务器上后,可以通过以下命令启用 iptables 防火墙服务。

######  执行脚本文件
[root@typecodes ~]# ./iptables.sh
###### 重启防火墙服务
[root@typecodes ~]# service iptables restart

######  执行脚本文件
[root@typecodes ~]# ./iptables.sh 
iptables: Saving firewall rules to /etc/sysconfig/iptables: [  OK  ]

###### 重启防火墙服务
[root@typecodes ~]# service iptables start
iptables: Applying firewall rules: [  OK  ]

###### 开机启动防火墙服务
[root@typecodes ~]# chkconfig iptables on

###### 查看当前防火墙规则是否生效, 部分截图如下:
[root@typecodes ~]# iptables -L -n

CentOS iptables 防火墙

评论

评论加载中…