Search
Duplicate
📒

[Linux CLI] 05-4. 시스템 방화벽

상태
미진행
수업
Linux
주제
4 more properties
참고

시스템 방화벽

NOTE
Linux 커널의 내부 네트워크 스택 프레임워크 Netfilter는 네트워크 패킷의 흐름을 관리하고 패킷 필터링 규칙을 통해 네트워크 트래픽을 허용/차단하는 역할을 한다!
Netfilter 주요 제공 기능
NAT(Network Address Translation): 사설IP와 공인IP를 변환해주거나 포트변환
Packet filtering: 특정 패킷을 차단/허용 하는 기능, 서버의 접근제어 또는 방화벽 기능 구현
packet managing: 필요시 패킷 헤더의 값을 변경

netfilter 구조

NOTE
netfilter는 커널에서 패킷을 처리하는 과정에 필요하면 룰에따라 처리해줄 수 있는 5군데의 후크를 제공한다.
PREOUTING: 인터페이스를 통해 들어온 패킷을 가장 먼저 처리, 목적지 주소의 변경(DNAT)
INPUT: 인터페이스를 통해 로컬 프로세스로 들어오는 패킷의 처리(패킷을 받아 처리할 프로세스가 시스템에서 동작하는 경우), INPUT에서 패킷 처리(차단/허용) 후 user-space로 전달
OUTPUT: 해당 프로세스에서 처리한 패킷을 밖으로 내보내는 패킷에 대한 처리(차단/허용)
FORWARD: 다른 호스트로 통과시켜 보낼 패킷에 대한 처리(차단/허용), 방화벽이나 IPS등과 같이 내가 수신하는 패킷이 아니고 지나가는 패킷을 처리
POSTROUTING: 인터페이스를 통해 나갈 패킷에 대한 처리. 출발지 주소의 변경(SNAT)
위 5가지 후크위치에서 패킷이 지나가는 경우 handler를 구현해서 원하는 action을 실행할 수 있으며 아래 5가지중 하나의 값을 return해서 다음 action을 취할 수 있다.
NF_DROP: 현재 패킷을 Drop한다.
NF_ACCPET: 현재 패킷을 accpet하고 다음 steop으로 넘긴다.
NF_STOLEN: 현재 패킷을 커널이 잊어버린다. 패킷의 소유권을 얻고 직접 처리해야함
NF_QUEUE: 스택을 타지 않고 사용자 공간에 올린다.
NF_REPEAT: 후크를 다시호출

iptables

NOTE
netfilter를 사용하여 네트워크 패킷을 필터링하고 컨트롤하는데 사용되는 도구이다!
# iptables [-t 테이블(table)] [액션(action)] [체인(chain)] # [매치(matching)] [-j 타겟(target)] iptables -L # 열람하기 iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP # 특정 주소차단 iptables -A OUTPUT -p tcp # 25port 192.168.5.0/24 허용 -d 192.168.5.0/24 --dport 25 -j ACCEPT # j(규칙에 맞는 패킷처리방식) iptables -A INPUT -p tcp --dport xxx -j DROP # 들어오는 특정포트 차단 iptables -A OUTPUT -p tcp --dport xxx -j DROP # 나가는 특정포트 차단 iptables -A INPUT -p tcp -m mulitport --dports 22,80,443 -j ACCEPT # 여러포트 허용 iptables -A OUTPUT -p tcp -m mulitport --dports 22,80,443 -j ACCEPT # 여러포트 차단 iptables -t nat -A PREROUTING -i eth0 -p tcp # 포트포워딩(25:2525) --dport 25 -j REDIRECT --to-port 2525 sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 # NAT 테이블규칙 설정 -o enp6s0 -j MASQUERADE # MASQUERADE 타겟을 사용해 패킷의 출발 IP를 변경한다.
Bash
복사

타겟

