방화벽 기본 사항

외부 위협으로부터 서버를 보호하는 첫 번째 단계는 들어오고 나가는 트래픽을 필터링하는 방화벽입니다. 이 기사에서는 CentOS 방화벽의 특별한 경우인 iptables 설정과 이를 설치 및 비활성화하는 방법에 대해 설명하겠습니다. 내 가이드는 철저하지 않으며 내가 가장 중요하다고 생각하고 내 작업에 사용하는 측면만 고려할 것입니다.

이 문서는 서버에 관한 단일 문서 시리즈의 일부입니다.

소개

Iptables는 현재 최신 Linux 배포판의 사실상 표준입니다. 방화벽으로 사용되는 다른 것이 무엇인지 바로 기억조차 나지 않습니다. 따라서 모든 Linux 관리자는 작업 시 이 방화벽 설정을 처리해야 합니다.

보다 "편리한" 구성을 위해 사용되는 이 방화벽에 대한 다양한 연결이 있습니다. 우분투는 으악, 센토스 - 방화벽, 다른 사람들은 모르겠어요. 개인적으로 저는 이러한 도구를 사용하는 데 어떤 편리함도 느끼지 못합니다. 저는 작업 초기에 배운 것처럼 Linux 방화벽을 구식 방식으로 설정하는 데 익숙합니다. 제 생각에는 이것이 가장 간단하고 편리한 방법으로내가 당신과 공유 할 것입니다. 그 본질은 방화벽 규칙을 사용하여 스크립트가 생성된다는 사실로 요약됩니다. 이 스크립트는 필요에 맞게 쉽게 편집할 수 있으며 서버에서 서버로 전송할 수 있습니다.

방화벽 비활성화

에 대한 주제에서 방화벽 비활성화 문제를 이미 다루었습니다. 우선, 설치 직후 centos 7에 기본적으로 존재하는 방화벽을 비활성화해 보겠습니다.

# systemctl 방화벽 중지

이제 다시 시작한 후 다시 켜지지 않도록 시작에서 제거해 보겠습니다.

# systemctl 방화벽 비활성화

그러면 서버의 방화벽 설정이 완전히 공개됩니다. 다음 명령을 사용하여 iptables 규칙을 볼 수 있습니다.

iptable 설치

사실, 우리 서버에는 이미 방화벽이 있고 작동하고 있습니다. 아무런 규칙도 없고 모든 것이 열려 있습니다. 추가 관리 유틸리티를 설치해야 하며, 이 유틸리티가 없으면 iptables를 구성할 수 없습니다. 예를 들어, 방화벽을 다시 시작할 수 없습니다.

# systemctl restart iptables.service 메소드 호출 발행 실패: 장치 iptables.service 로드 실패: 해당 파일 또는 디렉토리가 없습니다.

아니면 자동 실행에 추가할 수 없습니다.

# systemctl 활성화 iptables.service 메소드 호출 실행 실패: 해당 파일 또는 디렉토리가 없습니다.

이러한 오류를 방지하려면 유틸리티와 함께 ​​필요한 패키지를 설치하십시오.

# yum -y iptables-services 설치

이제 시작 및 실행에 iptables를 추가할 수 있습니다.

# systemctl 활성화 iptables.service # systemctl 시작 iptables.service

방화벽 설정

방화벽 규칙을 관리하기 위해 스크립트를 사용합니다. 그것을 만들어 봅시다:

# mcedit /etc/iptables.sh

다음으로 필요한 규칙으로 채워보겠습니다. 스크립트의 중요한 부분을 모두 분석하고 기사 마지막 부분에 전체 내용을 텍스트 파일로 제공하겠습니다.. 규정은 그림 형태로 제작되어 복사 및 붙여넣기를 금지하고 있습니다. 이로 인해 기사를 준비하는 동안 제가 겪었던 규칙 작동 오류가 발생할 수 있습니다.

서버가 로컬 네트워크의 인터넷 게이트웨이인 상황을 고려해 보겠습니다.

먼저 스크립트에서 사용할 모든 변수를 설정해 보겠습니다. 꼭 필요한 것은 아니지만, 서버에서 서버로 설정을 옮기는 것이 편리하기 때문에 권장합니다. 단순히 변수를 재할당하는 것만으로도 충분합니다.

새로운 규칙을 적용하기 전에 모든 체인을 지웁니다.

우리는 어떤 규칙과도 일치하지 않는 모든 트래픽을 차단합니다.

모든 localhost 및 로컬 트래픽을 허용합니다.

우리는 핑을 허용합니다:

이것이 필요하지 않으면 icmp에 대한 허용 규칙을 추가하지 마십시오.

서버 자체에 대한 인터넷 액세스를 엽니다.

들어오는 모든 서버 연결을 열려면 다음 규칙을 추가하십시오.

이제 가장 일반적인 네트워크 공격에 대한 보호 기능을 추가해 보겠습니다. 먼저 상태가 없는 모든 패킷을 삭제해 보겠습니다.

널 패킷 차단:

Syn-Flood 공격으로부터 자신을 보호하려면:

로컬 네트워크 액세스에 대한 제한을 설정하지 않으면 모든 사람이 인터넷에 액세스할 수 있도록 허용됩니다.

다음으로 인터넷에서 로컬 네트워크로의 액세스를 금지합니다.

로컬 네트워크에서 인터넷을 사용하려면 nat를 활성화합니다.

서버에 대한 액세스 권한을 잃지 않기 위해 규칙을 적용한 후 SSH를 통한 연결을 허용합니다.

그리고 마지막에는 재부팅 후에 적용되도록 규칙을 기록합니다.

우리는 SSH를 제외한 모든 수신 연결을 차단하고 로컬 네트워크에서 인터넷으로의 액세스를 허용하는 간단한 구성을 컴파일했습니다. 동시에 일부 네트워크 공격으로부터 우리 자신을 보호했습니다.

스크립트를 저장하고 실행 가능하게 만든 후 다음을 실행합니다.

# chmod 0740 /etc/iptables.sh # /etc/iptables.sh

규칙을 검토하고 모든 규칙이 적용되었는지 확인해 보겠습니다.

# iptables -L -v -n

서버 콘솔에 액세스할 수 있는 경우에만 규칙을 적용하면 됩니다. 설정에 오류가 있을 경우 접속이 불가능할 수 있습니다. 긴급 상황이 발생하면 방화벽을 비활성화하고 설정을 조정할 수 있는지 확인하십시오.

포트 열기

이제 구성을 조금 확장하고 일부 서비스에 대해 iptables에서 포트를 열어 보겠습니다. 웹 서버가 실행 중이고 인터넷에서 해당 서버에 대한 액세스를 열어야 한다고 가정해 보겠습니다. 웹 트래픽에 대한 규칙을 추가합니다.

웹 서버가 작업에 사용하는 포트 80 및 443에서 들어오는 연결에 대한 권한이 추가되었습니다.

메일 서버가 설치되어 있는 경우 사용된 모든 포트에서 들어오는 연결을 허용해야 합니다.

올바른 DNS 작업서버에서는 UDP 포트 53을 열어야 합니다.

포트 포워딩

외부 인터페이스의 포트를 로컬 네트워크의 일부 컴퓨터로 전달해야 하는 상황을 생각해 보겠습니다. 인터넷에서 컴퓨터 10.1.3.50에 대한 rdp 액세스를 얻어야 한다고 가정해 보겠습니다. TCP 포트 3389를 전달합니다.

외부에서 알려진 포트를 노출하지 않으려면 비표준 포트에서 대상 컴퓨터의 rdp 포트로 리디렉션할 수 있습니다.

외부에서 로컬 네트워크로 포트를 전달하는 경우, 외부 네트워크에서 내부 네트워크로의 접근을 차단하는 규칙을 반드시 주석 처리하세요. 내 예에서 이 규칙은 다음과 같습니다. $IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT

또는 이 규칙 앞에 다음과 같이 내부 서비스에 대한 외부 액세스를 허용하는 규칙을 만듭니다.

$IPT -A 전달 -i $WAN -d 10.1.3.50 -p tcp -m tcp --dport 3389 -j 수락

