Strona 1 z 2

[+] błąd skryptu iptables podczas restartu serwera

: 08 lutego 2011, 14:34
autor: Andros
Witam.

Po instalacji Squeeze, skopiowaniu pliku firewall.sh do /etc/init.d i wydaniu polecenia

Kod: Zaznacz cały

#update-rc.d firewall defaults
pojawi się:

Kod: Zaznacz cały

 update-rc.d: using dependency based boot sequencing
ale niestety podczas restartu maszyny skrypt nie wystartuje poprawnie pojawią się błędy, jeżeli uruchomię skrypt normalnie tzn.

Kod: Zaznacz cały

 ./firewall.sh
to wszystko funkcjonuje poprawnie (skrypt jest na pewno dobry)

Kod: Zaznacz cały

#Andros
#czyszczenie firewalla
### BEGIN INIT INFO
# Provides:          firewall.sh
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: firewall.sh
# Description:      fireawall.sh
### END INIT INFO

iptables -F

echo "***********************************"
echo "Konfiguracja firewalla rozpoczeta"


# ustawiamy zmienne potrzebne firewallowi
MOJEIP=`/sbin/ifconfig | grep 'inet addr' | grep Bcast | awk '{print $2}' | awk -F: '{print $2}'`
echo "moje IP: $MOJEIP"


# czyscimy wszystko
iptables -F -t nat
iptables -X -t nat
iptables -F -t filter
iptables -X -t filter

################
# blokujemy #
################
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

######################
# ustawienia wstepne #
######################

#netBeans
echo 0 > /proc/sys/net/ipv6/bindv6only

# ochrona przed atakiem typu Smurf
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# nie akceptujemy pakietow "source route" (zmieniaja tablice routingu)
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

# nie przyjmujemy pakietow ICMP redirect, ktore moga zmienic nasza tablice routingu
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# wlaczamy ochrone przed blednymi pakietami ICMP error
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# ochrona przed spoofingiem -kazdy interfejs sieciowy bedzie przyjmowal
# tylko te pakiety ktore znajduja sie w tablicy routingu
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# wlacza logowanie dziwnych (spoofed, source routed, redirects) pakietow
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

#Blokada przed atakami typu SYN FLOODING
echo 1 > /proc/sys/net/ipv4/tcp_syncookies



#### wlaczenie loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT


#######################
iptables -A INPUT -d $MOJEIP -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s $MOJEIP -m state --state ESTABLISHED,RELATED -j ACCEPT


echo " "
echo "otwarte protokoly:"
echo "DC++"
#DC++

#blokowani na DC++
iptables -A INPUT -d $MOJEIP -p tcp --dport 411 -s 87.246.197.124 -j DROP


#DC++ tylko dla Ikara
iptables -A INPUT -d $MOJEIP -p tcp --syn --dport 411 -s 87.246.197.0/24 -m state --state NEW -j ACCEPT
iptables -A INPUT -d $MOJEIP -p tcp --syn --dport 411 -s 87.246.251.0/24 -m state --state NEW -j ACCEPT

#logowanie nie wpuszczonych na DC++
iptables -A INPUT -p tcp --dport 411 -j LOG --log-prefix " DC++ "

echo "ssh"
# ssh
iptables -A INPUT -d $MOJEIP -p tcp --dport 22 --syn -m limit --limit 1/s -m state --state NEW -j ACCEPT

echo "http/https"
#apache
iptables -A INPUT  -d $MOJEIP -p tcp --syn --dport 80 -m connlimit ! --connlimit-above 10 -m state --state NEW -j ACCEPT
iptables -A INPUT  -d $MOJEIP -p tcp --syn --dport 443 -m connlimit ! --connlimit-above 10 -m state --state NEW -j ACCEPT

echo "ftp"
#ftp
#iptables -A INPUT  -d $MOJEIP -p tcp --syn --dport 21 -m connlimit ! --connlimit-above 10 -m state --state NEW -j ACCEPT

