기록공간

[리눅스 마스터 1급] 2차 실기 정리 - iptables(방화벽 설정) 본문

자격증공부/리눅스마스터

[리눅스 마스터 1급] 2차 실기 정리 - iptables(방화벽 설정)

입코딩 2021. 11. 11. 21:17
반응형

테이블(tables)

우선 iptables에는 테이블이라는 광범위한 범주가 있는데, 이 테이블은 filter, nat, mangle, raw 같은 4개의 테이블로 구성되며, 이중에서 중요한 것은 filter 테이블이다.

 

체인(chain)

iptables에는 filter 테이블이 미리 정의된 세가지의 체인이 존재하는데 이는 INPUT, OUTPUT, FORWARD이다. 이 체인들은 어떤 네트워크 트래픽(IP 패킷)에 대하여 정해진 규칙들을 수행한다. 

 

  • INPUT : 호스트 컴퓨터를 향한 모든 패킷 (to server)
  • OUTPUT : 호스트 컴퓨터에서 발생하는 모든 패킷 (to client) 
  • FORWARD : 호스트 컴퓨터가 목적지가 아닌 모든 패킷 (즉 라우터로 사용되는 호스트 컴퓨터를 통과하는 패킷)

 

매치(match)

iptables에서 패킷을 처리할 때 만족해야 하는 조건을 가리킨다. 즉, 이 조건을 만족시키는 패킷들만 규칙을 적용한다.

 

  • -s (--source) : 출발지 ip주소나 네트워크와의 매칭
  • -d (--destination) : 목적지 ip주소나 네트워크와의 매칭
  • -p (--protocol) : 특정 프로토콜과의 매칭
  • -i (--in-interface) : 입력 인터페이스
  • -o (--out-interface) : 출력 인터페이스
  • --state : 연결 상태와의 매칭
  • --string : 애플리케이션 계층 데이터 바이트 순서와의 매칭
  • --comment : 커널 메모리 내의 규칙과 연계되는 최대 256바이트 주석
  • -y (--syn) : SYN 패킷을 허용하지 않는다.
  • -f (--fragment) : 두 번째 이후의 조각에 대해서 규칙을 명시
  • -t (--table) : 처리될 테이블
  • -j (--jump) : 규칙에 맞는 패킷을 어떻게 처리할 것인지 명시
  • -m (--match) : 특정 모듈과의 매치, 좀 더 세밀하게 제어할 때 사용하는 옵션
  • ! : 아닌(NOT)의 의미로 사용, 특정 매칭을 제외할 때 사용

 

타겟(target)

iptables는 패킷이 규칙과 일치할 때 동작을 취하는 타겟을 지원한다.

 

  • ACCEPT : 패킷을 받아들인다.
  • DROP : 패킷을 버린다. (패킷 전송된 적이 없는 것 처럼)
  • REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다.
  • LOG : 패킷을 syslog에 기록한다. 일반적으로 /var/log/message에 저장된다.
  • RETURN : 호출 체인 내에서 패킷 처리를 계속한다. 

 

연결 추적(Connection Tracking)

iptables는 연결 추적(Connection tracking)이라는 방법을 사용하여 내부 네트워크 상 서비스 연결 상태에 따라서 그 연결을 감시하고 제한할 수 있게 해준다.

 

  • NEW : 새로운 연결을 요청하는 패킷, HTTP 요청
  • ESTABLISHED : 기존 연결의 일부인 패킷
  • RELATED : 기존 연결에 속하지만 새로운 연결을 요청하는 패킷
  • INVALID : 연결 추척표에서 어디 연결에도 속하지 않은 패킷

 

사슬 주요 액션(Action)

 

  • -A (--append) : 사슬에 새로운 규칙을 추가
  • -D (--delete) : 사슬의 규칙을 제거
  • -C (--check) : 패킷을 테스트
  • -R (--replace) : 사슬의 규칙을 교환
  • -I (--insert) : 사슬의 규칙을 맨 첫 부분에 삽입
  • -L (--list) : 사슬의 기본 정책을 나열
  • -F (--flush) : 사슬로부터 규칙을 모두 삭제
  • -Z (--zero) : 모든 사슬의 패킷과 바이트 카운터 값을 0으로 만듬
  • -N (--new) : 새로운 사슬을 만듬
  • -X (--delete-chain) : 비어있는 사슬을 삭제
  • -P (--policy) : 사슬의 기본정책을 변경

 

