본문 바로가기

Programming/Linux

iptables 설정 방법

반응형

리눅스 환경에서 방화벽 설정을 한다는 것은 '어떤 패킷의 출입을 허가/거부 하거나 패킷에 대한 처리를 구체적으로 명시하는 것' 이라고 할 수 있다. 구체적인 패킷 처리는 처리 내용의 집합인 '정책(policy)'의 정의에 따라 결정된다. 

 

RHEL, CentOS, Fedora 등의 다양한 리눅스 배포 버전에서는 Firewalld를 기본(default) 방화벽 툴로 제공한다.

Firewald는 zone-based(동일한 zone에 포함된 인터페이스 사이에서만 통신할 수 있도록 하는 것) 개념을 기반으로 동작하기 때문에 해당 기능을 제공하지 않는 iptables보다 좀 더 세부적인 통신 설정을 할 수 있다. 따라서 개인의 상황에 맞추어 Firewalld 또는 iptables를 사용하면 된다고 한다.

 

iptables 구조

 

iptables  [-t 테이블] [액션] [체인] [매치] [-j 타겟]

 

  • 테이블
    • filter, nat, mangle, raw 테이블이 있다. 기본 설정은 filter 테이블로 지정되어 있다.
    • 각 테이블에 대한 자세한 설명은 링크,링크,링크를 참조하자.
  • 액션 
    • -A: APPEND: 정책 추가
    • -I: INSERT: 정책 삽입
    • -D: DELETE: 정책 삭제
    • -R: REPLACE: 정책 교체
    • -F: FLUSH: 모든 정책 삭제
    • -P: POLICY: 기본 정책을 설정
    • -L: LIST: 정책 나열
  • 체인
    • 종류는 PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING 이 있다.
  • 매치
    • -s: 출발지 매칭. 도메인, IP 주소, 넷마스크 값을 이용하여 표기(––source, ––src)
    • -d: 목적지 매칭. 도메인, IP 주소, 넷마스크 값을 이용하여 표기(––destination, ––dst)
    • -p: 프로토콜과 매칭. TCP, UDP, ICMP 와 같은 이름을 사용하고 대소문자는 구분하지 않음
    • -i: 입력 인터페이스와 매칭(––in-interface)
    • -o: 출력 인터페이스와 매칭(––out-interface)
    • -j: 매치되는 패킷을 어떻게 처리할지 지정 (--jump)
  • 타겟
    • 패킷이 규칙과 일치할 때 취하는 동작을 지정한다.
    • ACCEPT: 패킷을 허용한다.
    • DROP: 패킷을 버린다(패킷이 전송된 적이 없던 것처럼)
    • REJECT: 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다.(icmp-port-unreachable)
    • LOG: 패킷을 syslog에 기록한다.
    • SNAT --to [주소]: 소스 IP를 [변환(NAT)|NAT]한다.
    • DNAT --to [주소]: 목적지 IP를 변환(NAT)한다.
    • RETURN: 호출 체인 내에서 패킷 처리를 계속한다.
  • 기타(mstate)
    • mstate는 패킷 커넥션 상태(state)가 어떤 상태인가에 따라 패킷 필터링을 할 수 있는 옵션이다.
    • '-mstae --state 상태' 형식으로 작성한다.
    • --state NEW: 새로운 커넥션을 생성한 패킷
    • --state ESTABLISHED: 패킷을 주고 받는 통신 주체(예를 들면 서버와 클라이언트)가 연결된 상태
    • --state RELATED: 접속에 연관성을 가지는 패킷(예를 들면 FTP 접속 패킷 또는 ICMP 에러 메시지)
    • --state INVALID: 유효하지 않은 패킷
  • 예시

80 포트 허용

iptables -A INPUT -p tcp --sport 80 -j ACCEPT // 80 포트로 수신되는 패킷 허용
iptables -A INPUT -p tcp --dport 80 -j ACCEPT // 80 포트로 발신되는 패킷 허용

 

443 포트 허용

iptables -A INPUT -p -tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p -tcp --dport 443 -j ACCEPT

 

특정 IP 패킷 빼고 허용

iptables -A INPUT -d ! 192.168.0.88 -j ACCEPT

 

특정 IP 접속 차단

iptables -A INPUT -s 아이피 주소 -j DROP

 

참고

- https://www.linuxadictos.com/en/iptables-table-types.html
- https://blog.naver.com/koromoon/220415972008
- https://itwiki.kr/w/%EB%A6%AC%EB%88%85%EC%8A%A4_iptables
- https://medium.com/skilluped/what-is-iptables-and-how-to-use-it-781818422e52
- https://linux.die.net/man/8/iptables
- https://www.digitalocean.com/community/tutorials/a-deep-dive-into-iptables-and-netfilter-architecture
- https://linuxstory1.tistory.com/entry/iptables-%EA%B8%B0%EB%B3%B8-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%B0%8F-%EC%98%B5%EC%85%98-%EB%AA%85%EB%A0%B9%EC%96%B4
- https://www.baeldung.com/linux/new-established-related

 

반응형