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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#!/bin/sh
#
# rc.firewall - 初始化内网网关配置
#
# PC@20140620
#
 
###########################################################################
# 1. 配置
 
#####
# 1.1 配置 外网WAN
#
INET_IP= "1.2.3.4"
INET_IFACE= "em2"
INET_IP2= "21.43.56.78"
INET_IFACE2= "em2:1"
 
#####
# 1.2 配置 内网LAN
# 接口,IP和子网掩码,可以用VLSM 
#
LAN_IP= "192.168.100.254"
LAN_IP_RANGE= "192.168.100.0/24"
LAN_IFACE= "em1"
 
#####
# 1.3 配置 DMZ
#
 
#####
# 1.4 配置 iptables路径
#
IPTABLES= "/sbin/iptables"
 
 
###########################################################################
# 2. 模块
 
#####
# 2.1 初始化
#
/sbin/depmod  -a
 
#####
# 2.2 必须
#
/sbin/modprobe  ip_tables
/sbin/modprobe  ip_conntrack
/sbin/modprobe  iptable_filter
/sbin/modprobe  iptable_mangle
/sbin/modprobe  iptable_nat
/sbin/modprobe  ipt_limit
/sbin/modprobe  ipt_state
 
 
###########################################################################
# 3. 配置 /proc
 
#####
# 3.1 开启IP转发
#
echo  "1"  /proc/sys/net/ipv4/ip_forward
 
###########################################################################
# 4. 设置规则
 
######
# 4.1 表 Filter
#
 
# 4.1.1 设置策略,先保存旧的配置信息,再清空表 Filter
#iptables-save >/root/rc.firewall.txt.save.old
#service iptables status >/root/rc.firewall.txt.status.old
 
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -F
 
# 4.1.2 建立自定义链
#
$IPTABLES -N bad_tcp_packets
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
 
# 4.1.3 增加规则到链中
#
# 链 bad_tcp_packets
#
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset 
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
 
# 链 allowed
#
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
 
# 链 tcp_packets
#
$IPTABLES -A tcp_packets -p TCP -m tcp --dport 22 -j allowed
$IPTABLES -A tcp_packets -p TCP -m tcp --dport 80 -j allowed
 
# 链 udp_packets
#
#$IPTABLES -A udp_packets -p udp -m udp --dport 123 -j ACCEPT 
 
# 4.1.4 链 INPUT
#
# 规则:bad_tcp_packets 过滤
#
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
 
# 规则:从本地进入
#
$IPTABLES -A INPUT -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -i lo -j ACCEPT
 
# 规则:从外网进入
#
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p icmp -j ACCEPT
$IPTABLES -A INPUT -p TCP -j tcp_packets
$IPTABLES -A INPUT -p UDP -j udp_packets
$IPTABLES -A INPUT -j REJECT --reject-with icmp-host-prohibited 
 
# 4.1.5 链 FORWARD
#
# 规则:bad_tcp_packets 过滤
#
$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
 
# 允许转发
#
$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -j REJECT --reject-with icmp-host-prohibited
 
# 4.1.6 链 OUTPUT
#
 
######
# 4.2 表 nat
#
 
# 4.2.1 设置策略,先清除旧的配置
#
$IPTABLES -t nat -F
 
# 4.2.2 建立自定义链
#
 
# 4.2.3 增加规则到链中
#
 
# 4.2.4 链 PREROUTING
#
 
# 4.2.5 链 POSTROUTING
# 启用简单的IP 转发和NAT
#
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to- source  $INET_IP
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE2 -j SNAT --to- source  $INET_IP2
 
# 4.2.6 链 OUTPUT chain
#
 
######
# 4.3 表 mangle
#
 
# 4.3.1 设置策略
#
 
# 4.3.2 建立自定义链
#
 
# 4.3.3 增加规则到链中
#
 
# 4.3.4 链 PREROUTING
#
 
# 4.3.5 链 INPUT
#
 
# 4.3.6 链 FORWARD
#
 
# 4.3.7 链 OUTPUT
#
 
# 4.3.8 链 POSTROUTING
#
 
 
###########################################################################
# 5. 显示规则
 
service iptables status
#iptables-save >/root/rc.firewall.txt.save
#service iptables status >/root/rc.firewall.txt.status