TCP의 확장

먼저 -p tcp로 프로토콜을 지정하고 추가로 지정할 옵션을 사용한다.

  • --sport : 발신지에서의 하나의 포트 또는 포트범위를 지정. /etc/services에 기록된 포트 이름을 지정하거나 포트 번호로 지정할 수 있고, 범위는 :(콜론)을 사용해서 표기 (--source-port)
  • --dport : 도착지의 포트를 지정하는 것으로 설정 방법는 --sport 옵션과 동일 (--destination-port)
  • --tcp-flags : TCP flag를 지정하는 옵션 SYN, ACK, FIN, RST, URG, PSH, ALL, NONE을 지정할 수 있음
  • --syn : --tcp-flags SYN, RST, ACK, FIN과 같음

 

UDP의 확장

먼저 -p udp로 프로토콜을 지정하고 추가로 지정할 옵션을 사용. --sport와 --dport를 지원한다.

 

ICMP의 확장

먼저 -p icmp로 프로토콜을 지정하고 --icmp-type 추가 옵션을 지정한다. 많이 사용하는 ICMP 타입값에는 echo-request, echo-reply, destination-unreachable 등이 있고, 관련 정보는 'iptables -p icmp -h'를 입력하면 확인할 수 있다.

  • --icmp-type : 숫자값 형태의 ICMP 타입값 또는 코드로 지정

 

* 들어오는 모든 패킷을 거부하고 192.168.12.22로부터 들어오는 패킷에 대해서만 허가

iptables -P INPUT DROP
iptables -A INPUT -s 192.168.12.22 -j ACCEPT

=> -P 옵션을 사용해서 INPUT 사슬에 DROP으로 지정하면 기본 접근 정책이 거부로 변경된다. 그 후 허가하려는 호스트를 지정하면 된다.

 

* 들어오는 모든 패킷을 허가하고 192.168.1.18로부터 들어오는 모든 패킷에 대해 거부하기

iptables -P INPUT ACCEPT
iptables -A INPUT -s 192.168.12.22 -j DROP

 

* 192.168.4.40으로부터 들어오는 패킷 중에서 tcp 프로토콜 관련 패킷만 거부하기

iptables -A INPUT -s 192.168.4.40 -p tcp -j DROP

 

* 포트 번호 20번부터 30번까지 목적지로 들어오는 패킷들은 거부하고, ssh 포트인 22번 포트만 허용하기

iptables -A INPUT -p tcp --dport 20:30 -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

 

NAT 분류 및 설정

iptables에서 NA는 SNAT(Source NAT)와 DNAT(Destination NAT)로 구분한다.

SNAT는 공인 IP 주소 하나로 다수의 컴퓨터가 인터넷 접속이 가능하게 하는 경우

DNAT는 하나의 공인 IP 주소로 다수의 서버를 운영하는 경우

 

1. SNAT는 패킷의 소스 주소인 발신지를 변경한다는 의미이다. SNAT는 라우팅 경로가 결정된 이후에 설정된다고 하여 NAT 테이블의 POSTROUTING 사슬 정책 설정을 한다.

 

* eth0 장치를 통해 나가는 패킷에 203.247.50.3 주소를 부여한다.

iptables -t nat -A POSTROUTING -o etho0 -j SNAT --to 203.247.50.3

 

* eth0 장치를 통해 나가는 패킷에 할당된 공인 IP 주소를 부여한다. MASQUERADE는 유동 IP 주로를 사용하는 경우 설정한다.

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

 

2. DNAT는 패킷의 도착지 주소를 변경한다는 의미이다. 패킷의 목적지 주소가 먼저 변경되고 그 변경된 주소로 새로운 라우팅 경로를 찾는다. DNAT는 라우팅 이전 단계에서 적용된다고 하여 PREROUTING 사슬에 정책을 설정한다.

 

* 목적지 주소 203.247.50.3의 80번 포트인 경우 192.168.1.11의 80번 포트로 연결한다.

iptables -t nat -A PREROUTING -p tcp -d 203.247.50.3 --dport 80 -j DNAT --to 192.168.1.11:80

 


출처: https://webdir.tistory.com/170

https://las311.tistory.com/category/IT%20%EA%B4%80%EB%A0%A8%EC%A0%95%EB%B3%B4/%EB%A6%AC%EB%88%85%EC%8A%A4

반응형
Comments