Operating Systems/Linux

[ Linux ] 방화벽 서버 설치

loopinger 2021. 11. 20. 04:45

1. CentOS7

 

[ 방화벽 서버 ]

NAT 설정 확인 및 NAT NIC의 MAC 주소 확인
BRIDGED 설정 확인 및 NAT NIC의 MAC 주소 확인

# 브릿지 IP 주소 설정
BRIDGED_IP_ADDR=10.1.1.1 # read BRIDGED_IP_ADDR

# NAT IP 주소 설정
NAT_IP_ADDR=192.168.108.251 # read NAT_IP_ADDR

# 브릿지 네트워크 맥 주소 확인
BRIDGED_MAC_ADDR=00:50:56:36:E6:B0 # read BRIDGED_MAC_ADDR

# NAT 네트워크 맥 주소 확인
NAT_MAC_ADDR=00:0C:29:42:B4:81 # read NAT_MAC_ADDR

# 브릿지 네트워크 인터페이스 확인
BRIDGED_NET_INTERFACE=`ip addr | grep -B 1 -i ${BRIDGED_MAC_ADDR} | grep -P "^\d+:" | awk '{ print $2 }' | sed "s/://g"`

# NAT 네트워크 인터페이스 확인
NAT_NET_INTERFACE=`ip addr | grep -B 1 -i ${NAT_MAC_ADDR} | grep -P "^\d+:" | awk '{ print $2 }' | sed "s/://g"`

# 디바이스 연결 상태 확인 (브릿지 네트워크 설정 확인)
nmcli device status

# NAT UUID 확인
NAT_NIC_UUID=`nmcli connection | grep $NAT_NET_INTERFACE | awk '{ print $2 }'`

cat <<STATIC_IP_SETTING > /etc/sysconfig/network-scripts/ifcfg-$NAT_NET_INTERFACE
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=${NAT_NET_INTERFACE}
UUID=${NAT_NIC_UUID}
DEVICE=${NAT_NET_INTERFACE}
ONBOOT=yes
IPADDR=${NAT_IP_ADDR}
PREFIX=24
GATEWAY=${NAT_IP_ADDR%.*}.2
DNS1=168.126.63.1
STATIC_IP_SETTING

# 브릿지 네트워크 초기 설정
nmcli con add con-name "${BRIDGED_NET_INTERFACE}" ifname ${BRIDGED_NET_INTERFACE} type ethernet ip4 ${BRIDGED_IP_ADDR}/24

systemctl restart network

# 디바이스 연결 상태 확인 (브릿지 네트워크 설정 확인)
nmcli device status

# 설정 추가 확인
cat /etc/sysconfig/network-scripts/ifcfg-${BRIDGED_NET_INTERFACE}

# 수신 패킷이 자신의 것이 아닐경우 드롭하는지 확인 (0일경우 드롭)
cat /proc/sys/net/ipv4/ip_forward

cat <<FIREWALL_SETTING > /etc/sysctl.conf
net.ipv4.ip_forward = 1
FIREWALL_SETTING

# 설정 적용을 위해 재시작
systemctl restart network

# 수신 패킷을 드롭하는지 확인(1일경우 드롭하지 않음)
cat /proc/sys/net/ipv4/ip_forward

cat /proc/sys/net/ipv4/conf/${BRIDGED_NET_INTERFACE}/forwarding

cat /proc/sys/net/ipv4/conf/${NAT_NET_INTERFACE}/forwarding

# firewalld 사용 안하기 떄문에 끄기
systemctl stop firewalld

systemctl disable firewalld

# seliunx 끄기
setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

# iptable 방화벽 초기화
iptables -F

# 외부로부터 들어오는 내용 모두 드롭하도록 설정
iptables --policy FORWARD DROP
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP

# 브릿지 대역대에서 방화벽 서버로 들어오는 패킷 허용
iptables --append INPUT --in-interface ${BRIDGED_NET_INTERFACE} --source ${BRIDGED_IP_ADDR%.*}.0/24 --match state --state NEW,ESTABLISHED --jump ACCEPT

# 방화벽 서버에서 브릿지 대역대로 나가는 패킷 허용
iptables --append OUTPUT --out-interface ${BRIDGED_NET_INTERFACE} --destination ${BRIDGED_IP_ADDR%.*}.0/24 --match state --state NEW,ESTABLISHED --jump ACCEPT