로그 활성화

설정하는 동안 로그를 활성화하여 차단된 패키지를 모니터링하고 이미 열려 있는 필수 서비스에 액세스할 수 없는 이유를 알아내는 것이 유용합니다. 차단된 모든 패킷을 트래픽 방향에 해당하는 별도의 체인(block_in, block_out, block_fw)으로 보내고 각 방향을 로그에 표시합니다. 이렇게 하면 보고를 하는 것이 더 편리해집니다. 설정을 저장하기 전에 스크립트 맨 끝에 다음 규칙을 추가하십시오.

/var/log/messages 파일에서 차단된 모든 패키지를 추적할 수 있습니다.

설정을 마친 후 이 줄을 주석 처리하고 로깅을 비활성화합니다. 로그가 매우 빠르게 증가하므로 이 작업을 수행할 가치가 있습니다. 저는 개인적으로 그러한 정보를 저장하는 데 실질적인 의미가 없다고 생각합니다.

iptable을 비활성화하는 방법

갑자기 방화벽이 더 이상 필요하지 않다고 판단되면 다음과 같이 방화벽을 비활성화할 수 있습니다.

# systemctl 중지 iptables.service

이 명령은 방화벽을 중지합니다. 다음은 시작 시 이를 제거합니다.

# systemctl iptables.service 비활성화

방화벽을 비활성화하여 모든 연결을 허용했습니다.

결론

약속한 대로 우리가 고려한 기본 규칙 세트가 포함된 완성된 스크립트를 게시합니다.

iptables를 설정할 때 매우 주의해야 한다는 점을 다시 한 번 지적하고 싶습니다. 서버 콘솔에 접근할 수 없다면 이 사업을 시작하지 마세요. 이 글을 쓰는 중에도 어처구니 없는 규칙 오류로 인해 서버 접속이 불가능해졌습니다. 이 오류는 복사 및 이중 대시 손실로 인해 발생했으며 단일 대시로 대체되었습니다.

OTUS의 온라인 강좌 “Linux Administrator”. 이 과정은 초보자를 위한 것이 아닙니다. 등록하려면 네트워크 및 가상 머신에 Linux 설치에 대한 기본 지식이 필요합니다. 교육은 5개월 동안 진행되며, 이후 성공적인 과정 수료자는 파트너와의 인터뷰를 받을 수 있습니다. 이 과정에서 제공되는 내용:

  • Linux 아키텍처에 대한 지식.
  • 데이터 분석 및 처리를 위한 최신 방법과 도구를 마스터합니다.
  • 필요한 작업에 대한 구성을 선택하고 프로세스를 관리하며 시스템 보안을 보장하는 기능입니다.
  • 시스템 관리자의 기본 작업 도구에 능숙합니다.
  • Linux에 구축된 네트워크 배포, 구성 및 유지 관리의 세부 사항을 이해합니다.
  • 새로운 문제를 신속하게 해결하고 시스템의 안정적이고 중단 없는 작동을 보장하는 능력.
입학 시험을 통해 자신을 테스트하고 자세한 내용은 프로그램을 참조하세요.

CentOS 7에서 Firewalld를 구성하는 방법을 단계별로 보여 드리겠습니다.

방화벽이란 무엇입니까? 이는 CentOS 7에서 기본적으로 제공되는 본격적인 방화벽입니다. 서버에서 이를 구성하는 방법을 보여주고 Firewall-cmd 도구도 소개합니다.

1. 방화벽의 기본 개념은 무엇입니까?

구역

Firewalld는 영역을 통해 규칙 그룹을 관리할 수 있습니다. 네트워크에 대한 신뢰를 바탕으로 트래픽을 관리하기 위한 일련의 지침입니다. 방화벽의 동작을 제어하기 위해 네트워크 인터페이스에 영역을 할당할 수 있습니다. 랩탑은 종종 다른 네트워크에 연결될 수 있으므로 이는 필요할 수 있습니다. 컴퓨터는 영역을 사용하여 환경에 따라 규칙 집합을 변경할 수 있습니다. 예를 들어 카페에서 Wi-Fi에 연결하는 경우 더 엄격한 지침을 적용해야 할 수도 있습니다. 그러나 집에서는 규칙이 더 충실할 수 있습니다.

Firewalld에는 다음 영역이 있습니다.

Drop은 네트워크에서 신뢰도가 가장 낮습니다. 이 경우 나가는 연결만 지원되며 들어오는 트래픽응답 없이 재설정;

차단은 들어오는 요청이 삭제될 때 icmp-host-prohibited 또는 icmp6-adm-prohibited 메시지가 발행된다는 점에서 삭제와 다릅니다.

공개 구역은 공용 네트워크, 들어오는 요청을 개별적으로 지원합니다. 그러나 그녀는 믿을 수 없다.

외부는 내부 네트워크를 비공개로 유지하기 위해 NAT 위장을 지원하는 외부 네트워크 영역입니다. 그러나 액세스할 수는 있습니다.

외부의 반대쪽은 내부입니다. 이 영역의 컴퓨터는 신뢰할 수 있으므로 추가 서비스를 사용할 수 있습니다.

dmz 영역에는 네트워크의 나머지 부분에 액세스할 수 없는 격리된 컴퓨터가 필요합니다. 이 경우 선택한 수신 연결을 구성할 수 있습니다.

업무 네트워크 영역은 업무입니다. 여기에서 환경을 신뢰할 수 있지만 들어오는 모든 연결이 지원되는 것은 아니며 사용자가 정의한 연결만 지원됩니다.

신뢰 영역에서는 네트워크의 모든 컴퓨터를 신뢰할 수 있습니다.

규칙 저장

Firewalld에서는 일시적이거나 영구적입니다. 방화벽의 동작에 영향을 미치는 규칙이 세트에서 변경되거나 나타나는 경우가 있습니다. 재부팅 후에는 변경 사항이 손실되므로 저장해야 합니다. Firewall-cmd 명령은 -permanent 플래그를 사용하여 규칙을 유지합니다. 그 후에는 지속적으로 사용할 수 있습니다.

2. 방화벽을 활성화하는 방법은 무엇입니까?

에 출시하는 것부터 시작하는 것이 좋습니다. 배경데몬 프로그램. systemd 단위 파일은 Firewalld.service라고 합니다. 데몬 프로그램을 활성화하려면 명령줄에 다음을 입력해야 합니다.

Sudo systemctl start Firewalld.service

서비스가 시작되었는지 확인해야 합니다. 이를 위해서는 다음이 필요합니다.

Firewall-cmd --실행 중 상태

방화벽이 시작되어 기본 지침에 따라 작동 중입니다. 서비스가 활성화되어 있지만 서버에서 자동으로 시작되지는 않습니다. 이렇게 하려면 자동 실행을 구성해야 합니다. 또한 자신의 서버에서 차단되지 않도록 일련의 규칙을 만드십시오.

3. 기본 방화벽 규칙

어떻게 볼 수 있나요?

기본 영역을 보려면 다음을 입력합니다.

Firewall-cmd --get-default-zone 공개

Firewalld가 다른 영역에 대한 지시를 받지 못한 것을 알 수 있습니다. Public은 기본적으로 사용되며 유일한 활성 영역입니다. 인터페이스가 다른 인터페이스에 바인딩되지 않았습니다. 사용 가능한 모든 목록을 보려면 도메인 영역, 콘솔에서 다음을 지정합니다.

Firewall-cmd --get-active-zones 공용 인터페이스: eth0 eth1

공개 영역에 바인딩된 두 개의 네트워크 인터페이스가 표시됩니다. 이 영역에 지정된 규칙에 따라 작동합니다. 다음을 수행하여 기본 규칙을 볼 수 있습니다.

Firewall-cmd --list-all 공용(기본값, 활성) 인터페이스: eth0 eth1 소스: 서비스: dhcpv6-client ssh 포트: 가장: 전달 포트 없음: icmp-blocks: 풍부한 규칙:

요약해보자:

기본이자 유일한 활성 영역은 공개입니다.

