Firewall-cmd는 활성 방화벽 영역이 없음을 나타냅니다. 왜?

Firewall-cmd는 활성 방화벽 영역이 없음을 나타냅니다. 왜?

firewalldDebian 9에 (버전 ) 을 설치했습니다 0.4.4.2-1.

sudo firewall-cmd --get-active-zones출력이 표시되지 않습니다. echo $?종료 상태는 0( )으로 표시 됩니다 EXIT_SUCCESS. 왜?

루프백 인터페이스와 함께 표시된 네트워크 인터페이스가 있습니다 eth0.ip linklo


내 방화벽 구성을 말해야 겠네요나타나다대부분의 시간을 일합니다. FWIW, 기본 영역을 에서 public다음 MyZone과 같이 정의하여 변경했습니다 .

$ sudo cat /etc/firewalld/zones/MyZone.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>My Zone</short>
  <service name="ssh"/>
  <service name="https"/>
  <!-- ... --> 
</zone>

다른 컴퓨터를 사용하여 연결을 시도하면 SSH 및 HTTPS 서비스에 액세스할 수 있습니다. ncat -l -p 8000서버에서 실행하여 연결을 시도 하면 ncat my-server 8000연결이 올바르게 차단됩니다. ( Ncat: No route to host. 그리고 tcpdumpICMP 도달 불가능 응답이 생성되었음을 표시합니다. "Admin Forbidden"을 입력하십시오).

firewall-cmd --get-active-zonesMyZone이 활성 상태로 표시되지 않는 이유는 무엇입니까 ?

$ sudo firewall-cmd --state                                                                                                         
running
$ sudo firewall-cmd --get-active-zones
$ echo $?
0
$ sudo firewall-cmd --get-default-zone
MyZone
$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:43:01:c0:ab brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.8/24 brd 172.16.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fd5e:fcf3:b885:0:250:43ff:fe01:c0ab/64 scope global mngtmpaddr dynamic
       valid_lft forever preferred_lft forever
    inet6 fe80::250:43ff:fe01:c0ab/64 scope link
       valid_lft forever preferred_lft forever

firewalld.service경고가 기록되지 않습니다.

$ sudo systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-01-30 13:17:31 GMT; 56min ago
     Docs: man:firewalld(1)
 Main PID: 509 (firewalld)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/firewalld.service
           └─509 /usr/bin/python3 -Es /usr/sbin/firewalld --nofork --nopid

Jan 30 13:17:21 brick systemd[1]: Starting firewalld - dynamic firewall daemon...
Jan 30 13:17:31 brick systemd[1]: Started firewalld - dynamic firewall daemon.

firewalldNetworkManager와 함께 사용하는 것이 더 바람직 하다고 생각합니다 . 현재 NetworkManager를 실행하고 있지 않습니다. 이는 다소 취약한 것 같습니다.

https://firewalld.org/documentation/concepts.html

NetworkManager를 사용하지 않는 경우 몇 가지 제한 사항이 있습니다. 네트워크가 이미 가동된 후 방화벽을 시작하면 연결 및 수동으로 생성된 인터페이스가 해당 영역에 바인딩되지 않습니다.

그런데 설치 후 한 번 이상 재부팅을 해봤습니다 firewalld. systemd서비스를 확인해 봤습니다 . firewalld.service시작되었습니다 Before=network-pre.target. networking.service시작되었습니다 After=network-pre.target. firewalld이전에 시작되었음을 확인했습니다 networking.service.

$ sudo journalctl -b -u networking -u firewalld
-- Logs begin at Sat 2019-01-26 04:15:01 GMT, end at Wed 2019-01-30 14:15:33 GMT. --
Jan 30 13:17:21 brick systemd[1]: Starting firewalld - dynamic firewall daemon...
Jan 30 13:17:31 brick systemd[1]: Started firewalld - dynamic firewall daemon.
Jan 30 13:17:31 brick systemd[1]: Starting Raise network interfaces...
Jan 30 13:17:37 brick systemd[1]: Started Raise network interfaces.

