(Linux)방화벽
[카카오 클라우드 스쿨]방화벽과 방화벽의 Zone에 대해 공부해 보자구
방화벽
- 방화벽은 나가는것/들어오는것의 차단 말고도 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 구성해 보기
- 과거의 방화벽은 인터페이스 별로 정책을 설정하였다
- 최근에는 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 접근 가능 (웹포트가 방화벽 허용되어 있음)