이 영역에는 eth0 및 eth1이라는 두 개의 인터페이스가 할당됩니다.

공개는 원격 SSH 관리와 DHSP IP 주소 할당을 지원합니다.

기타 방화벽 영역

방화벽에 어떤 다른 영역이 있는지 살펴보겠습니다. 사용 가능한 모든 목록을 보려면 콘솔에 다음을 입력하세요.

-zone= 플래그를 추가하여 각 특정 영역에 대한 매개변수를 가져올 수도 있습니다.

Firewall-cmd --zone=home --list-all 홈 인터페이스: 소스: 서비스: dhcpv6-client ipp-client mdns samba-client ssh 포트: 가장 무도회: 전달 포트 없음: icmp-blocks: 풍부한 규칙:

사용 가능한 모든 영역의 정의를 나열해야 하는 경우 --list-all-zones 옵션을 사용하세요. 출력을 더 쉽게 볼 수 있도록 출력을 호출기로 보내 보겠습니다.

Firewall-cmd --list-all-zones | 더 적은

4. 인터페이스 영역을 구성하는 방법은 무엇입니까?

모든 네트워크 인터페이스는 처음에 기본 영역에 바인딩됩니다.

한 세션에 대해서만 인터페이스 영역 변경

이를 위해서는 --change-interface= 및 --zone=이라는 두 가지 옵션이 필요합니다. 홈 eth0 영역으로 전송하려면 다음을 누르십시오.

Sudo Firewall-cmd --zone=home --change-interface=eth0 성공

이는 특정 서비스의 기능에 영향을 미칠 수 있다는 점에 유의하시기 바랍니다. 예를 들어 SSH는 홈 영역에서 지원됩니다. 연결은 재설정되지 않습니다. 그러나 이는 다른 영역에서도 발생할 수 있으며, 이로 인해 자체 서버에 대한 액세스가 차단될 수 있습니다. 인터페이스가 새 영역에 바인딩되어 있는지 확인해야 합니다. 명령줄에 다음을 입력합니다.

방화벽이 재부팅되면 인터페이스가 기본 영역에 다시 바인딩됩니다.

Sudo systemctl restart Firewalld.service Firewall-cmd --get-active-zones 공용 인터페이스: eth0 eth1

영구적으로 인터페이스 영역 변경

방화벽을 다시 시작한 후 인터페이스 설정에 다른 영역이 지정되어 있지 않으면 인터페이스가 기본 영역에 다시 할당됩니다. CentOS의 구성은 /etc/sysconfig/network-scripts 디렉터리에 있는 ifcfg-interface 형식의 파일에 있습니다. 인터페이스 영역을 정의하려면 해당 구성 파일을 열어야 합니다.

Sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0

파일 끝에 ZONE= 변수를 추가해 보겠습니다. 다른 영역을 값으로 설정해 보겠습니다.

DNS1=2001:4860:4860::8844 DNS2=2001:4860:4860::8888 DNS3=8.8.8.8 ZONE=집

이제 변경 사항을 저장한 후 파일을 닫아 보겠습니다. 설정을 업데이트하려면 네트워크 서비스와 방화벽을 다시 시작해야 합니다.

Sudo systemctl 재시작 network.service sudo systemctl 재시작 방화벽d.service

그런 다음 eth0 인터페이스가 홈 영역에 할당됩니다.

Firewall-cmd --get-active-zones 홈 인터페이스: eth0 공용 인터페이스: eth1

기본 영역 설정

다른 기본 영역을 설정할 수도 있습니다. --set-default-zone= 옵션은 모든 네트워크 인터페이스를 다른 영역에 바인딩하므로 이 작업에 도움이 됩니다.

Sudo Firewall-cmd --set-default-zone=home 홈 인터페이스: eth0 eth1

5. 신청 규칙은 어떻게 만드나요?

서비스 지역에 추가

방화벽이 사용하는 포트에서 이 작업을 수행하는 것이 가장 쉽습니다. 사용 가능한 모든 서비스를 보려면 명령줄에 다음을 입력하세요.

Firewall-cmd --get-services RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp 고가용성 http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms- wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql 프록시-dhcp 반경 rpc-bind 삼바 삼바 클라이언트 smtp ssh telnet tftp tftp-클라이언트 전송 클라이언트 vnc-서버 wbem-https

/usr/lib/firewalld/services 디렉토리의 .xml 파일은 각 서비스에 대한 모든 정보를 저장한다는 점을 기억하십시오. SSH에 대한 정보는 /usr/lib/firewalld/services/ssh.xml에서 찾을 수 있습니다. 그것들은 다음과 같습니다:

영역에서 서비스 지원을 활성화하려면 -add-service= 플래그가 필요하지만 -zone 옵션은 대상 영역을 지정하는 데 유용합니다. 이러한 변경 사항은 한 세션에만 유효하다는 점을 기억하십시오. 나중에 사용하기 위해 변경 사항을 저장해야 하는 경우 -permanent 플래그를 사용하세요. 그것이 어떻게 작동하는지 봅시다. HTTP 트래픽을 제공할 수 있도록 웹 서버를 시작하겠습니다. 공개 영역에서 하나의 세션에 대한 지원을 활성화해 보겠습니다. 콘솔에 다음을 입력하세요.

Sudo 방화벽-cmd --zone=public --add-service=http

기본 영역에 서비스를 추가하는 경우 -zone= 옵션을 사용하지 마십시오. 모든 것이 제대로 작동했는지 확인해 보겠습니다.

Firewall-cmd --zone=public --list-services dhcpv6-client http ssh

이제 방화벽과 서비스 자체를 테스트해야 합니다. 모든 것이 올바른 것으로 확인되면 영구 규칙 세트를 안전하게 변경할 수 있습니다. 새 서비스에 대한 지원 규칙을 추가하려면 콘솔에서 다음을 지정해야 합니다.

Sudo 방화벽-cmd --zone=public --permanent --add-service=http

지속적으로 적용되는 전체 규칙 목록을 확인하려면 다음을 수행하세요.

Sudo 방화벽-cmd --zone=public --permanent --list-services dhcpv6-client http ssh

결과적으로 공개 영역은 포트 80과 HTTP를 지원합니다. 서버가 SSL/TLS 트래픽을 제공할 수 있는 경우 HTTPS 서비스를 추가할 수 있습니다.

Sudo Firewall-cmd --zone=public --add-service=https sudo Firewall-cmd --zone=public --permanent --add-service=https

6. 서비스를 이용할 수 없으면 어떻게 되나요?

기본적으로 Firewalld에는 널리 사용되는 많은 서비스가 포함되어 있습니다. 그러나 프로그램에는 방화벽에 포함되지 않은 다른 서비스가 필요한 경우가 있습니다. 이 문제몇 가지 방법으로 해결할 수 있습니다.

방법 #1: 서비스 정의

영역에 포트를 추가하는 것은 매우 쉽습니다. 하지만 애플리케이션이 꽤 많으면 어떤 포트가 무엇을 사용하고 있는지 파악하기 어려울 것입니다. 이러한 상황에서는 포트 대신 서비스를 정의하는 것이 좋은 해결책입니다. 기본적으로 서비스는 이름과 설명이 지정된 포트 그룹입니다. 도움을 받으면 설정을 관리하는 것이 더 쉬워집니다. 그러나 서비스는 항구보다 다소 복잡합니다.

방화벽이 /etc/firewalld/services에서 비표준 설정을 사용하는 /usr/lib/firewalld/services 폴더에서 기존 스크립트를 복사하는 것부터 시작하겠습니다. SSH 서비스 정의를 복사하여 조건부 서비스 정의 예시로 사용하겠습니다. 스크립트 이름은 서비스 이름과 일치해야 하며 파일 확장자가 .xml이어야 한다는 점을 잊지 마십시오. 콘솔에 다음을 입력하세요.

Sudo cp /usr/lib/firewalld/services/service.xml /etc/firewalld/services/example.xml

이제 컴파일된 파일을 변경해야 합니다.

Sudo nano /etc/firewalld/services/example.xml

내부에는 SSH 정의가 있습니다.

