Ubuntu 16.04 기반 방화벽에 대한 Iptables 규칙

Ubuntu 16.04 기반 방화벽에 대한 Iptables 규칙

내 서버에서 Ubuntu 16.04 기반 방화벽으로 사용하기 위해 iptables 규칙을 설정하려고 합니다. 나는 우분투에 대해 상당한 지식을 가지고 있습니다. Ubuntu 도움말 사이트와 Askubuntu에서 일부 검색을 수행했습니다. 파일에 저장하고 루트(sudo sh 파일)로 실행할 수 있는 다음 규칙을 생각해냈습니다.

#!/bin/bash

WAN_IF="enp2s0"
WAN_IP=$(/sbin/ip addr show dev "$WAN_IF" | perl -lne 'if(/inet (\S+)/){print$1;last}');
LAN_IF="enp4s9"
LAN_IP=$(/sbin/ip addr show dev "$LAN_IF" | perl -lne 'if(/inet (\S+)/){print$1;last}');
##### Internal network address (in CIDR notation)
LAN_NET="192.168.17.0/24"

echo
echo "[WAN Interface: $WAN_IF] [WAN IP: $WAN_IP]"
echo "[LAN Interface: $LAN_IF] [LAN IP: $LAN_IP] [Network: $LAN_NET]"
echo
echo -n "Enabling IP Forwarding...\n"

##### Enabling IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

echo
echo -n "Loading Firewall Rules...\n"
echo -n "Enabling NAT Rewriting on IN/OUT Packets...\n"

/sbin/iptables-restore <<-EOF;
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

##### INPUT RULES
-A INPUT -i lo -j ACCEPT
-A INPUT -i $LAN_IF -j ACCEPT
-A INPUT -i $WAN_IF -s $LAN_NET -j DROP
-A INPUT -i $WAN_IF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

##### FORWARD RULES
-A FORWARD -i $LAN_IF -o $WAN_IF -j ACCEPT
-A FORWARD -i $WAN_IF -o $LAN_IF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

##### OUTPUT RULES
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o $WAN_IF -d $LAN_NET -j DROP
-A OUTPUT -o $LAN_IF -s $LAN_IP -d $LAN_NET -j ACCEPT
-A OUTPUT -o $WAN_IF -s $WAN_IP -j ACCEPT

##### All Other Requests are DROPPED
-A OUTPUT -j DROP
-A INPUT -j DROP
COMMIT


##### NAT Rewriting on IN/OUT Packets
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o $WAN_IF -j MASQUERADE
COMMIT
EOF


echo -n "Bloacking IP6...\n"
/sbin/ip6tables-restore <<-EOF;
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
COMMIT
EOF

echo
echo "Done!"
echo

내 질문은 다음과 같습니다

다음과 같은 네트워크 토폴로지가 있습니다.

인터넷 >>>>> [ WAN <<<>>> 서버 <<<>>> LAN ] <<<<< 로컬 사용자

  1. 내 서버에서 WAN으로 들어오는 모든 트래픽(핑, 기타 검색 및/또는 해킹 요청 포함)을 차단하고, 서버와 LAN의 로컬 사용자에 대한 인터넷 트래픽은 허용하고 싶습니다. 위의 코드는 이러한 규칙에 적합합니까?

  2. 내 서버에는 서버 자체에서 직접 관리하는 일부 서비스(예: MYSQL 및 SSH)가 있습니다. LAN의 로컬 사용자와 WAN의 인터넷이 내 서버의 서비스 및 모든 항목에 액세스하거나 연결하는 것을 차단하고 싶습니다. 위의 코드는 이러한 규칙에 적합합니까?

  3. 위의 규칙으로 인해 발생할 수 있는 참고 사항이나 보안 결함이 있습니까?

  4. 다음 규칙을 사용하면 WAN에서 인터넷에 SSH 포트를 열어도 안전합니까? (참고: SSH 공개 키 인증만 사용하고 일반 텍스트 비밀번호는 사용하지 않습니다.)

    -A INPUT -i $WAN_IF -m conntrack --ctstate NEW,ESTABLISHED,RELATED -p tcp -d $WAN_IP --dport 22 -j ACCEPT
    

정말 고마워요.

관련 정보