ifdown수동으로 네트워크를 다시 시작하거나 /를 실행하지 않았고 ifup, 그렇게 하지 않았습니다 ifplugd. 커널 로그(아래)는 이더넷 링크가 작동 중이고 IPv6가 시작 이후 지속적으로 실행되고 있음을 나타냅니다.

$ sudo dmesg|grep eth0
[    4.082350] mv643xx_eth_port mv643xx_eth_port.0 eth0: port 0 with MAC address 00:50:43:01:c0:ab
[   47.577570] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   49.981569] mv643xx_eth_port mv643xx_eth_port.0 eth0: link up, 1000 Mb/s, full duplex, flow control disabled
[   49.991543] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

DHCP도 사용하지 않습니다. eth0in의 구성은 /etc/network/interfaces다음과 같습니다.

auto eth0
iface eth0 inet static
    address 172.16.1.8
    netmask 255.255.255.0
    gateway 172.16.1.1
    dns-nameservers 172.16.1.1

답변1

Firewalld는 NetworkManager에 의존하지 않습니다.그러나 사용하는 것이 좋습니다.

농담이 아닙니다.

NetworkManager가 없으면 웹 문서에서는 서로 다른 두 위치의 구성 간 일관성을 복제/유지해야 한다고 말합니다.

또한 이 두 곳 중 첫 번째는 ifcfg데비안에는 존재하지 않는 네트워크 구성 시스템입니다. 암시적으로 네트워크 관리자는데비안에서는 필수입니다 :-).

(모든 정보를 종합해 보면 /etc/firewalld/네트워크 인터페이스를 가져온 후 수동으로 시작하는 경우에만 의 반복 구성이 필요하다는 것이 분명해졌습니다. 여기에는 재부팅이 포함되지만 일반적으로 원하지는 않습니다.)firewalldfirewalldfirewalld

한편으로는 문제에서 관찰된 특정 "주요 직업" 행동을 기대하는 것이 공정합니다. 다른 문서와 추가 관찰을 바탕으로 기본 영역이 인터페이스에 적용될 것이라고 합리적으로 기대할 수 있습니다.

NetworkManager가 없는 Debian에서는 인터페이스를 다른 영역에 할당하는 것이 실행 중인 시스템에서 작동할 수 있지만 재부팅할 때는 작동하지 않습니다.

아마도 방화벽에 대해 "합리적인 기대" 이상을 원할 것입니다. firewalld이러한 혼란스러운 동작에 의존하지 않고도 변경 시 더 잘 테스트할 수 있는 "권장" 구성을 사용할 수 있다면 더욱 안심할 수 있습니다 .

저는 Red Hat 시스템을 포함하여 이것이 미치는 영향에 대해 여전히 혼란스럽습니다. 영역 구성이 올바르게 저장되지 않으면 firewall-cmd --permanent --add-interface=...문자 그대로 " " 결과가 표시될 수 있어 매우 혼란스럽습니다!success


관련 인용문은 다음과 같습니다 man firewalld.

NetworkManager를 사용하지 않고 네트워크 시작 후 방화벽을 시작하면 연결 및 수동으로 생성된 인터페이스가 ifcfg 파일에 지정된 영역에 바인딩되지 않습니다. 인터페이스는 기본 영역에서 자동으로 처리됩니다. 또한 방화벽은 네트워크 장치 이름 변경에 대한 알림을 받지 않습니다. 설정된 경우 NM_CONTROLLED=no이 모든 내용은 NetworkManager에 의해 제어되지 않는 인터페이스에도 적용됩니다.

다음 명령을 사용하여 이러한 인터페이스를 영역에 추가할 수 있습니다.

firewall-cmd [--permanent] --zone=zone --add-interface=interface

