리눅스 방화벽
- 외부에서 시스템으로 접근하는 패킷을 차단하는 서비스
- 규칙을 이용해 접근을 허용하거나 차단할수 있다.
- zone
- 서비스
- 포트
- IP
- interface
Netfilter(Kernel) <- iptables(명령) <- iptables(service) <- firewall(service) <- firewall-cmd <- firewall-config
firewall
iptables의 단점을 보완. 동적으로 방화벽 설정 변경 가능
- Runtime : 시스템 운영중인 상태일때 반영.
- Permanent : 서비스가 재시작 되었을때도 반영(영구 설정). XML파일
- iptables : Netfilter 제어하는 도구를 사용 (Centos 7이전)
pre-defined Zone
block : 모든 패킷 거부
dmz : 내부로 들어오는 패킷 거부
drop : 내부로 들어오는 모든 패킷 DROP 폐기, ICMP 에러도 폐기
- 폐기(drop) : 패킷을 받으면 응답 없이 버린다.
- 거절(reject) : 패킷을 받으면 거부한다라는 ICMP 패킷을 보내준다.
external : 내부로 들어오는 패킷 거부 (SSH 허용), 외부로 나가는 모든 패킷 허용
home : 내부로 들어오는 패킷 거부(SSH, DHCP Client, samba, ... 허용) 외부로 나가는 모든 패킷 허용
internal : 내부로 들어오는 패킷 거부(SSH, DHCP Client, samba, ... 허용) 외부로 나가는 모든 패킷 허용
public : 내부로 들어오는 모든 패킷 거부(SSH, DHCPv6-... 허용), 외부로 나가는 모든 패킷 허용
trusted : 내부로 들어오는 모든 패킷 허용 외부로 나가는 모든 패킷 허용
work : 내부로 들어오는 모든 패킷 거부(SSH,DHCPv4, IPP 허용), 외부로 나가는 모든 패킷 허용
firewall-cmd [sub-command]
--state : firewalld 실행 상태 확인
--get-default-zone : 현재 기본 영역 표시
--set-default-zone=[zone] : 기본 영역 설정
--get-zones : 사용가능한 모든 영역 나열
--get-services : 사용가능한 모든 서비스 나열
--get-active-zones : 현재 사용중인 모든 영역과 인터페이스 및 소스정보 나열
--add-source=[ip주소] --zone=[zone] : 출발지 주소 규칙 추가 => '--zone' 옵션을 통해 zone 지정해주지 않으면 자동으로 기본영역에 추가
--remove-source=[ip주소] : IP 주소를 지정된 영역에서 제거
--add-interface=[ifname] --zone=[zone] : 특정 영역에 interface 연결 추가
--change-interface=[ifname] --zone=[zone] : 영역에 연결된 interface 변경
--list-all --zone=[zone] : 영역(zone)에 구성된 모든 인터페이스, 소스, 서비스, 포트 나열
--add-protocol=[프로토콜 명] : 해당 프로토콜 연결
--add-service=[service] --zone=[zone] : 해당 서비스에 트래픽 허용
- firewall-cmd -- add-service=http --permanent
--add-port=[port/protocol] --zone=[zone] : 해당 포트나 프로토콜 트래픽 허용
- firewall-cmd --add-port=23/tcp --permanent
--permanent : 해당 옵션을 사용하지 않으면 현재 설정이 변경되며 영구설정은 지정이 안됨.
--reload : 런타임 구성 삭제, 영구 구성 적용
- firewall -cmd --reload
--runtime-to-permanent : 실행중 설정을 영구 설정으로 변경
firewall 실습
# centos, server 초기화
# server에서 작업
# nfs-utils, nfs-utils-lib 패키지 설치
$ yum install -y nfs-utils nfs-utils-lib
# nfs 서비스를 시작,활성화 후에 상태 확인
$ systemctl start nfs
$ systemctl enable nfs
# home zone에 다음 사항 추가 영구설정
# 포트 번호
# 80/tcp, 111/tcp, 2049/udp, 20048/tcp
$ firewall-cmd --add-port=80/tcp --add-port=2049/udp --add-port=20048/tcp --permanent
# 프로토콜
# ICMP
$ firewall-cmd --add-protocol=ICMP --permanent --zone=home
# 서비스
# nfs
$ firewall-cmd --add-service=nfs --permanent --zone=home
# home zone 상태 확인
$ firewall-cmd --list-all --zone=home
$ firewall-cmd --list-all --permanent --zone=home
$ firewall-cmd --reload
$ firewall-cmd --list-all --zone=home
# home zone 을 default-zone 으로 설정
$ firewall-cmd --set-default-zone=home
# centos 컴퓨터에서 http://192.168.56.100/index.html 을 했을 경우
# this is centos 라고 출력 되도록 하시오.
# httpd 서비스가 켜져 있어야 한다!!!
$ systemctl start httpd
$ systemctl enable httpd
$ firewall-cmd --add-serivce=http
$ echo "Hello" > /var/www/html/index.html