본문으로 바로가기

centos7 방화벽

category [ 서버 & DB 관련 ]/리눅스 2019. 11. 29. 10:51

설치

yum install firewalld

systemctl start firewalld

systemctl enable firewalld

 

설정

설정 파일

기본 설정은 /usr/lib/firewalld/ 에 위치하고 있으며 미리 설정된 zone과 zone 별 허용하는 서비스등은 이 폴더를 보면 확인할 수 있습니다.

 

시스템 개별 설정은 /etc/firewalld/ 에 위치하며 default zone 등 firewall 의 동작은 /etc/firewalld/firewalld.conf 에서 지정할 수 있으며 예로 default zone 을 dmz로 변경하려면 아래와 같이 설정하고 firewalld 를 재시작하면 됩니다.

/etc/firewalld/firewalld.conf

DefaultZone=dmz

 

커스터마이징된 zone 설정은 /etc/firewalld/zones//[ZONE].xml 에서 확인할 수 있으며 예로 public 존은 /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 accept

ed.</description>

  <service name="dhcpv6-client"/>

  <service name="http"/>

  <service name="ssh"/>

  <service name="https"/>

</zone>

 

재구동

서비스 재구동시 service iptables restart 대신 firewall-cmd 명령어를 사용합니다.

firewall-cmd --reload

 

zone

존은 서버의 용도에 맞게 사전에 정의된 네트워크의 신뢰 레벨을 의미.

 

사전 정의된 존 목록 출력

firewall-cmd --get-zones

 

 

work drop internal external trusted home dmz public block

 

전체 존 목록을 상세하게 출력

firewall-cmd --list-all-zones

 

기본 존 출력

default 로 설정된 존 출력

firewall-cmd --get-default-zone

 

 

public

 

활성화된 존 출력

firewall-cmd --get-active-zone

 

새로운 존 추가

--new-zone=ZONENAME 으로 추가

firewall-cmd --permanent --new-zone=webserver

 

존 삭제

--delete-zone=ZONENAME 으로 삭제

firewall-cmd --permanent --delete-zone=webserver

 

 

서비스 목록

사전에 정의된 서비스의 목록은 --get-services 으로 확인 가능

firewall-cmd --get-services

 

 

RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https

permanent 로 등록된 서비스 목록

dmz 존에 영구적으로 등록된 서비스 목록 확인

firewall-cmd --permanent --list-all --zone=dmz

 

서비스 추가

--add-service=SERVICE_NAME 으로 추가할 서비스 지정

firewall-cmd --permanent --zone=dmz --add-service=http

서비스 삭제

--remove-service=SERVICE_NAME 으로 삭제할 서비스 지정

firewall-cmd --permanent --zone=dmz --remove-service=http

포트 추가

--add-port=<portid>[-<portid>]/<protocol> 옵션을 사용하여 포트 추가

포트 추가/변경, IP 추가/변경는 --reload 옵션을 실행해야 반영됨.

firewall-cmd --permanent --zone=public --add-port=8080/tcp

포트를 범위로 지정하려면 - 구분자를 넣어서 설정

4000 ~ 4100 포트 오픈

firewall-cmd --permanent --zone=public --add-port=4000-4100/tcp

firewall-cmd --reload

 

포트 삭제

--remove-port=<portid>[-<portid>]/<protocol> 옵션 사용

firewall-cmd --permanent --zone=public --remove-port=8080/tcp

허용 IP 추가

--add-source=<source range>/netmask 옵션을 사용하여 IP 추가

 

아래 예는 192.168.1. 대역에서 ssh 접근을 허용

firewall-cmd --permanent --zone=public --add-source=192.168.1.0/24 --add-port=22/tcp

 

 

firewall-cmd --reload

rich-rule

보다 복잡한 규칙 설정이 필요할때나 firewall-cmd에서 필요로 하는 옵션을 제공하지 않을 경우 rich rule 언어를 사용하여 직접 방화벽 규칙을 설정할 수 있음.

새로운 룰 추가는 --add-rich-rule='<rule>' 와 같은 형식으로 설정

 

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4"  source address="192.168.10.0/24"  port protocol="tcp" port="9000" accept"

 

 

direct

--direct 옵션을 사용하면 기존의 iptables 명령처럼 직접 방화벽 내부에 접근해서 설정할 수 있음

$ sudo firewall-cmd  --direct --get-all-rules

 

ipv4 filter INPUT 0 -p tcp -m multiport --dports ssh -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable

 

 

firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth_ext -j MASQUERADE

 

서비스 설정

웹 서버 방화벽 설정

  1. 새로운 zone 생성

    firewall-cmd --permanent --new-zone=webserver

  2. 활성화

    firewall-cmd --set-default-zone=webserver

  3. 방화벽에 포트 추가

    firewall-cmd --permanent --zone=webserver --add-service=http

    firewall-cmd --permanent --zone=webserver --add-service=https

    기본 zone이 webserver 이므로 --zone=webserver 옵션은 생략 가능

  4. firewalld 재시작

    firewall-cmd --reload

  5. 정상 설정 여부 확인

    firewall-cmd --list-services   --zone=webserver

      

    dhcpv6-client http https ssh

apache 웹서버 설정

  1. 서비스 활성화

    systemctl enable httpd

  2. 서비스 시작

    systemctl start httpd

nginx 설정

  1. 기존에 아파치 httpd 가 설치되어 있으면 비활성화

    systemctl stop httpd

    systemctl disable httpd

  2. 서비스 활성화

    systemctl enable nginx.service

  3. 시작

    systemctl start nginx.service

 

출처 : https://www.lesstif.com/pages/viewpage.action?pageId=22053128#RHEL/CentOS7%EC%97%90%EC%84%9C%EB%B0%A9%ED%99%94%EB%B2%BD(firewalld)%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-%ED%8F%AC%ED%8A%B8%EC%B6%94%EA%B0%80

 

RHEL/CentOS 7 에서 방화벽(firewalld) 설정하기

RHEL 7 부터는 방화벽을 관리하는 데몬이 firewalld 로 변경되었고 방화벽 설정은 복잡한 iptables 명령어대신 firewall-cmd (콘솔), firewall-config(X-Windows) 명령어를 사용하는 것을 권장합니다.

www.lesstif.com

 

 

 

참조 : https://fblens.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%8F%AC%ED%8A%B8-%ED%99%95%EC%9D%B8

 

[Linux] 방화벽 포트 확인 & 열기

리눅스 서버를 돌릴 때 포트가 열렸는지 닫혔는지를 확인하고, 포트를 열고 닫기에 대한 글입니다! 제가 쓴 리눅스는 Linux Redhat 7.0 (RHEL) 기준으로 쓰였지만, 대다수의 리눅스 버젼에서 통용됩니다! <수정>..

fblens.com