웹사이트 검색

Iptables 방화벽 규칙을 나열하고 삭제하는 방법


소개

Iptables는 대부분의 Linux 시스템에서 네트워크 보안에 필수적인 역할을 하는 방화벽입니다. 많은 iptables 튜토리얼이 서버를 보호하기 위해 방화벽 규칙을 생성하는 방법을 알려주는 반면, 이 튜토리얼은 방화벽 관리의 다른 측면인 규칙 나열 및 삭제에 중점을 둘 것입니다.

이 튜토리얼에서는 다음과 같은 iptables 작업을 수행하는 방법을 다룰 것입니다.

  • 목록 규칙
  • 패킷 및 바이트 카운터 지우기
  • 규칙 삭제
  • 플러시 체인(체인의 모든 규칙 삭제)
  • 모든 체인 및 테이블 플러시, 모든 체인 삭제 및 모든 트래픽 수락

참고: 방화벽으로 작업할 때 SSH 트래픽(기본적으로 포트 :22)을 차단하여 자신의 서버를 잠그지 않도록 주의하십시오. 방화벽 설정으로 인해 액세스 권한을 상실한 경우 대역 외 콘솔을 통해 연결하여 액세스 권한을 수정해야 할 수 있습니다.

전제 조건

이 자습서에서는 iptables 명령이 설치된 Linux 서버를 사용하고 있고 사용자에게 sudo 권한이 있다고 가정합니다.

이 초기 설정에 대한 도움이 필요하면 CentOS를 참조하십시오.

사양별 규칙 나열

먼저 규칙을 나열하는 방법을 살펴보겠습니다. 활성 iptables 규칙을 보는 방법에는 테이블 또는 규칙 사양 목록의 두 가지 방법이 있습니다. 두 방법 모두 서로 다른 형식으로 거의 동일한 정보를 제공합니다.

모든 활성 iptables 규칙을 사양별로 나열하려면 -S 옵션과 함께 iptables 명령을 실행합니다.

  1. sudo iptables -S
Output
-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N ICMP -N TCP -N UDP -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -p udp -m conntrack --ctstate NEW -j UDP -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP -A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -j REJECT --reject-with icmp-proto-unreachable -A TCP -p tcp -m tcp --dport 22 -j ACCEPT ...

보시다시피 출력은 앞의 iptables 명령 없이 생성하는 데 사용된 명령과 같습니다. iptables-persistent 또는 iptables save를 사용한 적이 있다면 iptables 규칙 구성 파일과 유사하게 보일 것입니다.

특정 체인 나열

출력을 특정 체인(INPUT, OUTPUT, TCP 등)으로 제한하려는 경우 체인 이름을 직접 지정할 수 있습니다. -S 옵션 뒤에. 예를 들어 TCP 체인의 모든 규칙 사양을 표시하려면 다음 명령을 실행합니다.

  1. sudo iptables -S TCP
Output
-N TCP -A TCP -p tcp -m tcp --dport 22 -j ACCEPT

이제 활성 iptables 규칙을 보는 다른 방법인 규칙 테이블을 살펴보겠습니다.

규칙을 테이블로 나열

테이블 보기에 iptables 규칙을 나열하면 서로 다른 규칙을 비교하는 데 유용할 수 있습니다. 테이블의 모든 활성 iptables 규칙을 출력하려면 -L 옵션과 함께 iptables 명령을 실행합니다.

  1. sudo iptables -L

이렇게 하면 체인별로 정렬된 모든 현재 규칙이 출력됩니다.

출력을 특정 체인(INPUT, OUTPUT, TCP 등)으로 제한하려는 경우 체인 이름을 직접 지정할 수 있습니다. -L 옵션 뒤에.

INPUT 체인의 예를 살펴보겠습니다.

  1. sudo iptables -L INPUT
Output
Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID UDP udp -- anywhere anywhere ctstate NEW TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW ICMP icmp -- anywhere anywhere ctstate NEW REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable REJECT tcp -- anywhere anywhere reject-with tcp-reset REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable

