пятница, 7 августа 2015 г.

Использование не прозрачных прокси-серверов.

Все команды выполнялись от прав пользователя root.
При установке Debian по сети можно увидеть сообщение с предложением ввести параметры прокси-сервера для доступа в Internet. В общем виде такая запись представляет из себя следующее:
- https://ip_proxy:port' если прокси не требует авторизацию.
- http://user:password@ip_proxy:port если прокси требует авторизацию.

Если пароль содержит специальные символы, их необходимо заменить на ASCII-коды. Например символ собаки "@", должен быть заменен на "%40" (т. е. p@ssword = p%40ssword).

Использовать прокси для различных типов трафика (http, https, ftp)  из командной строки можно настроив переменные окружения - http_proxy, https_proxy, ftp_proxy. Т.е. по аналогии с вышесказанным получаются команды для подключения прокси:
- если не требуется авторизация на прокси
'export http_proxy="http://ip_proxy:port"'
'export https_proxy="https://ip_proxy:port"'
'export ftp_proxy="http://ip_proxy:port"'
- если необходима авторизация
'export http_proxy="user:password@ip_proxy:port"'
'export https_proxy="user:password@ip_proxy:port"'
'export ftp_proxy="user:password@ip_proxy:port"'
 Отключение прокси осуществляется следующими командами:
'unset http_proxy'
'unset https_proxy'
'unset ftp_proxy'
Если используется один и тот же прокси для доступа к различным типам трафика можно объединить команды в одну:
'export {http,https,ftp}_proxy="http://ip_proxy:port"' для подключения.
'unset {http,https,ftp}_proxy' для отключения.

понедельник, 9 февраля 2015 г.

Настройка SSH для авторизации по ключам

И так, SSH (англ. Secure Shell — «безопасная оболочка») — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений. Вданной статье пойдет разговор о настройке серверной части SSH.
Все команды выполнялись от прав пользователя root.
1. Устанавливаю SSH — 'apt-get install ssh'. После установки останавливаю его, ибо нужно сконфигурировать его под мои нужды - '/etc/init.d/ssh stop'.
2. Собственно редактирую конфиг SSH-сервера — 'nano /etc/ssh/sshd_config', до следующего вида:

# Package generated configuration file
# See the sshd(8) manpage for details

# What ports, IPs and protocols we listen for
# Меняем стандартный порт 22 для большей безопасности на 122 или иной
Port 122
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
# Указываем серверу работать лишь по 2 протоколу
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 120
# Запрещаем подключение к серверу по логину root
PermitRootLogin no
# Отключаем проверку прав пользователей в их домашних каталогах перед тем, как пустить на сервер
StrictModes no
# Разрешаем подключение только перечисленным пользователям
AllowUsers demon klim dethroner

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes

# To enable empty passwords, change to yes (NOT RECOMMENDED)
# Согласно рекомендациям запрещаем подключение пользователей с пустыми паролями
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords
# Отключаем вход на сервер по паролям
PasswordAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

UsePAM yes

