특정 인터페이스에만 바인딩하도록 서버 애플리케이션을 구성하려면 어떻게 해야 합니까?

특정 인터페이스에만 바인딩하도록 서버 애플리케이션을 구성하려면 어떻게 해야 합니까?

IP 10.0.0.2의 방화벽이 있고 NTP 서버가 있습니다. 내부 네트워크 10.0.0.0/24만 NTP 서버에 액세스하기를 원합니다. 외부 네트워크가 NTP 서버에 액세스하는 것을 허용하고 싶지 않습니다. 방화벽에서 이러한 권한을 설정하고 싶으므로 iptables를 사용해야 합니다. 누구든지 나를 도와줄 수 있나요?

답변1

특정 인터페이스에만 바인딩하도록 서버 애플리케이션을 구성하려면 어떻게 해야 합니까?

이는 애플리케이션에 따라 다릅니다. 설명서를 확인하세요. ntpd특정 예 에서는 다음을 사용할 수 있습니다.

# excerpt from ntp.conf
interface ignore wildcard
interface listen 127.0.0.1
interface listen 10.0.0.2

구성 파일에서. 어쨌든 서버의 기본 구성을 변경하게 될 것이므로 이것이 첫 번째 선택이어야 하며 방화벽이 어떻게든 우회되는 경우(예: 실수로 모든 것을 허용하도록 설정되는 경우) 약간의 보안을 제공합니다.

서버 애플리케이션이 사용하는 포트를 확인하는 방법은 무엇입니까?

전부는 아니지만 많은 시스템 에 /etc/services. 다음에서 계약을 검색할 수 있습니다.iana-etcfilesystem

$ awk ' $1 == "ntp" ' /etc/services
ntp        123/tcp
ntp        123/udp

이는 NTP 프로토콜이 TCP와 UDP 모두에서 포트 123을 사용한다는 것을 알려줍니다. 예를 들어 SSH를 사용할 수도 있습니다.

$ awk ' $1 == "ssh" ' /etc/services
ssh        22/tcp
ssh        22/udp
ssh        22/sctp

SSH가 포트 22에 있는지 확인하십시오. 이는 서버 문서를 확인하는 것만큼 신뢰할 수는 없지만 일반적으로 작동합니다.

특정 인터페이스에서 트래픽을 삭제하도록 iptables에 어떻게 지시할 수 있나요?

그것이 당신의 목표라면 당신은 거꾸로 가고 있는 것입니다. 기본적으로 모든 것이 삭제되고 필요한 트래픽이 허용됩니다.

여기서는 (과도하게 단순화된) 다음과 같은 결과를 얻을 수 있습니다.

# modified excerpt from iptables.rules
# to be sourced by
#    iptables-restore < iptables.rules
*filter
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]

# Allow inputs on non-privileged ports
-A INPUT -p tcp ! --dport 0:1023 -j ACCEPT
-A INPUT -p udp ! --dport 0:1023 -j ACCEPT

# Allow anything on the loopback interface
-A INPUT -i lo -j ACCEPT

# Allow NTP access from the LAN
# you could use
#    -i internal-interface-name
# instead of (or in addition to)
#    -s 10.0.0.0/24
# to filter by interface rather than source address
-A INPUT -p tcp -s 10.0.0.0/24 --dport 123 -j ACCEPT
-A INPUT -p udp -s 10.0.0.0/24 --dport 123 -j ACCEPT

# Allow HTTP from anywhere
-A INPUT -p tcp --dport 80 -j ACCEPT

# Allow SSH from the external interface
# replace external-interface-name with the actual name
-A INPUT -p tcp -i external-interface-name --dport 22 -j ACCEPT

# Maybe explicitly reject and log:
# -A INPUT -j LOG --log-level warning --log-prefix "Rejected input: "
# -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
# -A INPUT -p tcp -j REJECT --reject-with tcp-reset
# -A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT

LAN에서 NTP 액세스 허용 블록은 사용자가 지정하는 특정 서버 및 소스 주소 범위의 예입니다. 또한 빌드할 수 있는 몇 가지 다른 예제도 제공했습니다.

이 구성에서는 서비스를 활성화할 때 서비스에 대한 액세스를 명시적으로 허용하도록 주의해야 합니다.

관련 정보