방화벽

yoni·2023년 4월 18일

Linux

목록 보기
14/16

Firewall

  • Kernel은 Module 구조로 되어있음 (떼었다가 붙였다가 가능)
    - H/W driver
    • file system
    • Security -> firewall, SELinux, PAM
    • Network
  • Netfilter : 커널 안에 내장되어 있음
  • FirewallD 서비스
    • FirewallD를 정지시키고 Netfilter를 활성화
    • iptables를 활성화 시키려면 mask를 사용해야 함.
@@@ Virtual Machine
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld 
systemctl start firewalld

yum search iptables
yum -y install iptables-services

systemctl enable iptables
systemctl start iptables
systemctl status iptables

Netfilter

방화벽 : 외부의 불법적 접근을 차단하기 위함

  • 구성 Table (3개로 구성)

    • filter table (기본 table)

      • 필터링을 짓는 서비스
    • nat table

      • 사설 <-> 공인 ip 변환
    • mangle table

      • 패킷의 속성에 변화를 주겠다.
  • Chain (각 table 안에는 chain이 존재)

    • chain 안에 rule 들이 들어가있음.
    • chian 의 목적 : rule들을 묶어주기 위한 구조(메커니즘)
    • chain 종류
      • input : 외부에서 내부 시스템으로 들어오는 데이터를 허용할 것인가, 차단할 것인가
      • forward
      • output : 시스템에서 외부로 나가는 데이터를 허용할 것인가, 차단할 것인가

정책(policy)

  • 정책을 무엇으로 갖고갈 것이냐에 따라 rule 설정이 달라진다.
  • close 정책 : 일반적으로 기본 정책으로 채택
    • 일반적으로 다 닫고, 허용할 것만 열어둔다.
  • open 정책
    • 기본적으로 다 열어두고, 차단을 지정함.
    • 까먹고 차단해야할 것을 차단하지 못한다면 큰 문제 발생

기본정책 (-j)

  • DROP : 패킷 차단 후 아무런 응답을 보내지 않음.
  • REJECT : 패킷 차단 후 차단했다는 응답을 보냄. (DROP이 더 좋음)
  • ACCEPT
  • LOG: 패킷이 들어오는 순간 로그로 남기겠다.

Using the iptables Command


> input chain에 있는 rule을 지우겠다.
iptable -D INPUT 4 (필터테이블이 기본이므로 -t옵션 안적어도됨.)

> Listing rules 
iptables -nL ==line-numbers
iptables -L -t nat 
iptables -L -t managle (-t 테이블이름) -- 테이블 지정안하면 필터테이블(기본테이블)
iptables- nL (숫자로 나옴, n옵션없으면 이름으로만 나옴)


> rule 추가 명령어
> 특정 위치에 rule 꼽아 넣기
iptables -I INPUT 42

> 맨 끝에 rule append
iptables -A INPUT

> drop 정책으로 갖고 가겠다.
iptables -P INPUT DROP

> policy DROP 으로 변경됨
iptables -nL ==line-numbers

MATCH SPECS

  • IP 주소 (-s: source, -d:dest)
    • -s 생략시, 모든 컴퓨터의 모든 네트워크
    • 본인 컴퓨터가 네트워크 방화벽일 때 d 써줌
  • Interface (-i,-o)
    • -i : 특정 LAN 카드로 들어오는거 차단 여부
    • -o : 특정 LAN 카드로 나가는거 차단여부
    • 일반적인 host 방화벽에서는 해당 옵션 잘 안씀
  • protocol
    • 목적지 dport가 중요
    • 특정 port로 들어오는 것만 허용하겠다.
  • Port Type : TCP UDP ICMP (-p)
    • ping : ICMP 프로토콜 사용
      • ping B : A => icmp_echo_request (output chain을 통해 나감)
      • B => icmp_echo_reply (input chain)
      • output chain은 잘 동작하나, input chain은 동작 안함. 따라서 rule 설정해보자

> 예시
해당 컴퓨터에 DNS서버가 있다면, DNS 서버에 들어오도록 허용 (DNS 는 udp, 목적지 port :53)
iptables -A INPUT -p udp --dport 53 -j ACCEPT

Connection Tracking (상태 추적기)

  • output chain을 통해 잘 나가는데, input chain을 통해 들어오는 것이 룰 차단 되어있어서 그럼

    • ssh, yum 등,, 응답이 안들어옴
  • 따라서 , 해당 기능을 사용하여 나갔다가 들어오는 것을 상태를 보고 판단하고자 한다.

  • 종류

    • NEW
    • ESTABLISHED -> 허용하겠다. (밖으로 나갔다가 들어오는)
    • RELATED -> 허용하겠다. (FTP 서버의 경우, 인증과 실제 데이터에 대한 포트를 2개 사용함)
    • INVALID
  • 즉, 데이터가 나갔다가 들어오는 것들에 대해서는 허용하겠다.
    -> 맨 윗줄에 기입하여 허용 여부 판단 (=> input chain에 -I옵션을 통해 1번 줄에 룰 설정)
    - iptables -I INPUT 1 -m state --state ESTABLISHED,RELATED
    - 그후, yum -y install httpd 실행 시 잘 동작함.
    - 나갔다가 들어오는 상태 (ESTABLISHED, RELATED)에 대해 모두 허용하는 rule 설정을 했기 때문에

Permission

  • Permission 3가지 : 1)소유자 2)그룹 3)나머지 시스템상 유저
    But, 특정한 Permission을 따로 설정해서 부여하고 싶다. (특정한 그룹을 선택해서 Permission을 따로 주고 싶다.)
    -> 즉 Permission의 확장판 같은 느낌 : ACL
profile
study log

0개의 댓글