Iptables

如何讓 Apache 訪問 ubuntu 上的 ip-tables

  • August 30, 2017

我在一個新Ubuntu 14.04.5 x64盒子上執行了下面的腳本。它的工作原理是 apache 按預期阻止我的 IP 地址以處理太多請求。但是,我的 IP 地址沒有添加到iptables. 我只是得到一個標準的 403,但我希望數據包被丟棄而沒有錯誤。

我認為問題在於apache無法執行的權限ip-tables。但我無法弄清楚,因為我已經讓apache使用者www-data能夠iptablessudoers文件中執行。

任何幫助表示讚賞,我整天都在為此煩惱!

#!/bin/sh

apt-get update
apt-get -y install apache2

# Install mod evasive
apt-get -y install libapache2-mod-evasive

# Enable it
a2enmod evasive
a2enconf evasive

# Create log directory
mkdir /var/log/mod_evasive
chown -R www-data:www-data /var/log/mod_evasive

# Config for mod evasive
cat <<'EOF' > /etc/apache2/mods-available/evasive.conf
 <IfModule mod_evasive20.c>
     DOSHashTableSize     3097

     # Allow 5 requests for the same resource request per second. Per-IP
     DOSPageCount          5
     DOSPageInterval       1

     # Allow up to 50 requests across the domain per second. Per-IP
     DOSSiteCount          50
     DOSSiteInterval       1

     # Block user by IP for 60 minutes
     DOSBlockingPeriod     60

     DOSSystemCommand      "sudo /usr/local/bin/ban_ip.sh %s"

     DOSLogDir             /var/log/mod_evasive
     DOSWhitelist          188.88.90.71
     DOSWhitelist          188.88.90.72
     DOSWhitelist          188.88.90.73
 </IfModule>
EOF

# Config for banning users
cat <<'EOF' > /usr/local/bin/ban_ip.sh
#!/bin/sh

# Offending IP as detected by mod_evasive
IP=$1

# Path to iptables binary executed by user www-data through sudo
IPTABLES="/sbin/iptables"

# mod_evasive lock directory
MOD_EVASIVE_LOGDIR=/var/log/mod_evasive

# Add the following firewall rule (block IP)
sudo $IPTABLES -I INPUT -s $IP -j DROP

# Unblock offending IP after 2 hours through the 'at' command; see 'man at' for further details
echo "sudo $IPTABLES -D INPUT -s $IP -j DROP" | sudo at now + 1 minute

# Remove lock file for future checks
sudo rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"
EOF

echo 'www-data ALL=NOPASSWD: /sbin/iptables *, /usr/bin/at *' | EDITOR='tee -a' visudo

我從未使用過 mod-evasive,但在瀏覽了您的腳本後,您似乎忘記了製作/usr/local/bin/ban_ip.sh執行檔 - 如果我正確理解您的設置。

此外,我看不出有任何理由在您的 iptables 命令中添加額外的 sudo,因為在 evasive.conf 中,整個usr/local/bin/ban_ip.sh腳本被配置為由 sudo 啟動。如果它執行,它將以 root 權限執行。

您可以添加一些語句,例如:

echo here we are at 1 >>/tmp/evasive.testlog

#!/bin/sh 之後不久,只是為了查看您的腳本是否被執行。

引用自:https://serverfault.com/questions/871036