[리눅스마스터 1급] 이기적 이론서 15회차 정리 - 네트워크 보안
🏁 이기적 이론서 학습 범위
- PART 03 네트워크 및 서비스의 활용
- CHAPTER 01 네트워크 보안 (SECTION 01 네트워크 침해 유형 및 특징, SECTION 02 대처 및 대처 방안)
네트워크 침해 유형 및 특징
☑️ 네트워크 침해 유형 및 특징
스니핑(Sniffing) 공격
- 개념
- 한 서브 네트워크 내에서 전송되는 패킷의 내용을 임의로 확인하는 공격 기법
- 네트워크 무작위 모드(Promiscuous Mode)와 TCP Dump
- 네트워크 설정을 무작위 모드로 변경한 후 TCP Dump를 이용하면, 네트워크 내의 모든 패킷을 확인할 수 있다.
ifconfig [네트워크 인터페이스 이름] promisc
를 통해 무작위 모드로 변경한다.ifconfig [네트워크 인터페이스 이름] -promisc
를 통해 일반 모드(Normal mode)로 다시 전환한다.tcpdump는 네트워크 패킷을 확인하는 명령어이다.
$ ifconfig eth0 promisc # 무작위 모드로 변경 $ ifconfig $ tcpdump -ni eth0 # 네트워크 패킷 확인 $ ifconfig eth0 -promisc # 일반 모드로 전환
- 스니핑 공격 대응 방안
- 중요한 데이터는 SSL(Secure Socket Layer)와 같은 암호화 통신 방식을 이용한다.
스푸핑(Spoofing) 공격
- 개념
- 네트워크 서비스 혹은 패킷 정보를 임의로 변경하여 공격에 사용하는 기법
- IP 주소, DNS 주소, MAC 주소 등의 정보를 변조하여 공격의 탐지 및 역추적을 어렵게 한다.
스푸핑 공격의 세부 기법 및 대응 방안
세부 기법 설명 IP Spoofing - TCP/IP의 구조적 취약점을 악용하여, 공격자가 자신의 IP를 변조하므로 IP 기반 인증 등의 서비스를 무력화시키는 공격기법
- 대응 방안: IP 기반 인증을 최소화하고 TCP sequence 번호를 예측하지 못하도록 랜덤하게 구성ARP Spoofing - IP 주소를 MAC 주소로 변환하는 ARP 프로토콜의 취약점을 악용한 공격
- IP 주소와 MAC 주소의 매핑 정보를 네트워크에 브로드캐스트하여 대상 호스트들의 ARP 테이블이 악의적인 정보로 변조되도록 한다.
- 대응 방안:arp - [IP][MAC]
을 통해 정적 ARP 매핑 정보를 등록DNS Spoofing - DNS 요청에 위조된 정보를 응답 패킷으로 보내는 기법
- DNS Spoofing에 의해www.youngjin-test.com
에 대한 IP 주소가 공격자의 IP 주소로 응답될 경우 사용자는 공격자의 IP에 위치한 악의적인 서비스로 접속하게 된다.
DoS(Denial of Service)와 DDoS(Distributed DoS) 공격
- DoS
- 공격 대상의 시스템 및 네트워크 취약점 등을 공격하여 과도한 부하를 발생시키고 정상적인 서비스를 불가능하게 하는 가용성 침해 공격
DoS 공격의 유형
유형 설명 파괴 공격 시스템 한계 용량을 초과하는 부하를 발생시켜 연산장치, 저장장치, 데이터 등을 파괴하는 공격 시스템 자원 고갈 공격 반복적인 프로세스 생성, 메모리 할당, 데이터 중복 저장 등을 통해 CPU, 메모리, 디스크 등 주요 자원을 고갈시키는 공격 네트워크 자원 고갈 공격 대용량의 과도한 패킷을 유발하여 네트워크 대역폭을 고갈시키는 공격 시스템 자원 중 프로세스 자원을 공격시키기 위한 공격 코드의 예시
// 프로세스 생성을 무한 반복 실행해 프로세스 자원을 고갈시킴 #include <unistd.h> main() { while(1) fork(); return(0); }
DoS 공격의 세부 기법
세부 기법 설명 Ping of Death - ICMP Echo 패킷을 정상 크기(64k)보다 매우 크게 전송하여 시스템에 문제를 일으키는 공격 기법
- 전송한 데이터는 라우팅(Routing)되는 동안 작은 조각으로 분할되어 전송 및 처리되므로 과도한 부하가 발생된다.Teardrop Attack - IP fragmentation에 따라 패킷을 재조립할 때 오프셋(offset)을 임의로 변조하여 문제를 일으키는 공격기법
- 잘못된 오프셋 정보는 재조립 과정에서 과부하 및 시스템 크래쉬(Crash)를 유발한다.TCP SYN Flooding - TCP의 3-way 핸드쉐이킹(handshaking) 연결 방식을 악용한 공격 기법
- 공격자는 TCP 연결 시 사용하는 SYN flag를 대량으로 공격 대상에게 발송하며, SYN-ACK에 대한 최종 응답(ACK)을 전송하지 않는다. - 피해 시스템은 TCP 연결을 처리하기 위해 자원을 계속 할당하게 되므로 정상적인 서비스 수행이 어렵게 된다.UDP Flooding - 대량의 UDP 패킷을 전송하여 공격 대상의 자원을 소모시키는 공격 기법
- 공격받은 시스템은 UDP 패킷을 처리하기 위해 서비스 및 포트를 반복해서 점검하게 되므로 정상적인 서비스 처리에 방해받게 된다.
- 공격 시 발신자의 IP 주소가 임의로 변조(Spoofing)되므로 응답 메시지는 공격자에게 전달되지 않는다.Land Attack - 공격 대상에게 IP 패킷을 보낼 때 발신자 IP, 수신자 IP를 모두 공격 대상의 IP로 하여 문제를 일으키게 하는 공격기법 Smurf Attack - 공격자는 IP 주소를 공격 대상의 IP 주소로 위장하고 ICMP Request 패킷을 브로드캐스트(Broadcast)를 통해 다수의 시스템을 전송한다.
- 브로드캐스트를 수신한 다수의 시스템은 ICMP Echo Reply 패킷을 공격자가 아닌 공격 대상으로 전송하게 되면서 부하를 발생시킨다.Mail Bomb - 동일한 이메일 주소를 대상으로 대량의 메일을 동시에 발송하는 공격 기법 - Mail Bomb 공격은 네트워크 자원뿐 아니라 메일 데이터 저장을 위한 디스크 자원도 고갈시킨다. NTP 증폭 공격 - NTP 서비스의 monlist 요청 방식을 악용한 DDoS 공격 기법 - 공격자(Attacker)의 적은 공격 패킷이 증폭되어 공격 대상(Victim)에 전송되므로 피해가 증가하는 공격 기법 - DDoS(Distributed Denial of Service)
- 공격을 위한 에이전트(Agent)를 분산된 시스템에 배치한 후, DoS 공격을 동시에 실행하는 공격 기법
- Agent에 명령을 내리는 명령 서버(호스트)를 C&C(Command & Control) 서버라고 한다.
- Agent가 설치되어 DDoS 공격에 사용되는 호스트를 좀비 PC라고 하며, 좀비 PC들의 네트워킹을 봇넷(Botnet)이라 한다.
DDoS 공격을 위한 다양한 도구
공격 도구 설명 Stacheldraht - Linux 시스템용 분산 서비스 거부 공격(DDoS)의 에이전트 역할을 하는 악성코드(malware)로 Smurf 공격에 사용될 수 있다.
- 통신 시 암호화 기능을 지원하며 공격자 확인을 위해 패스워드를 지정한다.TFN 공격자 시스템과 마스터 시스템 간 연결이 평문으로 되어 있으며 UDP Flooding, TCP SYN Flooding, ICMP 브로드캐스트 공격이 가능하다. TFN 2K - TFN의 발전된 형태로 UDP, TCP, ICMP를 복합적으로 사용하고 포트도 임의로 결정되며 암호화를 사용한다.
- 지정된 TCP 포트에 백도어를 실행할 수 있다.Trinoo UDP Flooding 분산 서비스 거부 공격을 할 수 있는 통합 도구
- DoS 및 DDoS 공격 대응 방안
- 침입 차단 시스템(Intrusion Prevention System)을 이용하여 패킷 및 포트 필터링 수행
- 침입 탐지 시스템(Intrusion Detection System)을 이용하여 공격 탐지
- 로드 밸런싱(Load Balancing)을 통한 대용량 트래픽 분산 처리 구성
- 시스템 최신 패치 적용으로 취약점 제거
- 불필요한 서비스를 제거하고 포트를 닫음
☑️ 해킹 프로그램을 이용한 공격
무작위 공격(Brute Force Attack) 도구
- 개념과 특징
- 무작위 공격은 사전 파일(Dictionary File)을 기반으로 임의의 정보를 무작위로 대입하여 인증을 우회하는 공격 기법
- root, Administrator와 같이 고정된 아이디를 사용할 경우 패스워드 입력에 무작위 공격을 사용할 수 있으므로 보안에 취약하다.
- 무작위 공격 도구 및 대응 방안
- 리눅스 시스템의 대표적인 무작위 공격 도구: John the Ripper
- 입력 회수 제한 등을 통해 무작위 공격에 대응할 수 있다.
기타 해킹 프로그램 및 악성 코드
프로그램 이름 | 설명 |
---|---|
Prorat | 해킹 대상 시스템에 원격 접속 및 제어하여 해킹을 수행할 수 있는 전용 프로그램 |
Netbus | 네트워크를 통해 Microsoft Windows 컴퓨터 시스템을 원격으로 제어하기 위한 소프트웨어 |
Back orifice | - 윈도우의 TCP/IP 기능을 이용해 시스템끼리 원격 제어한다. - 안철수 연구소의 V3 백신에서는 Win-Trojan/BO.57856 트로이목마(해킹툴)로 감지하여 삭제를 권장한다. |
랜섬웨어 | - 시스템을 잠그거나 데이터를 암호화하여 사용할 수 없도록 만든 후 금전을 요구하는 악성 프로그램 - 최근 국내 웹 호스팅 업체가 이 공격으로 인해 큰 비용을 지불하였다. |
트로이목마 | 정상적인 프로그램으로 가장하였으나 내부에 악성 코드를 담고 있는 프로그램 |
웜바이러스 | 스스로 실행되는 악성 소프트웨어로 자기 복제와 다른 시스템으로 전파되는 특징을 가진다. |
대비 및 대처 방안
☑️ 보안 솔루션을 이용한 대비 및 대처
방화벽(Firewall)
- 개념과 주요 기능
- 외부로부터 들어오는 악의적인 트래픽을 막고, 허가된 트래픽만 내부 네트워크로 유입될 수 있도록 통제하는 하드웨어 혹은 소프트웨어
- 내부에서 외부로 나가는 패킷도 룰(Rule)에 따라 통제할 수 있다.
- 접근제어(Access Control), 로깅(Logging) 및 감사 추적(Auditing), 사용자 및 호스트 인증(Authentication) 기능 등을 제공한다.
방화벽 종류
방화벽 종류 설명 스크리닝 라우터(Screening Router) - 내부 네트워크와 외부 네트워크를 방화벽 기능을 탑재한 라우터로 연결한다.
- 장점: 필터링 속도 빠름, 네트워크 전체 방어 가능
- 단점: 패킷 필터링 규칙 구성, 검증 및 로그 관리가 어려움베스천 호스트(Bastion Host) - 방화벽 기능을 탑재한 호스트를 이용하여 내부 네트워크와 외부 네트워크를 연결한다.
- 장점: 호스트 기반의 소프트웨어로 지능적인 정보 분석 지원
- 단점: Bastion Host 자체에 보안 취약점 존재 가능듀얼홈 게이트웨이(Dual-Homed Gateway) - 2개의 네트워크 카드를 내장한 Bastion을 이용하여 외부 네트워크와 내부 네트워크를 각각 연결한다.
- 장점: 네트워크가 분리되어 내부 IP 주소가 노출 안되므로 높은 보안성을 제공한다.
- Bastion Host 자체에 보안 취약점 존재 가능스크린드 호스트 게이트웨이(Screened Host Gateway) - Dual-Homed Gateway와 Screening Router를 혼합한 형태
- 장점: 네트워크와 응용 계층에서 함께 방어하므로 높은 보안성 제공
- 단점: 시스템 구축 비용이 높으며 스크리닝 라우터의 라우팅 테이블 변조 공격에 취약스크린드 서브넷 게이트웨이(Screened Subnet Gateway) - Screening Router를 Bastion Host를 중심으로 양쪽에 연결하는 형태
- Bastion Host는 Proxy 서버를 이용하여 명확하게 허용되지 않은 모든 트래픽을 거부한다.
- 장점: 다단계로 방어하므로 높은 보안성 제공
- 단점: 구축 비용이 높으며 서비스 응답성이 낮아질 수 있음
침입 탐지 시스템(IDS: Intrusion Detection System)
- 개념
- 네트워크 및 서비스에 대한 공격을 실시간으로 탐지하는 보안 시스템
- 주요 기능
데이터를 수집 및 분석하여 침입 탐지와 추적 및 보고 기능 제공
IDS 기능 설명 데이터 수집 호스트 혹은 네트워크로부터 분석을 위한 데이터 수집 정보 분석 시스템에 설정한 패턴 DB 및 분석 룰(Rule)을 이용하여 정보 분석 침입 탐지 분석한 정보를 기반으로 침입 여부를 실시간으로 탐지 추적 및 보고 통계적 분석과 보고 기능으로 공격의 근원과 패턴을 리포팅(Reporting)
- IDS의 시스템 유형
- 데이터 소스를 기준으로 호스트 기반(HIDS)와 네트워크 기반(NIDS)으로 구분한다.
HIDS와 NIDS의 운영방식
유형 설명 호스트 기반(HIDS) 서버에 직접 설치되어 다양한 정보를 이용한 침입 탐지 수행 네트워크 기반(NIDS) 네트워크 세그먼트별로 탐지 장비를 설치하여 운영 침입 탐지 방식을 기준으로 오용 탐지(Misuse) 방식과 이상 탐지(Anormaly) 방식으로 구분한다.
유형 설명 오용 탐지(Misuse) - 알려진 공격 패턴을 등록한 후 비교하여 탐지
- 오탐율은 낮으나 알려지지 않은 공격에 취약이상 탐지(Anormaly) - 정상적 패턴 대비 이상한 패턴일 경우 공격으로 판단하는 방식
- 인공지능 알고리즘 등을 활용하여 새로운 공격 패턴에 대응할 수 있으나, 정상적인 행동을 침입으로 오탐할 가능성이 있음
침입 방지 시스템(IPS: Intrusion Prevention System)
- 개념
- 침입 탐지의 수동적인 방어 시스템에서 더 발전하여 능동적인 방어와 차단 등 사전 공격 대응을 중심으로 한 보안 시스템
- 침입 경고 이전에 공격을 차단하는 것이 목적이다.
☑️ Snort를 이용한 대비 및 대처
Snort
- 특징
- 리눅스 시스템에서 사용할 수 있는 공개형 IDS 프로그램
- 크게 스니퍼(Sniffer), 프리 프로세서(Pre-processor), 탐지 엔진, 로깅(출력)으로 구성된다.
- 주요 기능
- 탐지 룰(Rule)을 이용하여 네트워크 트래픽을 분석하고 침입을 방지한다.
주요 기능
기능 설명 패킷 스니퍼 네트워크의 패킷을 읽고 표시 패킷 로거(Logger) 모니터링한 패킷을 저장 및 로그에 기록 네트워크 IDS - 네트워크 패킷을 분석하여 공격 탐지 - Buffer Overflow 공격, Port Scan 등 다양한 공격을 탐지
Snort의 Rule 설정
- Snort Rule의 구조
크게 헤더(Header)와 룰 옵션(Rule Options)으로 구성된다.
구분 구성항목 헤더(Header) - action: 동작방식 - protocol: 점검 대상 프로토콜
- source IP/Port : 소스 IP 및 포트 - direction: 패킷의 흐름 방향
- destination IP/Port : 목표 IP 및 포트룰 옵션(Rule Options) - General, Payload, non-payload, post-detection의 4가지로 분류
- 이중 Payload 탐지 룰 옵션을 주로 사용Snort Rule 헤더 예제
항목 action protocol source IP source Port direction destination IP destination Port 예시 alert tcp 10.0.2.2 80 → 10.0.2.7 80 의미 경고발생 TCP 프로토콜 소스 IP 소스 포트 데이터 방향 목표 IP 목표 포트 Snort Rule 옵션의 주요 항목
항목 설명 msg 출력할 메시지 지정 sid 설정할 룰의 식별자를 지정하며 사용자가 작성한 룰은 1000000 이상으로 함 content 페이로드(Payload) 내부에서 검색할 문자열 지정 depth 검사할 바이트 수를 지정 offset 검사를 시작할 위치 지정 distance - 앞에 설정한 룰의 결과에서 지정한 숫자(바이트 수)만큼 떨어진 지점부터 검사
- ex. content:“Hi”;content:”Hello”:distance:1 이면, Hi 문자를 찾은 뒤 1바이트 이후부터 Hello 문자열 검사within 시작점부터 검사하되 지정한 바이트 수 내에서만 검사 nocase 문자열 검색 시 대소문자 구별 X sameip 소스와 목표 IP 주소가 동일함을 검사
- Snort Rule 설정 예제
외부에서 내부(192.168.10.0/24) 대역의 80 포트로 이동하는 패킷 중
passwd
문자열이 포함된 패킷 발견 시passwd detected
라는 alert 메시지를 발생시킨다.alert tcp any any -> 192.168.10.0/24 (msg:"passwd detected"; content:"passwd"; nocase; sid:1000001;)
Land Attack을 탐지한다.
alert ip any -> any any (msg:"Land Attack"; sameip; sid:1000001;)
- Suricata 도구
- Snort를 베이스로 개발되었고 Snort Rule과 호환된다.
- 장점: 멀티 코어, GPU(Graphic Process Unit) 기반 가속화 등을 지원하여 처리 속도가 빠르다.
☑️ iptables를 이용한 대비 및 대처
iptables
- 특징
- 리눅스의 방화벽이라고도 한다.
- 패킷 필터링 정책을 사용하여 특정 패킷을 분석하고 허용 또는 차단할 수 있다.
- NAT(Network Translation Address)에도 사용할 수 있다.
- 커널의 넷필터(Netfilter) 모듈을 이용하여 네트워크 패킷을 필터링한다.
- “모든 것을 허용한 후, 일부 패킷 제한 방식” 또는 “모든 것을 거부한 후, 일부 패킷 허용 방식”을 이용할 수 있다.
- firewalid
- 최근 리눅스는 firewalid를 기본 방화벽으로 사용하고 iptables 대비 편리한 사용성을 제공한다.
- iptables를 사용하면 보다 상세하고 명확한 규칙 설정이 가능하여 여전히 중요하다.
- firewalid도 내부적으로 iptables를 기반으로 동작한다.
firewalid 대신 iptables를 기본으로 사용하는 방법
$ systemctl stop firewalid $ systemctl disable firewalid $ yum -y install iptables-service $ systemctl start iptables $ systemctl enable iptables $ systemctl -l status iptables
- 최근 리눅스는 firewalid를 기본 방화벽으로 사용하고 iptables 대비 편리한 사용성을 제공한다.
iptables의 테이블과 체인 설정에 따른 패킷 흐름
iptables의 테이블 구조
- 테이블 종류
- filter, nat, mangle, raw, security의 5가지 테이블을 지원한다.
각 테이블 별로 고유한 사슬(Chain)을 지정하고 정책을 설정하며, 필요한 경우 사용자 정의 사슬을 정의한다.
테이블 이름 설명 filter iptables의 기본 테이블로 패킷 필터링 기능 담당 nat - Network Address Translation - IP 주소 및 포트를 변환하고 관리한다.
- 하나의 공인 IP를 여러 호스트가 사용하고자 할 때 주로 사용한다.mangle 성능 향상을 위한 TOS(Type of Service) 설정과 같이 패킷 데이터를 변경하는 특수 규칙 적용 raw 연결 추적(Connection tracking)을 위한 세부 기능을 제공 security SELinux(보안커널)에서 사용하는 접근 제어 규칙 적용
- iptables의 filter 테이블
- 미리 정의된 3가지 체인이 있고, 이를 이용하여 네트워크 패킷을 대상으로 정해진 규칙을 수행하며 패킷 필터링 및 방화벽 기능을 수행한다.
filter 테이블의 체인
체인 설명 INPUT 호스트를 목적지로 유입되는 패킷을 필터링하는 데 사용 OUTPUT 호스트를 출발지로 하여 나가는 패킷을 필터링하는 데 사용 FORWARD - 라우터로 사용되는 호스트를 통과하는 패킷 - 호스트 컴퓨터가 목적지가 아닌 패킷을 관리
- iptables의 nat 테이블
미리 정의된 4가지의 체인이 있다.
체인 설명 PREROUTING 패킷의 도착지 주소를 변경 POSTROUTING 패킷의 출발지 주소를 변경하며 masquerade라고도 함 OUTPUT 호스트에서 밖으로 흐르는 패킷의 도착지 주소를 변경 INPUT 호스트 밖에서 안으로 흐르는 패킷 주소를 변경
iptables 사용하기
- iptables의 사용법
형식
[-t 테이블 이름][action][체인 이름][match 규칙][-j 타깃]
iptables의 명령 형식 구성 항목
구성 항목 설명 -t 테이블 이름 - iptables의 기본 테이블인 filter, nat, mangle, raw 중 하나를 테이블 이름으로 지정한다.
- 테이블의 기본 설정은 filter 테이블이다.
- filter 테이블을 대상으로 작업시-t 항목
을 생략 가능action 체인을 대상으로 수행할 명령을 지정한다. 체인 이름 - -t 테이블이름
으로 지정한 테이블의 체인을 지정한다.
- 체인 이름은 대소문자를 구분하므로 주의match 규칙 패킷 처리를 위해 점검할 조건을 지정한다. -j 타깃 규칙 만족 시 처리하는 방식을 지정한다. 체인을 대상으로 한 주요 action 항목
항목 설명 -N - —new-chain
- 새로운 정책 체인을 만듦-X - --delete-chain
- INPUT, OUTPUT, FORWARD를 제외한 비어 있는 정책 체인을 제거-L - --list
- 현재 정책 체인 목록 표시-F - --flush
- 지정한 체인에 설정된 모든 정책 삭제-C 패킷 테스트 -P - --policy
- 체인의 기본 정책 설정-Z - --zero
- 체인 내의 모든 규칙들의 패킷과 바이트 카운트를 0으로 설정체인 내부를 대상으로 한 주요 action 항목
항목 설명 -A - --append
- 새로운 정책을 가장 마지막에 추가/등록-I [체인][라인번호] - --insert
- 지정한 라인번호에 추가-D [체인][라인번호] - --delete
- 정책을 제거-F [체인][라인번호] - --replace
- 정책 수정주요 match 규칙 항목
match 규칙 설명 -s, —source 출발지 IP, 도메인 설정 -d, —destination 목적지 IP, 도메인 설정 ! 뒤에 따라오는 규칙 제오 -p, —protocol tcp, udp, icmp 등 프토토콜 설정 -i, —in-interface 입력 네트워크 인터페이스 선택 -o, —out-interface 출력 네트워크 인터페이스 선택 —sport - 소스 포트 설정 0
-:
를 이용하여 포트 범위 설정 가능—dport - 타깃 포트 설정
-:
를 이용하여 포트 범위 설정—tcp-flags SYN, ACK, FIN, RST, URG, PSH, ALL, NONE 등 TCP flag를 지정 —syn TCP flag로 SYN만 가진 것을 지정 —icmp-type - ICMP 타입 지정
- echo-request(8), echo-reply(0), destination-unreachable(3) 등이 있음-m, —match 특정 모듈, 규칙과 매치 —state 연결 상태와 매치 —string 응용 계층의 데이터 바이트 순서와 매치 기타 부가 옵션 항목
항목 설명 -n, —numeric 출력 정보를 숫자로 표시 -v, —verbose 패킷, 바이트 수 등 부가 정보를 함께 표시 —line-numbers 정책 앞에 번호를 붙여 출력 -j 타깃
에 사용할 수 있는 옵션 항목항목 설명 ACCEPT 패킷 허가 REJECT - 패킷을 거부하며 상대에게 응답 메시지 전송
- TCP 일 경우 리셋(reset) 메시지 전송
- UDP일 경우 Port Unreachable 메시지 전송DROP 패킷을 거부하고 버림 LOG - 패킷을 syslog에 전달하여 기록
- 로그 파일 경로는/var/log/message
RETURN 호출 체인 내에서 패킷 처리 계속 진행
- iptables를 이용한 패킷 필터링 예제
INPUT 체인에서 소스 주소가 192.168.10.7이고 목적지 주소가 localhost인 패킷을 거부한다.
$ iptables -A INPUT -s 192.168.10.7 -d localhost -j DROP
INPUT 체인에서 소스 주소가 192.168.10.7인 ICMP 패킷을 거부하며 대상 호스트에게 메시지를 전달한다.
$ iptables -A INPUT -s 192.168.10.7 -p icmp -j REJECT
INPUT 체인에서 소스 주소가 192.168.10.0 대역이고 ICMP 패킷이 아닌 경우 모든 패킷을 허용한다.
$ iptables -A INPUT -s 192.168.10.0/24 ! -p icmpt -j ACCEPT
www.youngin-test.com에 접속하는 것을 차단하기 위해 OUTPUT 체인에 관련 정책을 등록한다.
$ iptables -A OUTPUT -p tcp -d www.youngjin-test.com --dport 80 -o etho0 -j DROP
INPUT 체인에 설정된 정책을 번호와 함께 출력한다.
$ iptables -L INPUT --line-numbers
INPUT 체인의 3번째 정책을 제거한다.
$ iptables -D INPUT 3
기본 설정으로 들어오는 모든 패킷을 거부하게 되고 192.168.10.7에서 오는 패킷만 허용한다.
$ iptables -P INPUT DROP $ iptaables -A INPUT -s 192.168.10.7 -j ACCEPT
기본 설정으로 들어오는 모든 패킷을 허가하고 소스 주소가 192.168.10.7일 경우 거부한다.
$ iptables -P INPUT ACCEPT $ iptables -A INPUT -s 192.168.10.7 -j DROP
들어오는 패킷 중 TCP 포트 번호가 10~100번인 것을 거부하나 HTTP 서비스를 위한 80 포트는 허용한다. 중복된 정책이 있을 경우 먼저 등록된 정책이 허용된다.
$ iptables -A INPUT -p tcp -dport 80 -j ACCEPT $ iptables -A INPUT -p tcp -dport 10:100 -j DROP
초당 허용 접속 개수를 제한하여 TCP flooding 공격에 대응한다.
$ iptables -A INPUT -p tcp --dport 80 --syn -m limit --limit 100s -j ACCEPT
- iptables 설정 정책 저장과 자동 적용
- 시스템 리부팅 시 iptables 설정 정책은 사라지게 되므로 파일로 저장하고 부팅과 함께 재설정해야 한다.
iptables-save
를 통해 정책을 파일로 저장한다.$ iptables-save $ iptables-save > firewall.sh # iptables-save > 파일명 형식
iptables-restore
를 통해 저장된 iptables 정책 파일을 읽어들여 적용한다.$ iptables-restore < firewall.sh
service iptables save
를 통해 iptables 정책을/etc/sysconfig/iptables
에 저장한다.- iptables 서비스 시작 시 자동으로 읽어들여 적용된다.
$ service iptables save $ systemctl stop iptables $ systemctl start iptables
iptables를 이용한 NAT 구성
- NAT
- Network Address Translation
- 네트워크 주소를 변환한다.
- 하나의 공인 IP를 다수의 호스트가 공유해서 사용할 수 있다.
운영방식에 따라 여러 종류로 구분한다.
기준 세부 항목 Network 구분 - Normal NAT: 사설 IP를 공인 IP로 변환
- Reverse NAT : 공인 IP를 사설 IP로 변환
- Exclude NAT: NAT을 적용하지 않는 host/network를 지정
- Redirect NAT: 특정 시스템으로 지정한 곳으로 포워딩IP 개수, 고정 여부 - Dynamic NAT: 다수의 사설 IP와 다수의 공인 IP를 동적으로 매핑
- Static NAT: 사설 IP와 공인 IP를 1:1로 고정하여 매핑주소 변경 여부 - SNAT(Source NAT): 소스 IP 주소 변경
- DNAT(Destination NAT): 목적지 IP 주소 변경
- iptables의 NAT 지원 방식
- iptables는 SNAT과 DNAT을 지원한다.
- iptables의 SNAT을 이용하면 공인 IP 주소 하나를 다수의 호스트가 공유하여 인터넷을 사용할 수 있다.
- iptables의 DNAT을 이용하면 하나의 공인 IP로 여러 개의 서버에 접속하도록 구성한다.
- iptables를 이용한 SNAT 구성
- SNAT은 소스 IP 주소를 변경하는 것으로 외부 서비스에 연결하여 통신할 때 사설 IP를 공인 IP로 변경한다.
- NAT 테이블의 POSTROUTING 체인에 정책을 설정한다.
SNAT 설정 예제
iptables SNAT 설정 예제 설명 $ iptables -t nat -A POSTROUTING -o etho0 -j SNAT —to 222.235.10.7 - -t nat
: nat 테이블 선택
--A POSTROUTING
: POSTROUTING 체인에 정책 설정
--o eth0
: etho0 네트워크 인터페이스를 통해 나가는 패킷을 대상으로 함 --j SNAT
: SNAT으로 설정
-—to 222.235.10.4
: SNAT이므로 소스 주소를 222.234.10.4로 변경$ iptables -t nat -A POSTROUTING -o eth0 -j SNAT —to 222.235.10.7 -222.234.10.25 IP 대역(범위)를 지정하여 소스 주소를 변경 $ iptables -t nat -A POSTROUTING -o eth0 -j SNAT —to MASQUERADE MASQUERADE는 유동 IP 주소로 소스 주소를 변경
- iptables를 이용한 DNAT 구성
- DNAT은 목적지 IP 주소를 변경하는 것으로 NAT 테이블의 PREROUTING 체인에 정책을 설정한다.
DNAT 설정 예제
iptables DNAT 설정 예제 설명 $ iptables -t nat -A PREROUTING -p tcp -d 222.235.10.7 —dport 80 -j DNAT —to 192.168.10.7:80 - -t nat
: nat 테이블 선택
--A PREROUTING
: PREROUTING 체인에 정책을 설정
--p tcp
: TCP 프로토콜을 대상으로 함
--d 222.235.10.7
: 목적지 주소가 22.235.10.7인 경우 점검
---dport 80
: 목적지 포트가 80인 경우 점검
--j DNAT
: DNAT으로 설정
---to 192.168.10.7:80
: 목적지 주소를 192.168.10.7로, 포트를 80으로 변경하여 연결$ iptables -t nat -A PREROUTING -i eth1 -p tcp —dport 80 -j REDIRECT —to-port 8080 - 웹 브라우저의 프록시 옵션을 설정하지 않고, 네트워크 상에서 투명하게 동작하는 투명 프록시 설정
--i eth1
: eth1 네트워크 인터페이스로 수신되는 모든 ㅐ킷을 대상으로 함리눅스에서 NAT을 사용하려면
/proc/sys/net/ipv4/ip_forward
의 값이 1로 설정되어야 한다.$ cat /proc/sys/net/ipv4/ip_forward 0 $ echo 1 > /proc/sys/net/ipv4/ip_forward $ cat /proc/sys/net/ipv4/ip_forward 1
☑️ firewalld 사용하기
firewalld
- 개념 및 특징
- 최근 리눅스에서 방화벽 규칙을 관리하는 데몬
- CentOS 6에서 기본 사용되던 iptables를 대신한다.
- 동적 관리 방식을 지원하여 firewalld 데몬을 다시 실행하지 않고 방화벽 규칙을 변경할 수 있다.
- D-Bus(Desktop Bus) 인터페이스를 제공하여 다른 서비스 및 응용 프로그램에서 방화벽 설정을 관리할 수 있다.
- 같은 시스템에서 실행중인 프로그램 간 통신이 가능하도록 IPC(Inter-Process Communication), RPC(Remote Procedure Call) 메커니즘을 제공한다.
- GUI(Graphic User Interface) 환경에서는 firewall-config를 이용하여 편리하고 직관적으로 방화벽을 설정한다.
CUI(Character/Console User Interface) 환경에서는 firewall-cmd를 이용하여 빠르게 방화벽을 설정한다.
$ firewall-cmd --version
- 런타임 방식은 firewalld를 재실행하거나 시스템 리부팅 시 설정한 규칙이 사라진다.
- 영구적 방식은 firewalld를 재실행하거나 시스템 리부팅 시 설장한 규칙이 유지되며,
--permanent
옵션을 사용한다. - 타임아웃(timeout) 방식은 특정 시간동안만 설정된 규칙이 유지되며,
--timeout
옵션을 사용한다.
- firewalld의 영역과 서비스
firewalld는 네트워크 연결의 신뢰도에 따라 영역(zone)을 구분하여 사용하므로 방화벽 규칙(rule)을 효율적으로 관리할 수 있다.
$ ls -l /user/lib/firewalid/zones/
- firewalld의 주요 영역(zone)
- 기본적으로 나가는 패킷은 허용(accept)한다.
영역(zone) 설명 public - ssh, dhcpv6-client를 제외한 들어오는 패킷을 거부(reject)한다.
- 거부 방식은 상대방에게 ICMP 응답을 보낸다.dmz ssh를 제외한 들어오는 패킷을 거부한다. drop - 들어오는 패킷을 폐기(drop)한다.
- 폐기된 방식은 별도의 응답을 보내지않는다.trusted 들어오는 패킷을 허용(accept)한다. - firewalld는 프로토콜, 포트, 필요한 모듈 등에 대한 정보를 서비스(service)로 정의하여 사용한다.
- 특정 서비스에 대한 설정 변경 시 관련 서비스 파일(.xml)을 편집한 후
firewall-cmd —reload
를 실행한다.
$ ls -l /user/lib/firewalld/services/ $ cat /usr/lib/firewalld/services/http.xml
- 특정 서비스에 대한 설정 변경 시 관련 서비스 파일(.xml)을 편집한 후
- firewall-cmd의 주요 예제
firewall-cmd —state
을 통해 방화벽 실행 상태를 확인한다.$ firewall-cmd --state running
firewall-cmd —reload
을 통해 방화벽 설정을 다시 로드한다.—permanent
옵션 미지정 시 설정한 규칙은 모두 사라진다.
$ firewall-cmd --reload success
firewall-cmd —get-zones
을 통해 존(zone) 목록을 출력한다.$ firewall-cmd --get-zones
기본 존을 출력한다.
$ firewall-cmd --get-default-zone
활성화된 존을 출력한다.
$ firewall-cmd --get-active-zones
HTTP 서비스를 추가한다.
$ firewall-cmd --add-service=http --add-service=https
TCP/21 포트를 추가한다.
$ firewall-cmd --add-port=21/tcp
public zone의 사용 가능한 서비스, 포트 목록을 출력한다.
$ firewall-cmd --zone=public --list-all
—zone
옵션을 지정하지 않으면 기본(default) 존을 대상으로 하며, TCP/21 포트를 제거한다.$ firewall-cmd --remove-port=21/tcp success
TCP/8080~TCP/8090 포트를 추가한다.
$ firewall-cmd --add-port=8080-8090/tcp success
FTP 서비스를 영구적으로 추가한다.
$ firewall-cmd --permanent --add-service=ftp success
기본 존을 block으로 변경한다.
$ firewall-cmd --set-default-zone=block success $ firewall-cmd --get-default-zone block
TCP/80 포트로 들어온 패킷을 8080포트로 포워딩한다.
$ firewall-cmd --add-forwad-port=port=80:proto=tcp:toport=8080 success
—permanent
옵션을 이용하였으므로firewall-cmd —reload
실행 시에도 내용이 유지된다. 또한 ICMP Echo-Request에 응답하지 않도록 한다.$ firewall-cmd --permanent --add-icmp-block=echo-request Success $ firewall-cmd --reload Success $ firewald-cmd --list-all