저는 오랫동안 CentOS 7을 사용해 왔으며 iptables
다양한 개인 및 비즈니스 시스템에서 사용자 정의 구성을 구축하는 데 익숙합니다.
저는 최근 CentOS 8을 사용하기 시작했고 iptables
에서 로의 전환 에 대해 배웠습니다 nftables
. 그래서 규칙 세트를 다시 작성하고 모든 것이 제대로 작동하도록 할 수 있었습니다. 문제는 내 사용자 정의 nft 규칙 세트가 재부팅 후에도 유지되지 않고 systemctl restart nftables
내 규칙을 수동으로 다시 유효하게 만들어야 한다는 것입니다.
firewalld
제가 이해한 바에 따르면(CentOS 7에서는 사용한 적이 없기 때문에) 그 원인은 프런트엔드 관리 도구이고 iptables
... nftables
그렇죠? systemctl disable firewalld
다시 시작해 보니 규칙 nftables
세트가 예상대로 적용되었습니다. 문제가 해결되었습니다.
firewalld
내 질문은 사용하지 않을 경우의 결과는 무엇입니까? 여전히 실행 중이므로 nftables
실제 방화벽이 여전히 존재한다고 가정합니다. 방화벽 firewalld
이 사용 중인지 확인하기 위해 설정을 조정하는 대신 실행 상태 로 두어야 할 이유가 있습니까? 대신 내 nftables
규칙이 설정되었습니다. 그 목적에 대해 설명해 주시면 대단히 감사하겠습니다!
답변1
나는 대답이 매우 간단하다고 생각합니다. 우선 정말 옳은 일을 하셨네요...
Firewalld는 순수한 프런트엔드입니다. 그 자체로는 독립형 방화벽이 아닙니다. 이는 지침을 수락하고 이를 방화벽인 nftables 규칙(이전의 iptables)으로 변환하는 것만으로 간단하게 작동합니다. 따라서 "nftables를 사용하여 방화벽 실행"과 "nftables만 실행" 중에서 선택할 수 있습니다. Nftables는 부분적으로는 새롭고 부분적으로는 2000년경 커널의 일부가 된 커널의 "netfilter" 후크 시스템과 모듈을 복제한 많은 모듈을 사용하여 커널의 일부로 직접 작동합니다.
Firewalld와 nftables(이전의 iptables)를 병렬로 실행하는 것은 상당히 혼란스러울 수 있지만 일부 사람들은 이렇게 할 것이라고 확신합니다. 자체 iptables 규칙을 실행하는 데 익숙하다면 이를 nftables 규칙으로 변환하고 방화벽 규칙으로 만드는 것이 완벽한 솔루션입니다. 가장 좋은 방법은 실제로 방화벽을 완전히 비활성화하고 바람직하게는 차단하는 것입니다. 조금 현학적으로 말하자면 다음을 실행할 수 있습니다.
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl mask --now firewalld
다른 작업을 수행할 필요가 없습니다. 나는 또한 nftables로 직접 실행합니다. 저는 이것이 프런트엔드(그리고 확실히 방화벽 이외의 다른 프런트엔드)를 사용하는 것보다 훨씬 더 투명하다고 생각합니다. 이를 통해 수행 중인 작업에 대한 완전한 가시성을 제공하고 실행하기만 하면 규칙의 효과에 대한 전체 검토를 쉽게 얻을 수 있습니다 sudo nft list ruleset > /etc/nftables.conf
. /etc/nftables.d에서 별도의 nft 테이블을 사용하는 것은 수행하는 작업과 위치를 추적하는 훌륭하고 쉬운 방법입니다.
@eriknelson은 댓글에서 서비스를 차단해야 하는 이유를 물었습니다. 내가 아는 한, 이는 사용자 경험의 실질적인 이유와 버그 및 찾기 어려운 버그를 방지하기 위해 수행됩니다. 다수의 방화벽 시스템을 실행하는 것은 대부분의 사람들에게 결과를 예측할 수 없고 다른 바람직하지 않은 방화벽과의 상호 작용에 관해 방화벽으로부터 명확한 오류 메시지를 받을 가능성이 낮기 때문에 매우 바람직하지 않습니다. 그러나 커널은 주어진 내용을 처리하려고 시도합니다. nftables 또는 iptables를 사용하는 경우 Firewalld를 사용하면 안 됩니다. 아니면 UFW. 또는 다른 더 높은 수준의 시스템. 그리고 방화벽과 같은 높은 수준의 방화벽을 주로 사용하는 경우 자세한 낮은 수준의 지침을 어지럽히는 것을 좋아하지 않습니다(때때로 고급 방화벽에서 지정하기 어려운 특정 하드 케이스에 대해 수행되는 경우도 있지만).
systemd 서비스를 차단하면 즉시 시작하거나 활성화할 수 없습니다. 서비스가 차단된 것을 발견하거나 인식한 경우 차단을 해제한 다음 원하는 작업을 수행할 수 있습니다. 이는 그러한 변경이 실수로 또는 자동으로 이루어지는 것을 방지하기 위해 수행됩니다. 다음을 실행하여 컴퓨터에 숨겨진 서비스가 있는지 직접 확인할 수 있습니다.sudo systemctl list-unit-files | grep mask
따라서 방화벽을 완전히 제거하고 싶지 않을 수도 있지만 의도치 않게 방화벽을 실행하고 싶지 않을 수도 있습니다. 이는 sudo systemctl mask xyz.service
사용이 유용할 수 있는 상황 중 하나입니다.
나는 당신이 쓴 글을 통해 이미 이 모든 것을 알고 있다고 생각합니다. 하지만 저는 약간 nftables 전도사입니다. 다른 사람이 이 답변을 읽는다면 이 작은 팁으로 도움을 받을 수 있습니다. nftables에 대한 문서는 훌륭하지만 지나치게 그렇지는 않습니다.