Rocky Linux - Firewall 방화벽
페이지 정보

본문
Rocky Linux - Firewall 방화벽
참조: https://foxydog.tistory.com/78
1. Firewall 패키지 설치 확인
※ CentOS 7 / CentOS 8 (Stream) / Rocky Linux는 기본 패키지로 설치가 되어 있습니다.
[root@localhost ~]# rpm -qa | grep firewall
firewalld-0.8.2-7.el8_4.noarch
python3-firewall-0.8.2-7.el8_4.noarch (종속 패키지)
firewalld-filesystem-0.8.2-7.el8_4.noarch (종속 패키지)
2. Firewall 패키지 업데이트가 필요한 경우
[root@localhost ~]# dnf update firewalld
마지막 메타 데이터 만료 확인 :2:17:23. 2021년 07월 21일 (수) 오전 01시 09분 06초 이전에 확인
종속성이 해결되었습니다.
처리가 필요하지 않습니다 (최신 버전일 경우)
완료되었습니다!
3. Firewall 패키지 없을 경우 설치하기
[root@localhost ~]# dnf install -y firewalld
4. Firewall 패키지 기본 설치 경로
[root@localhost ~]# cd /etc/firewalld
[root@localhost ~]# /etc/firewalld/firewalld.conf [환경 설정]
[root@localhost ~]# /etc/firewalld/zones/public.xml [방화벽 규칙 저장 설정]
5. 부팅 시 Firewall 방화벽 자동 실행 및 해제
[root@localhost ~]# systemctl enable firewalld [자동 실행]
Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.
[root@localhost ~]# systemctl disable firewalld [자동 실행 해제]
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
6. Firewall 방화벽 시작 및 중지
[root@localhost ~]# systemctl start firewalld [시작]
[root@localhost ~]# ps -ef | grep firewalld [프로세스 구동 확인]
/usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
[root@localhost ~]# systemctl stop firewalld [중지]
7. Firewall 구동 및 상태 확인
[root@localhost ~]# systemctl status firewalld | grep -i active [systemctl 명령어]
Active: active (running) since Wed 2021-07-21 04:35:30 EDT; 1min 10s ago (실행 중)
Active: inactive (dead) since Wed 2021-07-21 04:38:20 EDT; 1s ago (다운)
[root@localhost ~]# firewall-cmd --state [firewall 명령어]
running (실행 중) / not running (다운)
8. 서비스(Services) 이름으로 방화벽 허용
※ Firewall의 경우는 어플레이션에서 정해진 이름으로 허용이 가능합니다.
▷ 등록할 수 있는 서비스 이름 확인
[root@localhost ~]# firewall-cmd --get-services
▷ 서버 원격 접속을 위해 SSH를 허용할 경우
[root@localhost ~]# firewall-cmd --permanent --add-service=ssh [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-service=ssh [제거]
success (등록 성공)
▷ 추가된 룰 적용
※ 추가 및 제거 시에 무조건 룰 재시작이 필요합니다.
[root@localhost ~]# firewall-cmd --reload
success (적용 완료)
▷ 등록된 규칙 확인(전체 확인)
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: cockpit dhcpv6-client ssh [추가 확인]
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
※ SSH 접속 포트가 다를 경우
SSH 포트는 기본적으로 (22)로 정해져 있습니다. 하지만 알려진 번호는 공격에 취약하므로 관리자만 아는 접근 포트로 변경하여 설정을 할 수가 있습니다. 예를 들어 SSH 포트를 (8888)로 변경했을 때 서비스 이름(SSH)으로 등록한 규칙이 접속이 될까요?
▷ 결론은 안됩니다. add-service=ssh 서비스 이름으로 등록한 규칙은 무조건 기본 포트(22)를 따라갑니다. 하지만 정의된 파일이 있으므로 파일 수정이 가능합니다.
▷ Services 정의 파일 경로
[root@localhost ~]# ls /usr/lib/firewalld/services/
▷ SSH.xml 정의 파일 포트 수정
[root@localhost ~]# vi /usr/lib/firewalld/services/ssh.xml
이후 서비스 이름으로 등록한 SSH는 (8888) 포트로 접속할 수 있게 됩니다. 이래서 서비스 이름으로 등록하는 것보다는 유동성 있는 특정 포트로 허용 처리하는 게 더 좋습니다.
9. 특정 포트로 허용
[root@localhost ~]# firewall-cmd --permanent --add-port=80/tcp [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-port=80/tcp [제거]
success
※ 서비스 이름으로 (HTTP)로 추가해도 되지만 포트를 알고 있다면 (80)으로 등록을 합니다.
10. 특정 포트를 구간으로 허용
[root@localhost ~]# firewall-cmd --permanent --add-port=80-100/tcp [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-port=80-100/tcp [제거]
success
※ 구간 적용 확인을 위해 단일 Port(80) 허용 규칙을 삭제하고 Port(80-100)으로 등록을 합니다.
11. 특정 IP(대역대)로 허용
▷ 특정 IP
[root@localhost ~]# firewall-cmd --permanent --add-source=192.168.150.132 [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-source=192.168.150.132 [제거]
success
▷ 특정 IP 대역대
[root@localhost ~]# firewall-cmd --permanent --add-source=192.168.150.0/24 [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-source=192.168.150.0/24 [제거]
success
※ C클래스(192.168.150.0/24) = 192.168.150.0 ~ 192.168.150.255 사이의 IP를 허용
※ iptables의 경우는 IP(대역대)를 허용하면 기본 설정으로 모든 들어오는 Port에 대해서 허용이 되지만 firewall의 경우는 IP(대역대)만 허용한다고 해서 Port에 대해서 모두 허용하지 않습니다. 아래와 같이 테스트를 해보면 알 수 있습니다.
그래서 다음 내용에 혼합 사용에 대한 명령어를 따로 설명하겠습니다.
☆예시
[root@Rocky-zabbix ~]# firewall-cmd --permanent --add-source=192.168.150.133 [추가]
12. 특정 IP(대역대) + 포트 허용[rich rules]
※ rich라는 말이 풍부한, 여기서는 다양한 규칙을 적용하기 위한 말로 사용자에게 맞는 커스텀 룰쯤 생각하면 됩니다. 아래는 IP [192.168.150.133]에서 접근할 때에 (8888) Port만 허용하겠다는 뜻입니다. 서버 운영자라면 기본 규칙보다는 rich rules를 이용하여 등록할 경우가 많으실 것으로 생각됩니다.
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192.168.150.133 port port="8888" protocol="tcp" accept' [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=192.168.150.133 port port="8888" protocol="tcp" accept' [제거]
success
☆예시
[root@localhost ~]# firewall-cmd --list-all
13. 특정 IP(대역대)에 대한 접근 불가
※ SSH(22)으로 들어오는 포트에 대해서 모두 허용이지만 특정 IP(대역대)를 접근 못하게 막는 경우
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192.168.150.133 reject' [추가] ☆Reject는 상대방이 접속 시도를 했을 경우 피드백을 보내줍니다.
[root@localhost ~]# firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=192.168.150.133 reject' [제거]
success
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192.168.150.129 drop' [추가] ☆Reject는 상대방이 접속 시도를 했을 경우 피드백을 보내지 않고 차단
[root@localhost ~]# firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=192.168.150.129 drop' [제거]
☆예시
[root@localhost ~]# firewall-cmd --list-all
14. 명령어가 아닌 public.xml 규칙에 직접 입력
※ 상황에 따라 설정 파일에 직접 등록하고 삭제하는 게 더 편할 수도 있습니다.
[root@localhost ~]# vi /etc/firewalld/zones/public.xml
[root@localhost ~]# firewall-cmd --reload [적용]
[root@localhost ~]# firewall-cmd --list-all [적용 확인]
15. 거의 TCP를 많이 사용하지만 UDP를 사용하는 경우
※ UDP는 대표적으로 네임서버(DNS)를 질의하기 위한 (53)Port가 있습니다.
[root@localhost ~]# firewall-cmd --permanent --add-port=53/udp [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-port=53/udp [제거]
success
[root@localhost ~]# firewall-cmd --list-all
ports: 53/udp [추가된 룰 확인]
16. 좀더 자세한 조건식(옵션)을 확인하기 위한 도움말[HELP] 참고
[root@localhost ~]# firewall-cmd --help | more [텍스트 양이 많기 때문에 more]
참조: https://foxydog.tistory.com/78
1. Firewall 패키지 설치 확인
※ CentOS 7 / CentOS 8 (Stream) / Rocky Linux는 기본 패키지로 설치가 되어 있습니다.
[root@localhost ~]# rpm -qa | grep firewall
firewalld-0.8.2-7.el8_4.noarch
python3-firewall-0.8.2-7.el8_4.noarch (종속 패키지)
firewalld-filesystem-0.8.2-7.el8_4.noarch (종속 패키지)
2. Firewall 패키지 업데이트가 필요한 경우
[root@localhost ~]# dnf update firewalld
마지막 메타 데이터 만료 확인 :2:17:23. 2021년 07월 21일 (수) 오전 01시 09분 06초 이전에 확인
종속성이 해결되었습니다.
처리가 필요하지 않습니다 (최신 버전일 경우)
완료되었습니다!
3. Firewall 패키지 없을 경우 설치하기
[root@localhost ~]# dnf install -y firewalld
4. Firewall 패키지 기본 설치 경로
[root@localhost ~]# cd /etc/firewalld
[root@localhost ~]# /etc/firewalld/firewalld.conf [환경 설정]
[root@localhost ~]# /etc/firewalld/zones/public.xml [방화벽 규칙 저장 설정]
5. 부팅 시 Firewall 방화벽 자동 실행 및 해제
[root@localhost ~]# systemctl enable firewalld [자동 실행]
Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.
[root@localhost ~]# systemctl disable firewalld [자동 실행 해제]
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
6. Firewall 방화벽 시작 및 중지
[root@localhost ~]# systemctl start firewalld [시작]
[root@localhost ~]# ps -ef | grep firewalld [프로세스 구동 확인]
/usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
[root@localhost ~]# systemctl stop firewalld [중지]
7. Firewall 구동 및 상태 확인
[root@localhost ~]# systemctl status firewalld | grep -i active [systemctl 명령어]
Active: active (running) since Wed 2021-07-21 04:35:30 EDT; 1min 10s ago (실행 중)
Active: inactive (dead) since Wed 2021-07-21 04:38:20 EDT; 1s ago (다운)
[root@localhost ~]# firewall-cmd --state [firewall 명령어]
running (실행 중) / not running (다운)
8. 서비스(Services) 이름으로 방화벽 허용
※ Firewall의 경우는 어플레이션에서 정해진 이름으로 허용이 가능합니다.
▷ 등록할 수 있는 서비스 이름 확인
[root@localhost ~]# firewall-cmd --get-services
▷ 서버 원격 접속을 위해 SSH를 허용할 경우
[root@localhost ~]# firewall-cmd --permanent --add-service=ssh [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-service=ssh [제거]
success (등록 성공)
▷ 추가된 룰 적용
※ 추가 및 제거 시에 무조건 룰 재시작이 필요합니다.
[root@localhost ~]# firewall-cmd --reload
success (적용 완료)
▷ 등록된 규칙 확인(전체 확인)
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: cockpit dhcpv6-client ssh [추가 확인]
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
※ SSH 접속 포트가 다를 경우
SSH 포트는 기본적으로 (22)로 정해져 있습니다. 하지만 알려진 번호는 공격에 취약하므로 관리자만 아는 접근 포트로 변경하여 설정을 할 수가 있습니다. 예를 들어 SSH 포트를 (8888)로 변경했을 때 서비스 이름(SSH)으로 등록한 규칙이 접속이 될까요?
▷ 결론은 안됩니다. add-service=ssh 서비스 이름으로 등록한 규칙은 무조건 기본 포트(22)를 따라갑니다. 하지만 정의된 파일이 있으므로 파일 수정이 가능합니다.
▷ Services 정의 파일 경로
[root@localhost ~]# ls /usr/lib/firewalld/services/
▷ SSH.xml 정의 파일 포트 수정
[root@localhost ~]# vi /usr/lib/firewalld/services/ssh.xml
이후 서비스 이름으로 등록한 SSH는 (8888) 포트로 접속할 수 있게 됩니다. 이래서 서비스 이름으로 등록하는 것보다는 유동성 있는 특정 포트로 허용 처리하는 게 더 좋습니다.
9. 특정 포트로 허용
[root@localhost ~]# firewall-cmd --permanent --add-port=80/tcp [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-port=80/tcp [제거]
success
※ 서비스 이름으로 (HTTP)로 추가해도 되지만 포트를 알고 있다면 (80)으로 등록을 합니다.
10. 특정 포트를 구간으로 허용
[root@localhost ~]# firewall-cmd --permanent --add-port=80-100/tcp [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-port=80-100/tcp [제거]
success
※ 구간 적용 확인을 위해 단일 Port(80) 허용 규칙을 삭제하고 Port(80-100)으로 등록을 합니다.
11. 특정 IP(대역대)로 허용
▷ 특정 IP
[root@localhost ~]# firewall-cmd --permanent --add-source=192.168.150.132 [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-source=192.168.150.132 [제거]
success
▷ 특정 IP 대역대
[root@localhost ~]# firewall-cmd --permanent --add-source=192.168.150.0/24 [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-source=192.168.150.0/24 [제거]
success
※ C클래스(192.168.150.0/24) = 192.168.150.0 ~ 192.168.150.255 사이의 IP를 허용
※ iptables의 경우는 IP(대역대)를 허용하면 기본 설정으로 모든 들어오는 Port에 대해서 허용이 되지만 firewall의 경우는 IP(대역대)만 허용한다고 해서 Port에 대해서 모두 허용하지 않습니다. 아래와 같이 테스트를 해보면 알 수 있습니다.
그래서 다음 내용에 혼합 사용에 대한 명령어를 따로 설명하겠습니다.
☆예시
[root@Rocky-zabbix ~]# firewall-cmd --permanent --add-source=192.168.150.133 [추가]
12. 특정 IP(대역대) + 포트 허용[rich rules]
※ rich라는 말이 풍부한, 여기서는 다양한 규칙을 적용하기 위한 말로 사용자에게 맞는 커스텀 룰쯤 생각하면 됩니다. 아래는 IP [192.168.150.133]에서 접근할 때에 (8888) Port만 허용하겠다는 뜻입니다. 서버 운영자라면 기본 규칙보다는 rich rules를 이용하여 등록할 경우가 많으실 것으로 생각됩니다.
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192.168.150.133 port port="8888" protocol="tcp" accept' [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=192.168.150.133 port port="8888" protocol="tcp" accept' [제거]
success
☆예시
[root@localhost ~]# firewall-cmd --list-all
13. 특정 IP(대역대)에 대한 접근 불가
※ SSH(22)으로 들어오는 포트에 대해서 모두 허용이지만 특정 IP(대역대)를 접근 못하게 막는 경우
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192.168.150.133 reject' [추가] ☆Reject는 상대방이 접속 시도를 했을 경우 피드백을 보내줍니다.
[root@localhost ~]# firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=192.168.150.133 reject' [제거]
success
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192.168.150.129 drop' [추가] ☆Reject는 상대방이 접속 시도를 했을 경우 피드백을 보내지 않고 차단
[root@localhost ~]# firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=192.168.150.129 drop' [제거]
☆예시
[root@localhost ~]# firewall-cmd --list-all
14. 명령어가 아닌 public.xml 규칙에 직접 입력
※ 상황에 따라 설정 파일에 직접 등록하고 삭제하는 게 더 편할 수도 있습니다.
[root@localhost ~]# vi /etc/firewalld/zones/public.xml
[root@localhost ~]# firewall-cmd --reload [적용]
[root@localhost ~]# firewall-cmd --list-all [적용 확인]
15. 거의 TCP를 많이 사용하지만 UDP를 사용하는 경우
※ UDP는 대표적으로 네임서버(DNS)를 질의하기 위한 (53)Port가 있습니다.
[root@localhost ~]# firewall-cmd --permanent --add-port=53/udp [추가]
[root@localhost ~]# firewall-cmd --permanent --remove-port=53/udp [제거]
success
[root@localhost ~]# firewall-cmd --list-all
ports: 53/udp [추가된 룰 확인]
16. 좀더 자세한 조건식(옵션)을 확인하기 위한 도움말[HELP] 참고
[root@localhost ~]# firewall-cmd --help | more [텍스트 양이 많기 때문에 more]
- 이전글Rocky Linux - 메일서버(Postfix) SPF 정책 적용 24.03.13
- 다음글리눅스 cd 명령어 (폴더/디렉토리 이동) 24.03.11
댓글목록
등록된 댓글이 없습니다.