출력의 첫 번째 줄은 체인 이름(이 경우 INPUT)과 기본 정책(DROP)을 나타냅니다. 다음 줄은 테이블에 있는 각 열의 헤더로 구성되며 체인의 규칙이 이어집니다. 각 헤더가 나타내는 내용을 살펴보겠습니다.

  • target: 패킷이 규칙과 일치하는 경우 대상은 패킷으로 수행해야 하는 작업을 지정합니다. 예를 들어, 더 많은 규칙과 비교하기 위해 패킷을 수락, 삭제, 기록하거나 다른 체인으로 보낼 수 있습니다.
  • prot: tcp, udp, icmp 또는 all<과 같은 프로토콜 /코드>
  • opt: 거의 사용되지 않음, 이 열은 IP 옵션을 나타냄
  • 소스: 트래픽의 소스 IP 주소 또는 서브넷 또는 어디서나
  • destination: 대상 IP 주소 또는 트래픽 서브넷 또는 어디서나

레이블이 지정되지 않은 마지막 열은 규칙의 옵션을 나타냅니다. 이것은 이전 열에 표시되지 않은 규칙의 일부입니다. 이것은 소스 및 대상 포트에서 패킷의 연결 상태에 이르기까지 무엇이든 될 수 있습니다.

패킷 수 및 집계 크기 표시

iptables 규칙을 나열할 때 각 특정 규칙과 일치하는 패킷 수와 패킷의 총 크기(바이트)를 표시할 수도 있습니다. 이것은 어떤 규칙이 패킷과 일치하는지에 대한 대략적인 아이디어를 얻으려고 할 때 종종 유용합니다. 이렇게 하려면 -L-v 옵션을 함께 사용하십시오.

예를 들어 -v 옵션을 사용하여 INPUT 체인을 다시 살펴보겠습니다.

  1. sudo iptables -L INPUT -v
Output
Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- lo any anywhere anywhere 0 0 DROP all -- any any anywhere anywhere ctstate INVALID 396 63275 UDP udp -- any any anywhere anywhere ctstate NEW 17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW 396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable 2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED

목록에는 이제 pktsbytes라는 두 개의 추가 열이 있습니다.

이제 다양한 방법으로 활성 방화벽 규칙을 나열하는 방법을 알았으므로 패킷 및 바이트 카운터를 재설정하는 방법을 살펴보겠습니다.

패킷 수 및 집계 크기 재설정

규칙에 대한 패킷 및 바이트 카운터를 지우거나 0으로 설정하려면 -Z 옵션을 사용하십시오. 또한 재부팅이 발생하면 재설정됩니다. 이는 서버가 기존 규칙과 일치하는 새 트래픽을 수신하고 있는지 확인하려는 경우에 유용합니다.

모든 체인 및 규칙에 대한 카운터를 지우려면 -Z 옵션을 단독으로 사용하십시오.

  1. sudo iptables -Z

특정 체인의 모든 규칙에 대한 카운터를 지우려면 -Z 옵션을 사용하고 체인을 지정합니다. 예를 들어 INPUT 체인 카운터를 지우려면 다음 명령을 실행합니다.

  1. sudo iptables -Z INPUT

특정 규칙에 대한 카운터를 지우려면 체인 이름과 규칙 번호를 지정하십시오. 예를 들어 INPUT 체인의 첫 번째 규칙에 대한 카운터를 0으로 설정하려면 다음을 실행합니다.

  1. sudo iptables -Z INPUT 1

이제 iptables 패킷 및 바이트 카운터를 재설정하는 방법을 알았으므로 이를 삭제하는 데 사용할 수 있는 두 가지 방법을 살펴보겠습니다.

사양별 규칙 삭제

iptables 규칙을 삭제하는 방법 중 하나는 규칙 지정입니다. 이렇게 하려면 -D 옵션 뒤에 규칙 사양을 지정하여 iptables 명령을 실행할 수 있습니다. 이 방법을 사용하여 규칙을 삭제하려는 경우 규칙 목록의 출력인 iptables -S를 사용하여 도움을 받을 수 있습니다.

예를 들어 잘못된 수신 패킷을 삭제하는 규칙(-A INPUT -m conntrack --ctstate INVALID -j DROP)을 삭제하려는 경우 다음 명령을 실행할 수 있습니다.

  1. sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

생성 시 규칙 위치를 나타내는 데 사용되는 -A 옵션은 여기에서 제외되어야 합니다.

체인 및 번호로 규칙 삭제