ACCEPT: 패킷을 받아들인다.
DROP: 패킷을 버린다.(패킷이 전송된 적 없던 것 처럼)
REJECT:: 패킷을 버리고 동시에 적잘한 응답 패킷을 전송한다.
LOG: 패킷을 syslog에 기록한다.
RETURN: 호출 체인 내 패킷 처리를 계속한다.

ufw - 방화벽

NOTE
iptables는 저수준이고 접근성이 좋지않아, ubuntu에서 iptables의 작업을 간편화해주는 UFW(Uncomplicated Firewall)이 등장했다!
sudo ufw status verbose # 상태조회 sudo ufw allow 22 # T/U 22 허용 sudo ufw allow 22/tcp # T 22 허용 sudo ufw enable # 22허용하고 할것!!!! sudo ufw status verbose # 방화벽목록 ( deny, allow, disable ) sudo ufw allow from [ss로 확인한 주소] to any port 22 # 해당 ip 22포트 허용 sudo ufw status numbered # 규칙 우선순위 sudo ufw delete 1 # 1번 규칙삭제 sudo ufw delete/allow 22 # ipv4, ipv6 삭제 sudo ufw allow from 10.11.12.0/24 sudo ufw deny from 10.11.12.0/24 sudo ufw delete 4 sudo ufw insert3 deny from 10.11.12.100 ping -c 4 8.8.8.8 ufw deny out on ens3 to 8.8.8.8 # dns 차단 ping -c 4 8.8.8.8 ufw allow in on ens3 from 192.168.1.60 to 192.168.1.81 port 80 proto tcp ufw allow out on ens3 from 192.168.1.60 port 80 proto tcp sudo ufw default deny incoming # 들어오는 연결을 기본적으로 차단 sudo ufw default allow outgoing # 나가는 연결을 기본적으로 차단
Bash
복사

netplan (작성중)

NOTE
network: version: 2 # 네트워크 설정 파일의 버전. 일반적으로 2를 사용합니다. ethernets: ens3: # 네트워크 인터페이스의 이름. 여기서는 'ens3'라고 가정합니다. dhcp4: true # IPv4 주소를 DHCP를 통해 동적으로 할당받을지 여부 (true이므로 DHCP를 사용합니다). dhcp6: false # IPv6 주소를 DHCP를 통해 동적으로 할당받을지 여부 (false이므로 DHCPv6를 사용하지 않습니다). addresses: # 인터페이스에 할당된 IP 주소 목록 - 10.0.0.9/24 # IPv4 주소와 서브넷 마스크. /24는 255.255.255.0을 의미합니다. - fe80::921b:eff:fe3d:abcd/64 # IPv6 주소와 프리픽스 길이. /64는 일반적인 IPv6 서브넷 길이입니다. nameservers: # DNS 서버 목록 - 8.8.8.8 # Google Public DNS 서버를 사용합니다. - 8.8.4.4 # Google Public DNS 서버를 사용합니다. routes: # 라우팅 테이블에 관한 설정 (게이트웨이) - to: 192.168.0.0/24 # 목적지 네트워크 주소 (192.168.0.0/24) via: 10.0.0.100 # 해당 목적지 네트워크로 가는 경로를 지정하는 게이트웨이 주소 (10.0.0.100) - to: default # 기본 라우트. 모든 트래픽을 이 경로로 보냅니다. via: 10.0.0.1 # 기본 라우트를 위한 게이트웨이 주소 (10.0.0.1) match: # 일치 조건 설정 macaddress: fa:16:3e:3d:8b:c7 # 인터페이스의 MAC 주소 mtu: 1450 # 인터페이스의 최대 전송 단위 (Maximum Transmission Unit, MTU) 설정 set-name: ens3 # 인터페이스의 이름 설정 (일반적으로 인터페이스 이름을 변경하지 않음)
YAML
복사
네트워크 설정파일 (/etc/netplan/..)
브리지를 로드밸런스라고도 하며 포트라고도한다
본드개념 - 2개이상의 eth으로 연결하는? (가용성, 성능향상, 안정적)