상황에 따라 새 방화벽 규칙을 정의할 때 iptables
패킷 연결 상태(일반적으로 NEW
및/또는)를 지정할 수 있습니다. 예를 들어, 다음 규칙 쌍은 내 호스트에 의해 시작될 때만 연결이 허용되고 원격 호스트에 의해 시작되면 연결이 끊어지도록 ESTABLISHED
보장합니다 .http
iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
그러나 대안을 모색하기 시작했을 때 firewalld
방화벽이 상태 저장 방화벽 관리 서비스이고 어떤 방식으로든 내부적으로 패킷 상태를 처리하는 것 같다는 것 외에는 상태에 대한 문서를 많이 찾을 수 없었습니다. iptables
위의 예와 같이 방화벽 규칙 생성을 사용할 때 패킷 상태를 정의할 수 있는지 설명하는 데 도움을 줄 수 있는 사람이 있습니까 firewalld
? 그렇지 않으면 어떻게 사용할 때 동일한 효과를 얻을 수 있습니까 firewalld
?
답변1
--direct
명령을 통해 규칙을 사용할 수 있습니다 firewall-cmd
. 귀하의 경우 실행할 명령은 다음과 같습니다.
# Check for existing firewalld direct rules
$ sudo firewall-cmd --direct --get-all-rules
# Now add your direct rule
$ sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport=80 -j ACCEPT -m state --state NEW
# Return traffic (ESTABLISHED for example) is automatically allowed due to firewalld's stateful nature
# Reload firewalld
$ sudo firewall-cmd --reload
# Check if your direct rule was successfully added
$ sudo firewall-cmd --direct --get-all-rules
# From server side create a listening port (if there is no service listening on TCP 80)
$ nc -vlt 80
# From client side, initiate a connection to server on port 80
# Where X.X.X.X is server IP or hostname (with a 3 seconds timeout)
$ nc -v -w 3 X.X.X.X 80
답변2
물론아니요ESTABLISHED
RELATED
대부분의 매뉴얼, 튜토리얼 및 방화벽에서는 이 세 가지 규칙을 생성하고 해당 INPUT/OUTPUT/FORWARD 체인의 맨 위에 배치하므로 각 특정 규칙에 대해 개별적으로 상태를 지정하는 것이 합리적입니다 .
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
nft의 경우 다음과 같습니다.
ct state { established, related } accept
이러한 전역 규칙을 사용하지 않는 상황은 거의 상상할 수 없습니다. TCP/IP 스택을 테스트할 수도 있지만 이 경우 미리 정의된 규칙을 사용하지 않는 것이 더 좋습니다.