본문 바로가기
모의해킹 침해대응 과정/Liunx 관리

리눅스 방화벽(Firewalld) / day 15

by 알거음슴 2021. 4. 16.

firewalld

시스템에 들어오는 모든 packets의 source address를 확인하고, 지정된 규칙(zone)을 적용하여 관리한다.

이때 총 3가지 과정을 거쳐서 진행을 하게 되는데 source address -> interface -> default zone 순서로 일치여부를 확인한다.

 default zone은 별도의 영역이 아닌 기존 영역을 가리킨다. firewalld는 처음에는 public zone을 기본으로 지정하고 lo 루프백 인터페이스를 trusted zone에 매핑한다.

 [참고] zone

방화벽 모든 규칙의 집합. 이하 zone 의 종류들이 있다.

zone name Description
trusted 들어오는 모든 트래픽을 허용한다.(ex: lo)
home 나가는 트래픽과 관련이 없거나 ssh, mdns, ipp-client, samba-client, dhcpv6-client 사전 정의된 서비스와 일치하지 않을 경우 들어오는 트래픽을 거부한다.
internal 나가는 트랙픽과 관련이 없거나 ssh, mdns, ipp-client, samba-client, dhcpv6-client 사전 정의 서비스(시작하는 home 영역과 동일)와 일치하지 않을 경우 들어오는 트래픽을 거부한다.
work 나가는 트래픽과 관련이 없거나 ssh, ipp-client, dhcpv6-client 사전 전의 서비스와 일치하지 않을 경우 들어오는 트래픽을 거부한다.
public 나가는 트래픽과 관련이 없거나 ssh, dhcpv6-client 사전 정의 서비스와 일치하지 않을 경우 들어오는 트래픽을 거부한다. 새로 추가된 네트워크 인터페이스의 기본 영역이다.
external 나가는 트래픽과 일치하지 않거나 ssh 사전 정의 서비스와 일치하지 않을 경우 들오오는 트래픽을 거부한다. 이 영역을 통해 전달되어 나가는 IPv4 트래픽을 나가는 네트워크 인터페이스의 IPv4 주소에서 시작된 것처럼 마스커레이드 된다.
dmz 나가는 트래픽과 일치하지 않거나 ssh 사전 정의 서비스와 일치하지 않을 경우 들어오는 트래픽을 거부한다.
block 나가는 트래픽과 관련되지 않을 경우 들어오는 모든 트래픽을 거부한다.
drop 나가는 트래픽과 관련되지 않은 경우(ICMP 오류에도 대응하지 않음) 들어오는 모든 트래픽을 drop 한다.

 [참고] 서비스의 종류.

zone 내의 규칙을 지정할때 허가할 서비스와 허가하지 않을 서비스를 정한다. 프로토콜과 포트번호로 확인한다.

Service Name

Description

ssh

(22/tcp) 로컬 SSH 서버에 대한 22/tcp 트래픽

dhcpv6-client

(546/udp) 로컬 DHCPv6 클라이언트 fe80::/64, IPv6 네트워크의 546/udp에 대한 트래픽

ipp-client

(641/udp) 로컬 IPP 인쇄, 641/udp에 대한 트래픽

samba-client

(137/udp, 138/udp) 로컬 Windows 파일 및 인쇄 공유 클라이언트, 137/udp 138/udp에 대한 트래픽

mdns

(5353/udp) mDNS(Multi-cast DNS) 로컬 링크 이름 확인, 224.0.0.251(IPv4) or ff02::fb(IPv6) 멀티캐스트 주소로 보내는 5353/udp에 대한 트래픽

 

 방화벽 구성

 

 /etc/firealld/ 내 구성파일을 직접 편집하는경우

웹 콘솔 그래픽 인터페이스를 사용하는 경우 ( systemctl enable --now cockpit.socket)

firewall-cmd 명령을 사용하는경우

firewall-config 툴을 이용하는 경우

 

runtime 과 permanent

 

firewall-cmd : 방화벽을 설정 및 관리하는 CMD

--list-all : 방화벽의 zone의 상태를 확인한다.

--set-default-zone=[ZONE] : 기본 존을 설정하는 CMD

--permanent --zone=[ZONE] --add-source=[IP] : 허가할 IP 소스를 추가한다. (zone 은 지정안하면 디폴트)

--permanent --zone=[ZONE] --remove-source=[IP] : 삭제할 IP 소스를 제거한다. (zone 은 지정안하면 디폴트)

 

--permanent --zone=[ZONE] --add-interface[NIC] : 허가할 NIC를 추가한다. (zone 은 지정안하면 디폴트)

--permanent --zone=[ZONE] --remove-interface=[NIC] : 삭제할 NIC를 제거한다. (zone 은 지정안하면 디폴트)

 

--permanent --zone=[ZONE] --add-port=[포트번호/프로토콜] : 허가할 포트를 지정 (zone 은 지정안하면 디폴트)

--permanent --zone=[ZONE] --remove-port=[포트번호/프로토콜] : 삭제할 포트를 제거한다. (zone 은 지정안하면 디폴트)

--reload : 설정을 지정하고 영구적으로 적용할 수 있도록 다시 로드하는것.

 

 

 

 리치규칙

firewalld 구문으로 나타낼 수 없는 사용자 지정 방화벽 규칙.

(1) 규칙 순서 지정

영역 내에서 규칙의 기본 순서는 모든 영역에서 동일한다.

() 해당 영역에 대해 설정된 모든 포트 전달(port forwarding) 마스커레이딩(masquerading) 규칙

() 해당 영역에 대해 설정된 모든 로깅(log,audt) 규칙 ( 로그를 쌓겠다 )

() 해당 영역에 설정된 모든 거부(reject/drop) 규칙

() 해당 영역에 설정된 모든 허용(accept) 규칙

 

* reject : 클라이언트한테 거부 메시지 보냄

* drop : 클라이언트한테 거부 매시지 안보냄

 

[참고] 포트 전달(port forwarding) 마스커레이딩(masquerading)

마스커레이딩 : s-nat 의 대표예제 출발 주소를 변환함 소스의 주소를 변환 할때 라우터의 바깥쪽 인터페이스의 주소로 변환 

포트 전달 : d-nat의 대표예제 목적지 주소를 변환함 외부에서 내부 서버 진입 시 공인 ip와포트를 내부 ip와 포트로 변환

 

 

(2) 리치 규칙 사용

firewall-cmd 로 지정할 수 있음.

--add-rich-rule='<RULE>' : 지정된 영역 또는 지정하지 않은 경우 기본 영역에 <RULE>를 추가한다.

--remove-rish-rule='<RULE>' : 지정된 영역 또는 영역을 지정하지 않는 경우 기본 영역에서 <RULE>를 제거한다.

--query-rich-rule='<RULE>' : 지정된 영역 또는 영역을 지정하지 않는 경우 기본 영역에 <RULE>이 추가되었는지 쿼리한다. 규칙이 있으면 0을 반환하고, 그렇지 않으면 1을 반환한다.

--list-rich-rules : 지정된 영역 또는 영역을 지정하지 않을 경우 기본 영역에 대한 모든 리치 규칙을 출력한다.

 ex)

# firewall-cmd --permanent --zone=classroom --add-rich-rule='rule family=ipv4 source address=192.168.10.10/32 reject'

# fireall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.10.0/24 port port=7900-7905 protocol=tcp accept'