在前面一篇文章介绍了阿里云的 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
Comments »