iptables 규칙을 삭제하는 다른 방법은 체인줄 번호를 사용하는 것입니다. 규칙의 줄 번호를 결정하려면 테이블 형식으로 규칙을 나열하고 --line-numbers 옵션을 추가합니다.

  1. sudo iptables -L --line-numbers
Output
Chain INPUT (policy DROP) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED 2 ACCEPT all -- anywhere anywhere 3 DROP all -- anywhere anywhere ctstate INVALID 4 UDP udp -- anywhere anywhere ctstate NEW 5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 6 ICMP icmp -- anywhere anywhere ctstate NEW 7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable 8 REJECT tcp -- anywhere anywhere reject-with tcp-reset 9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable 10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED ...

이렇게 하면 num 헤더로 표시된 각 규칙 행에 줄 번호가 추가됩니다.

삭제하려는 규칙을 알고 있으면 규칙의 체인 및 줄 번호를 기록해 둡니다. 그런 다음 iptables -D 명령과 체인 및 규칙 번호를 차례로 실행합니다.

예를 들어 유효하지 않은 패킷을 삭제하는 입력 규칙을 삭제하려는 경우 INPUT 체인의 규칙 3임을 알 수 있습니다. 따라서 다음 명령을 실행해야 합니다.

  1. sudo iptables -D INPUT 3

개별 방화벽 규칙을 삭제하는 방법을 알았으니 이제 규칙 체인을 플러시하는 방법을 살펴보겠습니다.

플러싱 체인

Iptables는 체인의 모든 규칙을 삭제하거나 체인을 플러시하는 방법을 제공합니다. 이 섹션에서는 이를 수행하는 다양한 방법을 다룹니다.

경고: drop 또는 deny의 기본 정책으로 체인을 플러시하여 SSH를 통해 서버를 잠그지 않도록 주의하십시오. 그럴 경우 액세스 권한을 수정하기 위해 콘솔을 통해 연결해야 할 수 있습니다.

단일 체인 플러싱

체인의 모든 규칙을 삭제하는 특정 체인을 플러시하려면 -F 또는 동등한 --flush 옵션과 이름을 사용할 수 있습니다. 플러시 할 체인.

예를 들어 INPUT 체인의 모든 규칙을 삭제하려면 다음 명령을 실행합니다.

  1. sudo iptables -F INPUT

모든 체인 세척

모든 방화벽 규칙을 삭제하는 모든 체인을 플러시하려면 -F 또는 동등한 --flush 옵션을 단독으로 사용할 수 있습니다.

  1. sudo iptables -F

모든 규칙 플러시, 모든 체인 삭제 및 모두 수락

이 섹션에서는 모든 방화벽 규칙, 테이블 및 체인을 플러시하고 모든 네트워크 트래픽을 허용하는 방법을 보여줍니다.

경고: 이렇게 하면 방화벽이 효과적으로 비활성화됩니다. 방화벽 구성을 다시 시작하려는 경우에만 이 섹션을 따라야 합니다.

먼저 각 기본 제공 체인에 대한 기본 정책을 ACCEPT로 설정합니다. 이렇게 하는 주된 이유는 SSH를 통해 서버에서 잠기지 않도록 하기 위함입니다.

  1. sudo iptables -P INPUT ACCEPT
  2. sudo iptables -P FORWARD ACCEPT
  3. sudo iptables -P OUTPUT ACCEPT

그런 다음 natmangle 테이블을 플러시하고 모든 체인을 플러시하고(-F) 기본이 아닌 모든 체인을 삭제합니다(-X ):

  1. sudo iptables -t nat -F
  2. sudo iptables -t mangle -F
  3. sudo iptables -F
  4. sudo iptables -X

이제 방화벽이 모든 네트워크 트래픽을 허용합니다. 지금 규칙을 나열하면 규칙이 없고 세 개의 기본 체인(INPUT, FORWARDOUTPUT)만 표시됩니다. 유지하다.

결론

이 자습서를 진행한 후 iptables 방화벽 규칙을 나열하고 삭제하는 방법을 확인했습니다.

iptables 명령을 통한 모든 iptables 변경 사항은 일시적이며 서버 재부팅 후에도 지속되도록 저장해야 합니다. 이것은 공통 방화벽 규칙 및 명령 자습서의 규칙 저장 섹션에서 다룹니다.