SSH SSH(Secure Shell)는 원격 시스템에 로그인하고 명령을 실행하기 위한 프로토콜입니다. 안전한 암호화 통신을 제공합니다. 방화벽이 있는 인터페이스를 통해 SSH를 통해 원격으로 시스템에 액세스할 계획이라면 이 옵션을 활성화하세요. 이 옵션을 유용하게 사용하려면 openssh-server 패키지를 설치해야 합니다.

이제 변경 사항을 저장하고 파일을 닫아 보겠습니다. 그런 다음 다음을 사용하여 방화벽을 다시 시작해야 합니다.

Sudo 방화벽-cmd --reload

사용 가능한 서비스 목록에 우리 서비스가 나타납니다.

Firewall-cmd --get-services RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns 예제 ftp 고가용성 http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms -wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql 프록시-dhcp 반경 rpc-bind 삼바 삼바 클라이언트 smtp ssh telnet tftp tftp-클라이언트 전송 클라이언트 vnc-서버 wbem-https

방법 2: 포트 생성

원하는 방화벽 영역에서 애플리케이션 포트를 열고 프로토콜과 함께 지정해 보겠습니다. TCP 프로토콜과 포트 5000을 사용하는 프로그램을 공개 영역에 추가해야 하는 상황을 가정해 보겠습니다.한 세션에 대한 애플리케이션 지원을 활성화하려면 -add-port= 옵션이 필요합니다. 추가적으로 표시해야 할 사항은 다음과 같습니다. TCP 프로토콜또는 UDP:

Sudo 방화벽-cmd --zone=public --add-port=5000/tcp

모든 것이 제대로 작동하는지 확인해 보겠습니다.

Firewall-cmd --list-ports 5000/tcp

또한 대시를 사용하여 포트 범위를 지정할 수도 있습니다. 예를 들어 프로그램이 포트 4990-4999를 사용하는 경우 다음을 통해 해당 포트를 공개 영역에 추가할 수 있습니다.

Sudo 방화벽-cmd --zone=public --add-port=4990-4999/udp

모든 것이 제대로 작동하면 방화벽 설정에 지침을 추가하십시오.

Sudo Firewall-cmd --zone=public --permanent --add-port=5000/tcp sudo Firewall-cmd --zone=public --permanent --add-port=4990-4999/udp sudo Firewall-cmd -- zone=public --permanent --list-ports 성공 성공 4990-4999/udp 5000/tcp

7. 존은 어떻게 생성하나요?

방화벽은 일반적으로 업무에 충분하지만 때로는 사용자 지정 영역을 직접 만들어야 하는 다양한 미리 정의된 영역을 제공할 수 있습니다. 예를 들어, DNS 서버에는 개인 DNS 영역이 필요하고, 웹 서버에는 공개 웹 영역이 필요합니다. 영역을 생성한 후 이를 방화벽 설정에 추가해야 합니다. 콘솔에 다음을 입력하여 publicweb 및 privateDNS 영역을 생성해 보겠습니다.

Sudo 방화벽-cmd --영구 --new-zone=publicweb sudo 방화벽-cmd --영구 --new-zone=privateDNS

모든 것이 제대로 작동했는지 확인해 보겠습니다.

Sudo Firewall-cmd --permanent --get-zones block dmz drop 외부 홈 내부 privateDNS 공개 publicweb 신뢰할 수 있는 작업

Firewall-cmd --get-zones block dmz drop 외부 홈 내부 공용 신뢰할 수 있는 작업

그러나 현재 세션에서는 새 영역을 사용할 수 없습니다.

Firewall-cmd --get-zones block dmz drop 외부 홈 내부 공용 신뢰할 수 있는 작업

새로운 영역에 액세스하려면 방화벽을 다시 시작해 보겠습니다.

Sudo Firewall-cmd --reload Firewall-cmd --get-zones block dmz drop 외부 홈 내부 privateDNS 공개 publicweb 신뢰할 수 있는 작업

이제 새로운 영역에서 포트와 서비스를 정의하는 것이 가능해졌습니다. 공개 웹 영역에 SSH, HTTP 및 HTTPS를 추가해야 한다고 가정해 보겠습니다.

Sudo 방화벽-cmd --zone=publicweb --add-service=ssh sudo 방화벽-cmd --zone=publicweb --add-service=http sudo 방화벽-cmd --zone=publicweb --add-service=https 방화벽- cmd --zone=publicweb --list-all publicweb 인터페이스: 소스: 서비스: http https ssh 포트: 가장 무도회: 전달 포트 없음: icmp-blocks: 풍부한 규칙:

또한 다음을 사용하여 privateDNS 영역에 DNS를 추가할 수 있습니다.

Sudo Firewall-cmd --zone=privateDNS --add-service=dns Firewall-cmd --zone=privateDNS --list-all privateDNS 인터페이스: 소스: 서비스: dns 포트: 가장: 전달 포트 없음: icmp-blocks: 풍부한 규칙:

그런 다음 네트워크 인터페이스를 새 영역에 안전하게 할당할 수 있습니다.

Sudo 방화벽-cmd --zone=publicweb --change-interface=eth0 sudo 방화벽-cmd --zone=privateDNS --change-interface=eth1

설정이 작동하는지 확인하세요. 모든 것이 정상이면 영구 규칙에 추가하십시오.

Sudo Firewall-cmd --zone=publicweb --permanent --add-service=ssh sudo Firewall-cmd --zone=publicweb --permanent --add-service=http sudo Firewall-cmd --zone=publicweb --permanent --add-service=https sudo Firewall-cmd --zone=privateDNS --permanent --add-service=dns

이제 네트워크 인터페이스 설정으로 넘어 갑시다. 이는 수행을 위해 필요합니다. 자동 연결원하는 구역으로. publicweb eth0에 바인딩해야 한다고 가정해 보겠습니다.

Sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0 . . . IPV6_AUTOCONF=아니요 DNS1=2001:4860:4860::8844 DNS2=2001:4860:4860::8888 DNS3=8.8.8.8 ZONE=공개웹

또한 다음을 사용하여 eht1을 privateDNS에 바인딩해 보겠습니다.

Sudo nano /etc/sysconfig/network-scripts/ifcfg-eth1 . . . NETMASK=255.255.0.0 DEFROUTE="아니요" NM_CONTROLLED="예" ZONE=privateDNS

변경 사항을 적용하려면 방화벽과 네트워크 서비스를 다시 시작해야 합니다.

Sudo systemctl 재시작 네트워크 sudo systemctl 재시작 방화벽d

서비스가 등록되었는지 확인하려면 영역을 확인해야 합니다.

Firewall-cmd --get-active-zones privateDNS 인터페이스: eth1 publicweb 인터페이스: eth0

이제 작동하는지 확인해야 합니다.

Firewall-cmd --zone=publicweb --list-services http htpps ssh 방화벽-cmd --zone=privateDNS --list-services dns

보시다시피 사용자 영역은 작업 준비가 완전히 완료되었습니다. 이들 중 하나를 기본값으로 할당할 수 있습니다. 예를 들어:

Sudo 방화벽-cmd --set-default-zone=publicweb

8. 방화벽이 자동으로 시작되도록 하려면 어떻게 해야 합니까?

규칙과 모든 설정을 확인한 후 다음을 사용하여 자동 실행을 구성합니다.

Sudo systemctl 활성화 방화벽d

이렇게 하면 서버를 시작한 후 즉시 방화벽을 활성화할 수 있습니다.

결론적으로 Firewalld 방화벽은 설정 측면에서 상당히 유연한 도구라는 점은 주목할 가치가 있습니다. 그리고 영역을 사용하여 작업 정책을 변경할 수 있습니다.

CentoOS 7부터 트래픽 필터링 규칙을 구성하는 새로운 도구가 나타났습니다. 방화벽. 제어하는 데 사용하는 것이 좋습니다. iptables 규칙. CentOS 8에서는 이제 표준 iptables 필터링 패키지 대신 nftables 프레임워크가 사용되며, Firewalld를 통해 방화벽 규칙을 구성하면 실제로 nftables가 구성됩니다. 이 기사에서는 CentOS 8(CentOS 7도 동일)을 실행하는 서버에 방화벽을 설치하고 기본 개념을 구성하는 방법을 살펴보겠습니다.


