본문 바로가기

학원

2023/06/20(예비군) 방화벽, IPtables

 1) 네트워크 방화벽 2) Selinux



   

   Ø Selinux는 잘 사용하지 않음 
      ○ 소유권나 허가권, 추가적으로 ACL을 사용함
      ○ 네트워크 방화벽이 더 중요함( 화이트 리스트 ) 외부에서 내부로 들어오는 트래픽을 관리하는 것이 더 중요하다.

   Ø 네트워크 방화벽
      ○ 나가는 트래픽에 대한 정책 = 아웃바운드 정책 [ 기본 값 전체 허용 ]
      ○ 들어오는 트래픽에 대한 정책 = 인바운드 정책 [ 기본 값 전체 거부 ] 
      ○ 보안그룹 규칙을 설정한다.

   Ø 기본중에 기본
   퍼블릭 클라우드 환경에서 설정을 완료했는데 접속이 안된다 > 방화벽 설정이 되어있는지 확인해야한다.
   서비스를 올리고 필터링 규칙을 설정해줘야 접속이 가능하다.

   Ø iptables 설정이 어렵다.
   대안 ) firewalld iptables를 쉽게 설정하도록 도와준다. 
   firewalld 실수의 가능성을 줄여주고 수동으로 보안정책을 설정할 때보다 더 안정적이다.




[ Iptables 개념 ] 
: Iptables란 Linux 운영체제에서 특정 IP주소에 대한 OS의 동작을 정의해 놓는 Kernel 프로그램이다.
: 기본 User Level의 명령이지만, 동작 자체는 Kernel 단계에서 packet을 Filtering 하며 동작하게 된다.
: Linux kernel은 기본적으로 "netfilter" 기능이 존재하며, 우리가 iptables를 사용하는 것은 실제로는 "netfilter"를 정의하는 행위가 된다.
: Packet의 기본 구조는 Packet의 정보를 담고 있는 Header와 실제 packet의 내용이 담겨있는 Data로 구분된다, iptables는 Packet의 Header를 검사하여 Filtering을 진행 한다. = ACL
: Iptables의 기본구조 ( "Table" -> "Chain" -> "Rule" ) 형식으로 구성
: 주로 사용되는 Table은 Filter Table, NAT Table 2가지를 사용한다.



[ Iptables Table의 종류 ] 

[ Filter Table ]  
실제 packet Filtering을 적용하는 Table, rule에 따라서 packet을 허용 혹은 차단하는 역할을 진행한다. ( INPUT, OUTPUT, FORWARD 3가지 Chain을 갖는다 )
INPUT은 외부에서 방화벽으로 들어오는 packet을 담당하며, OUTPUT은 방화벽에서 나가는 packet을 담당한다.
FORWARD는 방화벽으로 들어오는 packet이 아닌, 방화벽 내부에 있는 또 다른 서버로 향하는 packet을 담당하여 Filtering을 진행한다. (목적지 주소가 자기자신이면 INPUT, 아니면 FORWARD, 프록시 서버 생각)
( INPUT, OUTPUT은 한대의 Linux Server에서 방화벽 과 다른 Service를 동시에 운영할 때 사용되고, FORWARD는 방화벽과 Service를 운영하는 Server가 다를 때 사용된다. )

[ Nat Table ]
NAT 테이블은 Packet을 Filtering 하거나 특성을 변환하는 기능은 없다, 단지 방화벽으로 향하는 packet을 방화벽이 보호하는 내부 네트워크의 다른 주소로 Forwarding 하거나 
방화벽 내부 네트워크에서 방화벽을 통해 외부 네트워크로 나갈 때 다른 주소로 변환시켜 주는 역할을 한다. NAT Table은 POSTROUTING , PREROUTING 2가지 Chain을 주로 사용한다.
POSTROUTING은 Source NAT (SNAT) Target 과 매칭되어 내부 네트워크에서 방화벽을 통해 외부로 나갈 때 사용.
PREROUTING은 Destination NAT (DNAT) Target 과 매칭되어 주로 외부에서 방화벽 내부 서버로 향하는 packet을 방화벽이 보호하는 내부서버로 Forwarding 할 때 사용.
( POSTROUTING은 사무실 등에서 사설IP를 사용하면서 하나의 공인 IP로 인터넷을 공유하고자 할 때, PREROUTING은 사설 IP 를 이용한 서버를 운영하면서 외부로 Service 할 때 사용 )

[ Mangle Table ]
자주 사용되지는 않지만 packet의 TTL이나 TOS 값을 변경 할 때 사용된다. ( 즉, packet의 특성을 변경할 때 사용되는 Table )
Mangle Table은 PREROUTING 과 OUTPUT 2가지 Chain으로 이루어져 있다, PREROUTING 방화벽으로 들어오는 packet에 대해 변경하고, 
OUTPUT은 내부에서 생성된 packet이 방화벽을 통해 나갈 때 변경한다.

[ Raw Table ]
Filter 테이블의 Connection Tracking ( 연결추적 ) 기능을 좀더 자세히 다룰 때 사용된다.
특정 네트워크는 연결 추적에서 제외 하는 설정이 가능하며 conntrack 모듈 ( 연결추적 모듈 )보다 우선순위를 가진다.


[ Iptables 명령어 사용 형식 ] 

기본 사용형식 ( "iptables [ -t table ] 명령어 [ Match option ] [ target ]" )
- 테이블명은 생략이 가능하며, 생략 시 "filter Table이 기본값"으로 설정 된다.
- iptables 작업시에는 반드시 "대소문자"를 구분하여 설정한다.
- iptables는 "명령어, 설정파일" 설정 2가지 형식으로 룰을 정의 할 수 있다.
- 명령어에 의한 룰설정은 "즉시적용", 설정파일을 이용 한 경우에는 "서비스를 반드시 재 시작"을 진행한다.

[ 명령어의 종류 ]  : iptables에서 룰을 추가하거나 삭제 수정 등의 작업을 수행 할 명령어를 정의한다.  

-A ( --append ) : 새로운 규칙을 추가한다. ( "여러 개의 룰 중 가장 마지막 라인에 추가" )
-D ( --delete ) : 규칙을 삭제한다.
-I  ( --insert ) : 새로운 규칙을 삽입한다. ( "여러 개의 룰 중 가장 처음 라인에 추가" )
-L  ( --list ) : 규칙을 출력한다.
-F  ( --flush ) : chain으로부터 규칙을 모두 삭제한다.
-P  ( --policy ) : 기본정책을 변경한다.

-Z ( --zero ) : 모든 chain의 Packet과 바이트 카운터 값을 0 으로 만든다.
-N ( --new ) : 새로운 chain을 만든다.
-X ( --delete-chain ) : chain을 삭제한다.
-C ( --check ) : Packet을 테스트한다.
-R ( --replace ) : 새로운 규칙으로 교체한다.

[ Match Option ]    
   : iptables에서 Packet을 처리 할 때 만족해야 하는 조건을 지정한다. 

--source ( -s ) : 출발지 IP주소나 네트워크와의 Match
--destination ( -d ) : 목적지 ip주소나 네트워크와의 Match
--sport / --dport : 출발지 포트/목적지 포트를 Match
--protocol ( -p ) : 특정 프로토콜과의 Match ( "tcp, udp, icmp, !tcp = tcp가 아닌 나머지 프로토콜지정" )
--in-interface ( -i ) : 들어오는 Interface ( "시스템에 여러 개의 인터페이스가 존재할때만 사용" )
--out-interface ( -o ) : 나가는 Interface ( "시스템에 여러 개의 인터페이스가 존재할때만 사용" )
--tcp ( flag ) : TCP 6개의 Flag를 지정하여 Match ( "SYN, ACK, FIN, PSH, URG, RST" )
   > 비정상적인 패킷을 필터링 할 때 주로 사용
   > flag 지정 외의 ALL, NONE등의 옵션도 사용이 가능하다.
   > "--syn" 옵션의 경우 따로 사용도 가능하다.
--icmp-type ( ICMP Type & code ) : ICMP의 상태코드 및 Type을 지정하여 Match
   > echo-request, echo-reply 등의 타입과 상태코드를 지정 한다.
