iptables를 쉽게 사용할 수 있게 만들어놓은 데몬 > firewalld
4계층 정보를 가지고 방화벽 설정
[ iptables 개념 ]
Linux 운영체제에서 특정 IP주소에 대한 OS의 동작을 정의해 놓는 Kernel 프로그램
기본 User Level의 명령이지만, 동작 자체는 Kernel 단계에서 packet을 Filtering 하며 동작
Linux kernel은 기본적으로 "netfilter" 기능이 존재하며, 우리가 iptables를 사용하는 것은 실제로는 "netfilter"를 정의하는 행위
Packet의 기본 구조는 Packet의 정보를 담고 있는 Header와 실제 packet의 내용이 담겨있는 Data로 구분된다, iptables는 Packet의 Header를 검사하여 Filtering을 진행
Iptables의 기본구조 ( "Table" -> "Chain" -> "Rule" ) 형식으로 구성
주로 사용되는 Table은 Filter Table, NAT Table 2가지를 사용한다.
[ Filter Table ]
실제 packet Filtering을 적용하는 Table, rule에 따라서 packet을 허용 혹은 차단하는 역할을 진행한다. ( INPUT, OUTPUT, FORWARD 3가지 Chain을 갖는다 )
INPUT은 외부에서 방화벽으로 들어오는 packet을 담당하며, OUTPUT은 방화벽에서 나가는 packet을 담당한다.
FORWARD는 방화벽으로 들어오는 packet이 아닌, 방화벽 내부에 있는 또 다른 서버로 향하는 packet을 담당하여 Filtering을 진행한다.
( 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 ]" )
- 테이블명(-t 옵션)은 생략이 가능하며, 생략 시 "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에 기록한다.
'[Linux]' 카테고리의 다른 글
[Linux] 리눅스 firewalld (0) | 2022.06.07 |
---|---|
[Linux] iptables 실습 (0) | 2022.06.07 |
[Linux] 리눅스 ctl (0) | 2022.06.03 |
[Linux] 리눅스 Kernel / Kernel Update (0) | 2022.06.02 |
[Linux] 리눅스 Cron (0) | 2022.06.02 |