3. Генерирую ключи для каждого пользователя (в моем случае demon klim dethroner). Можно пользоваться средствами самой ОС – описано тут (пункт 2), но я пользуюсь PuTTYGen. Т.е. запускаю программу нажимаю кнопку «Generate» перемещаю курсор мышки по экрану для набора случайной статистики при генерации. Должно получиться что-то типа:
4. Далее сохраняю ключи в надежном месте, получаю файлы вида:
public
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20150209"
AAAAB3NzaC1yc2EAAAABJQAAAIB245BgWSXUf/qC8c5vytQBLp1B6dMO0cJ9YyUIIHcOwWYz
wLbmQynlTZGB6IKFmtqF+z6cHdzx9NE2Mn2hD9nb0ThG8NsS72FLpxGgfVhsMlKeKuGyR3EdV89tY
lgCKYLta+QXA/FPmMtXjldQ+z3xqWFSjp5waelbMJSNGVQSlw==
---- END SSH2 PUBLIC KEY ----
private.ppk
PuTTY-User-Key-File-2: ssh-rsa
Encryption: none
Comment: rsa-key-20150209
Public-Lines: 4
AAAAB3NzaC1yc2EAAAABJQAAAIB245BgWSXUf/qC8c5vytQBLp1B6dMO0cJ9YyUIIHcOwWYz
wLbmQynlTZGB6IKFmtqF+z6cHdzx9NE2Mn2hD9nb0ThG8NsS72FLpxGgfVhsMlKeKuGyR3EdV89tY
lgCKYLta+QXA/FPmMtXjldQ+z3xqWFSjp5waelbMJSNGVQSlw==
Private-Lines: 8
AAAAgDAyvf2L7L3usaq1DoBZJYPwTZdDHjZwtqGJDwNLbolw/+t3pBgpEPwYhxj9ZVjCPOo1bGjN1
hzmta4wJRfIJ+LwuBfU4U8x3JUaBRdHerhFlk3jLF8NAdVwi5QwCzCrCobZql+kpWX8QsvE5AXcsBT
USB19+OdBlTY4oeraMQodAAAAQQC2+r0kr3ovycrvHMLyQ8VB8yeWhg9yknpZiyEhJMJz2g7SNVI
KXLwbBxWVfgxa/ihtXp4LPngR9aR2KE4IuN3vAAAAQQCmVU8DVSq8EP/eLJMN9wKI/ceGIWMKHmFPDiL95HJUBl7FCoO4yWS6MI+bt+DVOB5jlRZuxs76cpdh7eqyIj3ZAAAAQQC216nt
eeUyXbQkF9tMPeHjKfpQ7B5JTnhHTQ43J5QJSGp2whVoRK5Zzry/DCcOhG3v/QEZiKw1eLutVJRt6QWN
Private-MAC: 5d1f912438f2712c6701170dd77b08ba6b5fa918
5. В домашней папке каждого пользователя, разрешенного в конфиге, создаю файл в домашней директории, где будет храниться публичный ключ, например - 'touch /home/dethroner/.ssh/authorized_keys'
6. Назначаю права на созданную папку .ssh - 'chown dethroner:dethroner /home/dethroner/.ssh' и 'chmod 700 /home/dethroner/.ssh'
7. Прописываю сгенерированный ключ в созданный файл - 'nano /home/dethroner/.ssh/authorized_keys ', получаю что-то типа:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIB245BgWSXUf/qC8c5vytQBLp1B6dMO0cJ9YyUIIHcOwWYz
wLbmQynlTZGB6IKFmtqF+z6cHdzx9NE2Mn2hD9nb0ThG8NsS72FLpxGgfVhsMlKeKuGyR3EdV89tY
lgCKYLta+QXA/FPmMtXjldQ+z3xqWFSjp5waelbMJSNGVQSlw== dethroner@server.ex
8. Назначаю права на файл - 'chmod 600 /home/dethroner/.ssh/authorized_keys'
9. Запускаю SSH - '/etc/init.d/ssh start'
10. Важно добавить правила в таблицу iptables например как у меня или так (пункт 3).
11. Добавляю указанных пользователей для обеспечения root доступа из-под sudo для это набираю - 'visudo' (файл /etc/sudoers откроется в редакторе по умолчанию) и добавляю:
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL) ALL
demon ALL=(ALL) NOPASSWD: ALL
dethroner ALL=(ALL) NOPASSWD: ALL
klim ALL=(ALL) NOPASSWD: ALL

# Uncomment to allow members of group sudo to not need a password
# (Note that later entries override this, so you might need to move
# it further down)
# %sudo ALL=NOPASSWD: ALL
Затем жму 'ctrl+o', 'enter', 'ctrl+x' для сохранения изменений и выхода из редактора.
12. При использовании PuTTY для подключения к SSH-серверу указываю адрес и порт в программе:

 

Так же указываю путь к private.ppk