# 브릿지 대역대에서 방화벽 서버로 들어오는 패킷 다른 인터페이스 전달 허용
iptables --append FORWARD --in-interface ${BRIDGED_NET_INTERFACE} --source ${BRIDGED_IP_ADDR%.*}.0/24 --destination 0.0.0.0/0 --match state --state NEW,ESTABLISHED --jump ACCEPT

# 방화벽 서버에서 브릿지 대역대로 나가는 패킷 다른 인터페이스 전달 허용
iptables --append FORWARD --in-interface ${NAT_NET_INTERFACE} --destination ${BRIDGED_IP_ADDR%.*}.0/24 --match state --state ESTABLISHED --jump ACCEPT

# 외부인터넷과 연결되는 인터페이스 지정
iptables --table nat --append POSTROUTING --out-interface ${NAT_NET_INTERFACE} --jump MASQUERADE

iptables-save > /etc/iptables.rules

# 방화벽 상태 확인
iptables -L

# nslookup 으로 ip 주소 확인
# nslookup demo.testfire.net

# nslookup 으로 ip 주소 확인
# nslookup www.naver.com

# 아래 아이피에 해당하는 사이트 거부
# iptables -I FORWARD 1 -p tcp -s 65.61.137.117 -j DROP
# iptables -I FORWARD 1 -p tcp -s 223.130.200.104 -j DROP
# iptables -I FORWARD 1 -p tcp -s 223.130.200.107 -j DROP
 
# 정책 저장
# iptables-save > /etc/iptables.rules

# 방화벽 상태 확인
# iptables -L

 

[ 클라이언트 ]

BRIDGED 설정 확인

# 인터페이스 이름 확인
NET_INTERFACE=`ls /sys/class/net | grep -v lo | head -1`

NIC_UUID=`nmcli connection | grep $NET_INTERFACE | awk '{ print $2 }'`

FIREWALL_SERVER_IP=10.1.1.1 # read BRIDGED_IP_ADDR

# IP 설정
IP_ADDR=10.1.1.30 # read IP_ADDR

cat <<STATIC_IP_SETTING > /etc/sysconfig/network-scripts/ifcfg-$NET_INTERFACE
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=${NET_INTERFACE}
UUID=${NIC_UUID}
DEVICE=${NET_INTERFACE}
ONBOOT=yes
IPADDR=${IP_ADDR}
PREFIX=24
GATEWAY=${FIREWALL_SERVER_IP}
DNS1=168.126.63.1
STATIC_IP_SETTING

systemctl restart network

 

2. Ubuntu20

 

[ 방화벽 서버 ]

# 브릿지 IP 주소 설정
BRIDGED_IP_ADDR=10.1.1.1 # read BRIDGED_IP_ADDR

# NAT IP 주소 설정
NAT_IP_ADDR=192.168.10.252 # read NAT_IP_ADDR

# 브릿지 네트워크 맥 주소 확인
BRIDGED_MAC_ADDR=00:50:56:3F:0D:3D # read BRIDGED_MAC_ADDR

# NAT 네트워크 맥 주소 확인
NAT_MAC_ADDR=00:0C:29:A1:9A:D5 # read NAT_MAC_ADDR

# 브릿지 네트워크 인터페이스 확인
BRIDGED_NET_INTERFACE=`ip addr | grep -B 1 -i ${BRIDGED_MAC_ADDR} | grep -P "^\d+:" | awk '{ print $2 }' | sed "s/://g"`

# NAT 네트워크 인터페이스 확인
NAT_NET_INTERFACE=`ip addr | grep -B 1 -i ${NAT_MAC_ADDR} | grep -P "^\d+:" | awk '{ print $2 }' | sed "s/://g"`

# 디바이스 연결 상태 확인 (브릿지 네트워크 설정 확인)
nmcli device status

# 연결 설정 삭제
nmcli con delete `nmcli device status | grep ${BRIDGED_NET_INTERFACE} | awk '{ print $4 }'`

nmcli con show

nmcli device status

cat <<STATIC_IP_SETTING > /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
 version: 2
 renderer: NetworkManager
 ethernets:
  ${NAT_NET_INTERFACE}:
   addresses: [${NAT_IP_ADDR}/24]
   gateway4: ${NAT_IP_ADDR%.*}.2
   nameservers:
    addresses: [168.126.63.1,8.8.8.8]
   dhcp4: no
  ${BRIDGED_NET_INTERFACE}:
   addresses: [${BRIDGED_IP_ADDR}/24]
   dhcp4: no
