OS/Linux
내부 방화벽 설정(UFW iptables firewalld)
LukeHan1128
2021. 9. 28. 20:00
반응형
UFW
리눅스 방화벽 중 가장 많이 사용되는게 iptables 인데 iptables 의 작업을 간편화 해 주는 소프트웨어가 UFW(Uncomplicated Fore Wall = 복잡하지 않은 방화벽) 이다.
UFW 사용법
# 활성화
sudo ufw enable
# 비활성화
sudo ufw disable
# 상태확인
sudo ufw status verbose
# 기본룰 확인
sudo ufw show raw
# 기본 정책 차단
sudo ufw default deny
# 기본 정책 허용
sudo ufw default allow
# ufw 허용 - ex) SSH 포트 22번 허용(tcp/udp 22번 포트를 모두 허용)
sudo ufw allow <port>/<optional: protocal>
sudo ufw allow 22
# tcp 22번 포트만을 허용 - SSH는 tcp 22번 포트만 허용하는게 정답
sudo ufw allow 22/tcp
# udp 22번 포트만 허용
sudo ufw allow 22/udp
# ufw 거부 - ex) SSH 포트 22번 거부(tcp/udp 22번 포트를 모두 거부)
sudo ufw deny <port>/<optional: protocol>
sudo ufw deny 22
# tcp 22번 포트만 거부
sudo ufw deny 22/tcp
# udp 22번 포트만 거부
sudo ufw deny 22/udp
# ufw 룰 삭제 - ex) ufw deny 22/tcp 설정이 되어있다고 가정
sudo ufw delete deny 22/tcp
# service 명을 이용한 설정 - /etc/services 에 지정되어 있는 서비스 명과 포트를 이용해 ufw 를 설정할 수 있다.
# 서비스명 보기
less /etc/services
# 서비스명으로 허용/거부 - ex) SSH 서비스
sudo ufw allow <service name>
sudo ufw allow ssh
sudo ufw deny ssh
# ufw 로그 기록
sudo ufw logging on
sudo ufw logging off
Advanced Syntax
문법을 확장하여 목적지 주소와 포트, 프로토콜 등을 지정할 수 있다.
# 특정 IP 주소 허가/거부 - ex) 192.168.0.80 주소 허용
sudo ufw allow from 192.168.0.80
# 네트워크 단위로 지정하여 같은 네트워크 상에 있는 컴퓨터들은 접속가능해진다.
sudo ufw allow from 192.168.0.0/66
# 특정 IP 주소와 일치하는 포트 허용 - ex) 192.168.0.80 주소와 포트, 프로토콜 허용
sudo ufw allow from <ip address> to <protocol> port <port number>
sudo ufw allow from 192.168.0.80 to any port 22
# 특정 IP 주소와 프로토콜, 포트 허용/거부 - ex) 192.168.0.80 주소와 tcp 프로토콜 22번 포트 허용/거부
sudo ufw allow/deny from <ip address> to <protocol> port <port number> proto <protocol name>
sudo ufw allow from 192.168.0.80 to any port 22 proto tcp
sudo ufw deny from 192.168.0.80 to any port 22 proto tcp
# ping(icmp) 허용/거부 - ufw 기본설정은 ping 요청을 허용하도록 되어 있다.
sudo vi /etc/ufw/before.rules
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
# 위 코드들의 ACCEPT 부분을 모두 DROP 으로 변경하거나 삭제하면 ping 요청을 거부하게 된다.
ufw numbered rules
# ufw 룰들에 숫자를 붙여서 볼 수 있다. 이를 이용해 룰을 수정하거나 삭제 추가를 할 수 있다.
# ufw number 보기
sudo ufw status numbered
# ufw numbered 수정
sudo ufw delete 1
sudo ufw insert 1 allow from 192.168.0.80
iptables
리눅스에서 가장 많이 사용하는 방화벽이다.
iptables 는 커널상에서 netfilter 패킷필터링 기능을 사용자가 제어할 수 있다.
패킷필터링이란 수신된 패킷의 헤더 정보를 보고 패킷을 폐기할지 수신할지를 결정하는 것을 말한다.
헤더에 필터링할 정보인 출발지 ip:port / 도착지 ip:port 등 프로토콜 옵션을 가지며 각각의 전송 데이터가 들어간다.
특정 조건을 가지고 있는 패킷에 대해 허용(ACCEPT) 및 차단(DROP)등을 지정할 수 있다.
# iptables 초기화
iptables -F
# 설정 내용 출력
iptables -nL
# TCP port 22 를 열어 ssh 접속을 가능하도록 설정
iptables -A INPUT -p tcp -m tcp --drpot 22 -j ACCEPT
# localhost 접속 허용
iptables -A INPUT -i lo -j ACCEPT
# DNS TCP 53 / UDP 53
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
# 80 443 포트 개방
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# iptables 는 등록 순서에 영향을 받는다. 먼저 등록한 정책이 우선순위가 높다.
# 나중에 추가로 추가할 경우 순서를 설정해서 추가할 수 있다. 1번으로 등록하는 예시이다.
# -A 옵션 대신 -I 옵션을 쓰고 번호를 지정해 주면 된다.
iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
# ip 차단
iptables -I INPUT -s 111.222.33.44 -j DROP
# 포워딩
iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 8080
# 확인
iptables -t nat -L
# 제거
iptables -D INPUT 1 -p tcp --dport 443 -j ACCEPT
# 변경후 저장을 해 주어야 os 재시작시 동일한 설정이 적용된다.
netfilter-persistent save
netfilter-persistent reload
firewalld
CentOS7 부터 iptables 를 대체하여 새롭게 선보인 패킷 필터링 방화벽이다.
firewalld도 netfilter 모듈기능을 둔 방화벽으로 설정에 대한 변경을 언제든지 할 수 있고,
변경 사항을 저장할 필요 없이 즉시 적용하기 때문에 iptables 가 정적(static)인 반면 firewalld는 동적(dynamic) 방화벽인 점이 차이점이다.
iptables가 INPUT OUTPUT FORWARD 같은 체인을 이용해 방화벽을 설정하지만 firewalld 는 네트워크 인터페이스에 기초한 zone을 통해 설정을 적용한다.
참고
반응형