방화벽D– 동적 규칙 관리(다시 시작하지 않음) 및 영구 방화벽 규칙 구현을 지원하여 원치 않는 트래픽으로부터 서버를 보호하는 방화벽입니다. nftables의 인터페이스로 작동합니다. FirewallD는 거의 모든 Linux 배포판에서 사용할 수 있습니다.

기본 방화벽 개념, 영역 및 규칙

설치 및 구성을 시작하기 전에 방화벽에서는 다양한 연결에 대한 신뢰 수준을 정의하는 데 사용되는 영역 개념을 소개합니다. 다양한 구역의 경우 방화벽다양한 필터링 규칙을 적용하고 사전 정의된 서비스, 프로토콜 및 포트, 포트 전달 및 풍부한 규칙의 형태로 활성 방화벽 옵션을 지정할 수 있습니다.

방화벽영역에 적용된 규칙에 따라 영역별로 들어오는 트래픽을 필터링합니다. 만약에 IP- 요청 발신자의 주소가 특정 구역의 규칙과 일치하면 패킷이 이 구역을 통해 전송됩니다. 주소가 서버에 구성된 영역과 일치하지 않으면 패킷은 기본 영역에서 처리됩니다. 설치시 방화벽기본 영역이 호출됩니다. 공공의.

Firewalld에는 다양한 서비스에 대한 권한이 사전 구성된 영역이 있습니다. 이러한 설정을 사용하거나 자신만의 영역을 만들 수 있습니다. Firewalld를 설치할 때 생성되는 기본 영역 목록(/usr/lib/firewalld/zones/ 디렉터리에 저장됨):

떨어지다 최소한의 신뢰 수준. 들어오는 모든 연결은 응답 없이 차단되고 나가는 연결만 허용됩니다.
차단하다 영역은 이전 영역과 유사하지만 들어오는 요청이 거부되면 Ipv4의 경우 icmp-host-prohibited 또는 Ipv6의 경우 icmp6-adm-prohibited 메시지가 전송됩니다.
공공의 신뢰할 수 없는 공용 네트워크를 나타냅니다. 선택한 수신 연결을 개별적으로 허용할 수 있습니다.
외부 방화벽을 게이트웨이로 사용할 때 외부 네트워크. NAT 위장용으로 구성되어 내부 네트워크가 비공개로 유지되지만 액세스 가능합니다.
내부 외부 구역의 반대말. 호스트는 충분한 수준의 신뢰를 갖고 있으며 다양한 추가 서비스를 사용할 수 있습니다.
DMZ DMZ에 있는 컴퓨터(나머지 네트워크에 액세스할 수 없는 격리된 컴퓨터)에 사용됩니다. 특정 수신 연결만 허용됩니다.
일하다 업무용 컴퓨터 영역(네트워크상의 대부분의 컴퓨터는 신뢰할 수 있음)
홈 네트워크 영역. 대부분의 PC는 신뢰할 수 있지만 특정 수신 연결만 지원됩니다.
신뢰할 수 있는 네트워크의 모든 시스템을 신뢰하십시오. 무엇보다도 가장 개방적이다 사용 가능한 옵션, 의식적인 사용이 필요합니다.

안에 방화벽영구 및 임시의 두 가지 규칙 세트가 사용됩니다. 임시 규칙은 서버가 재부팅될 때까지 작동합니다. 기본적으로 규칙을 추가할 때 방화벽, 규칙은 일시적인 것으로 간주됩니다( 실행 시간). 영구적으로 규칙을 추가하려면 플래그를 사용해야 합니다. - 영구적인. 이러한 규칙은 서버가 재부팅된 후에 적용됩니다.

CentOS에 방화벽 설치 및 활성화

CentOS 7/8에서는 기본적으로 OS와 함께 Firewalld가 설치됩니다. 방화벽을 제거하고 방화벽을 설치하려는 경우 표준 /dnf 관리자를 사용할 수 있습니다.

# yum install Firewalld -y - Centos 7용
# dnf install Firewalld -y - Centos 8용

악마에게 방화벽서버가 시작될 때 자동으로 시작되면 다음에 추가해야 합니다.

# systemctl 방화벽 활성화

그리고 다음을 실행하세요:

# systemctl 시작 방화벽

서비스 상태 확인:

# systemctl 상태 방화벽

● Firewalld.service - Firewalld - 동적 방화벽 데몬 로드됨: 로드됨(/usr/lib/systemd/system/firewalld.service; 활성화됨, 공급업체 사전 설정: 활성화됨) 활성: 2019-10-14 14:54 이후 활성(실행 중) :40 +06; 22초 전 문서: man:firewalld(1) 기본 PID: 13646(firewalld) C그룹: /system.slice/firewalld.service └─13646 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid 10월 14일 14:54:40 server.vpn.ru systemd: Firewalld 시작 - 동적 방화벽 데몬... 10월 14일 14:54:40 server.vpn.ru systemd: Firewalld 시작 - 동적 방화벽 데몬.

또는 다음 명령을 사용하세요.

# 방화벽-cmd --state

Firewall-cmd 명령은 nftables/iptables에 대한 방화벽 프런트엔드입니다.

# 방화벽-cmd --state

방화벽 규칙 작업

기본 규칙:

방화벽 규칙을 설정하기 전에 기본적으로 사용되는 영역을 확인해야 합니다.

# 방화벽-cmd --get-default-zone

방금 Firewalld를 설치하고 아직 구성하지 않았으므로 기본 영역이 있습니다. 공공의.

활성 영역을 확인해 보겠습니다. 또한 하나의 공개가 있습니다.

# 방화벽-cmd --get-활성 영역

공용 인터페이스: eth0

우리가 볼 수 있듯이, 네트워크 인터페이스 eth0은 영역별로 제어됩니다. 공공의.

핵심 규칙을 보려면 다음을 입력하십시오.

# 방화벽-cmd --list-all

공개(활성) 대상: 기본 icmp-block-inversion: 인터페이스 없음: eth0 소스: 서비스: dhcpv6-client ssh 포트: 프로토콜: 가장 무도회: 전달 포트 없음: 소스 포트: icmp-blocks: 풍부한 규칙:

목록에서 DHCP 클라이언트 및 SSH와 관련된 일반적인 작업이 이 영역에 추가된 것을 볼 수 있습니다.

사용 가능한 영역

모든 영역 목록을 보려면 다음 명령을 실행해야 합니다.

# 방화벽-cmd --get-zones

나는 다음 목록을 얻었습니다.

DMZ 삭제 외부 가정 내부 공개 신뢰할 수 있는 작업 차단

특정 구역의 규칙을 확인하려면 - 구역 플래그를 추가해야 합니다.

# 방화벽-cmd --zone=home --list-all

홈 대상: 기본 icmp-block-inversion: 인터페이스 없음: 소스: 서비스: dhcpv6-client mdns samba-client ssh 포트: 프로토콜: 가장 무도회: 전달 포트 없음: 소스 포트: icmp-blocks: 풍부한 규칙:

모든 영역의 규칙은 다음 명령으로 볼 수 있습니다.

# 방화벽-cmd --list-all-zones

구역이 많을 수 있으므로 목록이 상당히 클 것입니다.

기본 영역을 변경합니다.

기본적으로 모든 네트워크 인터페이스는 영역에 있습니다. 공공의, 그러나 다음 명령을 사용하여 모든 영역으로 전송할 수 있습니다.

# 방화벽-cmd --zone=home -change-interface=eth0

매개변수 이후 --zone=원하는 구역을 표시합니다.

기본 영역을 변경하려면 다음 명령을 사용해야 합니다.

# 방화벽-cmd --set-default-zone=home

애플리케이션 규칙 추가

애플리케이션에 대한 포트를 열려면 예외에 서비스를 추가할 수 있습니다. 사용 가능한 서비스 목록을 표시합니다.

