[Linux] firewalld

728x90

리눅스 방화벽

  • 외부에서 시스템으로 접근하는 패킷을 차단하는 서비스
  • 규칙을 이용해 접근을 허용하거나 차단할수 있다.
  • zone
    • 서비스
    • 포트
    • IP
    • interface

Netfilter(Kernel) <- iptables(명령) <- iptables(service) <- firewall(service) <- firewall-cmd <- firewall-config

firewall

iptables의 단점을 보완. 동적으로 방화벽 설정 변경 가능

  • Runtime : 시스템 운영중인 상태일때 반영.
  • Permanent : 서비스가 재시작 되었을때도 반영(영구 설정). XML파일
  • iptables : Netfilter 제어하는 도구를 사용 (Centos 7이전)

pre-defined Zone

block : 모든 패킷 거부

dmz : 내부로 들어오는 패킷 거부

drop : 내부로 들어오는 모든 패킷 DROP 폐기, ICMP 에러도 폐기

  • 폐기(drop) : 패킷을 받으면 응답 없이 버린다.
  • 거절(reject) : 패킷을 받으면 거부한다라는 ICMP 패킷을 보내준다.

external : 내부로 들어오는 패킷 거부 (SSH 허용), 외부로 나가는 모든 패킷 허용

home : 내부로 들어오는 패킷 거부(SSH, DHCP Client, samba, ... 허용) 외부로 나가는 모든 패킷 허용

internal : 내부로 들어오는 패킷 거부(SSH, DHCP Client, samba, ... 허용) 외부로 나가는 모든 패킷 허용

public : 내부로 들어오는 모든 패킷 거부(SSH, DHCPv6-... 허용), 외부로 나가는 모든 패킷 허용

trusted : 내부로 들어오는 모든 패킷 허용 외부로 나가는 모든 패킷 허용

work : 내부로 들어오는 모든 패킷 거부(SSH,DHCPv4, IPP 허용), 외부로 나가는 모든 패킷 허용

firewall-cmd [sub-command]

--state : firewalld 실행 상태 확인

--get-default-zone : 현재 기본 영역 표시

--set-default-zone=[zone] : 기본 영역 설정

--get-zones : 사용가능한 모든 영역 나열

--get-services : 사용가능한 모든 서비스 나열

--get-active-zones : 현재 사용중인 모든 영역과 인터페이스 및 소스정보 나열

--add-source=[ip주소] --zone=[zone] : 출발지 주소 규칙 추가 => '--zone' 옵션을 통해 zone 지정해주지 않으면 자동으로 기본영역에 추가

--remove-source=[ip주소] : IP 주소를 지정된 영역에서 제거

--add-interface=[ifname] --zone=[zone] : 특정 영역에 interface 연결 추가

--change-interface=[ifname] --zone=[zone] : 영역에 연결된 interface 변경

--list-all --zone=[zone] : 영역(zone)에 구성된 모든 인터페이스, 소스, 서비스, 포트 나열

--add-protocol=[프로토콜 명] : 해당 프로토콜 연결

--add-service=[service] --zone=[zone] : 해당 서비스에 트래픽 허용

  • firewall-cmd -- add-service=http --permanent

--add-port=[port/protocol] --zone=[zone] : 해당 포트나 프로토콜 트래픽 허용

  • firewall-cmd --add-port=23/tcp --permanent

--permanent : 해당 옵션을 사용하지 않으면 현재 설정이 변경되며 영구설정은 지정이 안됨.

--reload : 런타임 구성 삭제, 영구 구성 적용

  • firewall -cmd --reload

--runtime-to-permanent : 실행중 설정을 영구 설정으로 변경

firewall 실습

# centos, server 초기화
# server에서 작업
# nfs-utils, nfs-utils-lib 패키지 설치

$ yum install -y nfs-utils nfs-utils-lib

# nfs 서비스를 시작,활성화 후에 상태 확인

$ systemctl start nfs
$ systemctl enable nfs

# home zone에 다음 사항 추가 영구설정
# 포트 번호
# 80/tcp, 111/tcp, 2049/udp, 20048/tcp

$ firewall-cmd --add-port=80/tcp --add-port=2049/udp --add-port=20048/tcp --permanent

# 프로토콜
# ICMP

$ firewall-cmd --add-protocol=ICMP --permanent --zone=home

# 서비스
# nfs

$ firewall-cmd --add-service=nfs --permanent --zone=home

# home zone 상태 확인

$ firewall-cmd --list-all --zone=home
$ firewall-cmd --list-all --permanent --zone=home

$ firewall-cmd --reload
$ firewall-cmd --list-all --zone=home

# home zone 을 default-zone 으로 설정

$ firewall-cmd --set-default-zone=home

# centos 컴퓨터에서 http://192.168.56.100/index.html 을 했을 경우 
# this is centos 라고 출력 되도록 하시오.
# httpd 서비스가 켜져 있어야 한다!!!

$ systemctl start httpd
$ systemctl enable httpd
$ firewall-cmd --add-serivce=http
$ echo "Hello" > /var/www/html/index.html
728x90