본문 바로가기

Computer/0x00 정보보안

리눅스 방화벽 설정하기

리눅스 방화벽 설정하기



화벽(Fire wall) 하면 무엇이 떠오르시나요? 저는 영화 '파이어월' 이 떠오릅니다.

그 영화 줄거리도 대강 추려서 말씀드리면, 은행의 보안 방화벽을 관리하는 인물이 끊임없이 

지능화되는 해커들의 공격에도 지키지만, 약점은 바로 '주인공' 자신이었습니다.


적들은 은행에 침투하기 위해 주인공의 가족과 주인공의 개인정보를 수집하고 

1억불을 자신의 계좌에 입금시키라며 협박을 하고 주인공은 이에 맞서는 내용의 영화 입니다.


이 영화는 그다지 재미는 없었구요. 해킹관련 영화로는 '스워드 피쉬'가 더 낫습니다.

일드나 만화책으로는 '블러디먼데이'가 수작 이며, 다큐멘터리로는 'SBS다큐 사이버아마겟돈 3부' 와

'실리콘 밸리의 전쟁'이 볼만 합니다.






리눅스에서 방화벽설정 하기

 


위의 그림은 제가 원노트로 시나리오를 그린것을 이미지로 만든 것입니다.

가상 시나리오대로 방화벽을 설정해 보시려면 VM웨어로 '솔라리스8' 이나 기타 여러방화벽을

이용해서 한쪽은 인터넷이 되게 하고 특정 웹사이트만 방문이 가능하게 하거나, FTP접속은 막는등 

다양한 시나리오로 진행 해 보시기 바랍니다.



이번 시간에는 리눅스 위주로 방화벽 설정 방법에 대해서 알아 보겠습니다.

방화벽을 구축하거나 학습 하실떄 간혹 이런 착각을 하면 안됩니다.

방화벽이 구축되어 있으면, 보안은 완벽하다. 혹은 완벽한 방화벽은 있다. 


라고 생각 하시면 안된다는 것입니다. 간혹 '방화벽을 우회'해서 침투 하는 경우가 비일비재 하며,

내부에서 뻘짓(?)거리를 해서 웜같은 바이러스에 의한 침투 시나리오도 많이 발생하고 있기

떄문에 완벽한 보안, 완벽한 방화벽은 있을 수 없습니다.



잡소리가 길어졌네요. ㅎㅎ



- 리눅스에서 #service iptables start  라고 입력하면 iptables 서비스가 시작 합니다.



- # service iptables stop  라는 명령어는 iptables 서비스 중지를 시킵니다.



- # service iptables restart 는 iptables 서비스 재시작을 시키는 명령어 입니다.


여기서 iptables 에 대해서 궁금하실 것입니다.

iptables 유틸리티 인데요. 이것은 Netfiter모듈에서 시스템 관리자가 방화벽 설정 규칙 및

체인을 저장하는 테이블을 구성할 수 있도록 사용자 애플리케이션인 iptables 유틸리티를 제공하는 것입니다.




[ IPTABLES 구성 요소 ]


#iptables -A chain -j target



위의 구문은, chain을 target으로 전달하는 규칙을 추가 하게 되는 것입니다.

chain은 INPUT , OUTPUT, FORWARD 의 3가지기본 chain이 존재합니다.


INPUT CHAIN : 해당 네트워크로 들어오는 패킷을 대상

OUTPUT CHAIN : 해당 네트워크로부터 나가는 패킷을 대상 

FORWARD CHAIN : 해당 네트워크를 거치지 않고 통과하는 패킷을 대상



#iptables -N user_defined_chain



위의 구문은, 사용자 정의 chain의 생성예제 입니다. 즉 -N 옵션을 사용하여 생성 하는 것입니다.

target은 -j옵션과 함께 패킷의 허용여부를 결정 짓습니다.

ACCEPT , DROP , REJECT 3가지가 있습니다.


ACCEPT : 해당 패킷을 허용한다.

DROP : 해당 패킷을 차단한다.

REJECT : 해당 패킷을 돌려 보낸다.




[ IPTABLES 기본 정책 ]


방화벽 구성시, 아래와 같은 2가지 기본 정책 중 하나를 택합니다.


1. 규칙에 나열된 차단할 일부를 제외한 모든 패킷 허용

2. 규칙에 나열된 허용된 이루를 제외한 모든 패킷 차단 



1번은 서비스 가용성 측면에서 2번보다 장점이 있습니다만, 아직 알려지지 않은 위험등에

노출되어 있으므로 2번을 선택 하는 경우가 많습니다. (ex: ZERODAY ATTACK )




 옵 션

내 용 

 -N (New)

 사용자 정의 chain 생성 

