iptables: TFTP 서버에 대한 규칙

iptables: TFTP 서버에 대한 규칙

UDP표준 포트에서 수신 대기하는 tftp 서버가 있습니다 69. iptables를 제외한 모든 항목을 차단하기 위해 규칙에 다음 규칙을 추가했습니다 UDP 69.

-A INPUT -i eth0 -s 192.168.1.0/24 -p udp -m udp --dport 69 -j ACCEPT
-A INPUT                                                    -j   DROP

하지만 이 규칙을 통해 클라이언트는 TFTP 서버에 접근할 수 없습니다. tftp실제 전송(예: ftp)에는 더 높은 포트가 사용되며 해당 모듈을 사용해야 한다는 내용을 읽었습니다 ip_conntrack_tftp.

# zcat /proc/config.gz  | grep -i tftp
CONFIG_NF_CONNTRACK_TFTP=m

커널에 모듈이 있습니다. 그런데 또 무엇을 해야 합니까?

답변1

  • 첫째, 소스 IP가 "192.168.1.0/24"와 일치하는 서버에만 연결할 수 있습니다. 확실히 말하자면 이것은 LAN IP이므로 서버와 클라이언트가 동일한 LAN에 있는 경우에만 작동합니다. 이 경우 인터넷의 방화벽 역할을 하는 라우터가 있을 수 있으므로 iptables 구성이 필요하지 않습니다.

  • 둘째: 첫 번째 설정을 다음으로 변경하겠습니다.

    -A INPUT -i eth0 -s 192.168.1.0/24 -p udp --dport 69 -m state --state NEW,ESTABLISHED -j ACCEPT
    
  • 그러나 위에 제공된 설정을 사용하면 포트 69에서 들어오는 연결만 허용합니다. 이는 나가는 연결에 대한 기본 필터링 정책에 따라 서버가 메시지를 다시 보낼 수 없음을 의미합니다. 서버가 포트 69에서 응답하도록 허용하려면 나가는 연결을 허용하는 기본 정책이 있어야 합니다.

    -P OUTPUT ACCEPT
    

    또는 포트 69에서 응답을 허용합니다.

    -A OUTPUT -i eth0 -p udp --sport 69 -m state --state ESTABLISHED -j ACCEPT
    
  • 또한 커널 모듈 ip_conntrackip_conntrack_tftp"상위 포트 연결"을 로드해야 합니다. (둘 다 를 사용하여 로드되었는지 확인하십시오 lsmod.) 실제 데이터 전송을 위해 새 연결을 수락하려면 다음을 사용하십시오.

    -A INPUT --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
    -A OUTPUT --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
    

1024보다 큰 포트에서는 새 연결을 설정할 수 없습니다.

답변2

TFTP 클라이언트의 경우 매우 간단한 해결책은 iptables에 구성을 추가하는 것입니다.

파일:/etc/sysconfig/iptables-config

IPTABLES_MODULES="nf_conntrack_netbios_ns ip_conntrack_tftp"

관련 정보