--match ( -m ) : 특정 모듈과의 Match
--limit ( Option ) : 지정한 시간 동안 최대 Match 횟수를 정의 한다.
   > 서비스 거부 공격을 어느정도 방어 할 수 있다. ( "하드웨어 성능이 좋을 경우에만 해당" )
   > 지정 시간 옵션 : /second, /minute, /hour, /day 
   > "--limit-burst" 옵션을 정의하여 초당, 분당, 시간당, 하루당 등에 매치될 수 있는 패킷의 수를 결정할 수 있다.
   > EX : -m limit --limit 5/m --limit-burst 10 -j LOG ( 10개 까지는 로그에 바로 기록, 이후에는 5분에 한 번씩 로그를 남긴다. )
   > EX : -m limit --limit 5/m --limit-burst 5 -j DROP ( 5분내의 5번째까지는 버리고, 이후에는 5분에 한번씩 버린다. )
--state : 연결 상태와의 Match
   > NEW : 새로운 연결을 요청하는 packet 
   > ESTABLISHED : 기존 연결의 일부인 packet
   > RELATED : 기존 연결에 속하지만 새로운 연결을 요청하는 packet, ( EX : FTP 접속포트는 21번,  데이터 전송 포트는 20번 혹은 1024번 이상의 랜덤 포트인 경우가 해당 된다 )
   > INVALID : 연결 추적 표에서 어디 연결에도 속하지 않은 packet 
   > EX : -m state --state RELATED

--string : 애플리케이션 계층 데이터 바이트 순서와의 Match ( ? ) 헤더에 매치가 아닌 데이터에 매치, 패턴시그니처 찾기
--comment : Kernel 메모리 내의 규칙과 연계되는 최대 256바이트 주석
--fragment ( -f ) : 두 번째 이후의 조각에 대해서 규칙을 명시한다. 데이터 조각
--table ( -t ) : 처리될 테이블
--jump ( -j ) : 규칙에 맞는 Packet을 어떻게 처리할 것인가를 명시한다.


[ Target ] : iptables는 Packet이 Match Option과 일치 할 때 취할 동작을 Target에서 정의한다. 

ACCEPT : Packet을 허용한다.
DROP   : Packet을 거부한다. ( "응답 메시지를 전송하지 않는다" )
REJECT : Packet을 거부하고 이와 동시에 적절한 응답 Packet을 전송 한다. ( "응답 메시지를 전송" )
LOG    : Packet을 syslog에 기록한다.

  
==========================================================================
실습 
CLI 10  vmware 2                 192.168.10.200   GW 192.168.10.1
    I
LINUX1 vmware 1  1.1.1.1/24  GW 1.1.1.1         vmware 2   192.168.10.1         GW 192.168.10.1
    I
LINUX2 vmware 1                 1.1.1.2/24          GW 1.1.1.1

vmware1 host only  1.1.1.0
vmware2 host only 192.168.10.0

sysctl net.ipv4.ip_forward=1


iptables 명령어
# iptables [ -t filter ] -L --line

규칙 삭제(단일)
# iptables -D INPUT(Chain) 5 

규칙 포맷
#iptables -F (설정 초기화 flush)

iptables -P [ -t filter ]

LINUX 1
# systemctl stop firewalld
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP

# iptables -A INPUT -s 192.168.10.0/24 -p icmp --icmp-type echo-request -j ACCEPT
# iptables -A OUTPUT -s 192.168.10.0/24 -p icmp --icmp-type echo-reply -j ACCEPT

# iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
# iptables -A FORWARD -s 192.168.10.0/24 -p tcp --sport 22 -j ACCEPT

========================================================

LINUX 2
# systemctl stop firewalld
# iptables -P INPUT DROP
# iptbales -A INPUT -p tcp --dport 22 -j ACCEPT

'학원' 카테고리의 다른 글

2023/06/22(예비군) SSH, SCP  (0) 2023.06.23
2023/06/21(예비군) Firewald  (0) 2023.06.23
2023/06/19 네트워크 관련 서비스  (0) 2023.06.19
2023/06/16 LVM  (0) 2023.06.16
2023/06/15 디스크  (0) 2023.06.15