홈 네트워크의 데스크톱에 대한 규칙을 설정하려고 시도했는데 처음에는 이 구성이 작동했지만 어딘가에서 뭔가를 변경하여 이제는 어떤 종류의 연결도 통과하지 않습니다. 이 스크립트는 시스템이 시작될 때 실행됩니다.
#!/bin/bash
### Variables ###
LAN="eth0"
WLAN="wlan0"
iptables="/sbin/iptables"
ip6tables="/sbin/ip6tables"
ssh_port=50000
### Initial set up ###
clear
# echo -e "\n"
### Flush ###
$iptables -F
$iptables -X
$iptables -Z
echo "Rules flushed; tables are empty now" && echo ""
### Basic rules ###
$iptables -A INPUT -s 127.0.0.1 -j ACCEPT
$iptables -A OUTPUT -s 127.0.0.1 -j ACCEPT
$iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "Basic rules written"&&echo""
### Special rules ###
# slsk
$iptables -A INPUT -p tcp --dport 63922 -j ACCEPT
$iptables -A INPUT -p tcp --dport 63923 -j ACCEPT
$iptables -A INPUT -p tcp --dport 2416 -j ACCEPT
# mpd
$iptables -A INPUT -p tcp --dport 8800 -j ACCEPT
$iptables -A INPUT -p udp --dport 8800 -j ACCEPT
# allow pings
$iptables -A INPUT -p icmp -m state --state NEW -j ACCEPT
# ssh server
$iptables -A INPUT -p tcp --dport $ssh_port -j LOG
$iptables -A INPUT -p tcp --dport $ssh_port -j ACCEPT
#$ip6tables -A INPUT -p tcp --dport $ssh_port -j LOG
#$ip6tables -A INPUT -p tcp --dport $ssh_port -j ACCEPT
echo "Special rules set" && echo ""
#### Default policies ###
$iptables -A INPUT -j DROP
$iptables -A OUTPUT -j ACCEPT
$iptables -A FORWARD -j DROP
echo "Default policies set" && echo ""
echo "Firewall set up finished" && echo ""
질문이 있으신가요? 문제를 해결하려면 어떻게 해야 합니까?
---편집---응답알렉산더 첸
다음은 로그 규칙을 추가한 후 발췌한 로그입니다(ub는 내 컴퓨터 이름입니다).
5월 12일 18:37:19 ub 커널: [30205.793422] iptables 거부됨: IN=wlan0 OUT= MAC=e8:de:27:07:1f:d6:64:d9:54:c2:d0:ec: 08:00 SRC=212.89.0.77 DST=192.168.1.3 LEN=175 TOS=0x00 PREC=0x00 TTL=250 ID=43075 DF PROTO=UDP SPT=53 DPT=27334 LEN=155
### Basic rules ###
[...]
#### Default policies ###
$iptables -A INPUT -j LOG --log-prefix "iptables denied: " --log-level 7
$iptables -A INPUT -j DROP
$iptables -A OUTPUT -j ACCEPT
$iptables -A FORWARD -j DROP
echo "Default policies set" && echo ""
이것이 작은 UDP 수정을 다시 시도한 후 구성 파일을 얻는 방법입니다. 로그 규칙을 사용하기 전에는 여전히 트래픽을 허용하지 않았지만 규칙을 제거하기 전에 트래픽을 추가한 후에는 명령줄에서 아무 것도 핑할 수 없어도 제대로 작동하는 것 같습니다. 좀 머리가 아프다). 계속해서 몇 가지를 테스트하겠습니다. 편집* 예, 작동하지 않습니다. 처음에는 작동하지 않는 것 같더니 작동하고 결국에는 다시 작동하지 않습니다. 전체 로그를 게시해야 합니까?
답변1
커널 로깅의 오류 메시지는 포트 53에 대한 인바운드 UDP 패킷이 삭제되었음을 알려줍니다.
구성을 살펴보면 방화벽이 UDP를 수락하도록 지시하는 내용이 없습니다. (규칙을 받아들여야 합니다.설립 및 관련TCP 연결 패킷이지만 UDP에는 패킷이 없습니다. )
해결책은 제한을 제거하는 것입니다설립 및 관련TCP 패킷이므로 UDP에서도 작동합니다.
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
답변2
UDP 연결을 허용하지 않아 UDP 포트 53에서 DNS를 차단하는 것으로 보입니다.
DHCP를 사용하는 경우 UDP 포트 67~68에서도 DHCP를 허용해야 합니다.
다음 두 줄을 추가하면 연결됩니다.
$iptables -A INPUT -p udp --dport 67:68 -j ACCEPT
$iptables -A INPUT -p udp --dport 53 -j ACCEPT
실행 중인 다른 포트에 따라 UDP에서 다른 포트를 열어야 할 수도 있습니다.