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'
'모의해킹 침해대응 과정 > Liunx 관리' 카테고리의 다른 글
Apache web server / day 17 (0) | 2021.04.20 |
---|---|
리눅스 DNS(domain name system) /day 16 (0) | 2021.04.16 |
리눅스 SELinux /day 15 (0) | 2021.04.15 |
리눅스 네트워크 인터페이스 관리 / day 14 (0) | 2021.04.15 |
리눅스 백업&복구 / day 12, 13 (0) | 2021.04.14 |