- X (Delete) 

 사용자 정의 chain 삭제 

- E (Rename) 

 사용자 정의 chain 이름 변경 

- P (Policy) 

  chain 기본 정책 변경 

- L (List) 

  chain 내 모든 규칙 나열 

 - F (Flush)

 chain  내 모든 규칙 삭제

 - Z (Zero)

 chain 내 모든 규칙의 패킷과 바이트 카운트 초기화 



( ex: iptables -L 옵션 적용결과 )




★ IPTABLE의 설정이 시스템 종료후에는 날아가기 때문에 유지 하기를 원한다면,

#service iptables save 명령으로 설정을 저장 시키셔야 합니다.




[ IPTABLES 기본 규칙 ]


(기본규칙 옵션)


  옵 션

  내 용

 - A (Append)

 chain 새로운 규칙 생성 

 - D (Delete) 

 chain 내 특정 규칙 제거 

 - I (Insert) 

 chain 내 특정 위치에 규칙 삽입 

 - R (Replace) 

 chain 내 특정 위치의 규칙 변경  



- 일반적으로 규칙이 설정되어 있지 않기 때문에 설정한 기본 정책에 따라서 네트워크 연결은 차단

되어 있습니다. 이것을 유지한채 네트워크 연결을 시키려면 위에 옵션을 이용해서 명령을 내려야 합니다.





이렇게 위와 같이 명령을 입력하면, 해당 네트워크로 들어오고 나가는 모든 패킷을 허용하는 규칙을 

INPUT chain 과 OUTPUT chain 에 추가 한다는 의미 입니다.



C언어에서는 NOT의 의미로 '!' 기호를 사용 합니다. 이처럼, iptables에서도 같은 의미로 사용할수

있는데요 다음 예제를 함께 보겠습니다.



#iptables -A INPUT -s ! 200.200.200.61 -j ACCEPT



위의 명령어는 200.200.200.61 을 제외한 다른 모든 주소로부터 오는 모든 패킷을 허용하는 규칙 입니다.

반대로 '!'를 없애면 200.200.200.61로 부터 오는 모든 패킷을 허용 한다는 의미가 되겠죠?



그러면 '포트'허용을 하려면 어떻게 해야 할까요?



#iptables -A INPUT -p tcp --sport 80 -j ACCEPT



위와 같이 작성한다면, 80번 포트(HTTP) 로 부터 오는 모든 패킷을 허용 한다는 명령 입니다.

포트의 범위를 지정 하려면 , --sport 53:80 으로 주면 범위지정이 가능 합니다.





[ iptables 설정하기 ] 




솔라리스8 방화벽 '시큐어웍스' 를 사용할 떄도 정책이나 규칙등을 추가하면 보통 가장 마지막에 추가 됩니다.

그러나 순서를 정할 수가 있는데요. 이는 리눅스 에서도 할 수 있습니다.


#iptables -I INPUT 1 -s 200.200.200.61 -j ACCEPT



-I 옵션은 규칙의 순서를 지정하기 위해 사용 됩니다. 그후 순번을 정해주면 됩니다.





[ iptables ftp 설정하기 ]



FTP는 File Transfer Protocol 의 약자로서 제어를 위한 연결과 데이터 전송을 위한 연결로 나뉩니다.

제어연결 에서는 TCP 프로토콜 21번 포트를 통해서 연결 대상 호스트의 제어를 위한 명령을 전달

하게 됩니다.





그리고 FTP는 데이터 전송을 위해서 2가지 모드로 나뉘는데요.

우리가 흔히 쓰는 알FTP 로그인 할떄 자세히 보시면 '능동모드(Active Mode)' 와 '수동모드(Passive Mode)'

로 나뉩니다. 


예를 들어서 TCP 프로토콜 20번 포트를 사용하는 능동 모드를 사용하려면 아래와 같이 명령을 내려야 합니다




다음으로 우리는 보안을 공부 하는 사람이니 '보안'에 좋은 FTP 접속 방법에 대해 알아보겠습니다.

그전에 SSL 에 대해서 먼저 알아볼까요?



SSL이란 (Secure Socket Layer) 의 약자로서 쉽게 말해서 웹서버와 클라이언트 간의 주고 받는

데이터를 암호화하는 글로벌 표준 암호화 알고리즘 입니다.




위의 그림을 보시면 이해가 잘 되실 것입니다^^



이처럼 FTP도 안전한 사용를위해서 TCP 프로토콜 22번 포트를 사용하는 SFTP(Secure FTP)사용이

권장되어 지고 있습니다.


이상으로 리눅스 방화벽 설정하기 에 대해서 알아보았습니다.

모두 수고하셨습니다^^