Нажимаю «Open» и подключаюсь к SSH-серверу. Ну или можно сохранить настройки, чтобы не вводить постоянно. После подключения к SSH-серверу в строке логин ввожу имя пользователя и попадаю в систему. Доступ с правами root осуществляется посредством sudo.

воскресенье, 2 июня 2013 г.

Iptables или мои настройки NAT+Firewall

Все команды выполнялись от прав пользователя root.
1. Создаю скрипт в файле -
'nano /etc/init.d/rc.firewall' следующего содержания:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          rc.firewall+
# Required-Start:  
# Required-Stop:
# Default-Start:     2
# Default-Stop:         0 6   
# Short-Description: Run /etc/init.d/rc.firewall if it exist
### END INIT INFO
######################################################################################
# Configured by Dethroner, 2009
######################################################################################
# Внешний интерфейс
 EXTIF=eth0
# Внутренний интерфейс
 INTIF=eth1
# Loop-устройство/localhost
 LPDIF=lo
 LPDIP=127.0.0.1
 LPDMSK=255.0.0.0
 LPDNET="$LPDIP/$LPDMSK"
# Переменные текстовых инструментов
 IPT='/sbin/iptables'
 IFC='/sbin/ifconfig'
 G='/bin/grep'
 SED='/bin/sed'
 UNPRIPORTS="1024:65535"
# Перечень ip адресов закрытых для FORWARD
 FILENAME_DENY="/etc/deny_inet_hosts"