출력에는 다음이 포함됩니다. 많은 수의서비스. 서비스에 대한 자세한 정보는 해당 서비스에 포함되어 있습니다. xml파일. 이 파일은 디렉토리에 있습니다 /usr/lib/방화벽/서비스.

예를 들어:

# cd /usr/lib/firewalld/services

메일(SMTP) 이 옵션을 사용하면 들어오는 SMTP 메일 배달이 허용됩니다. 원격 호스트가 메일을 배달하기 위해 시스템에 직접 연결하도록 허용해야 하는 경우 이 옵션을 활성화합니다. POP3 또는 IMAP을 통해 ISP 서버에서 메일을 수집하거나 fetchmail과 같은 도구를 사용하는 경우에는 이 기능을 활성화할 필요가 없습니다. 잘못 구성된 SMTP 서버에서는 원격 시스템이 서버를 사용하여 메일을 보낼 수 있습니다. 스팸.

XML 파일에는 방화벽에서 열리는 서비스, 프로토콜 및 포트 번호에 대한 설명이 포함되어 있습니다.

규칙을 추가할 때 매개변수를 사용할 수 있습니다. --서비스 추가특정 서비스에 대한 액세스를 열려면:

# 방화벽-cmd --zone=public --add-service=http

# 방화벽-cmd --zone=public --add-service=https

규칙을 추가한 후 지정된 영역에 서비스가 추가되었는지 확인할 수 있습니다.

# 방화벽-cmd --zone=public --list-services

Dhcpv6-클라이언트 http https ssh

이러한 규칙을 영구적으로 만들려면 추가할 때 매개변수를 추가해야 합니다. -영구적인.

영역에서 서비스를 제거하려면 다음 안내를 따르세요.

# 방화벽-cmd --permanent --zone=public --remove-service=http

Dhcpv6-클라이언트 https SSH 테스트

서비스를 예외에 추가하려면 파일을 생성하면 됩니다. xml직접 작성해 보세요. 모든 서비스에서 데이터를 복사하고 이름, 설명 및 포트 번호를 변경할 수 있습니다.

파일을 복사해보자 smtp.xml사용자 서비스 작업을 위한 디렉토리:

# cp /usr/lib/firewalld/services/smtp.xml /etc/firewalld/services

파일에서 서비스 설명을 변경합니다.

xml 파일 자체도 서비스 이름에 따라 이름을 바꿔야 합니다. 그런 다음 방화벽을 다시 시작하고 우리 서비스가 목록에 있는지 확인해야 합니다.

서비스에 전화했어요 시험그리고 그것은 목록에 나타났습니다:

Syslog-tls 텔넷 테스트 tftp

이제 생성된 서비스를 모든 영역에 추가할 수 있습니다.

# 방화벽-cmd --zone=public --add-service=test --permanent

# 방화벽-cmd --zone=public --permanent --list-services

Dhcpv6-클라이언트 http https ssh 테스트

목록에서 필요한 서비스를 찾지 못한 경우 다음 명령을 사용하여 방화벽에서 필요한 포트를 열 수 있습니다.

# Firewall-cmd --zone=public -add-port=77/tcp - 포트 77 열기 TCP
# Firewall-cmd --zone=public -add-port=77/udp - 포트 77 열기 UDP
# Firewall-cmd --zone=public -add-port=77-88/udp - 개방 포트 범위 77-88 UDP
# Firewall-cmd --zone=public -list-ports - 허용된 포트 목록을 확인하세요.

ICMP 응답 차단/허용:

# 방화벽-cmd --zone=public --add-icmp-block=echo-reply
# 방화벽-cmd --zone= 공개 --remove-icmp-block=echo-reply

추가된 포트 ​​제거:

# Firewall-cmd --zone=public -remove-port=77/udp - 임시 규칙 제거 77 UDP

# Firewall-cmd --permanent --zone=public -remove-port=77/udp - 영구 규칙 제거

자신만의 영역 추가

당신은 자신만의 영역을 만들 수 있습니다(나는 그것을 부를 것입니다) 우리의):

# 방화벽-cmd --permanent --new-zone=our

새 영역을 생성한 후, 서비스를 생성한 후에는 재부팅이 필요합니다. 방화벽:

# 방화벽-cmd --reload

# 방화벽-cmd --get-zones

DMZ 차단 외부 집 내부 공개 신뢰할 수 있는 작업 차단

우리의사용 가능. 서비스를 추가하거나 특정 포트를 열 수 있습니다.

Firewalld: 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풍부한 규칙의 예외에 추가됨:

공개(활성) 대상: 기본 icmp-block-inversion: 인터페이스 없음: eth0 소스: 서비스: dhcpv6-client http https ssh 테스트 포트: 프로토콜: 가장 무도회: 전달 포트 없음: 소스 포트: icmp-blocks: 풍부한 규칙: 규칙 패밀리="ipv4" 소스 주소="8.8.8.8" 수락

차단하려면 IP, 교체해야 함 수용하다~에 거부하다:

# Firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" 소스 주소="8.8.4.4" 거부"

# 방화벽-cmd --zone=public --list-all

공개(활성) 대상: 기본 icmp-block-inversion: 인터페이스 없음: eth0 소스: 서비스: dhcpv6-client http https ssh 테스트 포트: 프로토콜: 가장 무도회: 전달 포트 없음: 소스 포트: icmp-blocks: 풍부한 규칙: 규칙 패밀리="ipv4" 소스 주소="8.8.8.8" 수락 규칙 패밀리="ipv4" 소스 주소="8.8.4.4" 거부

특정 IP 주소의 요청에 대해서만 특정 서비스를 허용할 수 있습니다.

#firewall-cmd --permanent --add-rich-rule "rule family="ipv4" 소스 주소="10.10.1.0/24" 서비스 이름="https" 수락"

서버에 대한 모든 요청을 긴급하게 차단해야 하는 경우에는 다음 명령을 사용하십시오.

# 방화벽-cmd --panic-on

다음 명령을 사용하여 패닉 모드를 비활성화할 수 있습니다.

# 방화벽-cmd --panic-off

아니면 서버를 재부팅하면 됩니다.

로컬 서비스가 다음과 같이 방화벽 구성을 차단할 수 있습니다. 루트 권한생성한 방화벽 규칙을 변경할 수 없습니다:

# 방화벽-cmd --lockdown-on

차단 모드를 비활성화합니다.

# 방화벽-cmd --lockdown-off

방화벽의 포트 전달

방화벽에서 포트 전달 규칙을 만들 수 있습니다. 포트 443을 9090으로 전달하려면:

# 방화벽-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=9090 --permanent

포트 전달 규칙을 제거하려면:

# 방화벽-cmd --zone=public --remove-forward-port=port=443:proto=tcp:toport=9090

FirewallD는 CentOS 7 서버에서 기본적으로 사용 가능한 방화벽 관리 도구로, 기본적으로 IPTables를 둘러싼 래퍼이며 그래픽 구성 도구인 Firewall-config 및 명령줄 도구인 Firewall-cmd와 함께 제공됩니다. IPtables 서비스를 사용하면 모든 변경 사항에 대해 기존 규칙을 삭제하고 ` 파일에 새 규칙을 만들어야 합니다. /etc/sysconfig/iptables`, 그리고 방화벽을 사용하면 차이점만 적용됩니다.

방화벽D 영역

FirewallD는 Iptables의 규칙과 체인 대신 서비스와 영역을 사용합니다. 기본적으로 다음 영역을 사용할 수 있습니다.

  • 떨어지다– 응답 없이 들어오는 모든 네트워크 패킷을 삭제하고 나가는 네트워크 연결만 사용할 수 있습니다.
  • 차단하다– icmp-host-prohibited 메시지와 함께 들어오는 모든 네트워크 패킷을 거부하고 나가는 네트워크 연결만 허용합니다.
  • 공공의– 공공 장소에서는 선택된 수신 연결만 허용됩니다.
  • 외부– 가장을 사용하는 외부 네트워크의 경우 선택된 수신 연결만 허용됩니다.
  • DMZ– 비무장지대 DMZ, 공개적으로 접근 가능 제한된 액세스내부 네트워크에 대해서는 선택된 수신 연결만 허용됩니다.
  • 일하다
  • – 홈 영역에 있는 컴퓨터의 경우 선택된 수신 연결만 허용됩니다.
  • 내부– 내부 네트워크에 있는 컴퓨터의 경우 선택된 수신 연결만 허용됩니다.
  • 신뢰할 수 있는– 모든 네트워크 연결이 허용됩니다.

