리눅스에서 로컬 호스트 포트를 여는 방법?


2

지난 1 시간 동안 우분투 12.04에서 포트를 여는 것에 대해 읽었으며 아무것도 작동하지 않는 것 같습니다. IP 범위를 허용하는 localhost (127.0.0.1)에서 로컬 연결을 수락하는 RPC 서버로 프로그램을 실행 중입니다.192.168.*.*

들어오는 연결을 허용하기 위해 iptables를 편집하려고 시도했지만 curl은 내가 무엇을 하든지 RPC 서버에 연결할 수 없습니다.

$ sudo iptables -A INPUT -i eth0 -p tcp --dport 18332 -j ACCEPT
$ nmap -v -sT localhost

Starting Nmap 5.21 ( http://nmap.org ) at 2013-07-13 05:54 UTC
Initiating Ping Scan at 05:54
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 05:54, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 05:54
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Discovered open port 21/tcp on 127.0.0.1
Discovered open port 3389/tcp on 127.0.0.1
Discovered open port 3306/tcp on 127.0.0.1
Completed Connect Scan at 05:54, 0.05s elapsed (1000 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00060s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
80/tcp   open  http
3306/tcp open  mysql
3389/tcp open  ms-term-serv

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 18332 -m state --state NEW,ESTABLISHED -j ACCEPT
$ sudo iptables -A OUTPUT -o eth0 -p tcp --sport 18332 -m state --state ESTABLISHED -j ACCEPT
$ !nmap
nmap -v -sT localhost

Starting Nmap 5.21 ( http://nmap.org ) at 2013-07-13 05:57 UTC
Initiating Ping Scan at 05:57
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 05:57, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 05:57
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 21/tcp on 127.0.0.1
Discovered open port 3306/tcp on 127.0.0.1
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 3389/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Completed Connect Scan at 05:57, 0.05s elapsed (1000 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00072s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
80/tcp   open  http
3306/tcp open  mysql
3389/tcp open  ms-term-serv

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

curl의 결과는 다음과 같습니다.

$ curl --user uname:upass --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:18332/
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (7) couldn't connect to host

답변:


1

문제를 디버깅하려면 아마도 iptables 방화벽 규칙의 사본을 제공해야합니다. / sbin / iptables -vnL과 같은 것으로 충분합니다.

마지막 규칙이 "모든 항목 삭제"인 방화벽이 있다고 생각합니다. 추가 한 규칙은이 규칙 이후 테이블 끝에 추가되어 실행되지 않았습니다. "sudo iptables -A"로 시작하는 규칙을 작성하는 대신 "sudo iptables -I"를 사용하여 규칙을 맨 위에 삽입하십시오.

또한 localhost에 연결하려고하면 sudo "iptables -A INPUT -i eth0 -p tcp --dport 18332 -j ACCEPT"명령에 결함이 있습니다. 이더넷 장치를 의미하는 "-i eth0"을 지정했습니다. 로컬 호스트는 특별한 "lo"장치를 사용합니다. "-i eth0"매개 변수를 생략하면 모든 인터페이스에서 작동하는 것이 좋습니다.

비슷한 이유로 명세서 "IP 범위 192.168을 허용했다 (127.0.0.1). . "192.168로, 결함이있다. . 소스 ip 주소는 127.0.0.1에 바인드 된 "lo"인터페이스이므로 127.0.0.1에 대한 라우트와 절대 일치하지 않아야합니다.


ip에서 포트를 여는 규칙을 추가 할 수있는 명령을 찾을 수없는 것 같습니다 127.0.0.1. 나는 이것이 매우 간단한 것 같아서 알아내는 것이 더 쉬울 것이라고 생각했다. 많은 것을 알지 못해서 죄송합니다. 문자 그대로 이러한 유형의 것을 처음 접하고 가능한 한 많이 배우려고합니다.
Joey

iptables -I INPUT -i lo -j ACCEPT가 작동합니다 (LOcal 인터페이스의 모든 트래픽을 통해 허용). 또는 iptables -I INPUT -s 127.0.0.1 -j ACCEPT를 사용하면 해당 IP 주소를 열 수 있습니다. 이 두 예 모두 모든 트래픽에 대한 주소를 제공하지만 큰 보안 위험은 아닙니다.
davidgo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.