TypeCodes

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

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

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

1 检查阿里云主机的 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
2 下面是一个 iptables 防火墙规则示例,大家可以直接保存为 iptables.sh 文件,然后上传到主机服务器。
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/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
3 启用 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 防火墙

打赏支持

Comments »