본문 바로가기
구 블로그 보관처

LINUX - iptables 실제 적용 예시

by 행복한 만수킴 2020. 5. 17.

 

 

서버에직접 설치 및 테스트 결과 저장

 

 

  1 === CentOS 6.5 설치 후 Iptables 설정 파일의 내용 ===
  2 [root@centos ~]# cat /etc/sysconfig/iptables
  3 # Firewall configuration written by system-config-firewall
  4 # Manual customization of this file is not recommended.
  5 *filter
  6 :INPUT ACCEPT [0:0]
  7 :FORWARD ACCEPT [0:0]
  8 :OUTPUT ACCEPT [0:0]
  9 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 10 -A INPUT -p icmp -j ACCEPT
 11 -A INPUT -i lo -j ACCEPT
 12 -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
 13 -A INPUT -j REJECT --reject-with icmp-host-prohibited
 14 -A FORWARD -j REJECT --reject-with icmp-host-prohibited
 15 COMMIT
 16 [root@centos ~]
 17
 18 ======= 적용된 룰셋을 확인 =======
 19 [root@centos ~]# iptables -nL
 20 Chain INPUT (policy ACCEPT)
 21 target     prot opt source               destination         
 22
 23 Chain FORWARD (policy ACCEPT)
 24 target     prot opt source               destination         
 25
 26 Chain OUTPUT (policy ACCEPT)
 27 target     prot opt source               destination 
 28
 29 ======= 룰셋의 적용순서까지 확인 =======
 30 [root@centos ~]# iptables -nL --line-numbers
 31 Chain INPUT (policy ACCEPT)
 32 num  target     prot opt source               destination         
 33
 34 Chain FORWARD (policy ACCEPT)
 35 num  target     prot opt source               destination         
 36
 37 Chain OUTPUT (policy ACCEPT)
 38 num  target     prot opt source               destination   
 39
 40 [root@centos ~]# iptables -L -v
 41 Chain INPUT (policy ACCEPT 188 packets, 16412 bytes)
 42  pkts bytes target     prot opt in     out     source               destination         
 43
 44 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 45  pkts bytes target     prot opt in     out     source               destination         
 46
 47 Chain OUTPUT (policy ACCEPT 50 packets, 5304 bytes)
 48  pkts bytes target     prot opt in     out     source               destination 
 49
 50 ======= 기본설정 시작 =======
 51 === 1. 기본 정책을 ACCEPT로 변경 ===
 52 [root@centos ~]# iptables -P INPUT ACCEPT
 53 [root@centos ~]# iptables -nL
 54 Chain INPUT (policy ACCEPT)
 55 target     prot opt source               destination         
 56
 57 Chain FORWARD (policy ACCEPT)
 58 target     prot opt source               destination         
 59
 60 Chain OUTPUT (policy ACCEPT)
 61 target     prot opt source               destination  
 62
 63 === 2. 체인에 정의된 모든 규칙 삭제 ===
 64 [root@centos ~]# iptables -F
 65 [root@centos ~]
 66 [root@centos ~]# iptables -L
 67 Chain INPUT (policy ACCEPT)
 68 target     prot opt source               destination         
 69
 70 Chain FORWARD (policy ACCEPT)
 71 target     prot opt source               destination         
 72
 73 Chain OUTPUT (policy ACCEPT)
 74 target     prot opt source               destination   
 75
 76 === 3. INPUT 체인에 로컬호스트 인터페이스에 들어오는 모든 패킷을 허용 추가 ===
 77 ===    (일반적으로 많은 소프트웨어들이 localhost 어댑터와 통신이 되어야 하기에 필요하다.) ===
 78 [root@centos ~]# iptables -A INPUT -i lo -j ACCEPT
 79 [root@centos ~]
 80 [root@centos ~]# iptables -L
 81 Chain INPUT (policy ACCEPT)
 82 target     prot opt source               destination         
 83 ACCEPT     all  --  anywhere             anywhere            
 84
 85 Chain FORWARD (policy ACCEPT)
 86 target     prot opt source               destination         
 87
 88 Chain OUTPUT (policy ACCEPT)
 89 target     prot opt source               destination  
 90
 91 === 4. INPUT체인에 state 모듈과 매치되는 연결상태가 ESTABLISHED, RELATED인 패킷에 대해 허용 추가 ===
 92 ===    (아니지만, 연광성을 가진 패킷(ICMP에러나 ftp 데이터 접속을 형성하는 패킷)을 허용하는 규칙) ===
 93 [root@centos ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 94 [root@centos ~]
 95 [root@centos ~]# iptables -L
 96 Chain INPUT (policy ACCEPT)
 97 target     prot opt source               destination         
 98 ACCEPT     all  --  anywhere             anywhere            
 99 ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
100
101 Chain FORWARD (policy ACCEPT)
102 target     prot opt source               destination         
103
104 Chain OUTPUT (policy ACCEPT)
105 target     prot opt source               destination    
106
107 === 5. INPUT 체인에 프로톨콜이 tcp이며 목적지포트가 22번인 패킷에 대해 허용 추가 ===
108 ===    (이로서 SSH접속이 허용이 된다. 포트를 변경한 경우 수정된 포트로 실행할 것.) ===
109 ===    (포트를 변경한 경우, ssh가 아니라 paragent로 보여짐에 주의)
110 [root@centos ~]# iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
111 [root@centos ~]
112 [root@centos ~]# iptables -nL
113 Chain INPUT (policy ACCEPT)
114 target     prot opt source               destination         
115 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
116 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
117 ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 
118
119 Chain FORWARD (policy ACCEPT)
120 target     prot opt source               destination         
121
122 Chain OUTPUT (policy ACCEPT)
123 target     prot opt source               destination  
124 [root@centos ~]#
125 [root@centos ~]# iptables -L
126 Chain INPUT (policy ACCEPT)
127 target     prot opt source               destination         
128 ACCEPT     all  --  anywhere             anywhere            
129 ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
130 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
131
132 Chain FORWARD (policy ACCEPT)
133 target     prot opt source               destination         
134
135 Chain OUTPUT (policy ACCEPT)
136 target     prot opt source               destination  
  
137 === 6. 이제 INPUT 체인에 대한 기본 정책을 버림(DROP)으로 변경 ===
138 [root@centos ~]# iptables -P INPUT DROP
139 [root@centos ~]
140 [root@centos ~]# iptables -L
141 Chain INPUT (policy DROP)
142 target     prot opt source               destination         
143 ACCEPT     all  --  anywhere             anywhere            
144 ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
145 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
146
147 Chain FORWARD (policy ACCEPT)
148 target     prot opt source               destination         
149
150 Chain OUTPUT (policy ACCEPT)
151 target     prot opt source               destination  
152
153 === 7. FORWARD 체인에 대한 기본정책을 버림으로 변경 ===
154 ===    (서버를 라우팅기기로 사용하지 않기에 모든 포워드에 대한 패킷을 DROP) ===
155 [root@centos ~]# iptables -P FORWARD DROP
156 [root@centos ~]
157 [root@centos ~]# iptables -L
158 Chain INPUT (policy DROP)
159 target     prot opt source               destination         
160 ACCEPT     all  --  anywhere             anywhere            
161 ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
162 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
163
164 Chain FORWARD (policy DROP)
165 target     prot opt source               destination         
166
167 Chain OUTPUT (policy ACCEPT)
168 target     prot opt source               destination        
169
170 === 8. OUTPUT 체인에 대한 기본정책을 허용으로 변경 ===
171 [root@centos ~]# iptables -P OUTPUT ACCEPT
172 [root@centos ~]
173 [root@centos ~]# iptables -L
174 Chain INPUT (policy DROP)
175 target     prot opt source               destination         
176 ACCEPT     all  --  anywhere             anywhere            
177 ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
178 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
179
180 Chain FORWARD (policy DROP)
181 target     prot opt source               destination         
182
183 Chain OUTPUT (policy ACCEPT)
184 target     prot opt source               destination   
185
186 === 9. 웹서버(80,443) 포트 허용 ===   
187 [root@centos ~]# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
188 [root@centos ~]
189 [root@centos ~]# iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
190 [root@centos ~]
191 [root@centos ~]# iptables -L -v
192 Chain INPUT (policy DROP 3 packets, 234 bytes)
193  pkts bytes target     prot opt in     out     source               destination         
194     0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
195  1067 78960 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
196     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:paragent 
197     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:glrpc 
198     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:tungsten-https 
199
200 Chain FORWARD (policy DROP 0 packets, 0 bytes)
201  pkts bytes target     prot opt in     out     source               destination         
202
203 Chain OUTPUT (policy ACCEPT 5 packets, 652 bytes)
204  pkts bytes target     prot opt in     out     source               destination         
205
206 === 10. mysqld 방화벽 포트 오픈 ===
207 [root@centos ~]# iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
208 [root@centos ~]#
209 [root@centos ~]# iptables -L -v
210 Chain INPUT (policy DROP 8 packets, 624 bytes)
211  pkts bytes target     prot opt in     out     source               destination         
212     0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
213  1784  134K ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
214     1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:paragent 
215    18   912 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:http 
216     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:https 
217     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:mysql 
218
219 Chain FORWARD (policy DROP 0 packets, 0 bytes)
220  pkts bytes target     prot opt in     out     source               destination         
221
222 Chain OUTPUT (policy ACCEPT 23 packets, 2868 bytes)
223  pkts bytes target     prot opt in     out     source               destination         
224
225 === 11. svn 방화벽 포트 오픈 ===
226 [root@centos ~]# iptables -A INPUT -p tcp -m tcp --dport 3690 -j ACCEPT
227 [root@centos ~]#
228 [root@centos ~]# iptables -L -v
229 Chain INPUT (policy DROP 8 packets, 624 bytes)
230  pkts bytes target     prot opt in     out     source               destination         
231     0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
232  1784  134K ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
233     1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:paragent 
234    18   912 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:http 
235     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:https 
236     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:mysql 
237     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:3690 
238
239 Chain FORWARD (policy DROP 0 packets, 0 bytes)
240  pkts bytes target     prot opt in     out     source               destination         
241
242 Chain OUTPUT (policy ACCEPT 23 packets, 2868 bytes)
243  pkts bytes target     prot opt in     out     source               destination  
244
245 === 12. ntp 시간 동기화 방화벽 포트 오픈 ===
246 [root@centos ~]# iptables -A INPUT -p udp --dport 123 -j ACCEPT 
247 [root@centos ~]
248 [root@centos ~]# iptables -L -v
249 Chain INPUT (policy DROP 0 packets, 0 bytes)
250  pkts bytes target     prot opt in     out     source               destination         
251     0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
252  3322  252K ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
253     1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:paragent 
254    34  1744 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:glrpc 
255     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:tungsten-https 
256     1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:sphinxql 
257     2   104 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:9369 
258     0     0 ACCEPT     udp  --  any    any     anywhere             anywhere            udp dpt:ntp 
259
260 Chain FORWARD (policy DROP 0 packets, 0 bytes)
261  pkts bytes target     prot opt in     out     source               destination         
262
263 Chain OUTPUT (policy ACCEPT 5 packets, 652 bytes)
264  pkts bytes target     prot opt in     out     source               destination   
265
266 === 13. 설정한 것들에 대한 확인 ===
267 [root@centos ~]# iptables -L -v
268 Chain INPUT (policy DROP 21 packets, 2138 bytes)
269  pkts bytes target     prot opt in     out     source               destination         
270     0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
271   530 39400 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
272     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:ssh
273    18   912 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:http 
274     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:https 
275     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:mysql 
276     0     0 ACCEPT     udp  --  any    any     anywhere             anywhere            udp dpt:ntp 
277
278 Chain FORWARD (policy DROP 0 packets, 0 bytes)
279  pkts bytes target     prot opt in     out     source               destination         
280
281 Chain OUTPUT (policy ACCEPT 28 packets, 3096 bytes)
282  pkts bytes target     prot opt in     out     source               destination  
283
284 === 14. 설정한 내용을 저장함 ===
285 [root@centos ~]# service iptables save
286 iptables: 방화벽 규칙을 /etc/sysconfig/iptables에 저장 중:  [  OK  ]
287 [root@centos ~]
288 [root@centos ~]# cat /etc/sysconfig/iptables
289 # Generated by iptables-save v1.4.7 on Thu Apr 17 21:14:01 2014
290 *filter
291 :INPUT DROP [74:7022]
292 :FORWARD DROP [0:0]
293 :OUTPUT ACCEPT [52:6184]
294 -A INPUT -i lo -j ACCEPT 
295 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
296 -A INPUT -p tcp -m tcp --dport 9022 -j ACCEPT 
297 COMMIT
298 # Completed on Thu Apr 17 21:14:01 2014
299 ======= 기본 설정 끝 =======
300
301
302 ======= 서버 취약점 보안 설정 시작 =======
303 === 1. NULL 패킷 차단 ===
304 ===   (NULL 패킷은 정찰 패킷으로 서버설정의 약한 곳을 찾기위한 방법으로 사용된다.) ===
305 [root@centos ~]# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
306 [root@centos ~]
307 [root@centos ~]# iptables -L -v
308 Chain INPUT (policy DROP 0 packets, 0 bytes)
309  pkts bytes target     prot opt in     out     source               destination         
310     0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
311  3410  259K ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
312     1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:paragent 
313    34  1744 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:glrpc 
314     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:tungsten-https 
315     1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:sphinxql 
316     2   104 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:9369 
317     0     0 ACCEPT     udp  --  any    any     anywhere             anywhere            udp dpt:ntp 
318     0     0 DROP       tcp  --  any    any     anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE 
319
320 Chain FORWARD (policy DROP 0 packets, 0 bytes)
321  pkts bytes target     prot opt in     out     source               destination         
322
323 Chain OUTPUT (policy ACCEPT 5 packets, 652 bytes)
324  pkts bytes target     prot opt in     out     source               destination         
325
326 === 2. syn-flood attack 차단 ===
327 === (syn-flood attack은 공격자가 새로운 연결을 만들고 빠지고를 반복해 리소스의 소모를 시키는 것 ) ===
328 [root@centos ~]# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
329 [root@centos ~]
330 [root@centos ~]# iptables -L -v
331 Chain INPUT (policy DROP 0 packets, 0 bytes)
332  pkts bytes target     prot opt in     out     source               destination         
333     0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
334  3431  261K ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
335     1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:paragent 
336    34  1744 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:glrpc 
337     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:tungsten-https 
338     1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:sphinxql 
339     2   104 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:9369 
340     0     0 ACCEPT     udp  --  any    any     anywhere             anywhere            udp dpt:ntp 
341     0     0 DROP       tcp  --  any    any     anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE 
342     0     0 DROP       tcp  --  any    any     anywhere             anywhere            tcp flags:!FIN,SYN,RST,ACK/SYN state NEW 
343
344 Chain FORWARD (policy DROP 0 packets, 0 bytes)
345  pkts bytes target     prot opt in     out     source               destination         
346
347 Chain OUTPUT (policy ACCEPT 5 packets, 652 bytes)
348  pkts bytes target     prot opt in     out     source               destination  
349
350 === 3. XMAS 패킷 차단 (정찰 패킷) ===
351 [root@centos ~]# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
352 [root@centos ~]
353 [root@centos ~]# iptables -L -v
354 Chain INPUT (policy DROP 0 packets, 0 bytes)
355  pkts bytes target     prot opt in     out     source               destination         
356     0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
357  3450  262K ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
358     1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:paragent 
359    34  1744 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:glrpc 
360     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:tungsten-https 
361     1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:sphinxql 
362     2   104 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:3690 
363     0     0 ACCEPT     udp  --  any    any     anywhere             anywhere            udp dpt:ntp 
364     0     0 DROP       tcp  --  any    any     anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE 
365     0     0 DROP       tcp  --  any    any     anywhere             anywhere            tcp flags:!FIN,SYN,RST,ACK/SYN state NEW 
366     0     0 DROP       tcp  --  any    any     anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG 
367
368 Chain FORWARD (policy DROP 0 packets, 0 bytes)
369  pkts bytes target     prot opt in     out     source               destination         
370
371 Chain OUTPUT (policy ACCEPT 5 packets, 652 bytes)
372  pkts bytes target     prot opt in     out     source               destination  



댓글0