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_conntrack
과ip_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"