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을 통해 설정을 적용한다.

 

 

 

 

참고

반응형