저는 특정 목적을 위해 자신의 컴퓨터에 있는 포트를 명시적으로 사용하도록 요구하는 일부 개발자의 관리자입니다. 개발자 중 한 명이 포트를 사용하러 갔을 때 포트가 사용 중이었습니다. netstat -p
xrdp/Xnvc가 이를 사용하고 있음을 보여줍니다 . 나는 사용자가 다른 포트를 사용할지 확인하기 위해 점프를 하다가 다시 켜도록 시도했지만 계속해서 그 포트를 사용합니다.
내가 읽은 바에 따르면 Xrdp는 임의의 열린 포트를 선택합니다. 서비스에서 해당 포트를 블랙리스트에 추가하는 방법을 알아낼 수 있습니다.
시스템: CentOS 7, 방화벽 대신 iptables 사용
답변1
TCP/IP에는 "아무것도 사용하지 않는 열린 포트"라는 것이 없습니다. 현재 사용되지 않는 포트는 모두 닫힙니다. 그렇지 않으면 iptables 또는 방화벽이 수행됩니다.막힌일부 또는 모든 트래픽이 들어오는 특정 포트입니다.
(나는 방화벽에서 "개방형 포트"라는 용어를 정말 싫어합니다. 왜냐하면 TCP와 UDP 포트가 작동하는 방식을 오해하기 때문입니다. 포트는매끄러운방화벽에 있지만 실제로 사용하려면 프로그램이나 커널 수준 서비스가 필요합니다.열려 있는이 포트를 사용하기 위한 일반적인 절차의 일부로. )
Xrdp(8)
매뉴얼 페이지 에서 :
-p, --포트
수신할 TCP 포트를 지정합니다. 이는 xrdp.ini 파일의 포트 설정을 재정의합니다.
xrdp.ini(5)
매뉴얼 페이지 에서 :
포트 = 포트
들어오는 연결을 수신하는 TCP 포트를 지정합니다. RDP의 기본값은 3389입니다.
따라서 이 옵션을 사용하면 Xrdp는 이 옵션에 지정된 포트를 사용하고, 이 옵션을 사용하지 않으면 -p
구성 파일에 지정된 포트를 사용합니다. 둘 다 지정되지 않으면 Windows가 RDP 프로토콜에 사용하는 것과 동일한 포트인 포트 3389를 사용합니다.xrdp.ini
-p
기본적으로 대부분의 나가는 연결과 TCP/UDP 소켓에 대한 로컬 포트 번호를 지정하지 않는 모든 애플리케이션은 sysctl
이 설정에 지정된 범위 내의 로컬 포트 번호를 얻습니다 net.ipv4.ip_local_port_range
. RHEL/CentOS 7에서 이 범위는 기본적으로 포트 번호 32768..60999로 설정됩니다.
(각 TCP 또는 UDP 연결에는 로컬 포트 번호와 원격 포트 번호가 있습니다. 나가는 연결은 일반적으로 원격 포트 번호만 지정하고 운영 체제가 로컬 포트 번호를 결정하도록 하는 반면, 들어오는 연결을 수신하기 위해 열린 포트는 일반적으로 로컬 포트 번호.)
sysctl
설정을 사용하여 자동 할당에서 특정 포트 및/또는 포트 범위를 제외할 수 있습니다 net.ipv4.ip_local_reserved_ports
. 예를 들어 특정 용도로 포트 40000 및 40001을 예약해야 하는 경우 다음 명령을 사용하여 이를 달성할 수 있습니다.
sysctl -w net.ipv4.ip_local_reserved_ports=40000,40001
자동 할당 제외는 즉시 적용됩니다. 이를 지속적으로 만들려면 /etc/sysctl.conf
다음 줄을 편집하여 추가하세요.
net.ipv4.ip_local_reserved_ports=40000,40001
이러한 방식으로 예약된 포트를 명시적으로 지정(바인딩)하는 모든 프로그램은 여전히 해당 포트를 정상적으로 획득합니다. 이 예약은 단순히 포트 번호의 자동 할당을 무시합니다.
일반 사용자 프로세스가 1023보다 큰 특정 포트 번호를 요청하고 현재 다른 프로세스에서 사용 중이 아닌 경우에는 다른 방법으로는 할 수 없습니다.~ 할 것이다요청을 승인합니다. (0..1023 범위의 포트를 사용하려면 프로세스가 실행 중이어야 하며 root
, Linux 배포판이 보다 세분화된 권한을 사용하는 경우 해당 CAP_NET_BIND_SERVICE
기능이 있어야 합니다.)
그러나 iptables
규칙을 사용하면 해당 목적이 무엇인지에 따라 특정 목적 이외의 다른 용도로 포트를 사용할 수 없게 만들 수 있습니다. 예를 들어, 해당 포트에 대한 수신/발신 연결을 특정 목적에 적합한 연결로만 제한하거나 iptables -m owner --uid-owner <username>
다음 규칙 쌍을 사용하여 특정 사용자로만 제한할 수 있습니다.
iptables -A OUTPUT -m tcp -p tcp --sport 3389 -m owner --uid-owner specified-user -j ACCEPT
iptables -A OUTPUT -m tcp -p tcp --sport 3389 -j REJECT
(첫 번째 규칙은 포트와 의도된 사용자를 일치시키고 트래픽을 수락하고 규칙 처리를 종료합니다. 규칙이 일치하지 않으면 두 번째 규칙은 포트만 일치하고 일치하지 않는 규칙과 일치하는 사람으로부터 나가는 트래픽을 거부합니다. 이 포트의 대상 사용자입니다.)
반드시 그렇지는 않을 수도 있습니다예방하다다른 사용자는 해당 포트를 사용하려고 시도하지 않지만 포트가 항상 켜져 있는지 확인합니다.연결에 실패그러니 그들이 그것을 사용하려는 시도를 멈추기를 바랍니다.