✔️ 리눅스 방화벽이란 ?
- firewall이란 centOS7부터 이전의 많이 불편했던 Iptables를 대체해 새롭게 선보인 패킷 필터링 방화벽 프로그램
- 외부에서 시스템으로 접근하는 패킷을 차단하는 서비스이다.
- 규칙을 이용해 접근을 허용하거나 차단할 수 있다.
✔️ 방화벽 작동 원리
Firewalld 데몬
이러한 명령어들은 Firewalld란 데몬이 실행된 상태여야 명령어들을 실행하여 적용할 수 있으며, firewalld 데몬은 이러한 명령어들로부터 설정 내용을 전달받아 명령어 iptables로 전달한다.
(firewalld 데몬은 systemctl start firewalld 를 통해 서비스를 시작할 수 있으며, 재부팅 할 때마다 계속 서비스를 실행하기 위해서는 systemctl enable firewalld 를 해주면 된다.)
Netfilter
이러한 firewall 관련 명령어가 firewalld 데몬을 통해 iptables로 전달되고 iptables로 들어오면 리눅스 커널에서 Netfilter 모듈이 확성화되어야 제대로 동작한다. (default로 활성화되어 있음)
✔️ 방화벽의 종류
- 패킷 필터링
- 어플리케이션 프락시 방식
- 서킷 게이트웨이 방식
✔️ 방화벽 명령어
✔️ 설치
yum install firewalld
✔️ 시작/중지/재시작
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --reload
✔️ 확인
rpm -qf $(which firewall-cmd) # 버전 확인
systemctl status firewalld # 현재 리눅스에서 방화벽 서비스 동작 여부
✔️ firewall-cmd 명령어
방화벽 실행 여부 확인 | firewall-cmd --state | 실행 중이면 running 아니면 not running 출력 |
방화벽 설정 목록 출력 | firewall-cmd --list-all | 방화벽 설정 목록을 출력 |
방화벽 다시 로드 | firewall-cmd --reload | 방화벽 설정 후 다시 로드해야 적용 |
ip 허용 | firewall-cmd-add-source=192.168.1.1 | 아이피를 허용한다. |
port 범위로 열기 | firewall-cmd --permanent --add-port=8000-8100/tcp | |
ip/port 허용 | firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192.168.1.1 port port="80" protocol="tcp" accept' | 아이피/포트 허용 |
Zone 출력하기 | firewall-cmd --get-zones | 존(Zone) 출력하기 |
firewall-cmd --get-default-zone | 기본 존을 출력 | |
firewall-cmd --get-active-zones | 활성화된 존을 출력 | |
사용 가능 서비스/포트 출력 | firewall-cmd --add-service=ftp | ftp 서비스를 추가 |
firewall-cmd --remove-service=ftp | ftp 서비스를 제거 | |
firewall-cmd --add-port=21/tcp | 21 tcp 포트 추가 | |
firewall-cmd --remove-port=21/tcp | 21 tcp 포트 제거 | |
다른 zone에 작업하고 싶을 때 | firewall-cmd --zone=trusted --add-service=ftp | trusted 존에 ftp 서비스를 추가 |
영구 적용 permanent 옵션 | firewall-cmd --permanent --add-service=ftp | 시스템 재부팅 또는 방화벽 재시작 이후에도 적용 |
icmptype 확인 | firewall-cmd --get-icmptype |
✔️ 설정파일 확인
cd /usr/lib/firewalld/
cat /etc/firewalld/firewalld.conf # firewalld 설정 파일
✔️ iptables
방화벽 정책을 확인할 수 있는 명령어이다. 현재 설정되어 있는 방화벽 정책/규칙을 확인하는 것 뿐만 아니라 옵션을 사용해 정책과 규칙을 생성, 수정하거나 삭제하는 작업이 가능하다. 옵션 없이 사용하면 명령어가 실행되지 않는다.
iptables -L, iptables -nL => 방화벽 정책 확인
✔️ 리눅스 방화벽 정책 목록
Chain
윈도우에서 방화벽 정책 종류는 인바운드, 아웃바운드 2가지 정책이 있다. 리눅스 역시 내 컴퓨터로 들어오는 통신과 나가는 통신에 대한 정책이 존재하는데 리눅스에서는 체인(Chain)이라는 용어로 사용한다.
리눅스에서 기본 체인은 크게 3가지가 존재한다.
- INPUT - 윈도우의 인바운드 개념
- OUTPUT - 아웃바운드 개념
- FORWARD - 내 리눅스 PC를 경유하는 패킷에 대한 정책을 정의
Target
chain 아래에 해당 정책 내에 정의된 규칙이 표시된다. 맨 첫 줄에 이들 규칙이 무엇을 의미하는지 표시해놓았는데, 가장 첫 필드의 이름이 target으로 되어있다. 이 target은 각 줄에 정의된 규칙을 어떻게 처리할지에 대해 나타낸 부분이라고 보면 된다. 타겟에 들어갈 수 있는 기본값은 다음과 같다.
- ACCEPT - 해당 규칙과 일치하는 통신을 허용
- Drop - 규칙과 일치하는 통신 패킷을 버림 / ping 응답 자체가 ping 요청을 한 PC로 돌아가지 않는다.
- Reject - 해당 규칙과 일치하는 통신을 거부 / 되돌려줘야 하는 통신 패킷 존재 시 "통신 거부" 내용을 돌려준다.
✔️ 리눅스 방화벽 실습
상태 확인
[root@client ~]# firewall-cmd --state
running
[root@client ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8 enp0s9
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
특정 Zone 확인
[root@client ~]# firewall-cmd --get-default-zone
public
[root@client ~]# firewall-cmd --list-all --zone=work
work
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@client ~]# firewall-cmd --set-default-zone=home
success
[root@client ~]# firewall-cmd --list-services
ssh mdns samba-client dhcpv6-client
# http 포트 열기(임시)
[root@client ~]# firewall-cmd --add-service=http
success
[root@client ~]# firewall-cmd --list-services
ssh mdns samba-client dhcpv6-client http
[root@client ~]# firewall-cmd --list-services --permanent
ssh mdns samba-client dhcpv6-client
[root@client ~]# firewall-cmd --reload
success
[root@client ~]# firewall-cmd --list-services
ssh mdns samba-client dhcpv6-client
# 영구설정
[root@client ~]# firewall-cmd --add-service=http --permanent
success
[root@client ~]# firewall-cmd --reload
success
[root@client ~]# firewall-cmd --add-port=23/tcp --permanent
success
[root@client ~]# firewall-cmd --reload
success
[root@client ~]# firewall-cmd --list-ports
23/tcp
[root@client ~]# systemctl start httpd
[root@client ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@client ~]# firewall-cmd --add-service=http
success
http://192.168.56.200/ 에 접속하면 접속이 불가하다가 설정 이후 제대로 접속된다.
+ 자주 사용하는 서비스 포트 번호
🔗 참고
'Linux' 카테고리의 다른 글
[Linux] Master & Slave (1) | 2022.03.10 |
---|---|
[Linux] DNS 동작 (0) | 2022.03.10 |
[Linux] SSH (Secure Shell) (0) | 2022.03.07 |
[Linux] 네트워크 관리 - NetworkManager (0) | 2022.03.04 |
[Linux] 패키지 관리 도구 (RPM & YUM) (0) | 2022.03.04 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!