2013-07-05 63 views
0

我有一個解析varnishncsa日誌文件的腳本。該腳本的目的是,如果有人訪問服務器上的某個URL,它會將它們的IP地址添加到iptables中以將其鎖定。bash - 添加額外的IF語句

在我的腳本中,我有一個聲明忽略了我的靜態辦公室IP地址(這樣我就不會將自己鎖定在服務器之外)。

我想添加更多的IP地址,以排除他們被鎖定,但是當我這樣做,似乎打破腳本。

#!/bin/bash 


for address in `cat /var/log/brute.txt | grep -v -f /var/log/applied_brute.txt`; do 
/bin/echo $address >> /var/log/applied_brute.txt 

if [ "$address" != "my.of.fi.ce.ip" ]; then 
IPTABLE=`echo $address | awk '{ print "/sbin/iptables -A INPUT -s "$0" -j DROP -m state --state NEW,ESTABLISHED,RELATED\n"}'` 
fi 


echo $IPTABLE 
$IPTABLE 
done 


unset address 
unset IPTABLE 

我想是什麼地方的聲明

if [ "$address" != "my.of.fi.ce.ip" ]; then 

到幾個IP地址添加到它。

回答

1

如何:

#!/bin/bash 

for address in `grep -v -f /var/log/applied_brute.txt < /var/log/brute.txt`; do 
    echo $address >> /var/log/applied_brute.txt 
    if ! grep -q -F -x $address /etc/my-office-addresses.txt; then 
     IPTABLE="/sbin/iptables -A INPUT -s "$address" -j DROP -m state --state NEW,ESTABLISHED,RELATED" 
     echo $IPTABLE 
     $IPTABLE 
    fi 
done 

存放在/etc/my-office-addresses.txt

grep的選項你的辦公室地址使用:

-F : Fixed strings (treat pattern literally, not as regex. This option is not really required in this case, since the input data in all the files used is assumed to be in standard format.) 
-x : line match (address = 192.168.0.1 would have matched line = 192.168.0.100 , if this option is missed.) 
-q : Do not print result to stdout. 
+0

謝謝,這正是我一直在尋找的 – rezizter

+0

請注意答案的細微變化,我忘記了一些選擇 – anishsane

+0

對不起,我現在注意到,Basile的答案也使用了相同的方法。 – anishsane

1

你可以使用grepfgrep並有

if fgrep -q "$address" /etc/files-of-addresses-to-avoid ; then 
    # $address should be avoided 
else 
    # $address should not be avoided 
fi 

(也許你想/var/log/brute.txt,而不是/etc/files-of-addresses-to-avoid等)

您可以通過fail2ban這是你想要達到什麼樣的興趣。

+0

謝謝。未能禁止像夢一樣的作品,但它需要python,我沒有在這個特定的盒子上:-(。我喜歡你有一個列表文件的想法,甚至沒有考慮它,會用它玩一下併發布結果給你一個+1,因爲這個想法是我正在尋找的東西 – rezizter

0

如何創建一個本地IP地址數組,然後在內部的「for循環」中通過它們。

1

如果您有IP地址的量非常有限,你可以使用AND:

if [ "$address" != "my.of.fi.ce.ip" -a "$address" != "my.other.of.fi.ce.ip" -a "$address" != "my.la.st.ip" ]; then 
+0

這也適用。 – rezizter