CentOS 7에서는 방화벽D 트래픽 필터링 규칙을 구성하는 것으로 나타났습니다. iptables 규칙을 관리하는 데 사용하는 것이 좋습니다. CentOS 8은 nftables를 사용하고 있습니다. 표준 iptables 패킷 필터링 서비스 대신 프레임워크를 사용하고 firewalld에서 방화벽 규칙을 구성할 때 실제로는 nftables를 구성하는 것입니다. 이 기사에서는 Linux CentOS 8(및 CentOS 7)을 실행하는 서버에 firewalld를 설치하고 구성하는 방법과 이 방화벽의 주요 개념을 고려할 것입니다.
방화벽D 원치 않는 트래픽으로부터 서버를 보호하는 데 사용되는 방화벽 서비스입니다. 다시 시작하지 않고 동적 방화벽 규칙 관리를 지원합니다. iptables 및 nftables에 대한 인터페이스로 작동합니다. FirewallD는 거의 모든 Linux 배포판에서 사용할 수 있습니다.
방화벽 기본 개념:영역 및 규칙
방화벽 설치 및 구성 전 , 우리는 다른 연결에 대한 신뢰 수준을 결정하는 데 사용되는 영역을 배웁니다. 방화벽에 다른 필터링 규칙을 적용할 수 있습니다. 영역, 미리 정의된 서비스, 프로토콜 또는 포트, 포트 전달 및 풍부한 규칙에 대한 활성 방화벽 옵션을 설정합니다.
방화벽 영역에 적용된 규칙에 따라 영역별로 인바운드 트래픽을 필터링하고 있습니다. 발신자 IP 주소가 영역의 규칙과 일치하면 패킷이 이 영역을 통해 전송됩니다. IP 주소가 서버에 구성된 영역 중 하나와 일치하지 않으면 기본 영역에서 패킷을 처리합니다. firewalld를 설치하면 기본 영역을 public이라고 합니다.
방화벽에는 다른 서비스에 대해 미리 구성된 권한이 있는 일부 영역이 있습니다. 이러한 설정을 사용하거나 고유한 영역을 만들 수 있습니다. 다음은 firewalld(/usr/lib/firewalld/zones/에 있음)를 설치할 때 생성되는 기본 영역 목록입니다.
드롭 | 최소 신뢰 수준을 가집니다. 모든 인바운드 연결은 응답 없이 차단되고 아웃바운드 연결만 허용됩니다. |
차단 | 이 영역은 이전 영역과 유사하지만 들어오는 요청은 icmp-host-prohibited와 함께 거부됩니다. IPv4 또는 icmp6-adm-prohibited용 메시지 IPv6용 메시지. |
공개 | 신뢰할 수 없는 공용 네트워크에 사용됩니다. 들어오는 연결을 개별적으로 허용할 수 있습니다. |
외부 | 방화벽이 게이트웨이로 사용될 때 외부 네트워크를 나타냅니다. NAT를 마스킹하는 데 사용되므로 내부 네트워크는 비공개로 유지되지만 사용 가능합니다. |
내부 | 외부 구역의 반의어입니다. 호스트의 신뢰 수준이 충분하고 여러 추가 서비스에 액세스할 수 있습니다. |
dmz | 이 영역은 비무장 지대(DMZ)에 있는 컴퓨터에 사용되며 네트워크에 액세스할 수 없는 격리된 컴퓨터를 포함합니다. 선택한 수신 연결만 허용됩니다. |
작업 | 업무용 컴퓨터를 위한 영역입니다(네트워크에 있는 대부분의 컴퓨터는 신뢰할 수 있음). |
집 | 홈 네트워크를 의미합니다. 대부분의 다른 컴퓨터를 신뢰할 수 있지만 선택한 수신 연결만 지원됩니다. |
신뢰할 수 있음 | 네트워크의 모든 컴퓨터는 신뢰할 수 있습니다. 책임감 있는 사용이 필요한 가장 개방적인 옵션입니다. |
방화벽 영구 및 런타임의 두 가지 규칙 집합을 사용합니다. 런타임 규칙은 서버가 다시 시작될 때까지 활성화됩니다. 기본적으로 방화벽에 추가하는 규칙은 런타임으로 간주됩니다. . 영구 규칙을 추가하려면 –영구를 사용해야 합니다. 깃발. 이 규칙은 서버를 다시 시작한 후에 적용됩니다.
CentOS에서 FirewallD를 설치 및 활성화하는 방법
CentOS 7/8에서 firewalld는 OS 설치 중에 기본적으로 설치됩니다. firewalld를 제거한 후 다시 설치하려면 표준 yum/dnf 패키지 관리자를 사용할 수 있습니다.
# yum install firewalld -y
— Centos 7에서# dnf install firewalld -y
— Centos 8에서
firewalld 데몬이 자동으로 시작되도록 하려면 이를 시작에 추가하십시오:
# systemctl enable firewalld
그리고 시작하세요:
# systemctl start firewalld
서비스 상태 확인:
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) Docs: man:firewalld(1) Main PID: 13646 (firewalld) CGroup: /system.slice/firewalld.service └─13646 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid systemd[1]: Starting firewalld - dynamic firewall daemon...
또는 다음 명령을 사용하여 수행하십시오.
# firewall-cmd --state
# firewall-cmd --state
running
FirewallD 규칙 관리
기본 FirewallD 규칙
firewalld 규칙을 구성하기 전에 기본적으로 사용되는 영역을 확인해야 합니다.
# firewall-cmd --get-default-zone
방금 firewalld를 설치했고 아직 구성하지 않았기 때문에 기본 영역은 공개입니다. .
활성 영역을 확인하십시오. 동일한 영역이 하나만 있습니다. 공개:
# firewall-cmd --get-active-zones
public interfaces: eth0
보시다시피 eth0 인터페이스는 public에 의해 관리됩니다. 구역.
CentOS 네트워크 인터페이스 목록을 다음과 같이 표시할 수 있습니다.
# ip link show
또는:# nmcli device status
활성 영역의 규칙을 보려면 다음 명령을 사용하십시오.
# firewall-cmd --list-all
public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
이 목록에서 DHCP 클라이언트 및 SSH와 관련된 일반적인 작업이 영역에 추가된 것을 볼 수 있습니다.
가용 영역
모든 영역 목록을 보려면 다음 명령을 실행하십시오.
# firewall-cmd --get-zones
다음 목록이 있습니다:
block dmz drop external home internal public trusted work
특정 영역의 규칙을 보려면 다음 명령에 -zone 플래그를 추가합니다.
# firewall-cmd --zone=home --list-all
home target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
모든 영역의 규칙을 볼 수 있습니다.
# firewall-cmd --list-all-zones
기본 영역을 변경하는 방법
기본적으로 모든 네트워크 인터페이스는 공개 영역이지만 다음 명령을 사용하여 모든 영역으로 이동할 수 있습니다.
# firewall-cmd --zone=home —change-interface=eth0
–zone= 뒤에 원하는 영역을 지정합니다. 매개변수.
기본 영역을 홈으로 변경하려면 다음 명령을 실행하십시오.
# firewall-cmd --set-default-zone=home
FirewallD에 앱 규칙을 추가하는 방법
앱에 대한 포트를 열려면 서비스를 예외로 추가할 수 있습니다. 사용 가능한 서비스 목록을 표시하는 방법은 다음과 같습니다.
# firewall-cmd --get-services
출력에는 많은 서비스가 포함됩니다. 서비스에 대한 자세한 정보는 XML에 포함되어 있습니다. 파일. 이 파일은 /usr/lib/firewalld/services.에 있습니다.
예:
# cd /usr/lib/firewalld/services
# cat smtp.xml
<?xml version="1.0" encoding="utf-8"?> <service> <short>Mail (SMTP)</short> <description>This option allows incoming SMTP mail delivery. If you need to allow remote hosts to connect directly to your machine to deliver mail, enable this option. You do not need to enable this if you collect your mail from your ISP's server by POP3 or IMAP, or if you use a tool such as fetchmail. Note that an improperly configured SMTP server can allow remote machines to use your server to send spam.</description> <port protocol="tcp" port="25"/> </service>
XML 파일에는 서비스 설명, 프로토콜 및 방화벽에서 열릴 포트 번호가 포함되어 있습니다.
규칙을 추가할 때 –서비스 추가 를 사용할 수 있습니다. 특정 서비스에 대한 방화벽 액세스를 허용하는 매개변수:
# firewall-cmd --zone=public --add-service=http
# firewall-cmd --zone=public --add-service=https
규칙을 추가한 후 서비스가 지정된 영역에 추가되었는지 확인할 수 있습니다.
# firewall-cmd --zone=public --list-services
dhcpv6-client http https ssh
규칙을 영구적으로 만들려면 –permanent를 사용하세요. 추가할 때 매개변수입니다.
영역에서 서비스를 제거하려면:
# firewall-cmd --permanent --zone=public --remove-service=http
# firewall-cmd --zone=public --permanent --list-services
dhcpv6-client https ssh test
서비스를 yj 예외에 추가하려면 XML을 만들 수 있습니다. 파일을 직접 작성하고 거기에 데이터를 지정하십시오. 모든 서비스에서 데이터를 복사하고 이름, 설명 및 포트 번호를 변경할 수 있습니다.
smtp.xml 복사 사용자 서비스 디렉토리로:
# cp /usr/lib/firewalld/services/smtp.xml /etc/firewalld/services
파일에서 서비스 설명을 변경합니다.
XML 파일도 이름을 바꿔야 합니다(내 서비스를 test ). 그런 다음 firewalld를 다시 시작하고 서비스가 목록에 나타나는지 확인하십시오.
# firewall-cmd --get-services
syslog-tls telnet test tftp
이제 모든 영역에 서비스를 추가할 수 있습니다.
# firewall-cmd --zone=public --add-service=test --permanent
# firewall-cmd --zone=public --permanent --list-services
dhcpv6-client http https ssh test
목록에서 서비스를 찾지 못한 경우 다음 명령을 사용하여 firewalld에서 원하는 포트를 열 수 있습니다.
# firewall-cmd --zone=public —add-port=77/tcp
— TCP를 엽니다. 포트 77# firewall-cmd --zone=public —add-port=77/udp
— UDP를 엽니다. 포트 77# firewall-cmd --zone=public —add-port=77-88/udp
— UDP를 엽니다. 포트 범위 77-88# firewall-cmd --zone=public —list-ports
— 허용된 포트 목록을 표시합니다.
ICMP 요청을 차단/허용하려면:
# firewall-cmd --zone=public --add-icmp-block=echo-reply
# firewall-cmd --zone= public --remove-icmp-block=echo-reply
추가된 포트를 제거하려면:# firewall-cmd --zone=public —remove-port=77/udp
— UDP에 대한 런타임 규칙을 제거합니다. 포트 77
# firewall-cmd --permanent --zone=public —remove-port=77/udp
— 영구 규칙 제거
FirewallD에서 새 영역을 만드는 방법은 무엇입니까?
자신만의 영역을 만들 수 있습니다(저는 이 영역을 우리라고 부를 것입니다. ):
# firewall-cmd --permanent --new-zone=our
서비스를 만든 후와 같이 새 영역을 만든 후에는 방화벽을 다시 시작해야 합니다. :
# firewall-cmd --reload
# firewall-cmd --get-zones
block dmz drop external home internal our public trusted work
우리의 영역을 사용할 수 있습니다. 서비스를 추가하거나 일부 포트를 열 수 있습니다.
방화벽:IP 주소 차단 및 예외 생성 방법
방화벽 예외에 신뢰할 수 있는 IP 주소를 추가하거나 원치 않는 IP 주소를 차단할 수 있습니다.
IP 주소(예:8.8.8.8)를 추가하려면 방화벽을 사용하여 서버에 예외를 추가하려면 다음 명령을 실행하십시오.
# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="8.8.8.8" accept'
영역을 확인하고 IP 주소가 풍부한 규칙의 예외에 추가되었습니다:
# firewall-cmd --zone=public --list-all
public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client http https ssh test ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: rule family="ipv4" source address="8.8.8.8" accept
IP 주소를 차단하려면 accept를 바꿉니다. 거부 :
# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="8.8.4.4" reject'
# firewall-cmd --zone=public --list-all
public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client http https ssh test ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: rule family="ipv4" source address="8.8.8.8" accept rule family="ipv4" source address="8.8.4.4" reject
서비스가 특정 IP 주소의 요청만 수락하도록 허용할 수 있습니다.
#firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.1.0/24" service name="https" accept'
서버에 대한 모든 요청을 빠르게 차단하려면 다음과 같은 패닉 명령을 사용하십시오.
# firewall-cmd --panic-on
다음 명령으로 패닉 모드를 비활성화할 수 있습니다.
# firewall-cmd --panic-off
또는 서버를 다시 시작하여.
루트 권한이 있는 로컬 서비스가 생성한 방화벽 규칙을 변경할 수 없도록 firewalld 구성을 차단할 수 있습니다.
# firewall-cmd --lockdown-on
잠금 모드를 비활성화하려면:
# firewall-cmd --lockdown-off
방화벽D로 포트 전달 구성
방화벽에서 포트 전달 규칙을 만들 수 있습니다. TCP 포트 443을 9090으로 전달하려면:
# firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=9090 --permanent
포트 전달 규칙을 제거하려면:
# firewall-cmd --zone=public --remove-forward-port=port=443:proto=tcp:toport=9090