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 |