#błędne pakiety
iptables -A INPUT -j DROP -m state --state INVALID
echo "Konfiguracja firewalla zakonczona"
echo "***********************************"

: 08 lutego 2011, 15:23
autor: mariaczi
Zechciej zerknąć na inne skrypty uruchamiane w trakcie startu systemu w katalogu

Kod: Zaznacz cały

/etc/init.d/
Zorientujesz się wtedy jaka powinna być konstrukcja owego skryptu, poprawisz swój na modłę tych właśnie startowych i będzie działać jak tego sobie życzysz.
Drugie rozwiązanie to napisanie nowego skryptu, który w sekcji start będzie odpalał ten który już masz. Wybór rozwiązania należy do Ciebie.

: 08 lutego 2011, 15:47
autor: kwik001
Cześć.

Moż pomoże dopisanie na początku skryptu coś takiego:

Kod: Zaznacz cały

#!/bin/sh
lub:

Kod: Zaznacz cały

#!/bin/bash

: 08 lutego 2011, 17:21
autor: Andros
Próbowałem uruchamiać go z innego skryptu ale nadal to samo:

Kod: Zaznacz cały

#!/bin/bash
też dodałem i nic.

Wygląda tak jakby skrypt ruszał przed uruchomieniem modułów odpowiedzialnych za iptables bo co bym nie wpisał do zawsze wyświetla, że zła konstrukcja jest.
Wie ktoś jak uruchomić skrypt np. zaraz po starcie Xów? Próbowałem Preferencje -> programy startowe ale nie działa w ten sposób.

: 08 lutego 2011, 18:16
autor: mariaczi
Pofatygowałeś się spojrzeć na inne skrypty w ścieżce którą podałem w swoim poprzednim poście czy też czekasz aż ktoś paluszkiem Ci wskaże dlaczego masz błąd?

: 08 lutego 2011, 19:20
autor: kwik001
Za kolejność odpowiada dodanie odpowiedniego numeru np.:

Kod: Zaznacz cały

update-rc.d s1.debian defaults 20
update-rc.d s2.debian defaults 21
s1 wywołany będzie przed s2.

: 08 lutego 2011, 20:40
autor: Andros
Takie podstawy znam i przeczytałem dokładnie:

Kod: Zaznacz cały

man update-rc.d
man insserv
przecież nie od parady jest ta wstawka:

Kod: Zaznacz cały

### BEGIN INIT INFO
# Provides:          firewall.sh
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: firewall.sh
# Description:      fireawall.sh
Już sobie poradziłem.
Tak pobierałem sobie IP z systemu:

Kod: Zaznacz cały

MOJEIP=`/sbin/ifconfig | grep 'inet addr' | grep Bcast | awk '{print $2}' | awk -F: '{print $2}'`
Okazało się, że IP mam bardzo długo przypisywane przez DHCP i dlatego pojawiały się błędy. Jeżeli ustaliłem z góry stałą wartość to już jest w porządku.
To tak w skrócie.

: 10 lutego 2011, 09:47
autor: Bastian
Andros: to że tobie ten skrypt działa, nie znaczy, że jest poprawnie napisany. Chyba najprostszy przykład szkieletu takiego skryptu znadziesz TUTAJ . Oczywiście INIT INFO które masz w skrypcie też musi być.

: 10 lutego 2011, 10:54
autor: Andros
Skrypt i reguły iptables są poprawne, tak jak napisałem wyżej. Może komuś się przyda. Ważne jest aby zmienne, które są wykorzystywane pobrane było przed startem skryptu. U mnie IP jest bardzo długo przypisywane, właściwie dopiero kiedy X wystartują, dlatego wystąpiła taka sytuacja.

: 10 lutego 2011, 16:35
autor: Bastian
Andros, której części z tego co Ci podawałem, nie zrozumiałeś? Gdzie masz

Kod: Zaznacz cały

case start
stop, restart itp.?