Linux 보안

Firewall - 서버 방화벽

Firewall 상태 확인 - firewall-cmd --state


Firewall 설치(기본적으로 설치되어 나오지만 간혹 되어있지 않은 경우도 있음)

yum을 이용한 firewall 설치

sudo yum install firewall


매번 서버 부팅/재부팅 시 자동으로 데몬이 실행되게 한다

sudo systemctl enable firewalld
sudo systemctl start firewalld


데몬으로 현재 실행하고 있는 서비스 및 포트 확인

서비스 확인

systemctl list-units --type=service --state=running


Firewall로 현재 활성화 되어 있는 서비스 및 포트 확인

서비스 확인

sudo firewall-cmd --zone=public --list-services

포트 확인

sudo firewall-cmd --zone=public --list-ports

서비스로 방화벽 해제

ex) http, https 추가(해제)

추가

sudo firewall-cmd --permanent --add-service=http //http 서비스 추가
sudo firewall-cmd --permanent --add-service=https //htts 서비스 추가

제거

sudo firewall-cmd --permanent --remove-service=http //http 서비스 제거
sudo firewall-cmd --permanent --remove-service=https //https 서비스 제거


특정 port로 방화벽 해제

ex) 80, 81번 포트

추가

sudo firewall-cmd --permanent --add-port=80/tcp //80번
sudo firewall-cmd --permanent --add-port=81/tcp //81번

제거

sudo firewall-cmd --permanent --remove-port=80/tcp //80번
sudo firewall-cmd --permanent --remove-port=81/tcp //81번


현재 방화벽 리스트 보기

firewall-cmd --list-all


백업

/etc/firewalld 디렉터리를 백업


SELinux? - 관리자가 시스템 액세스 권한을 효과적으로 제어할 수 있는 Linux 시스템용 보안 아키텍처


SELinux 작동 확인 - sestatus

SELinux 작동방식

애플리케이션, 프로세스, 파일에 대한 액세스 제어 정의

파일에 대한 액세스를 요청하면 액세스 백터 캐시를 확인 후 캐시된 권한에 따라 액세스에 대한 결정을 내리고 내릴 수 없는 경우 보안 서버로 요청을 보냄

보안 서버는 애플리케이션 또는 프로세스 파일의 보안 컨텍스트를 확인 후 권한을 부여하거나 거부


SELinux 활성화(비활성화 된 경우)

SELinux 설치

sudo yum -y install policycoreutils


설정 파일 편집

sudo vi /etc/selinux/config

selinux 항목 enforcing 또는 permissive로 설정

설정 후 저장하고 나오기


시스템 재부팅

sudo reboot


활성화 여부 재확인

sestatus


보안 컨텍스트

Context - 문맥, 맥락


보안 컨텍스트는 login, user, port, interface, node, fcontext(파일) 등에 적용 가능


보안 컨텍스트 확인 명령어

디렉터리/파일 컨텍스트 확인 - ls -Z /etc/httpd, ls -Z /var/www

실행중인 프로세스 컨텍스트 확인 - ps auxZ | grep httpd

포트 컨텍스트 확인 - semange port -l | grep httpd


SELinux 동작 확인

경로 - /etc/selinux/config


보안 컨텍스트 적용

semanage - SELinux Policy Management tool 설치

sudo yum -y install policycoreutils


파일에 보안 컨텍스트 추가

sudo chcon -Rv --type=httpd_sys_rw_content_t /var/www/html/wiki/data


포트에 보안 컨텍스트 추가

sudo semanage port -a -t ssh_port_t -p tcp xxxx


iptables

  • 리눅스 커널에서 제공하는 네트워크 패킷 제어 유틸리티
  • 구식 시스템에서 사용하며 사용이 어렵기에 firewalld와 ufw 같은 도구가 나왔다.
  • IP + Port 조합의 특정 조건에 맞는 CHAIN을 선언하고, 해당 체인에 패킷이 들어오면 DROP 하도록 설정하여 방화벽을 구분한다.


iptables를 이용한 ping 통신 차단

iptables -A INPUT -p icmp --icmp-type echo-request -s [ip주소] -j DROP


iptables의 규칙 추가를 이용해 특정 ip에서 오는 ping을 차단하는 규칙을 추가

규칙 추가 전과 후의 모습을 비교해본 결과,

추가 전에는 핑통신이 잘됬지만 추가 후에는 핑통신이 차단됨


통신 차단 전과 후의 모습

규칙 추가 전과 후의 모습

TCP Wrapper

  • 리눅스 시스템에서 네트워크 접속을 제어하기 위해 사용되는 보안 도구, 특정 IP 주소에 기반하여 서비스 접근을 허용하거나 차단할 수 있는 기능 제공
  • 리눅스 커널의 TCP 패킷 처리과정에 관여하여 접속을 allow 또는 deny 함.
  • /etc/hosts.allow, /etc/hosts.deny 파일을 통해 특정 서비스에 대한 IP 접속을 허용/거부할 수 있음.

(최신 리눅스 커널에서는 사용 불가, CentOS 8이상부터 사용 불가)