FirewallD는 Docker 패킷을 삭제합니다.

FirewallD는 Docker 패킷을 삭제합니다.

[해결됨] - 아래 업데이트를 참조하세요.

아웃라인 서버를 설치했습니다(협회) 내 서버에서 FirewallD는 불행히도 개요 클라이언트의 모든 패킷을 삭제합니다.

내 시스템:

Ubuntu 18.04 x64
Linux x 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

방화벽 D 버전:0.4.4.5

도커 버전:Docker version18.05.0-ce, build f150324

방화벽 D 규칙:

root@x:~# firewall-cmd --get-active-zones
public
  interfaces: ens3 docker0

root@x:~# firewall-cmd --list-ports
{outline_server_port}/tcp {outline_server_port}/udp

이 질문에 대한 답변협회도움이 되지 않습니다.

예를 들어 아웃라인 관리자는 잘 작동합니다. 키를 생성하면 성공적으로 연결되지만개요 클라이언트나에게 다음과 같은 오류가 발생합니다.

네트워크 오류가 발생했습니다. 이런 일이 다시 발생하면 의견을 제출해 주세요.

다음을 사용하여 FirewallD를 중지하면:

systemctl stop firewalld.service

아웃라인 클라이언트는 제대로 작동하지만 FirewallD를 시작하면 더 이상 작동하지 않습니다.

다음은 FirewallD 상태에서 가져온 것입니다.

root@x:~# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-05-15 23:37:31 CEST; 8s ago
     Docs: man:firewalld(1)
 Main PID: 2479 (firewalld)
    Tasks: 2 (limit: 1113)
   CGroup: /system.slice/firewalld.service
           └─2479 /usr/bin/python3 -Es /usr/sbin/firewalld --nofork --nopid

May 15 23:37:31 x systemd[1]: Starting firewalld - dynamic firewall daemon...
May 15 23:37:31 x systemd[1]: Started firewalld - dynamic firewall daemon.
May 15 23:37:32 x firewalld[2479]: WARNING: COMMAND_FAILED: '/sbin/iptables -w2 -t filter -n -L DOCKER-USER' failed: iptables: No chain/target/match by that name.
May 15 23:37:32 x firewalld[2479]: WARNING: COMMAND_FAILED: '/sbin/iptables -w2 -t filter -C DOCKER-USER -j RETURN' failed: iptables: Bad rule (does a matching rule exist in that chain?).
May 15 23:37:32 x firewalld[2479]: WARNING: COMMAND_FAILED: '/sbin/iptables -w2 -t filter -C FORWARD -j DOCKER-USER' failed: iptables: No chain/target/match by that name.

활성화했습니다

  1. 또한 FirewallD의 변장( firewall-cmd --add-masquerade)
  2. 또한 ipv4 패킷 전달( vim /etc/sysctl.conf& net.ipv4.ip_forward=1) 도 활성화합니다.

이제 내 질문은: 개요 클라이언트 패킷을 허용하도록 FirewallD를 구성하는 방법은 무엇입니까?

감사합니다.

아웃라인은 Docker를 사용합니다.


업데이트 [2018.05.16]:

문제는 아웃라인이 도커 컨테이너의 각각의 새로운 키 AKA 클라이언트에 대해 고유한 포트를 생성한다는 것입니다. 따라서 문제를 해결하려면 다음을 수행하십시오.

다음 명령을 실행하세요(@abe에게 감사드립니다).

ss -tlp

이제 모든 SS 서버와 관련 포트가 표시됩니다. 예를 들어 내 서버는 다음과 같습니다.

root@dockerTest:~# ss -tlp
State              Recv-Q              Send-Q                            Local Address:Port                               Peer Address:Port                                                                      
LISTEN             0                   128                                     0.0.0.0:12615                                   0.0.0.0:*                  users:(("ss-server",pid=1162,fd=5))                    
LISTEN             0                   128                               127.0.0.53%lo:domain                                  0.0.0.0:*                  users:(("systemd-resolve",pid=617,fd=13))              
LISTEN             0                   128                                     0.0.0.0:ssh                                     0.0.0.0:*                  users:(("sshd",pid=824,fd=3))                          
LISTEN             0                   128                                        [::]:ssh                                        [::]:*                  users:(("sshd",pid=824,fd=4))                          
LISTEN             0                   128                                           *:47515                                         *:*                  users:(("node",pid=1103,fd=12))                        

이제 출력에서 ​​볼 수 있듯이 ss-server는 포트 "12615"를 사용하므로 FirewallD에서 이 포트를 허용해야 합니다. 이렇게 하려면 다음 명령을 실행하십시오.

firewall-cmd --add-port=12615/tcp
firewall-cmd --add-port=12615/udp

아웃라인 클라이언트를 확인하면 연결되어야 합니다.

모든 것이 예상대로 작동하면 다음 명령을 실행하여 변경 사항을 영구적으로 적용하십시오.

firewall-cmd --add-port=12615/tcp --permanent
firewall-cmd --add-port=12615/udp --permanent

@abe님, 정말 감사합니다. 도움을 주셔서 정말 감사합니다.

답변1

새로운 ubuntu 18.04 서버에 docker를 설치하고 docker 실행 시 방화벽이 어떻게 작동하는지 간단한 방법으로 확인했습니다.
이미지는 httpd를 사용하는 나의 모습입니다.

# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04 LTS
Release:        18.04
Codename:       bionic

# uname -a 
Linux my_hostname 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ sudo docker image list
REPOSITORY     TAG                 IMAGE ID            CREATED             SIZE
httpd          latest              fb2f3851a971        2 weeks ago         178MB
$ sudo docker run -d -i -t -p 80:80 httpd
$ sudo docker ps -a
CONTAINER ID   IMAGE      COMMAND              CREATED             STATUS             PORTS                NAMES
43b398cfa5b9   httpd      httpd-foreground"   31 minutes ago       Up 31 minutes       0.0.0.0:80->80/tcp   loving_northcutt
# ss -tlp
State      Recv-Q         Send-Q         Local Address:Port    Peer Address:Port
LISTEN      0              128                 *:http                 *:*          users:(("docker-proxy",pid=2101,fd=4))
# firewall-cmd --list-all
public
  target: default
  interfaces:
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:    

잘못된 조언을 해서 정말 죄송합니다. 아무런 변경 없이 내 컴퓨터에서 이 httpd에 연결할 수 있습니다.
sudo docker ps -a 출력의 "PORTS"와 ss -tlp 출력의 docker-proxy를 참조하세요.
문제가 해결되기를 바랍니다.

감사해요

답변2

방화벽에 http 또는 https 포트를 추가하는 것은 어떻습니까?

firewall-cmd --add-service=https --permanent


제 생각에 jason은 웹 애플리케이션이므로 클라이언트는 http 또는 https 프로토콜을 통해 서버에 연결됩니다.

관련 정보