iptables를 통한 발신 연결을 어떻게 허용합니까?


17

두 대의 서버가 있습니다. 첫 번째 프로그램은 포트 2194의 두 번째 프로그램과 통신해야합니다.

내가 할 때 작동하지 않는다는 것을 알고 있습니다.

root@server1 [~]# telnet myserver2.com 2194
Trying 123.123.123.98...
telnet: connect to address 123.123.123.98: Connection timed out
telnet: Unable to connect to remote host: Connection timed out

server1# iptables -L -n

Chain INPUT (policy DROP)
...
...

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
...

Chain LOCALINPUT (1 references)
target     prot opt source               destination
...

Chain LOCALOUTPUT (1 references)
target     prot opt source               destination
...

Chain LOGDROPIN (1 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain LOGDROPOUT (1 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0

그러나 server1에서 telnet localhost 2194를 수행하면 작동합니까? server1의 telnet server1spublicip 2194는 어떻습니까?
Geraint Jones

server2의 telnet localhost 2194가 작동합니다. server2의 telnet server2ipaddress 2194도 작동합니다.
siliconpi

1
con you do : iptables -L -n 두 서버 모두에서 다음 중 하나 이상을 얻는 지 알려주십시오 (나는 규칙을보고 싶지 않습니다 ;-)) 체인 입력 (정책 수락) 대상 prot opt ​​소스 대상 체인 앞으로 ( 정책 ACCEPT) 대상 prot opt ​​소스 대상 Chain OUTPUT (정책 ACCEPT) 대상 prot opt ​​소스 대상
Geraint Jones

여보세요! 편집을 참조하십시오 ...
siliconpi

답변:


21

TCP 포트 2194에서 server1에서 server2로 나가는 연결을 허용하려면 server1에서 다음을 사용하십시오.

iptables -A OUTPUT -p tcp -d <server2ip> --dport 2194 -j ACCEPT

TCP 포트 2194에서 server1에서 server2로 들어오는 연결을 허용하려면 server2에서이를 사용하십시오.

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT

크랩-나는 첫 번째 일을하지 않았다. 나는 두 번째, 그 중 하나도 작동하지 않았다 ... 나는 매우 제한적인 설정이있을 수 있습니다 ... 이전 편집을 참조하십시오
siliconpi

1
"-A"대신 "-I"를 사용하십시오. 이것은 이미 존재하는 다른 모든 규칙 보다 새로운 규칙을 적용 합니다.
Massimo

응용 프로그램이 실제로 IP 주소가 아닌 도메인 이름을 사용하는 경우 다른 작업을 수행해야합니까?
siliconpi

우와 ... 첫 번째 진술만으로 프롬프트에서 telnet을 할 수 있습니다 ...
siliconpi

3
L로 읽은 사람들을위한 "i"와 같은 마이너스 -I
실리콘 피

6

몇 가지 포인터

실행중인 서비스가 localhost에서만 청취합니까? 운영

netstat -ltn

0.0.0.0:2194다음 과 같은 줄이 보이면 괜찮습니다. 당신이 볼 경우 127.0.0.1:2194에만 로컬 연결을 청취 한 후 (또는 :::2194::1:2194각각으로 표시 IPv6 주소에 대한 tcp6선).

현재 iptables 규칙은 무엇입니까?

iptables -L

정책 DROP / REJECT (모든 체인에 대해 그렇지 않은 경우)입니까? 필요한 포트에 대한 특정 규칙이 있습니까?

방화벽 문제인 경우 문제가되는 규칙을 수정하거나 다음과 같은 규칙을 추가하십시오.

iptables -A INPUT -p tcp --dport 2194 -j ACCEPT 

트릭을 수행해야합니다 (평가되지 않음)

=== 편집 ===

네트워크 문제를 테스트하려면 좋은 도구입니다 tcpdump. 연결하는 동안 두 서버에서 모두 실행하고 패킷이 어디로 가는지 확인하십시오. 예를 들어 서버 1에서 다음을 실행하십시오.

tcpdump -i eth0 -n host server2.com

서버 2에서 다음을 실행하십시오.

tcpdump -i eth0 -n host server1.com

그런 다음 연결을 시도하십시오. 소스와 대상에서 화면에 덤프 된 모든 TCP 패킷이 표시되어야합니다. 이 정보를 사용하면 문제가있는 위치를 정확히 파악할 수 있습니다.


안녕 댄-server2가 연결을 수락하는 데 문제가 있다고 생각하지 않습니다 (내 PC를 사용하여 연결할 수 없음). server1이 나가는 연결을 허용하지 않는다고 생각합니다 ...
siliconpi

iptables -A 출력 -p tcp --dport 2194 -j 수락
Geraint Jones

안녕 c10k, 그것은 작동하지 않았다 ... 그리고 텔넷 시도도 작동하지 않았다
siliconpi

다른 아이디어를 추가했습니다
Dan Andreatta

안녕 여기 2194는 내 포트 번호 또는 대상 IP 포트 번호입니까?
Tommy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.