czwartek, 6 lutego 2014

Bardzo Prosty i Skuteczny Firewall. LINUX

IPTABLES - firewall

jeśli nie chcesz korzystać wbudowanego w dystrybucje konfiguratora firewall'a to ten post jest dla Ciebie.

(DOMYŚLNIE !!!! , zezwalamy na cały ruch wychodzący)

URUCHAMIANIE

(debian, ubuntu, centos, redhat, suse)
cd /etc/init.d

dla (slackware)
cd /etc/rc.d/

vi rc.firewall

#!/bin/sh
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

## jesli uzywamy natowanie/maskowanie adresow
echo "1" >/proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE

## zezwol na polaczenia zainicjowane z komputera
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED

## ssh
iptables -A INPUT -s 0/0 -p tcp --dport 22 -j ACCEPT
## www
iptables -A INPUT -s 0/0 -p tcp --dport 80 -j ACCEPT
## ftp
iptables -A INPUT -s 0/0 -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -s 0/0 -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -s 0/0 -p udp --dport 20 -j ACCEPT
## serwer poczty jesli mamy
iptables -A INPUT -s 0/0 -p tcp --dport 25 -j ACCEPT

# przepuść torrenty
iptables -A INPUT -s 0/0 -p tcp --dport 6881:6889 -j ACCEPT
iptables -A INPUT -s 0/0 -p udp --dport 6881:6889 -j ACCEPT
iptables -A INPUT -s 0/0 -p udp --dport 12115 -j ACCEPT
iptables -A INPUT -s 0/0 -p tcp --dport 12115 -j ACCEPT
iptables -A INPUT -s 0/0 -p udp --dport 514 -j ACCEPT
iptables -A INPUT -s 0/0 -p udp --dport 7599 -j ACCEPT

##  zablokowanie ICMP - odpowiedzi ping
iptables -A INPUT -p icmp -j DROP
#iptables -A INPUT -p icmp --icmp-type 4 -j ACCEPT
#iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT
#iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
#iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT
#iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
#iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT 
#iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

## zablokawnie ataku slownikowego, tylko 4 polaczenia na minute
iptables -I INPUT -p tcp --dport 24  -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 24  -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP


aby uruchamiał się po restarcie, dodajemy wpis do rc.local:

vi /etc/init.d/firewall
dodajemy na końcu (przed poleceniem exit 0)

/etc/init.d/firewall

WYŁĄCZANIE FIREWALL

stwórz plik  /etc/init.d/rc.firewall.stop

vi /etc/init.d/rc.firewall.stop
dodajemy

#!/bin/sh
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

uruchamianie firewall: /etc/init.d/rc.firewall
zatrzymywanie firewall: /etc/init.d/rc.firewall.stop

to wszystko  (wystarczy pod-edytować wpisy po siebie)

Montowanie po ssh

SSHFS

Aby zamontować jakiś katalog ze zdalnej maszyny na komputerze lokalnym - wykorzystamy komendę sshfs.

pakiet do ściągnięcia ze strony producenta:  http://fuse.sourceforge.net/sshfs.html
lub z dystrybutorni używanego Linuxa.

MONTOWANIE:
ładujemy moduł jądra:
$> modprobe fuse

montujemy zdalny udział:
$> sshfs -C root@IP_ZDALNEJ_MASZYNY:/var/www /var/www
$> sshfs -C romek@IP_ZDALNEJ_MASZYNY:/home/romek /mnt/romek 

lub (jeśli domyślny port 22 został zmieniony na inny np. 9876)

$> sshfs -C -p 8976 root@IP_ZDALNEJ_MASZYNY:/var/www /var/www

opcja -C wymusza kompresje danych podczas przesyłu


FSTAB
jeśli chcemy aby udział montował się za każdym razem gdy zresetujemy maszynę musimy dodać wpis do /etc/fstab

vi /etc/fstab (proszę przeedytować poniższa linie pod swoje ustawienia)
dodajemy wpis
romek@IP_ZDALNEJ_MASZYNY:/remote/folder /mount/point  fuse.sshfs noauto,x-systemd.automount,_netdev,users,idmap=user,IdentityFile=/home/jacek/.ssh/id_rsa,allow_other,reconnect 0 0

GENEROWANIE KLUCZA PUBLICZNEGO SSH
Jeśli nie chcemy podawać za każdym razem hasła warto wygenerować sobie klucz publiczny i dodać go do zdalnej maszyny.

polecenia na lokalnej maszynie: 
(podczas generowania klucza nie wpisujemy żadnych haseł , klikamy tylko ENTER)

$> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jacek/.ssh/id_rsa): 
Created directory '/home/jacek/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/jacek/.ssh/id_rsa.
Your public key has been saved in /home/jacek/.ssh/id_rsa.pub.
The key fingerprint is:
02:c3:32:c0:e5:56:2e:cd:81:46:87:1a:13:b2:42:1a jacek@serwer
The key's randomart image is:
+--[ RSA 2048]----+
|Eo+oo+           |
|+B.=* .          |
|+ B+++           |
|...o.o           |
|      . S        |
|       .         |
|                 |
|                 |
|                 |
+-----------------+

w naszym katalogu domowym w katalogu .ssh został wygenerowany klucz publiczny

$> cat /home/jacek/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzki0cc9M1rbBkgD/P+LN9/ozwl9nzF
ZZqLeGKP7uvz60OhdKw0rPmdAD50kt03VKnclAZGpB6HVY684h77RnVff86g0b1jimSidE
F+YO6nQQFWHpuAau84Tc8L7neFTRwXqqWzM00S6I8EmzDzuFEacmZZYAI2xhBx50D
X//PhzO/faF6QDqzuIAgogasdqaasdasdBvBQXXmGfP8KM3kilSpJYHLMRuHvO2IaUB6
O9z0PlKqw7hM+ukTKJxRxwD0MRN9KmnGNSe0cqKY7PvWdtNgBQf471LWAU7dpYlBH
DgxxMfJaDdM8FKtfBYgo0u45RYKpVOXkwhlmI5/1KJyhv2lJT jacek@serwer



kopiujemy ten plik na zdalny serwer i dodajmy jego zawartość do pliku authorized_keys

$> cat ~/.ssh/id_rsa.pub | ssh romek@IP_ZDALNEJ_MASZYNY "cat >> ~/.ssh/authorized_keys; chmod 700. ~/.ssh/authorized_keys"


od teraz powinniśmy móc logowac sie bez podawania hasła.

ssh romek@IP_ZDALNEJ_MASZYNY
$>

nasze auto-montowanie podczas uruchamiania systemu zadzieje się automatycznie