start_fw()
{
    echo ""  
    echo "IpTables configured by Dethroner"
    # Deny вместо accept: предотвращает открытие "дыр"
    # в то время, как мы закрываем порты и все такое
     $IPT     -P INPUT       DROP
     $IPT     -P OUTPUT      DROP
     $IPT   -P FORWARD     DROP
    # Сброс всех существующих цепочек и стирание персональных цепочек
     CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`
     for i in $CHAINS
     do
      $IPT -t $i -F
      $IPT -t $i -X
     done
     echo 1 > /proc/sys/net/ipv4/tcp_syncookies
     echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    # Проверка адреса источника
     for f in /proc/sys/net/ipv4/conf/*/rp_filter;
     do
      echo 1 > $f
     done
    # Запрет маршрутизации IP от источника и редиректов ICMP
     for f in /proc/sys/net/ipv4/conf/*/accept_source_route;
     do
      echo 0 > $f
     done
     for f in /proc/sys/net/ipv4/conf/*/accept_redirects;
     do
      echo 0 > $f
     done
    # Включить перенаправление пакетов через ядро.
    echo 1 > /proc/sys/net/ipv4/ip_forward

    # Установка переменных среды для внешнего интерфейса
     EXTIP="192.168.1.2"
     EXTBC="192.168.1.255"
     EXTMSK="255.255.255.0"
     EXTNET="$EXTIP/$EXTMSK"
      echo ""
     echo "EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"
  
    # Установка переменных среды для внутреннего интерфейса
     INTIP="192.168.0.1"
     INTBC="192.168.0.255"
     INTMSK="255.255.255.0"
     INTNET="192.168.0.0/24"
     echo ""
     echo "INTIP=$INTIP INTBC=$INTBC INTMSK=$INTMSK INTNET=$INTNET"
  
    # Сейчас мы собираемся создать несколько собственных цепочек, результатом работы
    # которых будет логгинг отброшенных пакетов. Это поможет нам избежать необходимости
    # вводить команду log перед каждым отбрасыванием пакета, что мы хотим запротоколировать.
    # Первыми идут лог отброшенных пакетов и собственно отброс, затем лог пакетов с отказами
    # и собственно отказы.
    # Отключаем сообщения о том, что цепочки уже существуют (чтобы перезапуск был без мусора)
     $IPT -N DROP   2> /dev/null
     #$IPT -A DROP   -j LOG --log-level DEBUG --log-prefix "DROP:"
     #$IPT -A DROP   -j DROP
     $IPT -N REJECT 2> /dev/null
     #$IPT -A REJECT -j LOG --log-level DEBUG --log-prefix "REJECT:"
     #$IPT -A REJECT -j REJECT
     #$IPT -A INPUT -j LOG --log-level DEBUG --log-prefix "INPUT:"
     #$IPT -A OUTPUT -j LOG --log-level DEBUG --log-prefix "OUTPUT:"
     #$IPT -A FORWARD -j LOG --log-level DEBUG --log-prefix "FORWARD:"
     #$IPT -A DROP -j LOG --log-level DEBUG --log-prefix "DROP:"
    
  
    # Весь траффик от устройства loopback принимается
    # если IP совпадает с любым из наших интерфейсов.
     $IPT -A INPUT    -i $LPDIF -s   $LPDIP  -j ACCEPT
     $IPT -A INPUT    -i $LPDIF -s   $EXTIP  -j ACCEPT
     $IPT -A INPUT    -i $LPDIF -s   $INTIP  -j ACCEPT
  
    # Широковещательные пакеты
     $IPT -A INPUT   -i $EXTIF -d   $EXTBC  -j ACCEPT
     $IPT -A INPUT   -i $INTIF -d   $INTBC  -j ACCEPT
     $IPT -A OUTPUT  -o $EXTIF -d   $EXTBC  -j ACCEPT
     $IPT -A OUTPUT  -o $INTIF -d   $INTBC  -j ACCEPT
     $IPT -A FORWARD -o $EXTIF -d   $EXTBC  -j ACCEPT
     $IPT -A FORWARD -o $INTIF -d   $INTBC  -j ACCEPT
  
    # Блокируем доступ к внутренней сети из WAN
    # Это также призвано не дать нечестивым крякерам использовать нашу сетку
    # в качестве отправной точки для атак на других людей
    # Перевод с языка iptables:
    # "если пришедшие на наружный интерфейс пакеты были отправлены не с выданного
    # nefarious адреса, выкинуть их как горячую картошку"
     $IPT -A INPUT  -i $EXTIF -d ! $EXTIP  -j DROP
  
    # А сейчас мы блокируем внутренние адреса, кроме двух, присвоенных нашим двум
    # внутренним интерфейсам.....только помните, что если вы воткнете свой лэптоп или
    # какой другой pc в напрямую в одну из этих сетевых карт, то нужно удостовериться,
    # что они имеют именно эти IP-адреса или добавить соответствующий адрес отдельно.
  
    # Первый интерфейс/первая внутренняя сеть
    # $IPT -A INPUT   -i $INTIF -s ! $INTNET -j DROP
    # $IPT -A OUTPUT  -o $INTIF -d ! $INTNET -j DROP
    # $IPT -A FORWARD -i $INTIF -s ! $INTNET -j DROP
    # $IPT -A FORWARD -o $INTIF -d ! $INTNET -j DROP
  
    # Дополнительная Egress-проверка
    # $IPT -A OUTPUT  -o $EXTIF -s ! $EXTNET -j DROP
  
    # Блокируем исходящиие пакеты ICMP (за исключением PING)
    # $IPT -A INPUT -p icmp --icmp-type ! 8 -j DROP
    # $IPT -A OUTPUT -p icmp --icmp-type ! 8 -j DROP
    # $IPT -A FORWARD -p icmp --icmp-type ! 8 -j DROP
     $IPT -A INPUT -p icmp -j ACCEPT
     $IPT -A OUTPUT -p icmp -j ACCEPT
     $IPT -A FORWARD -p icmp -j ACCEPT
      

         $IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1300

    # печально известные порты:
    # 0 - tcpmux; у SGI есть уязвимость, через которую можно атаковать
    # 13 - daytime
    # 98 - Linuxconf
    # 111 - sunrpc (portmap)
    # SNMP: 161,2
    # Флотилия Squid: 3128, 8000, 8008, 8080 (пока закроем)
    # 1214 - Morpheus или KaZaA
    # 2049 - NFS
    # 3049 - очень заразный троян для Linux, часто путаемый с NFS
    # Часто атакуемые: 1999, 4329, 6346
    # Частые трояны 12345 65535
     COMBLOCK="0:1 13 98 111 161:162 1214 1999 2049 3049 4329 6346 8000 8008 12345 65535"
    # Порты TCP:
    # 98 - Linuxconf
    # 512-515 - rexec, rlogin, rsh, printer(lpd)
    #   [очень серьезеные уязвимости; продолжаются ежедневные атаки]
    # 1080 - прокси-серверы Socks
    # 6000 - X (ЗАМЕЧАНИЕ. X через SSH - безопасен, и работает на порту TCP 22)
    # Блокировка 6112 (CDE у Sun и HP)
     TCPBLOCK="$COMBLOCK 98 512:515 1080 6000:6009 6112"
    # Порты UDP:
    # 161:162 - SNMP
    # 520=RIP, 9000 - Sangoma
    # 517:518 - talk и ntalk (самые надоедливые)
     UDPBLOCK="$COMBLOCK 520 123 517:518 1427 9000"
    echo -n "FW: Blocking attacks to TCP port"
    for i in $TCPBLOCK;
    do
     echo -n "$i "
      $IPT -A INPUT   -p tcp --dport $i  -j DROP
      $IPT -A OUTPUT  -p tcp --dport $i  -j DROP
      $IPT -A FORWARD -p tcp --dport $i  -j DROP
    done
    echo ""
    echo -n "FW: Blocking attacks to UDP port "
    for i in $UDPBLOCK;
    do
     echo -n "$i "
      $IPT -A INPUT   -p udp --dport $i  -j DROP
      $IPT -A OUTPUT  -p udp --dport $i  -j DROP
      $IPT -A FORWARD -p udp --dport $i  -j DROP
    done
    echo ""
  
    # Открываем отлеживание соединений по ftp
     MODULES="ip_nat_ftp ip_conntrack_ftp"
     for i in $MODULES;
     do
      echo "Inserting module $i"
      modprobe $i
     done
      
    # Защищаем некоторые распространенные клиенты для чата.
    # Уберите из списка допустимых для пущей безопасности.
    # IRC='ircd'
     MSN=1863
     ICQ=5190
     SSH2=122
     TCP81=81
     #RDM=489
     NFS='sunrpc'
    # Нам нужно синхронизировать данные!!
     PORTAGE='rsync'
     OpenPGP_HTTP_Keyserver=11371
    # Все порты сервисов читаются из /etc/services
    # TCPSERV="domain ssh http https ftp ftp-data mail pop3 pop3s imap3 imaps imap2 time $PORTAGE $IRC $MSN $ICQ  $OpenPGP_HTTP_Keyserver" UDPSERV="domain time"
      TCPSERV="domain $SSH2 $TCP81 http https ftp ftp-data mail pop3 pop3s imap3 imaps imap2 time www webmin $PORTAGE $MSN $ICQ $OpenPGP_HTTP_Keyserver 4899" UDPSERV="domain time netbios-ns netbios-dgm netbios-ssn microsoft-ds"
    echo -n "FW: Allowing inside systems to use service:"
    for i in $TCPSERV;
    do
     echo -n "$i "
        $IPT -A INPUT  -i $INTIF -p tcp --dport $i --syn -m state --state NEW -j ACCEPT
      $IPT -A INPUT  -i $EXTIF -p tcp --dport $i --syn -m state --state NEW -j ACCEPT
      $IPT -A OUTPUT -o $INTIF -p tcp --dport $i --syn -m state --state NEW -j ACCEPT
      $IPT -A OUTPUT -o $EXTIF -p tcp --dport $i --syn -m state --state NEW -j ACCEPT
      $IPT -A FORWARD -i $INTIF -p tcp -s $INTNET --dport $i --syn -m state --state NEW -j ACCEPT
    done
    echo ""
    echo -n "FW: Allowing inside systems to use service:"
    for i in $UDPSERV;
    do
     echo -n "$i "
        $IPT -A INPUT  -i $INTIF -p udp --dport $i -m state --state NEW -j ACCEPT
      $IPT -A OUTPUT -o $INTIF -p udp --dport $i -m state --state NEW -j ACCEPT
      #$IPT -A OUTPUT -o $EXTIF -p udp --dport $i -m state --state NEW -j ACCEPT
      $IPT -A FORWARD -i $INTIF -p udp -s $INTNET --dport $i -m state --state NEW -j ACCEPT
    done

    # Запрещаем форвардинг для юзеров с отключенным инетом
    echo "Blocked IP forwarding"
  
    # первой внутренней сети
    for ip in $(cat $FILENAME_DENY); do
    $IPT -I FORWARD -s $ip -j DROP
    done

    # DNS rndc сервер на Lo разрешаем. (обход connection refused)
        $IPT -A OUTPUT -p tcp -m tcp -o $LPDIF --dport 953 --sport $UNPRIPORTS -j ACCEPT
  
    # разрешаем доступ DNS-серверу наружу
    $IPT -A OUTPUT -o $EXTIF -p tcp --dport domain -j ACCEPT
    $IPT -A OUTPUT -o $EXTIF -p udp --dport domain -j ACCEPT
      
    # NAT
    $IPT -t nat -A PREROUTING -j ACCEPT
    $IPT -t nat -A POSTROUTING -o $EXTIF -s $INTNET -j MASQUERADE
    $IPT -t nat -A POSTROUTING -j ACCEPT
    $IPT -t nat -A OUTPUT -j ACCEPT
    $IPT -A INPUT -p tcp --dport auth --syn -m state --state NEW -j ACCEPT
    $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
  
    # Заблокировать и запротоколировать все, что мы могли забыть.
    #$IPT -A INPUT -j DROP

    #Для тэстирования NetAMS раскомментировать
    #$IPT -P FORWARD DROP
    #$IPT -P FORWARD QUEUE
    #$IPT -A FORWARD -p all -j QUEUE
    $IPT -A INPUT -j DROP
    $IPT -A OUTPUT -j REJECT
    $IPT -A FORWARD -j DROP
  
    # Squid transparent
     $IPT -t nat -A PREROUTING -i $INTIF -s $INTNET -p tcp -d 0.0.0.0/0 --dport 80 -j REDIRECT --to-port 3128


}
flush_fw()
{
    $IPT -P INPUT ACCEPT
    $IPT -P FORWARD ACCEPT
    $IPT -P OUTPUT ACCEPT
    $IPT -t nat -P PREROUTING ACCEPT
    $IPT -t nat -P POSTROUTING ACCEPT
    $IPT -t nat -P OUTPUT ACCEPT
    $IPT -t mangle -P PREROUTING ACCEPT
    $IPT -t mangle -P OUTPUT ACCEPT
  
    $IPT -F
    $IPT -t nat -F
    $IPT -t mangle -F

    $IPT -X
    $IPT -t nat -X
    $IPT -t mangle -X
}

case "$1" in
start)    echo -n "Starting firewall: iptables"
    start_fw
    echo ""
        echo -n "Starting firewall Ok!"
    echo ""  
    ;;
stop)    echo -n "Stopping firewall: iptables"
    flush_fw
    echo ""
        echo -n "Stopping firewall Ok!"
    echo ""
        ;;
save)    echo -n "Saving firewall: iptables"
    iptables-save > /etc/rules-save
    echo ""  
    echo -n "Status save Ok!."
    echo ""
    ;;
restart) echo -n "Restarting firewall: iptables"
    flush_fw
    start_fw
    echo ""
    echo -n "Status restart Ok!"
    echo ""
        ;;
reload|force-reload) echo -n "Reloading configuration files for firewall: iptables"
        echo "."
        ;;
*)    echo "Usage: /etc/init.d/rc.firewall start|stop|restart|reload|force-reload|save"
        exit 1
        ;;
esac
exit 0


2.
Делаю скрипт исполняемым - 'chmod +x /etc/init.d/rc.firewall'
3. Добавляю в автозагрузку ссылку - 'ln -s /etc/init.d/rc.firewall /etc/rc2.d/S99rc.firewall'
4. Создаю файл в котором будет перечень адресов которым запрещен доступ в Internet (файл задействован в конфиге)  - 'nano /etc/deny_inet_host' следующего содержания:
192.168.0.250
192.168.0.251
192.168.0.252
192.168.0.253
192.168.0.254 


PS. В скрипте задействованы многие правила отдельно публикуемые в предыдущих статьях.

пятница, 12 октября 2012 г.

Прозрачный squid со стоп листами

Все команды выполнялись от прав пользователя root.
1. Устанавливаю Squid — 'apt-get install squid3'. После установки останавливаю его, ибо нужно сконфигурировать его под мои нужды - '/etc/init.d/squid3 stop'.
2. Собственно редактирую конфиг прокси-сервера — 'nano /etc/squid3/squid.conf', до следующего вида: 

# ACCESS CONTROLS
# -----------------------------------------------------------------------------
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8

acl homenet src 192.168.1.0/24
acl goodip src "/etc/allow.txt"
acl delaypool20 src "/etc/squid3/delay20.txt"
#acl perring src "/etc/squid3/perring.txt"
acl exception url_regex -i  "/etc/squid3/exception.txt"
acl bad_url url_regex -i "/etc/squid3/advare.txt"
acl bad_url_reg urlpath_regex -i "/etc/squid3/adv_reg.txt"

acl ip2 src 192.168.1.2/32
acl site2 url_regex -i "/etc/squid3/2.txt"

acl directurl url_regex "/etc/squid3/nocache.txt"
acl timeless time 7:00-23:59
#acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$ \.avi$ \.mov$

acl SSL_ports port 443
acl Safe_ports port 80        # http
acl Safe_ports port 21        # ftp
acl Safe_ports port 443        # https
acl Safe_ports port 5190    # icq
acl Safe_ports port 1025-65535    # unregistered ports
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access allow exception
http_access deny bad_url
http_access deny bad_url_reg
http_access allow goodip

http_access allow localhost

http_access allow site2 ip2

http_access deny all
icp_access deny all
htcp_access deny all

# NETWORK OPTIONS
# -----------------------------------------------------------------------------
http_port 3128 transparent

# OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
# -----------------------------------------------------------------------------
hierarchy_stoplist cgi-bin ?

acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
no_cache deny directurl

# MEMORY CACHE OPTIONS
# -----------------------------------------------------------------------------
 cache_mem 64 MB
 maximum_object_size_in_memory 512 KB

# DISK CACHE OPTIONS
# -----------------------------------------------------------------------------
 cache_dir ufs /var/spool/squid3 15000 16 256
 maximum_object_size 8192 KB
# cache_swap_low 90 указывает до какого уровня очистить кэш (в процентах
# от максимального)при достижении "потолка" - cache_swap_high
 cache_swap_low 90
 cache_swap_high 95

# LOGFILE OPTIONS
# -----------------------------------------------------------------------------
 access_log /var/log/squid3/access.log squid
 cache_log /var/log/squid3/cache.log
 cache_store_log none
 pid_filename /var/run/squid3.pid
 debug_options ALL,1

# OPTIONS FOR TUNING THE CACHE
# -----------------------------------------------------------------------------
 refresh_pattern ^ftp:        1440    20%    10080
 refresh_pattern ^gopher:    1440    0%    1440
 refresh_pattern (cgi-bin|\?)    0    0%    0
 refresh_pattern .        0    20%    4320

 quick_abort_min 16 KB
 quick_abort_max 16 KB
 quick_abort_pct 95

 negative_ttl 5 minutes

 positive_dns_ttl 6 hours

 negative_dns_ttl 1 minutes

# HTTP OPTIONS
# -----------------------------------------------------------------------------
        request_header_access From deny all
#        request_header_access Referer deny all
        request_header_access Server deny all
        request_header_access User-Agent deny all
        request_header_access WWW-Authenticate deny all
        request_header_access Link deny all

header_replace User-Agent Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.6.7 Version/11.00

# ADMINISTRATIVE PARAMETERS
# -----------------------------------------------------------------------------
 cache_effective_user proxy
 visible_hostname server.ex

# DELAY POOL PARAMETERS
# -----------------------------------------------------------------------------
delay_pools 4

# 1 класс - наказание за нарушение устава - 20% скорости
delay_class 1 1
delay_access 1 allow delaypool20
delay_parameters 1 5000/5000
delay_access 1 deny all

# 2 класс - для избранных сайтов вся сеть качает без ограничений
delay_class 2 1
#delay_access 2 allow perring
delay_access 2 allow directurl
delay_parameters 2 -1/-1
delay_access 2 deny all

# 3 класс - в период с 23.59 по 7.00 вся сеть качает практически без ограничений
# экспериментальный фильтр 70% на кач - 512КБ/сек

delay_class 3 2
delay_access 3 allow !timeless
delay_parameters 3 -1/-1 512000/512000
delay_access 3 deny all

# 4 класс - до 1МБ загружают весь канал без ограничений, свыше 1МБ только 50% от канала

delay_class 4 2
delay_access 4 allow goodip
delay_parameters 4 -1/-1 250000/512000
delay_access 4 deny all

# ICP OPTIONS
# -----------------------------------------------------------------------------
icp_port 3130

# ERROR PAGE OPTIONS
# -----------------------------------------------------------------------------
 error_directory /usr/share/squid3/errors/Russian-koi8-r

 deny_info ERR_BLOCKED_BANNERS bad_url
 deny_info ERR_BLOCKED_BANNER_REG bad_url_reg
 deny_info ERR_BLOCKED_SPYWARE spyware

# OPTIONS INFLUENCING REQUEST FORWARDING
# -----------------------------------------------------------------------------
 always_direct allow directurl

# DNS OPTIONS
# -----------------------------------------------------------------------------
 hosts_file /etc/hosts

# MISCELLANEOUS
# -----------------------------------------------------------------------------
 forwarded_for off
 coredump_dir /var/spool/squid3
 

 3. Создаю необходимые файлы задействованные в конфиге.
 - 'nano /etc/allow.txt' - список IP адресов которым разрешен доступ в Internet, список вида:
192.168.1.2
192.168.1.3
192.168.1.4

- 'nano /etc/squid3/delay20.txt' - список IP адресов людей злоупотребляющих Internet'ом (т.е. любителей качать большие объемы информации и тд.), список вида:
192.168.1.3
192.168.1.4

'nano /etc/squid3/perring.txt' - список IP адресов попадающих в пиринговую зону провайдера, список вида:
86.57.253.1
91.149.189.0/25  


-'nano /etc/squid3/advare.txt'  - стоп лист неблагоприятных сайтов (рекламных, вирусных и тд.), список имеет вид:
94.198.240.94/content/
ad.sprinthost.ru 

- 'nano /etc/squid3/adv_reg.txt' - еще один стоп лист, но несколько другого вида:
bannerid
lg.php
.ad.infoseek.com 
.bikinicollection.com/clickmexxx.html 

- 'nano /etc/squid3/exception.txt' - список надежных сайтов, рассматриваемых по какой-либо причине стоп листами как плохие, имеет вид:
adwords.google.com
adwords.google.ru 

- 'nano /etc/squid3/2.txt' - список сайтов находящихся в стоп листе, но по какой-либо причине нужных конкретному пользователю, имеет вид:
sextracker.de
shoppingads.com

- 'nano /etc/squid3/nocache.txt' - список адресов которые не нужно кэшировать (например игровые), имее вид:
ereality.ru
l2.ru 

4. Запускаю Squid — '/etc/init.d/squid3 start''/etc/init.d/squid3 start'

5. Создаю правило в iptables для перенаправления локального трафика с 80 порта на порт Squid'а — 3128:
/sbin/iptables -t nat -A PREROUTING -i eth1 -s 192.168.0.0/24 -p tcp -d 0.0.0.0/0 --dport 80 -j REDIRECT --to-port 3128