사용 가능한 모든 영역 목록을 얻으려면 다음을 수행하십시오.

# Firewall-cmd --get-zones 작업 삭제 내부 외부 신뢰할 수 있는 홈 dmz 공개 블록

기본 영역 목록을 보려면:

# 방화벽-cmd --get-default-zone 공개

기본 영역을 변경하려면:

방화벽 서비스

FirewallD 서비스는 방화벽에 대한 서비스 항목 정보가 포함된 XML 구성 파일입니다. 사용 가능한 모든 서비스 목록을 얻으려면:

# Firewall-cmd --get-services amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp 고가용성 http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy Proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap squid ssh 시너지 syslog syslog-tls telnet tftp tftp-client Tinc Tor-socks 전송 클라이언트 vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

구성 XML 파일디렉토리에 저장됨 /usr/lib/방화벽/서비스/그리고 /etc/firewalld/services/.

FirewallD를 사용하여 방화벽 설정

예를 들어 웹 서버, 포트 7022의 SSH 및 메일 서버를 실행하는 경우 FirewallD로 방화벽을 구성하는 방법은 다음과 같습니다.

먼저 DMZ의 기본 영역을 설정하겠습니다.

# 방화벽-cmd --set-default-zone=dmz # 방화벽-cmd --get-default-zone dmz

DMZ에서 HTTP 및 HTTPS에 대한 영구 서비스 규칙을 추가하려면 다음 명령을 실행합니다.

# 방화벽-cmd --zone=dmz --add-service=http --permanent # 방화벽-cmd --zone=dmz --add-service=https --permanent

포트 25(SMTP) 및 포트 465(SMTPS)를 엽니다.

Firewall-cmd --zone=dmz --add-service=smtp --영구적인 Firewall-cmd --zone=dmz --add-service=smtps --영구적인

개방형, IMAP, IMAPS, POP3 및 POP3S 포트:

Firewall-cmd --zone=dmz --add-service=imap --영구 방화벽-cmd --zone=dmz --add-service=imaps --영구 방화벽-cmd --zone=dmz --add-service= pop3 --영구적인 방화벽-cmd --zone=dmz --add-service=pop3s --영구적인

SSH 포트가 7022로 변경되었으므로 SSH 서비스(포트 22)를 제거하고 포트 7022를 엽니다.

Firewall-cmd --remove-service=ssh --영구적인 방화벽-cmd --add-port=7022/tcp --영구적인

변경 사항을 구현하려면 방화벽을 다시 시작해야 합니다.

방화벽-cmd --reload

마지막으로 규칙을 나열할 수 있습니다.

CentOS 6과 달리 Centos 7은 데이터베이스에 새로운 방화벽(firewalld)이 함께 제공됩니다. 비활성화하고 좋은 오래된 iptables로 교체할 수 있지만 이에 대한 직접적인 전제 조건이 없다면 오래된 것에 의존하기보다는 새로운 것에 익숙해지는 것이 좋습니다. 이것은 Windows 10을 의미하지 않습니다. 윈도우보다 낫다 7, 그리고 Windows XP는 Windows 7보다 낫습니다. ;) 이 주제에 대한 좋은 예는 selinux입니다. 처음에는 나를 포함한 거의 모든 사람이 전원을 끄고 약간 꾸짖었다면 이제는 필요하다고 확신하는 경우에만 조언하는 사람이 거의 없습니다. 오히려 많은 사람들이 이미 semanage 사용에 익숙해졌습니다(또는 익숙해지고 있습니다). Firewalld를 즉시 비활성화하지는 않겠지만, 맛이 어떤지 시험해 보겠습니다.

Firewalld는 근본적으로 다른 방화벽이 아닙니다. 이것은 netfilter의 또 다른 추가 기능이므로 iptables에 대한 경험이 있다면 약간의 문제 후에 쉽게 새 도구 사용을 시작할 수 있습니다.

방화벽 시작 및 중지

Firewalld가 실행 중인지 확인해 보겠습니다.

# systemctl 상태 방화벽

여기에 더 많은 정보가 있을 것입니다. 간단히 예(작동함) 또는 아니오라고 대답하려면 다음을 수행할 수 있습니다.

# 방화벽-cmd --state
달리기

네, 작동합니다.

방화벽 중지 중:

# systemctl 방화벽 중지

자동 시작 금지:

# systemctl 방화벽 비활성화

방화벽을 시작합니다:

# systemctl 시작 방화벽

자동 시작 활성화:

# systemctl 방화벽 활성화

방화벽 영역

Firewalld는 영역 개념을 광범위하게 사용합니다. 기본적으로 모든 유효한 영역 목록:

# 방화벽-cmd --get-zones
DMZ 차단 외부 집 내부 공개 신뢰할 수 있는 작업 차단

영역의 목적(물론 조건부):

  • 삭제 - 모든 수신 패킷이 응답 없이 삭제(삭제)됩니다. 나가는 연결만 허용됩니다.
  • 차단 - 들어오는 연결은 icmp-host-prohibited(또는 icmp6-adm-prohibited) 응답과 함께 거부됩니다. 시스템에서 시작한 연결만 허용됩니다.
  • 공공의 - 기본 영역. 이름에서 이 영역은 공용 네트워크에서의 작업을 목표로 한다는 것이 분명합니다. 우리는 이 네트워크를 신뢰하지 않으며 특정 수신 연결만 허용합니다.
  • 외부 - 라우터의 외부 인터페이스 영역(소위 가장). 우리가 정의한 들어오는 연결만 허용됩니다.
  • dmz - DMZ 영역, 특정 수신 연결만 허용됩니다.
  • 직장 - 직장 네트워크 영역. 우리는 여전히 누구도 신뢰하지 않지만 이전만큼은 아닙니다 :) 특정 수신 연결만 허용됩니다.
  • 홈 - 홈 존. 우리는 환경을 신뢰하지만 특정 수신 연결만 허용됩니다.
  • 내부 - 내부 영역. 우리는 환경을 신뢰하지만 특정 수신 연결만 허용됩니다.
  • 신뢰할 수 있음 - 모든 것이 허용됩니다.

모든 활성 영역 목록:

# 방화벽-cmd --get-활성 영역
공공의
인터페이스: enp1s0

네, enp1so 네트워크 인터페이스가 연결된 공개 영역입니다. 다음으로 sshd가 중단될 공개 영역에 새 포트를 추가하겠습니다.

네트워크 인터페이스의 이름(예: enp1s0)을 알면 해당 인터페이스가 속한 영역을 확인할 수 있습니다.

# 방화벽-cmd --get-zone-of-interface=enp1s0
공공의

특정 영역에 속하는 인터페이스를 확인할 수 있습니다.

# 방화벽-cmd --zone=public --list-인터페이스
enp1s0

예: 비표준 포트에서 SSH 허용

기본값인 22/tcp가 아닌 포트 2234/tcp에서 ssh를 통해 서버에 대한 액세스를 허용하겠습니다. 그 과정에서 selinux에 대해 조금 살펴보겠습니다.

먼저, 우리 서버에서 일반적으로 허용되는 것이 무엇인지 살펴보겠습니다.

# 방화벽-cmd --permanent --list-all
공개(기본값)
인터페이스:
출처:
서비스: ssh dhcpv6-client
가장 무도회: 아니요
정방향 포트:
ICMP 블록:
풍부한 규칙:

아직 ipv6를 사용하지 않으므로 해당 항목을 즉시 제거하겠습니다. 방화벽의 규칙:

# 방화벽-cmd --permanent --zone=public --remove-service=dhcpv6-client

