Contents
(Linux)방화벽
   2022년07월23일     4분정도면 다 읽어요     - Comments

[카카오 클라우드 스쿨]방화벽과 방화벽의 Zone에 대해 공부해 보자구

방화벽

  • img_46
  • 방화벽은 나가는것/들어오는것의 차단 말고도 transit 이란 것이 있음!

transit(forwarding) 설정해 보기

  • OS에서 forwarding 기능 활성화 (일시적)
[root@server network-scripts]# cat /proc/sys/net/ipv4/ip_forward
0
[root@server network-scripts]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@server network-scripts]# cat /proc/sys/net/ipv4/ip_forward
1
  • 재부팅 시 영구적으로 활성화
[root@server network-scripts]# vi /etc/sysctl.conf
---
net.ipv4.ip_forward



방화벽의 Zone 구성해 보기

  • 과거의 방화벽은 인터페이스 별로 정책을 설정하였다
    • img_45
    • 최근에는 Zone을 구성해서 간편하게 정책 설정 가능!
  • centOS7로 실습해 보자


1. cent7로 와서 방화벽 켜보기

[root@server ~]# systemctl status firewalld
[root@server ~]# 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:
  • 현재 방화벽이 켜져 있는 상태
    • 그러나 ssh 및 웹포트는 열려 있음


2. 현재 디폴트 존 확인

[root@server ~]# firewall-cmd --get-default-zone
public


3. 새로운 Zone을 구성해 보기

  • work 존에 해당하는 인터페이스 추가
[root@server ~]# firewall-cmd --zone=work --add-interface=eth1
success
  • work 존에 ssh, http서비스 추가하기
[root@server ~]# firewall-cmd --zone=work --add-service=ssh
Warning: ALREADY_ENABLED: 'ssh' already in 'work'
success
[root@server ~]# firewall-cmd --zone=work --add-service=http
success
  • 정해져 있지 않은 특정 포트로 지정 가능
[root@server ~]# firewall-cmd --zone=work --add-port=8888/tcp
success
  • work 존의 리스트(구성 상태) 확인하기
    • 포트와, ssh, http를 확인할 수 있음
[root@server ~]# firewall-cmd --zone=work --list-all
work (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth1
  sources:
  services: dhcpv6-client http ssh
  ports: 8888/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
  • work 존으로부터 서비스, 포트 제거하기
[root@server ~]# firewall-cmd --zone=work --remove-service=http
success
[root@server ~]# firewall-cmd --zone=work --remove-port=8888/tcp
success
  • 하지만 이런 설정들은 영구적이지 않음(재부팅 시 사라짐)


4. 영구적으로 Zone에 적용시키기

  • 기본(default) 존에 영구적으로 포트 추가하기 (미 지정시 기본 존)
[root@server ~]# firewall-cmd --permanent --add-port=80/tcp
success
[root@server ~]# firewall-cmd --permanent --add-port=3306/tcp
success
  • 구성 파일을 최종 적용한다
[root@server ~]# firewall-cmd --reload
success
  • 적용된 모습은 다음 파일에서 확인할 수 있다
[root@server ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <port protocol="tcp" port="80"/>
  <port protocol="tcp" port="3306"/>
</zone>


5. xml 파일을 통해 새로운 존을 만들어 보기

[root@server ~]# cd  /etc/firewalld/zones/
[root@server zones]# cat public.xml > dbzone.xml
[root@server zones]# vi dbzone.xml
---
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Database</short>
  <description>For use in public areas</description>
  <service name="ssh"/>
   <port protocol="tcp" port="3306"/>
   <port protocol="tcp" port="33060"/>
</zone>
---
firewall-cmd --reload
  • dbzone 이라는 존이 추가된 것을 확인할 수 있다
[root@server zones]# firewall-cmd --get-zones
block dbzone dmz drop external home internal public trusted work



특정 프로그램에 대한 방화벽 적용

1. 특정 프로그램(mariadb)에 대해 방화벽 영구 적용시켜 보기

  • 수많은 xml 파일 중 하나를 복사해서 조금 수정한 뒤 써 보자
[root@server services]# cd /etc/firewalld/services
[root@server services]# cp /usr/lib/firewalld/services/ssh.xml ./mariadb.xml
[root@server services]# vi mariadb.xml
---
  <port protocol="tcp" port="3306"/>
---
  • 적용시키기
[root@server services]# firewall-cmd --reload
success

[root@server services]# firewall-cmd --permanent --add-service=mariadb
success


2. 특정 포트(웹포트)에 대해 방화벽 영구 적용시켜 보기

[root@server services]# firewall-cmd --permanent --add-port=80/tcp
Warning: ALREADY_ENABLED: 80:tcp
success
  • 이제 centOS8에서 방화벽이 켜진 centOS7 접근 가능 (웹포트가 방화벽 허용되어 있음)
    • img_114