본문 바로가기

OS,Network,Container

리눅스 방화벽이란? Firewall

반응형

리눅스 방화벽이란? Firewall

 

 

리눅스 방화벽에 대해 알아보겠습니다.

 

 

Firewalld는 CentOS7부터 이전의 많이 불편했던 Iptables를 대체해 새롭게 선보인 패킷 필터링 방화벽 프로그램이라고 한다. 

 

 

Firewall 작동 원리

GUI 모드 배제하겠다. ( firewall-config를 써봤을때 편리하긴 했지만 CLI 모드를 사용하고 있으므로 )

 

Firewalld 데몬

이러한 명령어들은 Firewalld 란 데몬이 실행된 상태여야 명령어들을 실행하여 적용할 수 있으며, firewald 데몬은 이러한 명령어들로부터 설정 내용을 전달받아 명령어 iptables로 전달한다.

 

( firewalld 데몬은 systemctl start firewalld 를 통해 서비스를 시작할 수 있으며, 재부팅 할 때마다 계속 서비스를 실행하기 위해서는 systemctl enable firewalld 를 해주면 된다. )

 

 

Netfilter

이러한 firewall 관련 명령어가 firewalld 데몬을 통해 iptables로 전달되고 iptables 로 들어오면 리눅스 커널에서 Netfilter 모듈이 확성화되어야 제대로 동작한다. ( default로 활성화되어 있음 )

 

 


 

[ Firewall 패키지 설치 ]

 

 

yum -y install firewall-config        / 설치

rpm -qa | grep firewall                / 사람마다 다르게 뜰거임.

# yum -y install firewalld firewall-config

.. ( 설치 진행 )

# rpm -qa | grep firewall
firewall-config-0.6.3-2.el7_7.4.noarch
python-firewall-0.6.3-2.el7_7.4.noarch
firewalld-0.6.3-2.el7_7.4.noarch
firewalld-filesystem-0.6.3-2.el7_7.4.noarch

 

 

[ Firewalld 서비스 (데몬) 시작 . 실행 . 확인]

 

 

- systemctl restart firewalld      / firewalld 데몬을 실행

- systemctl  enable firewalld     / firewalld 데몬이 재부팅 후에도 자동으로 시작되도록 설정

- systemctl status firewalld       / firewalld 데몬 상태 확인

- ps -ef | grep firewalld

[root@localhost ~]# systemctl restart firewalld
[root@localhost ~]# systemctl enable firewalld
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-03-21 08:38:10 PDT; 25s ago
     Docs: man:firewalld(1)
 Main PID: 1555 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─1555 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

Mar 21 08:38:10 localhost.localdomain systemd[1]: Stopped firewalld - dynamic firewall d...n.
Mar 21 08:38:10 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall .....
Mar 21 08:38:10 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall d...n.
Hint: Some lines were ellipsized, use -l to show in full.

[root@localhost ~]# ps -ef | grep firewalld
root       1555      1  0 08:38 ?        00:00:00 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
root       1692   1330  0 08:40 pts/0    00:00:00 grep --color=auto firewalld

 

 

 


 

[ Firewalld 정보 확인 ]

 

 

- firewall-cmd --list-all

services : default로 dhcpv6-client 와 ssh 가 허용되어 있는 것을 볼 수 있다.

ports    : 22/tcp는 필자가 예전에 포트를 추가한 것이다. ( 그냥 해봄 )

처음이라면 아무것도 없어야 정상이다.

 

 

 

 

[ firewall 포트 추가, 해제, 설정 적용 ]

 

- firewall-cmd --permanent --zone=public --add-port=포트번호/tcp

( UDP 의 경우에는 tcp 말고 udp 라고 기입해야 한다. )

 

- firewall-cmd --permanent --remove-port=포트번호/tcp

 

- firewall-cmd --reload

firewall 설정 후 reload 하지 않으면 적용이 안된다. 꼭 해주어야 함

 

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp
success
[root@localhost ~]# firewall-cmd --permanent --remove-port=80/tcp
success
[root@localhost ~]# firewall-cmd --reload
success

 

 

 

[ 모든 서비스에 대해 특정 IP 허용 ]

 

- firewall-cmd --permanent --add-source=IP주소

[root@localhost ~]# firewall-cmd --permanent --add-source=IP주소

 

 

 

[ 간단한 firewalld 설정 ]

 

DNS 포트인 53번을 열어주었고, reload를 통해 설정 후 적용을 해주었다. 

확인하기 위하여 firewall-cmd --list-all을 하였다.

 

( 부록 : firewall-cmd --state 로 작동 되는지 간단히 확인.. ㅎ )

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=53/tcp
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: dhcpv6-client ssh
  ports: 22/tcp 53/tcp					# 추가 된 것을 확인할 수 있다.
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[root@localhost ~]# firewall-cmd --state
running

 

 

 

 

 

[ 자주 사용하는 서비스 포트 번호 목록 ]

 

암기해두면 인생 살아가는데 많은 도움이 되니 암기해두자. 

 

 

반응형