STATIC_IP_SETTING

netplan apply

ip route

# 디바이스 연결 상태 확인 (브릿지 네트워크 설정 확인)
nmcli con show

nmcli device status

# 수신 패킷이 자신의 것이 아닐경우 드롭하는지 확인 (0일경우 드롭)
cat /proc/sys/net/ipv4/ip_forward

cat <<FIREWALL_SETTING > /etc/sysctl.conf
net.ipv4.ip_forward = 1
FIREWALL_SETTING

# 설정 적용
sysctl -p

# 수신 패킷을 드롭하는지 확인(1일경우 드롭하지 않음)
cat /proc/sys/net/ipv4/ip_forward

cat /proc/sys/net/ipv4/conf/${BRIDGED_NET_INTERFACE}/forwarding

cat /proc/sys/net/ipv4/conf/${NAT_NET_INTERFACE}/forwarding

# firewalld 사용 안하기 떄문에 끄기
ufw disable

# iptable 방화벽 초기화
iptables -F

# 외부로부터 들어오는 내용 모두 드롭하도록 설정
iptables --policy FORWARD DROP
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP

# 브릿지 대역대에서 방화벽 서버로 들어오는 패킷 허용
iptables --append INPUT --in-interface ${BRIDGED_NET_INTERFACE} --source ${BRIDGED_IP_ADDR%.*}.0/24 --match state --state NEW,ESTABLISHED --jump ACCEPT

# 방화벽 서버에서 브릿지 대역대로 나가는 패킷 허용
iptables --append OUTPUT --out-interface ${BRIDGED_NET_INTERFACE} --destination ${BRIDGED_IP_ADDR%.*}.0/24 --match state --state NEW,ESTABLISHED --jump ACCEPT

# 브릿지 대역대에서 방화벽 서버로 들어오는 패킷 다른 인터페이스 전달 허용
iptables --append FORWARD --in-interface ${BRIDGED_NET_INTERFACE} --source ${BRIDGED_IP_ADDR%.*}.0/24 --destination 0.0.0.0/0 --match state --state NEW,ESTABLISHED --jump ACCEPT

# 방화벽 서버에서 브릿지 대역대로 나가는 패킷 다른 인터페이스 전달 허용
iptables --append FORWARD --in-interface ${NAT_NET_INTERFACE} --destination ${BRIDGED_IP_ADDR%.*}.0/24 --match state --state ESTABLISHED --jump ACCEPT

# 외부인터넷과 연결되는 인터페이스 지정
iptables --table nat --append POSTROUTING --out-interface ${NAT_NET_INTERFACE} --jump MASQUERADE

iptables-save > /etc/iptables.rules

# 방화벽 상태 확인
iptables -L

# nslookup 으로 ip 주소 확인
# nslookup demo.testfire.net

# nslookup 으로 ip 주소 확인
# nslookup www.naver.com

# 아래 아이피에 해당하는 사이트 거부
# iptables -I FORWARD 1 -p tcp -s 65.61.137.117 -j DROP
# iptables -I FORWARD 1 -p tcp -s 223.130.200.104 -j DROP
# iptables -I FORWARD 1 -p tcp -s 223.130.200.107 -j DROP
 
# 정책 저장
# iptables-save > /etc/iptables.rules

# 방화벽 상태 확인
# iptables -L

 

[ 클라이언트 ]

# 인터페이스 이름 확인
NET_INTERFACE=`ls /sys/class/net | grep -v lo | head -1`

NIC_UUID=`nmcli connection | grep $NET_INTERFACE | awk '{ print $2 }'`

FIREWALL_SERVER_IP=10.1.1.1 # read BRIDGED_IP_ADDR

# IP 설정
IP_ADDR=10.1.1.30 # read IP_ADDR

cat <<STATIC_IP_SETTING > /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
 version: 2
 renderer: NetworkManager
 ethernets:
  ${NAT_NET_INTERFACE}:
   addresses: [${IP_ADDR}/24]
   gateway4: ${FIREWALL_SERVER_IP}
   nameservers:
    addresses: [168.126.63.1,8.8.8.8]
   dhcp4: no
STATIC_IP_SETTING

netplan apply