/etc/sysconfig/network-scripts/ifcfg-interface파일이 있으면 Firewalld는 ZONE=zone파일의 설정을 변경하려고 시도합니다.

Firewalld가 다시 로드되면 NetworkManager에서 제어되지 않는 인터페이스의 경우 인터페이스 바인딩을 안정적으로 유지하기 위해 다시 로드하기 전에 인터페이스 바인딩을 복원합니다. 방화벽 서비스를 다시 시작하는 경우 이 메커니즘은 불가능합니다.

ZONE=NetworkManager에 의해 제어되지 않는 인터페이스의 경우 ifcfg 파일의 설정을 방화벽의 바인딩과 일관되게 유지해야 합니다.

실험으로 나는 언급된 명령을 시도했습니다.

$ sudo firewall-cmd --zone=MyZone --add-interface=eth0
$ sudo firewall-cmd --get-active-zones
MyZone:
  interfaces: eth0

이 동작은 내 네트워크 인터페이스가 firewalld. 하지만 네트워크 인터페이스가 firewalld.

페이지 는 네트워크 인터페이스가 시작될 때 콜백을 받는 데 의존하는 man것처럼 들립니다 . 그것은 단지 Red Hat의 네트워킹 시스템일 뿐입니다. 내 데비안 시스템에는 설치되어 있지 않습니다. 데비안 패키지는 이에 상응하는 기능을 제공하지 않는 것 같습니다. 그래서 "인터페이스가 기본 영역에서 자동으로 처리됩니다"로 다운그레이드합니다.firewalldifcfgifcfgfirewalld

sudo iptables-save.iptables 에 의해 생성된 iptables(IPv4 전용) 규칙을 보기 위해 실행했습니다 firewalld. 수동으로 실행하지 않았다면 firewall-cmd --add-interface...언급되지 않았을 것입니다 eth0. 그러나 올바르게 읽으면 규칙은 기본 영역의 규칙을 사용하여 이러한 패킷을 폴백으로 처리합니다.

답변2

구성 파일을 넣지 않았 /usr/lib/firewalld/zones거나 /etc/firewalld/zones구성된 영역이 없는 경우. 당신이 가진 것은 일반 방화벽뿐입니다. 가지고 있는 규칙에 따라 여전히 작동하지만 공개 영역에서 비공개 영역 또는 구성한 다른 영역으로 전환할 수 없으며 규칙이 자동으로 변경됩니다.

또한 GUI를 사용하여 방화벽을 구성하는 경우 이러한 디렉터리를 확인하여 설정한 설정이 실제로 올바른지 확인하세요.

구성 파일을 수동으로 여기에 넣거나 GUI 설정 관리자가 구성한 영역에 대한 파일을 성공적으로 배치한 경우 알 수 없습니다.

Firewalld는 Linux 운영 체제용 방화벽 관리 도구입니다. 이는 iptables 명령을 통해 Linux 커널의 netfilter 프레임워크에 대한 프런트 엔드 역할을 하고 iptables 서비스의 대안으로 작동하여 방화벽 기능을 제공합니다.

확인: iptables -S, 거기에 무엇이 있나요? 규칙이 나열되어 있으면 범용 방화벽입니다! 방화벽을 갖기 위해 방화벽이 필요하지 않으며 iptables를 수동으로 편집하면 됩니다.

iptables-persistent그런 다음 편집할 때마다 규칙을 설치 하고 저장합니다.netfilter-persistent save

대부분의 시스템의 기본 정책은 (PUBLIC)입니다.

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

그런 다음 체인 형태로 규칙을 정교하게 만들 수 있습니다.

  • 통사론:

    iptables -A INPUT/FORWARD/OUTPUT <interface> <port type> <state> <port> <what to do if match>
    

예:(기본 포트에서 들어오는 모든 SSH를 허용하는 것은 보안상 좋지 않습니다.)

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

관련 정보