작업환경
- 가상머신 : Virtual Box 7
- 방화벽(Iptables) : Cent OS 7
- 사무용 PC(Office PC) : Fedora Workstation 35
- DMZ Zone(WebServer) : Fedora Server
>> Iptables 방화벽 실습을 위한 구조도
인프라는 가상머신(Virtual Box)을 통해 구축됨
각 OS의 네트워크 설정은 해당 글을 참조 >> 가상 보안 인프라 구축
>> 방화벽의 주요 기능
- 접근제어
- 방화벽의 고유(기본) 기능
- 패킷 필터링 규칙에 따라 패킷 분석 후 허용여부 결정
- ip주소
- 프로토콜
- 포트번호
- 연결상태
- 페이로드
- 응용레벨에서 인증을 이용한 접근통제
- 인증
- 메세지 인증
- 전송되는 message의 신뢰성 보증
- gateway to gateway 형태의 vpn service를 제공
- 사용자 인증
- otp
- 클라이언트 인증
- 메세지 인증
- 로깅 및 검사
- 접속 정보와 네트워크 사용(공격포함)에 따른 유용한 통계정보들을 제공
- 암호화
- vpn 기능 제공
- 트래픽 암호화
- 사용자 인증 및 무결성 보장
- IPSec SSl/TLS
- IDS - 침입탐지시스템
- 터널링, 암호화
- vpn 구조
- Gateway : Gateway
- Gateway : Host
- Host : Host
- vpn 기능 제공
- NAT - 방화벽에서 하지 않으면 라우터에서 시행(l3스위치 → 라우팅만 수행)
- 주소변환(접근통제체계) -domain name → ipaddress //loopup, resolve
- 공인 → ← 사설 ip 주소 변환
- 보안측면
- 내부 네트워크 은닉화
- 효율적 측면
- 서브넷팅
- ip주소 자원은 제한적이기에 효율적 사용 필수
- 주소변환(접근통제체계) -domain name → ipaddress //loopup, resolve
- 감사추적(Audit)
- 로그정보 관리
- 로그정보 재활용
- 보안정책 재수립
- 추적 및 통계
- 알람기능
>> 방화벽 유형
- Packet Filtering
- 규칙테이블을 생성 이후 패킷 헤더를 분석하여 판단하는 가장 기초적인 방화벽 구조
- 다른 방식에 비해 처리속도가 빠르지만 다양한 취약점이 존재
- Stateful Inspection
- 상태기반감시 방화벽
- 패킷필터 +a 기능과 전송계층에 대한 심층 분석(Deep Inspection)
- Application-proxy Gateway
- Packet Filtering 방화벽의 상위 버전
- Circuit-Level gateway
- 악성코드 검사를 수행하지만 패킷 자체를 검사하지는 않는다.
- TCP/IP 외 다른 프로토콜의 세션을 검사
- Hybrid
- 현재 사용 중인 상용 방화벽의 대부분이 hybrid 모델
- Packet Filtering + Application Gateway 기능이 합쳐짐
Iptables 방화벽은 패킷필터링, 상태기반, 애플리케이션 계층 필터링 세 가지의 기능을 가지고 있으며
상용 방화벽에서 제공하는 대부분의 기능을 제공합니다.
현재는 Iptables의 상위호환격인 NetFilter 방화벽이 리눅스에서 새로이 제공되고 있습니다.
>> Iptables 구성
Filter Rule(Chain)
- INPUT - 패킷이 서버로 들어오는 경우
- 방화벽으로 타고 오는 request 패킷 설정(방화벽 타깃)
- 그러므로 request 패킷은 input 체인 설정이 되어야 함
- 로컬 소켓이 목적지인 패킷
- OUTPUT - 서버에서 패킷이 외부로 나가는 경우
- 방화벽에서 타고 나가는 패킷
- 방화벽 자체에서 생성돼서 밖으로 타고 나가는 패킷
- FORWARD - 패킷이 서버를 지나가는 경우(INPUT&OUTPUT)
- 들어오고 나가는 동시의 패킷 포함 → 방화벽을 거치거나 통과하는 패킷
- request&reply packet forwarding
- input chain과 output chain에 각각 룰 하나씩 설정
- 서버 - forwarding 기본 정책
- 즉 request 패킷이 방화벽으로 들어올 때 input인지 forward chain인지 알 수 없기 때문에 패킷의 destination을 확인해야 chain의 구분이 가능
- 양쪽 패킷(input, output)의 방향 제어에 대한 명시가 중요
- 제대로 된 명시(방향제어)가 되어있지 않을 경우 에러나 제대로 된 정책 설정이 안 될 경우가 존재
NAT Rule(Chain)
- PREROUTING - DNAT(Destination NAT) 룰 적용, 패킷의 도착지 주소를 변경
- POSTROUTING - SNAT(Source NAT) 또는 masquerad 룰 적용, 패킷의 출발지 주소를 변경
>> Iptables 옵션
정책 설정 기본 - ACCEPT(허용), DROP(차단)
기초적인 문법의 형태
iptables 명령어 체인 규칙(프로토콜:-p,포트:—dport&—sport,인터페이스:-i&-o ,ip주소:-s&-d ) -j 타겟
iptables 기본정책 제어옵션
-L (--list) | 적용 되어 있는 정책 목록 출력 |
-A (--append) | 새로운 정책 추가(가장 낮은 순위로 추가됨) |
-I (--insert) | 새로운 정책 삽입(가장 높은 순위로 삽입됨) |
-R (--replace) | 새로운 정책 교체(기존의 정책을 교체) |
-D (--delete) | 해당 정책을 삭제 |
-N (--new-chain) | 새로운 체인 생성(INPUT,OUTPUT,FORWARD 제외) |
-P (--policy) | 기본 정책 변경 |
-F (--flush) | 체인에 설정된 규칙 초기화 |
-Z | 체인의 모든 규칙들의 패킷과 바이트 카운터를 0 으로 만든다. |
-X (--delete-chain) | 비어있는 체인을 삭제 |
-E | 체인이름 변경 |
iptables 제어 옵션
-s (--source) | 출발지 주소 |
-d (--destination) | 목적지 주소 |
--sport | 출발지 포트 |
--dport | 목적지 포트 |
-p (--protocol) | 프로토콜(tcp,udp...) |
-i (--in-interface) | 패킷이 들어오는 네트워크 인터페이스 (inbound interface) |
-o (--out-interface) | 패킷이 나가는 네트워크 인터페이스 (outbound interface) |
-f (--fragment) | 나뉜 패킷 |
-j (--jump) | 패킷 상태 제어 |
iptables 상태추적 및 확장옵션
- LOG : 로그를 기록하는 옵션
- --log-prefix : 지정한 메시지를 로그에 남김
- -m : module, 모듈 사용 옵션
- conntrack : 세션 감시 모듈
- --ctstate (NEW, ESTABLISHED, RELATED, INVALID, UNTRACKED) 네 가지 상태를 추적함
- NEW : 이전에 없던 패킷의 새로운 첫 연결 요청이 들어오는 패킷
- ESTABLISHED : NEW상태를 거친 이후의 패킷 / 새로운 연결 요청에 관한 그 후의 패킷들이 오고 가는 상태
- RELATED : 새로운 연결 요청이지만, 기존의 연결과 관련된 패킷
- INVALID : 이전 상태 중 어떤 것도 적용되지 않는 패킷
- --ctstate (NEW, ESTABLISHED, RELATED, INVALID, UNTRACKED) 네 가지 상태를 추적함
- limit : 시간당 패킷의 흐름(개수) 제한
- string : 문자열 필터링
- --algo : algorithm, 사용할 알고리즘을 선정합니다.
>> 예제 1 - 방화벽의 웹서버에 접속하지 못하도록 제한
정책 설정 기본 - ACCEPT(허용), DROP(차단)
HTTP, HTTPS - 80,443
기본정책 허용 상태
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP
iptables -A OUTPUT -p tcp --sport 80 -j DROP
iptables -A OUTPUT -p tcp --sport 443 -j DROP
>> 예제 2 - 방화벽에서 SSH 사용 금지
ssh : 22
기본정책 허용 상태
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A OUTPUT -p tcp --sport 22 -j DROP
>> 예제 3 - Office PC -> 방화벽 SSH 연결 허용
INPUT&OUTPUT 체인 설정
기본 정책 차단상태
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 22 -j ACCEPT
>> 예제 4 - DMZ -> Office PC로 SSH 접속 허용
기본정책 차단상태
코드는 맞는데 SSH가 작동하지 않는다면 -> systemctl restart sshd
iptables -A FORWARD -p tcp -i eth1 -o eth2 --dport 22 -j ACCEPT
iptables -A FORWARD -p tcp -i eth2 -o eth1 --sport 22 -j ACCEPT
>> 예제 5 - 방화벽 관리자(특정 IP)에서만 방화벽 SSH 연결 허용
기본정책 차단상태
보안적인 측면에서는 정책 차단의 조건이 더 세부적일수록 높게 평가됨
iptables -A INPUT -i eth1 -s 192.168.100.200 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth1 -d 192.168.100.200 -p tcp --sport 22 -j ACCEPT
>> 예제 6 - 외부 영역이 아닌 내부 네트워크에서 방화벽 SSH 연결 허용
기본정책 차단상태
부정연산자(!) 사용
eth0가 아닌 곳에서 전부 허용
iptables -A INPUT ! -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT ! -o eth0 -p tcp --sport 22 -j ACCEPT
>> 예제 7 - DMZ의 웹서버 접속 허용
기본정책 차단상태
내부 외부에 있는 모든 PC가 접속이 가능케 하되 특정 IP(1.1.1.1)에서의 접속은 차단
iptables -A FORWARD -p tcp --sport 80 -i eth2 ! -d 1.1.1.1 -s 192.168.200.200 -j ACCEPT
iptables -A FORWARD -p tcp --sport 443 -i eth2 ! -d 1.1.1.1 -s 192.168.200.200 -j ACCEPT
iptables -A FORWARD -p tcp --dport 80 -o eth2 ! -s 1.1.1.1 -d 192.168.200.200 -j ACCEPT
iptables -A FORWARD -p tcp --dport 443 -o eth2 ! -s 1.1.1.1 -d 192.168.200.200 -j ACCEPT
>> 예제 8 - 방화벽 관리자만 방화벽 SSH 연결을 허용하고 접속 내역을 기록(LOG)
기본정책 차단상태
LOG 옵션을 통해 로그 기록
iptables -A INPUT -p tcp --dport 22 -i eth1 -s 192.168.100.200 -j LOG
iptables -A INPUT -p tcp --dport 22 -i eth1 -s 192.168.100.200 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -o eth1 -d 192.168.100.200 -j ACCEPT
>> 예제 9 - 방화벽 관리자만 방화벽으로의 SSH 연결을 허용하고 이외 PC 연결은 차단
차단 내역을 로그로 기록하고 log-prefix를 남길 것
log-prefix : TEST LOG
기본정책 차단상태
iptables -A INPUT -p tcp --dport 22 -i eth1 -s 192.168.100.200 -j LOG --log-prefix="TEST LOG"
iptables -A INPUT -p tcp --dport 22 -i eth1 -s 192.168.100.200 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -o eth1 -d 192.168.100.200 -j ACCEPT
>> 예제 10 - 방화벽의 SSH 연결을 허용, 방화벽 관리자는 telnet으로도 방화벽에 접속 허용
다만 telnet 접속 시 로그를 기록
기본정책 차단 상태
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 23 -i eth1 -s 192.168.100.200 -j LOG --log-prefix="[KIT_LOG]"
iptables -A INPUT -p tcp --dport 23 -i eth1 -s 192.168.100.200 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 23 -o eth1 -d 192.168.100.200 -j ACCEPT
>> 예제 11 - 통상적으로 사용되는 상태추적 기본 정책 코드
conntrack : 세션 감시 모듈
iptables -A INPUT -m conntrack --ctstate INVALID -j LOG // 로그남기기
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP //비정상 패킷 차단
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT // 동일, 근접 패킷 허용
iptables -A OUTPUT -m conntrack --ctstate INVALID -j LOG
iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate INVALID -j LOG
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
>> 예제 12 - 상태추적 기본 + 유효하지 않은 패킷 차단과 로그 기록
conntrack : 세션 감시 모듈
기본 정책 차단상태
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
iptables -I INPUT 1 -m conntrack --ctstate INVALID -j LOG --log-prefix="XXXXXXXXXX"
>> 예제 13 - 초당 5개까지 icmp 패킷을 허용 6개 이상의 패킷은 차단
limit을 통해 시간을 통한 제어가 가능
hping을 통해 결괏값 확인
iptables -A ooo -m limit --limit 값(패킷수/시간단위) -j ACCEPT
iptables -A ooo -j DROP
-시간단위 : h,m,s
iptables -A INPUT -p icmp -m limit --limit 5/s -j DROP
iptables -A INPUT -p icmp -j LOG --log-prefix "TOOMANYPACKET"
iptables -A INPUT -p icmp -j DROP
>> 예제 14 - 7777번 서버데몬과 통신 중 메시지 내용에 hacking 내용 차단 후 기록
string을 통해 문자열 제어 가능
기본정책 차단상태
nc로 서버 접속 후 echo로 메세지 전달 시 결괏값 확인 가능
iptables -A ooo -m string --string "문자열" --algo 알고리즘명 -j DROP
iptables -A ooo -m string --hex-string "hex값" --algo 알고리즘명 -j DROP
-알고리즘 : bm, kmp
iptables -A INPUT -p tcp --dport 7777 -m string --string "hacking" --algo bm -j LOG --log-prefix "DROP_STRING"
iptables -A INPUT -p tcp --dport 7777 -m string --string "hacking" --algo bm -j DROP
iptables -A INPUT -p tcp --dport 7777 -j ACCEPT
>> 예제 15 - 내부 네트워크나 방화벽에서 시작된 세션은 상태유지형으로 추적
외부 IP 주소로 포워딩되는 내부 네트워크로부터의 스푸핑 차단
iptables -A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
방화벽 활용을 위한 가상 인프라 구축 Iptables 활용
iptables 드디어 끝났다..!
정말 낡디 낡은 방화벽 하나 인프라로 구축하는데도 수업 때 안 듣고 혼자 하려니
아주 죽을 맛이었는데.. 그래도 뭔가 나름 하나 한 거 같아서 뿌듯하긴 하네
앞으로는 방화벽 만지면서 모의해킹까지 병행해 봐야겠음
'정보보안 > 방화벽' 카테고리의 다른 글
iptables 상태추적(conntrack)과 시간,문자열 제어 (0) | 2023.02.02 |
---|---|
Iptables 로그 prefix 설정법 (0) | 2023.02.01 |
Iptables 로그 옵션 설정과 다양한 예제 (0) | 2023.01.31 |
Iptables 방화벽의 SSH 서비스에 대한 다양한 설정법 (0) | 2023.01.30 |
Iptables 방화벽 SSH 사용 설정 다양한 예시 - 3 (0) | 2023.01.17 |
댓글