OpenBSD에서 pf로 악의적 인 IP 주소를 차단하는 방법은 무엇입니까?


13

우리는 nginx 로그에서 불쾌한 일을하는 IP 주소가 있음을 알 수 있습니다.

pf명령으로 어떻게 차단 한 다음 나중에 /etc/pf.log? x.x.x.x/24해당 IP의 a 를 어떻게 차단할 수 있습니까? 예입니다 : 1.2.3.4

업데이트 : 아니요, OpenBSD에 / etc에 허용 / 거부 파일이없는 것 같습니다. AFAIK는 혹독한 IP 주소를 차단하기위한 최선의 조언입니다.

# cd /etc 
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
# 

/ etc 디렉토리에 hosts.deny 파일이 있습니까?
— 료 카요

답변:


13

이를 수행하는 가장 좋은 방법은 테이블을 정의하고 호스트를 차단하는 규칙을 작성하는 것입니다 pf.conf.

table <badhosts> persist
block on fxp0 from <badhosts> to any

그런 다음 IP 주소를 동적으로 추가 / 삭제하십시오.

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4

다른 'table'명령에는 flush(모두 제거) replace및 show. 자세한 내용 man pfctl을 참조하십시오 .

보다 영구적 인 목록을 원하면 하나 이상의 파일로 보관할 수 있습니다. 에서 pf.conf:

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any

IP 주소 대신 호스트 이름을 추가 할 수도 있습니다. man pf.conf및 의 "테이블"섹션을 참조하십시오 man pfctl.

참고 : 위의 예는 인터넷 연결 인터페이스가이라고 가정하고 fxp0설정에 따라 변경하십시오. 또한 규칙 pf.conf은 순차적으로 평가 되고 마지막으로 적용되는 규칙과 일치 block하는지 pass규칙 으로 평가 됩니다. 이 규칙 집합으로

table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80

1.2.3.4 및 192.168.0.10을 badhosts테이블에 추가 한 후

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10

1.2.3.4 및 192.168.0.10의 모든 트래픽은 차단되지만 규칙과 일치하고 규칙을 무시 하기 때문에 두 번째 호스트 가 다른 시스템의 포트 80에 연결할 수 있습니다 .passblock


4
차단 규칙을보다 쉽게 ​​지정할 수 있습니다 block in from <badhosts>. 인터페이스 나 to any부품 을 지정할 필요가 없습니다 .
— kurtm

4

다른 답변에서 차단하려는 나쁜 호스트의 실제 테이블을 만들어야한다는 것은 분명하지 않습니다.

이것은 pf.conf 파일에 들어갑니다. 예를 들어 2 개의 badguys 파일이 있습니다. 1 & 2 badguys1은왔다 갔다하는 사람들을위한 것이고 badguys2는 영구적 인 블랙리스트를위한 것입니다.

따라서 일정 기간 동안 성가신 사람의 IP를 추가 해야하는 경우 badguys1에 추가하십시오.

이제 pf.conf 파일에 이것이 있습니다. 내 예에서는 en1을 사용합니다. 왜냐하면 그것은 WiFi 인터페이스이기 때문입니다. 네트워크가 들어오는 인터페이스로 설정하십시오.

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on en1 from <badhosts> to any

이제 badguys1에 임시 주소를 추가 할 수 있습니다. (불량 호스트가 아니라 테이블의 이름입니다)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

1 개의 테이블이 생성되었다고 말하지만 실제로 새 테이블을 생성하지 않고 ip를 추가합니다. 이제 badguys1을 살펴보면 새로운 IP가 나타납니다.

sudo pfctl -t badhosts -T show

3

나는이 정보를 웹 사이트에서 얻었고에 대한 나의 나쁜 지식을 용서해 OpenBSD주지만 여기에 간다. 이 URL을 살펴보십시오 . 이에 따르면 IP를 차단한다고 명시되어 있습니다.

echo '123.123.123.123' >> /etc/pf.blocked.ip.conf

그런 다음 방화벽을 다시 시작하십시오.

pfctl -d
pfctl -e -f /etc/pf.conf

또는 방화벽 유형을 다시 시작하지 않고 추가하려면 다음을 수행하십시오.

pfctl -t blockedips -T add 111.222.333.444

추가되었는지 확인하려면 다음을 입력하십시오.

pfctl -t blockedips -T show

업데이트 : 아마도 도움이 될 것입니다.

  • vi에서 다음 파일을 엽니 다.

    vi /etc/pf.conf

  • 다음 코드 줄을 추가하십시오.

    table <blockedips> persist file "/etc/pf.blocked.ip.conf" ext_if="bge0" # interface connected to internet

  • 그 후 방화벽을 다시 시작하고 다음을 입력하여 IP가 차단되었는지 확인합니다.

    pfctl -d
    pfctl -e -f /etc/pf.conf
    pfctl -t blockedips -T show
    

1
나는 테이블의 요구가 블록으로 설정 될 생각하지만, 그 부분이 하우투에서 명확하지 않다, 나는 그것을 따라하지만, IP는 여전히 차단되지 않습니다
— somelooser28533

그렇게하는 방법을 찾아 보도록하겠습니다.
— ryekayo

2
pf.conf를 다시로드하기 위해 pf를 비활성화하고 다시 활성화 할 필요는 없습니다. pfctl -f /etc/pf.conf충분하다.
— Zé Loff

1
(나쁜) HOWTO는 사고를 자제하고 복사를 장려합니다. 읽기는 man pf.conf, 당신은 좋은 오픈 BSD 맨 페이지가 얼마나 놀랄 것입니다. 또한 pf.conf파일을 전체적으로 읽어야하므로 (규칙을 정하는 순서가 중요합니다) 단일 행을 복사하여 붙여 넣는 것은 일반적으로 나쁜 생각입니다. 파일과 table규칙을 작성하십시오 (정확한 내용 임). 그러나 전체 pf.conf파일 을 공유하거나 파일에서 적절한 block규칙과 파일의 위치를 ​​결정해야합니다.
— Zé Loff

1
@ryekayo ext_if="bge0"매크로 포함을 정당화하고 차단 규칙이없는 이유를 정당화 할 수 없다면 , 입력 한 노력에 관계없이 불완전한 (즉, 정답이 아닌) 답변 을 비판합니다. 또한 HOWTO에 대한 나의 의견은 OP가 아닌 OP에서 다루어졌습니다.
— Zé Loff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.