728x90
iptables란?
- 리눅스상에서 방화벽을 설정하는 도구
- netfilter 패킷필터링 기능을 산용자 공간에서 제어하는 수준으로 사용할 수 있다.
패킷필터링이란?
- 지나가는 패킷의 헤더를 보고 그 전체 패킷의 운명을 결정하는 것을 말한다. 일반적으로 패킷은 헤더와 데이터를 가진다.
- 헤더에 필터링할 정보인 출발지 IP:PORT, 도착지 IP:PORT, ckecksum, 프로토콜 옵션등을 가지며 데이터는 각각의 전송데이터가 들어간다.
- 특정 조건을 가지고 있는 패킷에 대해 허용과 차단등을 지정할 수 있으며, 특정 조건등을 통해 당양한 방식의 패킷 필터링과 처리 방식을 지원한다.
iptables 정책은 여러 구분으로 나눠지며 중요한 부분은 Chain이다.
- Chain INPUT : 서버로 들어오는 기본 정책
- Chain FORWARD : 서버에서 forwarding 기본 정책
- Chain OUTPUT : 서버에서 나가는 기본 정책
-
- Linux Server를 목적지로 삼는 모든 패킷은 INPUT Chain을 통과하고
- Linux Server에서 생성되 외부로 보내지는 모든 패킷은 OUTPUT Chain을 통과하게 된다.
- FORWARD Chain의 경우 현재의 Linux Server가 목적지가 아닌 패킷이 통과하는 Chain이다.
- FORWARD Chain은 NAT(네트워크 공유)기능 사용을 위해 사용된다.
마스커 레이드
- 내부 사설 IP의 PC들이 외부 인터넷이 연결 가능하도록 해주는 기능
NAT(Network Address Translation)
- SNAT(Source NAT) : 내부 사설 IP에서 외부로 나갈 때 공인 IP로 변환 → 마스커레이드와 비슷
- DNAT(Destination NAT) : 외부에서 방화벽(외부 IP)으로 요청되는 주소로 내부사설 IP로 변환
iptables 의 구조
iptables -옵션(A, D, C) 체인명 -p 프로토콜 -s 발신지 --sport 발신지포트 -d 목적지 --dport 목적지포트 -j 정책
- 기본 정책을 ACCEPT로 설정하는 법
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
- 현재 자신의 방화벽 규칙을 볼 수 있는 명령
iptables -L
- 규칙 초기화
iptables -F
- 규칙 추가 후에 저장
service iptables save
→ /etc/sysconfig/iptables에 저장됨
iptables 정책
- 규칙 추가
- 로컬(127.0.0.1)에서 요청하는 모든 ICMP 패킷에 대해 무시할때
- ping요청에 사용되는 프로토콜은 ICMP, 발신 주소 127.0.0.1, 목표는 DROP이다.
- iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
- 규칙 제거
- 여러가지 방법으로 가능
iptables -D INPUT -s [발신지] --sport [발신지 포트] -d [목적지] --dport [목적지 포트] -j [정책]` iptables -D INPUT [필터링 번호] # 필터링 번호는 service iptables stat을 통해 확인할 수 있다. iptables -F INPUT # 입력할 경우 모든 체인이 삭제된다.
- 위에 입력했던 체인을 삭제하는 방법
# 방법 1 - 첫번째 필터였을때 iptables -D INPUT 1 # 방법 2 iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
- DROP, REJECT 차이
- DROP
- 패킷을 완전히 무시하고 폐기
- 송신자는 패킷이 도달하지 않았음을 알 수 없다.
- 네트워크 상에서 패킷이 소멸된 것으로 간주된다.
- 공격자가 특정 포트로 접근을 시도하더라도 시스템은 해당 포트가 닫혀있는 것처럼 행동한다.
- REJECT
- 패킷을 폐기하면서 동시에 송신자에게 여러 메시지를 전송
- 송신자를 패킷이 차단되었음을 알 수 있다.
- 이는 송신자에게 통신이 차단되었음을 알려주는데, 서비스를 사용할 수 없다는 에러 메시지를 반환한다
- 공격자에 대한 특별한 정보를 노출할 우려가 있으므로 주의해야 한다.
- DROP
- 정책 순서
- 모든 방화벽은 순차적 실행이다.
- 등록 순서가 먼저인 부분에 대해 효력이 발생하기 때문에 등록시에는 순서가 매우 중요
- 입출력 패킷에 대해 거부하는 설정이 먼저 등록되면 그 이후에 포트를 열어주는 설정을 하여도 효과가 없다.
- 허용하는 정책 설정후 거부 하는 정책 설정하기
- 다음과 같이 설정하면 우선적으로 22번 포트가 열린 후, 낮우에 22~30번 포트가 막히기 때문에 SSH 접속 가능
# 22번 포트 열기 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 22 ~ 30 포트 닫기 iptables -A INPUT -p tcp --dport 22:30 -j DROP
- iptables 로 입력할 경우 바로 적용이 되기 때문에 원경에서 작업할 경우엔 주의해야 한다.
- 모든 방화벽은 순차적 실행이다.
iptables 의 활용
1초 동안 80포트에 똑같은 IP가 10번 이상의 SYN 가 오면 드랍 시킨다.
- 즉, 정상적인 요청이 아닌 웹서비스 공격으로 간주하여 요청 패킷을 폐기시켜 응답하지 않도록 한다.
iptables -A INPUT -p tcp --dport 80 -m recent --update --second 1 --hitcount 10 --name HTTP -j DROP
비슷한 예시들
- 소스 ip가 192.168.0.111 인 모든 접속 포트를 막아라
iptables -A INPUT -s 192.168.0.111 -j DROP iptables -D INPUT -s 192.168.0.111 -j DROP
- INPUT 사슬에 출발지 주소가 127.0.0.1(-s 127.0.0.1) 인 icmp 프로토콜(-p icmp) 패킷을 거부(-j DROP)하는 정책을 추가(-A)하라
iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
- INPUT 사슬에 목적지 포트가 23번(--dport 23)인 tcp 프로토콜(-p tcp) 패킷을 거부하는(-j DROP)규칙을 추가(-A) 하라
iptables -A INPUT -p tcp -dport 23 -j DROP
- INPUT 사슬에 목적지 포트 번호가 80번(--dport 80)인 tcp 프로토콜(-p tcp)패킷을 받아들이는(-j ACCEPT) 규칙을 추가(-A) 하라
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- INPUT 사슬에 목적지 포트번호가 1023번 보다 작은 모든 포트(--dport :1023)인 tcp프로토콜(-p tcp)패킷을 거부하는(-j DROP)규칙을 추가(-A)하라
iptables -A INPUT -p tcp --dport :1023 -j DROP
- ftp포트를 열어라
# -I 옵션 사용시 맨앞으로 삽입 iptables -I INPUT -p tcp --dport 21 -j ACCEPT
- imap 서비스를 방화벽에서 열어라
iptables -I INPUT -s 192.168.0.0/255.255.255.0 -p udp --dport 143 -j ACCEPT
- 웹서버 방화벽 열어라
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
- 웹서버 포트 80 -> 8880으로 교체하라( 웹서비스 포트 변경시 /etc/services 에서도 변경 해줘야 함)
iptables -R INPUT 2 -p tcp --dport 8880 -j ACCEPT
- domain-access_log 파일에 있는 모든 ip의 모든 접속 포트를 막아라(DOS공격 방어시 사용)
cat domail-access_log | awk '{print $1}' | sort | uniq |awk '{print "iptables -A INPUT -s "$1" -j DROP "}' | /bin/bash
728x90
'Programming > Linux' 카테고리의 다른 글
[리눅스] tr 명령 (1) | 2024.01.24 |
---|---|
[리눅스] top 명령 (0) | 2024.01.23 |
[리눅스] 파일 복사 및 이동 (0) | 2024.01.23 |
[리눅스] 파일 읽기 (2) | 2024.01.23 |
[리눅스] 파이프 및 리디렉션 (0) | 2024.01.23 |