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이상부터 사용 불가)