포트 2234/tcp에 대한 연결을 영구적으로 허용해 보겠습니다(재부팅 후 손실되지 않도록). (sshd를 여기에 걸어 놓겠습니다):

# 방화벽-cmd --permanent --zone=public --add-port=2234/tcp

규칙을 다시 로드해 보겠습니다.

# 방화벽-cmd --reload

점검 해보자:

# 방화벽-cmd --zone=public --list-ports
2234/TCP

네, 포트가 열려 있습니다. sshd 구성 편집:

# 나노 /etc/ssh/sshd_config
...
포트 2234
...

# systemctl 재시작 sshd.service

그러나 비활성화하지 않았으면 하는 SELinux는 비표준 포트(sshd용 포트 2234/tcp는 비표준)에서 SSH에 연결하는 것을 허용하지 않습니다. 이 단계를 건너뛰고 SELinux 보호가 어떻게 작동하는지 확인하거나 모든 것을 즉시 구성할 수 있습니다.

# yum은 의미를 제공합니다
# yum installpolicycoreutils-python
# semanage 포트 -a -t ssh_port_t -p tcp 2234

이제 모든 것이 정상입니다. 새 포트에서 SSH 연결을 확인합니다. 모든 것이 정상이면 포트 22에 대한 액세스를 닫습니다.

# 방화벽-cmd --permanent --zone=public --remove-service=ssh
# 방화벽-cmd --reload

무슨 일이 일어났는지 봅시다:

# 방화벽-cmd --list-all
공개(기본값, 활성)
인터페이스:
출처:
서비스:
포트: 2234/tcp
가장 무도회: 아니요
정방향 포트:
ICMP 블록:
풍부한 규칙:

그게 다야.

다양한 유용한 명령:

나가고 들어오는 모든 패킷에 대해 차단 모드를 활성화합니다.

# 방화벽-cmd --panic-on

나가고 들어오는 모든 패킷에 대해 차단 모드를 비활성화합니다.

# 방화벽-cmd --panic-off

모든 나가고 들어오는 패킷에 대한 차단 모드가 활성화되어 있는지 확인하십시오.

# 방화벽-cmd --query-panic

현재 연결을 끊지 않고 방화벽 규칙을 다시 로드합니다.

# 방화벽-cmd --reload

방화벽 규칙을 다시 로드하고 현재 연결을 재설정합니다(문제가 있는 경우에만 권장됨):

# 방화벽-cmd --완전-재로드

영역에 네트워크 인터페이스를 추가합니다.

# 방화벽-cmd --zone=public --add-interface=em1

영역에 네트워크 인터페이스를 추가합니다(방화벽 재부팅 후 저장됨).

# 방화벽-cmd --zone=public --permanent --add-interface=em1

이 인터페이스가 속한 영역을 ifcfg-enp1s0 구성에서 지정할 수 있습니다. 이렇게 하려면 /etc/sysconfig/network-scripts/ifcfg-enp1s0 파일에 ZONE=work를 추가합니다. ZONE 매개변수가 지정되지 않은 경우 기본 영역이 할당됩니다(/etc/firewalld/firewalld.conf 파일의 DefaultZone 매개변수).

포트 범위 허용:

# 방화벽-cmd --zone=public --add-port=5059-5061/udp

가장 무도회 (가장 무도회, 일명 nat, 일명...):

상태 확인:

# 방화벽-cmd --zone=external --query-masquerade

켜다:

# 방화벽-cmd --zone=external --add-masquerade

예를 들어 공개 영역에 대해 가장 무도회를 활성화할 수 있다는 점에 유의해야 합니다.

포트 22에서 들어오는 메시지를 다른 호스트로 리디렉션합니다.

# 방화벽-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.23

대상 포트(22에서 192.168.1.23:2055로)를 변경하여 포트 22에서 들어오는 메시지를 다른 호스트로 리디렉션합니다.

# 방화벽-cmd --zone=external /
--add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.23

여기서 마치겠습니다 왜냐면... 예는 무한히 많을 수 있습니다. 개인적으로 방화벽 혁신에 대한 내 의견이 완전히 형성되지 않았다는 점을 덧붙이겠습니다. 왜냐하면... 구문에 익숙해지는 데 오랜 시간이 걸리며 동물원에 다른 OS Linux가 있는 경우 우선 습관에 문제가 있을 수 있습니다. 그러나 방화벽을 마스터하면 시야가 넓어질 것입니다. 대개 노력할 가치가 있습니다.

방화벽의 이점

가장 큰 장점은 iptables 체인에서 약간 추상화되어 있다는 점이며, 포트 포워딩을 활성화하려면 FORWARD 외에 PREROUTING이나 POSTROUTING을 생각할 필요가 없습니다. "제조업체의 IPtables API"와 같은 정보가 제공됩니다. nat를 활성화한 경우 규칙이 정확히 어디에(현재 규칙의 일련 번호에 따라) 있는지는 중요하지 않습니다. 간단히 표시하면 eth0에서 nat를 활성화할 수 있습니다. 말도 안되는 소리는 아닙니다.) 방화벽 관리를 위해 웹 인터페이스를 구성해야 하는 경우 편리할 수 있습니다.

상태(예: nat 활성화 여부!)를 확인할 수 있습니다. 예를 들어 스크립트, 애플리케이션 로직에서도 이를 사용하세요. iptables에서 상태 요청(on/off)을 생성하는 방법을 모르겠습니다. 물론 iptables -L -t nat | grep "...", 그러나 이는 "firewall-cmd --zone=external --query-masquerade"를 실행하는 것과 약간 다르다는 점을 인정해야 합니다. 예를 들어 CentOS를 사용하는 수백 개의 VM이 있는데, WAN 인터페이스 이름 등이 약간 다를 수 있습니다. 따라서 다양한 컴퓨터에서 예상되는 결과를 제공하는 범용 cmdlet이 있습니다.

방화벽의 단점

내 생각에 가장 큰 단점은 익숙해지면 Debian, Ubuntu, CentOS 및 일반적으로 모든 곳에 있는 "순수한" iptables에 익숙해지기 시작한다는 것입니다. 그건 그렇고, Mikrotik에서는 구문과 체인 유형이 iptables와 유사합니다. 물론 이것은 모든 사람을 위한 것은 아닙니다. 그리고 전문가는 무엇을 가지고 일할지 신경 쓰지 않고 특정한 조건이 있으면 자신이 가지고 있는 것을 가지고 일할 것입니다. 하지만... 저는 퇴행적인 사람이고 (명백한 이점이 없는 경우) 각 주요 플레이어가 자체적으로 구현하는 신제품에 필사적으로 저항합니다. RedHat은 점점 더 많은 새로운 전문가가 방화벽의 에이스가 됨으로써 이익을 얻을 것입니다.

그리고 방화벽으로 전환한 경우 순수한 iptables 구문은 방해가 될 뿐입니다. 표준 방화벽 구문을 사용하지 않고 규칙을 변경/추가하기 시작하면 혼란이 발생하거나 방화벽이 단순히 무너질 것입니다.

나는 방화벽을 원하지 않는다! 내 오래된 iptables를 돌려주세요!

여전히 과거로 돌아가 방화벽을 iptables로 교체하고 싶다면 전혀 어렵지 않습니다.

이곳은 초보자를 위한 곳이 아닙니다:

# systemctl 방화벽 비활성화
# systemctl 방화벽 중지

좋은 오래된 iptables를 설치하십시오:

# 냠 설치 iptables-서비스

방화벽을 실행합니다:

# systemctl 시작 iptables
# systemctl start ip6tables

켜져 있으면 자동 시작:

# systemctl iptables 활성화
# systemctl ip6tables 활성화

재부팅 후 iptables 규칙을 저장하려면:

# /sbin/iptables-save > /etc/sysconfig/iptables
# /sbin/ip6tables-save > /etc/sysconfig/ip6tables

또는 구식 방식:

# 서비스 iptables 저장

현재 규칙은 다음 파일에 있습니다.
/etc/sysconfig/iptables
/etc/sysconfig/ip6tables

iptables 다시 시작(예: 변경 후):

# systemctl 재시작 iptables.service