8.7. 예제: nftables 스크립트를 사용하여 LAN 및 DMZ 보호
RHEL 라우터의 nftables
프레임워크를 사용하여 내부 LAN의 네트워크 클라이언트와 DMZ의 웹 서버를 인터넷 및 기타 네트워크에서 무단 액세스로부터 보호하는 방화벽 스크립트를 작성하고 설치합니다.
이 예제는 설명 목적으로만 사용되며 특정 요구 사항이 있는 시나리오를 설명합니다.
방화벽 스크립트는 네트워크 인프라 및 보안 요구 사항에 따라 크게 달라집니다. 이 예제를 사용하여 자체 환경에 대한 스크립트를 작성할 때 nftables
방화벽의 개념을 알아봅니다.
8.7.1. 네트워크 조건 링크 복사링크가 클립보드에 복사되었습니다!
이 예제의 네트워크에는 다음과 같은 조건이 있습니다.
라우터는 다음 네트워크에 연결되어 있습니다.
-
인터페이스
enp1s0
을 통한 인터넷 -
인터페이스
enp7s0
을 통한 내부 LAN -
enp8s0
까지 DMZ
-
인터페이스
-
라우터의 인터넷 인터페이스에는 정적 IPv4 주소(
203.0.113.1
)와 IPv6 주소(2001:db8:a::1
)가 할당되어 있습니다. -
내부 LAN의 클라이언트는
10.0.0.0/24
범위의 개인 IPv4 주소만 사용합니다. 결과적으로 LAN에서 인터넷으로 전송되는 경우 소스 네트워크 주소 변환(SNAT)이 필요합니다. -
내부 LAN의 관리자 PC는 IP 주소
10.0.0.100
및10.0.0.200
을 사용합니다. -
DMZ는
198.51.100.0/24
및2001:db8:b::/56
범위의 공용 IP 주소를 사용합니다. -
DMZ의 웹 서버는 IP 주소
198.51.100.5
및2001:db8:b::5
를 사용합니다. - 라우터는 LAN 및 DMZ의 호스트에 대한 캐싱 DNS 서버 역할을 합니다.
8.7.2. 방화벽 스크립트에 대한 보안 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
다음은 example 네트워크의 nftables
방화벽에 대한 요구 사항입니다.
라우터는 다음을 수행할 수 있어야 합니다.
- DNS 쿼리를 반복적으로 확인합니다.
- 루프백 인터페이스에서 모든 연결을 수행합니다.
내부 LAN의 클라이언트는 다음을 수행할 수 있어야 합니다.
- 라우터에서 실행 중인 캐싱 DNS 서버를 쿼리합니다.
- DMZ의 HTTPS 서버에 액세스합니다.
- 인터넷의 모든 HTTPS 서버에 액세스합니다.
- 관리자 PC는 SSH를 사용하여 DMZ의 라우터 및 모든 서버에 액세스할 수 있어야 합니다.
DMZ의 웹 서버는 다음을 수행할 수 있어야 합니다.
- 라우터에서 실행 중인 캐싱 DNS 서버를 쿼리합니다.
- 인터넷의 HTTPS 서버에 액세스하여 업데이트를 다운로드합니다.
인터넷의 호스트는 다음을 수행할 수 있어야 합니다.
- DMZ의 HTTPS 서버에 액세스합니다.
또한 다음 보안 요구 사항이 있습니다.
- 명시적으로 허용되지 않는 연결 시도를 삭제해야 합니다.
- 삭제된 패킷은 기록되어야 합니다.
8.7.3. 파일에 삭제된 패킷 로깅 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 systemd
는 삭제된 패킷과 같은 커널 메시지를 저널에 기록합니다. 또한 이러한 항목을 별도의 파일에 기록하도록 rsyslog
서비스를 구성할 수 있습니다. 로그 파일이 무한하게 증가하지 않도록 하려면 순환 정책을 구성합니다.
사전 요구 사항
-
rsyslog
패키지가 설치되어 있습니다. -
rsyslog
서비스가 실행 중입니다.
프로세스
다음 콘텐츠를 사용하여
/etc/rsyslog.d/nftables.conf
파일을 생성합니다.:msg, startswith, "nft drop" -/var/log/nftables.log & stop
:msg, startswith, "nft drop" -/var/log/nftables.log & stop
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 구성을 사용하여
rsyslog
서비스는/var/log/messages
대신/var/log/nftables.log
파일에 패킷을 기록합니다.rsyslog
서비스를 다시 시작하십시오.systemctl restart rsyslog
# systemctl restart rsyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 크기가 10MB를 초과하면
/etc/logrotate.d/nftables
파일을 다음 내용으로 생성하여/var/log/nftables.log
를 순환합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow maxage 30
설정은logrotate
가 다음 순환 작업 중에 30일이 지난 순환 로그를 제거하도록 정의합니다.
8.7.4. nftables 스크립트 작성 및 활성화 링크 복사링크가 클립보드에 복사되었습니다!
이 예는 RHEL 라우터에서 실행되고 DMZ의 내부 LAN 및 웹 서버에서 클라이언트를 보호하는 nftables
방화벽 스크립트입니다. 네트워크 및 예제에 사용되는 방화벽의 요구 사항에 대한 자세한 내용은 방화벽 스크립트에 대한 네트워크 조건 및 보안 요구 사항을 참조하십시오.
이 nftables
방화벽 스크립트는 데모 목적으로만 사용됩니다. 환경 및 보안 요구 사항에 맞게 조정하지 않고 사용하지 마십시오.
사전 요구 사항
- 네트워크는 네트워크 상태에 설명된 대로 구성됩니다.
프로세스
다음 콘텐츠를 사용하여
/etc/nftables/firewall.nft
스크립트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sysconfig/nftables.conf
파일에/etc/nftables/firewall.nft
스크립트를 포함합니다.include "/etc/nftables/firewall.nft"
include "/etc/nftables/firewall.nft"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 전달을 활성화합니다.
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow nftables
서비스를 활성화하고 시작합니다.systemctl enable --now nftables
# systemctl enable --now nftables
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
선택 사항:
nftables
규칙 세트를 확인합니다.nft list ruleset
# nft list ruleset ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 방화벽에서 금지하는 액세스를 수행합니다. 예를 들어 DMZ에서 SSH를 사용하여 라우터에 액세스하려고 합니다.
ssh router.example.com
# ssh router.example.com ssh: connect to host router.example.com port 22: Network is unreachable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로깅 설정에 따라 다음을 검색합니다.
차단된 패킷의
systemd
저널:journalctl -k -g "nft drop"
# journalctl -k -g "nft drop" Oct 14 17:27:18 router kernel: nft drop IN : IN=enp8s0 OUT= MAC=... SRC=198.51.100.5 DST=198.51.100.1 ... PROTO=TCP SPT=40464 DPT=22 ... SYN ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 차단된 패킷의
/var/log/nftables.log
파일입니다.Oct 14 17:27:18 router kernel: nft drop IN : IN=enp8s0 OUT= MAC=... SRC=198.51.100.5 DST=198.51.100.1 ... PROTO=TCP SPT=40464 DPT=22 ... SYN ...
Oct 14 17:27:18 router kernel: nft drop IN : IN=enp8s0 OUT= MAC=... SRC=198.51.100.5 DST=198.51.100.1 ... PROTO=TCP SPT=40464 DPT=22 ... SYN ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow