fail2ban 으로 차단한 정보를 메일로 전송할 경우 destemail 에 수신자 이메일 주소를 설정하고 sender 에는 "보낸 사람"의 정보를 설정합니다.
보낸 사람 이름은 전자 메일의 "보낸 사람"필드의 값을 설정하며 mta 매개 변수는 메일을 보내는 데 사용할 메일 서비스를 설정하며 기본은 sendmail 입니다.
중요한 부분은 action 항목으로 차단했을 때 실행할 액션을 의미하며 기본 설정은 아무 일도 안 하는 설정인 "action = %(action_)s" 입니다.
기본 설정으로는 차단 내용을 메일로 전송하지 않으므로 action_ 을 action_mw 나 action_mwl 로 지정해야 메일을 전송하며 차이는 아래와 같습니다.
action_mw : 메일을 전송하고 whois 로 IP 정보를 조회한 결과를 첨부 action_mwl : 메일을 전송하고 whois 로 IP 정보를 조회한 결과와 관련된 로그를 첨부
권장 설정은 다음과 같이 메일을 전송하고 whois 와 log 를 첨부하는 설정입니다.
action = %(action_mwl)s
※ 위 설정으로 하는 경우 메일 송신시 해당 IP의 정보를 검색한 결과도 같이 송부됩니다.
따라서 whois 명령을 통해 정보가 조회될 수 있어야 합니다.
whois 가 설치되지 않은 경우
$ sudo yum install whois 를 실행합니다.
2.5 개별 jail 설정
기본적으로 fail2ban 은 차단하지 않으므로 차단할 서비스를 [sshd] 처럼 항목명에 서비스를 등록하고 enabled = true 를 추가해 주면 차단됩니다.
2.6 포트 번호 변경
ssh 를 다른 포트로 사용할 경우 port 항목에 해당 포트를 기술해 주면 됩니다. 만약 ssh 가 여러 포트를 사용한다면
, 를 구분자로 해서 포트를 모두 기술하며 아래는 ssh 기본 포트와 10022 를 사용할 경우 설정입니다.
[sshd] enabled = true port = ssh,10022 sshd jail 설정
3. 최종 설정값
이제 ssh 를 위한 최종 /etc/fail2ban/jail.local 파일을 완성해 보면 아래와 같습니다.
[DEFAULT] ## 차단하지 않을 IP ignoreip = 127.0.0.1/8 192.168.10.0/24 # 1시간 차단 (-1로 설정할 경우 영구 차단) bantime = 3600 # 아래 시간동안 maxretry 만큼 실패시 차단 findtime = 300 # 최대 허용 횟수 maxretry = 5 # 메일 수신자, 다중 수신자는 지원 안 함 destemail = sysadmin@example.com # 메일 보낸 사람 sender = fail2ban@my-server.com # 메일 전송 프로그램 mta = sendmail # 차단시 whois 정보와 관련 로그를 첨부하여 메일 전송 action = %(action_mwl)s # sshd 서비스 차단 [sshd] enabled = true port = ssh, 10022
ipset 정책 목록 이제 fail2ban-sshd 규칙의 Header 항목에 있는 "timeout 3600" 에 따라 인증에 실패한 IP 는 1시간 동안 차단됩니다.
7. 전체 차단 정보 조회
이제 fail2ban-sshd 규칙의 Header 항목에 있는 "timeout 10800" 에 따라 인증에 실패한 IP 는 3시간 동안 차단됩니다.
전체 차단 정보는 fail2ban 의 클라이언트 유틸리티인 fail2ban-client 명령어를 통해서 확인해 볼 수 있습니다.
$ sudo fail2ban-client status sshd
Status for the jail: sshd |- Filter | |- Currently failed: 1 | |- Total failed: 8 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 2 |- Total banned: 2 `- Banned IP list: 103.114.106.xxx58.242.83.xxx
ignoreip :이 매개 변수는 금지 시스템에서 무시해야하는 IP 주소를 식별합니다. 기본적으로 이것은 기계 자체에서 오는 트래픽을 무시하도록 설정되어 있습니다. 이는 꽤 좋은 설정입니다. bantime :이 매개 변수는 금지의 길이를 초 단위로 설정합니다. 기본값은 600 초 또는 10 분입니다. findtime :이 매개 변수는 fail2ban이 반복적으로 실패한 인증 시도를 찾을 때주의 할 창을 설정합니다. 기본값은 600 초 (다시 10 분)로 설정됩니다. 즉, 소프트웨어는 지난 10 분 동안 실패한 시도 횟수를 계산합니다. maxretry : findtime금지가 설정되기 전에 창 에서 허용되는 실패한 시도 횟수를 설정합니다 . backend :이 항목은 fail2ban이 로그 파일을 모니터하는 방법을 지정합니다. 이 설정은 autofail2ban이 시도한 pyinotify다음 gamin사용할 수있는 것을 기반으로 폴링 알고리즘을 시도한다는 것을 의미합니다 . usedns : 역방향 DNS가 금지 구현을 돕는 데 사용되는지 여부를 정의합니다. 이것을 "no"로 설정하면 호스트 이름 대신 IP 자체가 금지됩니다. "warn"설정은 역방향 DNS를 사용하여 호스트 이름을 검색하고 그런 식으로 금지하려고 시도하지만 검토를 위해 활동을 기록합니다. destemail :이 주소는 메일 알리미로 작업을 구성한 경우 알림 메일로 전송됩니다. 보낸 사람 이름 : 생성 된 알림 전자 메일의 보낸 사람 전자 메일 필드에 사용됩니다. banaction : 임계 값에 도달 할 때 사용할 조치를 설정합니다. 실제로 /etc/fail2ban/action.d/호출 된 파일의 이름이 있습니다 iptables-multiport.conf. 이것은 iptablesIP 주소를 금지하기위한 실제 조작을 처리합니다 . mta : 알림 이메일을 보내는 데 사용할 메일 전송 에이전트입니다. protocol : IP 금지가 구현 될 때 삭제 될 트래픽 유형입니다. 이것은 새로운 iptables 체인으로 전송되는 트래픽 유형이기도합니다. chain : 이것은 fail2ban 깔때기로 트래픽을 보내기위한 점프 규칙으로 구성되는 체인입니다.
2. fail2ban 자주 사용하는 명령목록
fail2ban-client status : ban 목록확인 cat /var/log/fail2ban.log : fail2ban 로그확인 cat /var/log/fail2ban.log | grep Ban : Ban 내역만 뽑아서 보기 * ban된 ip 해제하기 fail2ban-client set sshd unbanip 192.111.1.101 (해제IP)
Status for the jail: mysqld-auth |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- Journal matches: `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list: [root@localhost fail2ban]# fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 1 | |- Total failed: 13 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 27 |- Total banned: 27 `- Banned IP list: 198.211
# fail2ban-client status mysqld-auth Status for the jail: mysqld-auth |- Filter | |- Currently failed: 1 | |- Total failed: 1 | `- File list: /var/log/mariadb/mariadb.log `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list: