็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿ›ก Linux:Fail2Ban ้€ฒ้šŽ่‡ช่จ‚่ฆๅ‰‡、Filter ่งฃๆž่ˆ‡ๅคšๆœๅ‹™้˜ฒ็ฆฆ็ญ–็•ฅ

    ๐Ÿ›ก Linux:Fail2Ban ้€ฒ้šŽ่‡ช่จ‚่ฆๅ‰‡、Filter ่งฃๆž่ˆ‡ๅคšๆœๅ‹™้˜ฒ็ฆฆ็ญ–็•ฅ

    Fail2Ban ๆ˜ฏ Linux ็ณป็ตฑๆœ€้‡่ฆ็š„ไธปๅ‹•ๅผ้˜ฒ่ญทๅทฅๅ…ทไน‹ไธ€,้€้Žๅˆ†ๆžๆ—ฅ่ชŒไธฆ่‡ชๅ‹•ๅฐ้Ž–ๆƒกๆ„ IP,ๆœ‰ๆ•ˆ้™ไฝŽๆšดๅŠ›็ ด่งฃ่ˆ‡ๆƒกๆ„ๅญ˜ๅ–็š„้ขจ้šช。ๆœฌ็ฏ‡ๅพžๅŸบๆœฌๅŽŸ็†、filter ่‡ช่จ‚、jail ็ต„ๅˆ、้˜ฒ็ซ็‰†ๆ•ดๅˆๅˆฐๅคšๆœๅ‹™ไฟ่ญท็ญ–็•ฅๅฎŒๆ•ด่งฃๆž。

    ๐Ÿ“Œ ไธ€、Fail2Ban ้‹ไฝœๅŽŸ็†

    Fail2Ban ็š„ๆ ธๅฟƒๆต็จ‹ๅฏๅˆ†็‚บ 3 ๅ€‹้ƒจๅˆ†:

    1. Filter:ๅพžๆ—ฅ่ชŒไธญๆ‰พๅ‡บๆƒกๆ„่กŒ็‚บ(ๅฆ‚ๅฏ†็ขผ้Œฏ่ชค、้žๆณ•็™ปๅ…ฅ)
    2. Jail:ๅฎš็พฉๅฐ้Ž–ๆขไปถ,ไพ‹ๅฆ‚「5 ๅˆ†้˜ๅ…งๅคฑๆ•— 5 ๆฌก」
    3. Action:่งธ็™ผๅฐ้Ž–(ๅฆ‚่ชฟ็”จ iptables、nftables、firewalld)

    ๅช่ฆ Filter ๅตๆธฌๅˆฐไธๅˆๆณ•็š„ๅ˜—่ฉฆ,ๅฐฑๆœƒ่งธ็™ผ jail,ไธฆๆŠŠไพ†ๆบ IP ๅฐ้Ž–ๆŒ‡ๅฎšๆ™‚้–“。

    ---

    ๐Ÿ“Œ ไบŒ、ๅฎ‰่ฃ Fail2Ban

    ๐ŸŸฆ Debian / Ubuntu

    sudo apt install -y fail2ban
    sudo systemctl enable --now fail2ban
    

    ๐ŸŸฅ CentOS / Rocky / AlmaLinux

    sudo yum install -y epel-release
    sudo yum install -y fail2ban fail2ban-systemd
    sudo systemctl enable --now fail2ban
    
    ๆŸฅ็œ‹้‹ไฝœ็‹€ๆ…‹:
    sudo systemctl status fail2ban
    fail2ban-client status
    
    ---

    ๐Ÿ“Œ ไธ‰、Fail2Ban ๅŸบๆœฌ่จญๅฎš:jail.local

    ไธป่ฆ่จญๅฎšๆช”่ซ‹ๅ‹ฟ็›ดๆŽฅไฟฎๆ”น /etc/fail2ban/jail.conf,ๆ‡‰ๅปบ็ซ‹ override:

    sudo nano /etc/fail2ban/jail.local
    
    ็ฏ„ไพ‹:
    [DEFAULT]
    bantime  = 1h
    findtime = 10m
    maxretry = 5
    backend  = systemd
    ignoreip = 127.0.0.1/8 10.0.0.0/24
    
    [sshd]
    enabled = true
    port = ssh
    logpath = /var/log/auth.log
    
    ---

    ๐Ÿ“Œ ๅ››、Filter ๆทฑๅ…ฅ่งฃๆž(filter.d)

    Filter ๆ˜ฏ Fail2Ban ็š„ๆ ธๅฟƒ,็”จ regex ๅพžๆ—ฅ่ชŒๆ‰พๅ‡บๆƒกๆ„่กŒ็‚บ。

    Filter ไฝ็ฝฎ:

    /etc/fail2ban/filter.d/
    

    ๐Ÿ“ ็ฏ„ไพ‹:่‡ช่จ‚ SSH ๆšดๅŠ›็ ด่งฃ filter(ๆ“ดๅ……็‰ˆ)

    sudo nano /etc/fail2ban/filter.d/ssh-bruteforce.conf
    
    ๅ…งๅฎน:
    [Definition]
    failregex = ^.*Failed password for .* from <HOST> port .* ssh2
                ^.*Invalid user .* from <HOST> port .* ssh2
    ignoreregex =
    

    ๐Ÿ” regex ไธญ็š„ <HOST> ็”ฑ Fail2Ban ่‡ชๅ‹•ๆ›ฟๆ›ๆˆ IP ๅŒน้…ๅ€ๅŸŸ。

    ๆธฌ่ฉฆ filter:
    sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/ssh-bruteforce.conf
    
    ---

    ๐Ÿ“Œ ไบ”、Jail ้€ฒ้šŽ่จญๅฎš(maxretry、banaction、port)

    ็‚บ่‡ช่จ‚ filter ๅปบ็ซ‹ jail:

    sudo nano /etc/fail2ban/jail.d/ssh-bruteforce.local
    
    ๅ…งๅฎน:
    [ssh-bruteforce]
    enabled  = true
    filter   = ssh-bruteforce
    action   = iptables-multiport
    port     = ssh
    logpath  = /var/log/auth.log
    maxretry = 4
    findtime = 5m
    bantime  = 12h
    
    ้€™ๅ€‹ jail ็š„็ญ–็•ฅๆ˜ฏ:「5 ๅˆ†้˜ๅ…ง้Œฏ 4 ๆฌก → ๅฐ 12 ๅฐๆ™‚」。 ---

    ๐Ÿ“Œ ๅ…ญ、ๅคšๆœๅ‹™ๆ•ดๅˆ:nginx / postfix / dovecot / proftpd

    Fail2Ban ๆ”ฏๆดๅคšๆ•ธๅธธ่ฆ‹ๆœๅ‹™,ๅช่ฆๅ•Ÿ็”จๅฐๆ‡‰ jail ๅณๅฏ。

    ๐ŸŸฉ nginx ไฟ่ญท(ๆœ€ๅธธ่ขซๆšดๅŠ›ๆŽƒๆ)

    [nginx-http-auth]
    enabled = true
    filter = nginx-http-auth
    port = http,https
    logpath = /var/log/nginx/error.log
    

    ๐ŸŸง postfix(้ƒตไปถๆšด็ ด)

    [postfix]
    enabled = true
    port = smtp,ssmtp
    logpath = /var/log/maillog
    

    ๐ŸŸฆ dovecot(IMAP/POP ๅ˜—่ฉฆ)

    [dovecot]
    enabled = true
    logpath = /var/log/maillog
    

    ๐ŸŸฅ ProFTPD / vsftpd

    [proftpd]
    enabled = true
    logpath = /var/log/proftpd/proftpd.log
    
    ---

    ๐Ÿ“Œ ไธƒ、้˜ฒ็ซ็‰†ๆ•ดๅˆ:iptables、nftables、firewalld

    Fail2Ban ๆœƒ่‡ชๅ‹•ๅ‘ผๅซ็ณป็ตฑ็š„ firewall action,ไฝ ไนŸ่ƒฝๆ‰‹ๅ‹•ๆŒ‡ๅฎš。

    ้˜ฒ็ซ็‰†Fail2Ban Action
    iptablesiptables-multiport
    nftablesnftables-multiport
    firewalldfirewallcmd-multiport

    ๐ŸŸช ๅผทๅˆถๆŒ‡ๅฎš nftables

    [sshd]
    enabled = true
    banaction = nftables-multiport
    
    ---

    ๐Ÿ“Œ ๅ…ซ、Fail2Ban ๅฏฆ็”จๆŒ‡ไปคๅคงๅ…จ

    ๆŸฅ็œ‹ๆ‰€ๆœ‰ jail

    sudo fail2ban-client status
    

    ๆŸฅ็œ‹ๆŸ jail

    sudo fail2ban-client status sshd
    

    ๅฐ้Ž– / ่งฃ้Ž– IP

    sudo fail2ban-client set sshd banip 1.2.3.4
    sudo fail2ban-client set sshd unbanip 1.2.3.4
    

    ้‡ๆ–ฐ่ผ‰ๅ…ฅ่จญๅฎš

    sudo systemctl reload fail2ban
    
    ---

    ๐Ÿ“Œ ไน、ๆœ€ไฝณๅŒ–ๅปบ่ญฐ(ๆญฃๅผ็’ฐๅขƒๅฟ…ๅš)

    • ๆญ้… GeoIP ้Žๆฟพ,ๅฐ้Ž–้žๅฐ็ฃ/้žๅฟ…่ฆๅœ‹ๅฎถ
    • SSH ๆ”น้ž้ ่จญ 22 port
    • ๅ•Ÿ็”จ fail2ban persistent log(ไฟ็•™ๅฐ้Ž–็ด€้Œ„)
    • ่ˆ‡ Fail2Ban Cloud API ๆ•ดๅˆ้ป‘ๅๅ–ฎ(้ธ็”จ)
    • ๅฎšๆœŸๆชขๆŸฅ่ชคๅˆค IP,ๅŠ ๅ…ฅ ignoreip ็™ฝๅๅ–ฎ
    ---

    ๐Ÿ”— ๅปถไผธ้–ฑ่ฎ€

    — WWFandy・Linux Security ็ญ†่จ˜

    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš