Arquivo da tag: iptables

resolvendo problema nf_conntrack: table full, dropping packet

Problema:

Pacotes sendo rejeitados no sistema usando ip_conntrack ou nf_conntrack. seguintes mensagens no /var/log/syslog

“nf_conntrack: table full, dropping packet”

Isto pode ocorrer se você administra uma rede muito grande ou se esta sofrendo algum tipo de ataque.

para ver o valor atual do nf_conntrack_max:
cat /proc/sys/net/netfilter/nf_conntrack_max

para ver a quantidade de conexões ativas:
cat /proc/sys/net/netfilter/nf_conntrack_count

solução:
sysctl -w net.netfilter.nf_conntrack_max=1000000
não esquece de colocar o comando na inicialização do sistema:
edite /etc/rc.local
adicione :
sysctl -w net.netfilter.nf_conntrack_max=1000000
ou se preferir:
echo 1000000 > /proc/sys/net/netfilter/nf_conntrack_max

redirecionando trafego de saída para outro IP no shorewall

Imagine que você quer redirecionar todo o trafego de saída da porta 123456 para um determinado IP:
A regra no iptables seria:
#iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 123456 -j DNAT –to 200.200.200.200:123456

no shorewall, basta adicionar no /etc/shorewall/rules
DNAT loc net:187.17.66.212:56789 tcp 56789

iptables filtrar pacote por palavra (string) – identificar torrent na rede

iptables -A FORWARD -m string –algo bm –string “BitTorrent” -j LOG –log-prefix “torrent”
iptables -A FORWARD -m string –algo bm –string “peer_id=” -j LOG –log-prefix “torrent”
iptables -A FORWARD -m string –algo bm –string “torrent” -j LOG –log-prefix “torrent”
iptables -A FORWARD -m string –algo bm –string “announce” -j LOG –log-prefix “torrent”
iptables -A FORWARD -m string –algo bm –string “tracker” -j LOG –log-prefix “torrent”
iptables -A FORWARD -m string –algo bm –string “find_node” -j LOG –log-prefix “torrent”
iptables -A FORWARD -m string –algo bm –string “get_peers” -j LOG –log-prefix “torrent”

iptables facil com shorewall

Shorewall é uma ferramenta que ajuda a configurar o IPTABLES, com ele você cria regras facilmente e facilita a gerencia do seu firewall

Primeiro vamos instalar (debian e derivados)

#apt-get install shorewall

depois de instalar, vai ser criado o diretorio /etc/shorewall em seu sistema, mas os arquivos de configuração ainda não estão la..
para copiar os arquivos padrões:

#cp /usr/share/doc/shorewall/examples/two-interfaces/* /etc/shorewall/

no comando acima , estamos copiado os arquivos de configuração de exemplo para um servidor com duas internfaces (normalmente rede local e internet, como um gateway, se esse não for seu caso, procure o caso mais parecido em /usr/share/doc/shorewall/examples/)

Começando as configurações:
Primeiro vamos editar o arquivo interfaces, para definir qual interface é responsavel pela rede local e qual é responsavel pela internet:
vamos editar o arquivo /etc/shorewall/interfaces:


net ppp0 detect dhcp,tcpflags,nosmurfs,routefilter,logmartians
loc eth0 detect tcpflags,nosmurfs,routefilter,logmartians

no exemplo estamos dizendo que a rede da INTERNET esta ligada na placa de rede ppp0 (no caso um link 3G) e a rede local esta ligada na placa de rede eth0, as demais opções são filtros adotados para cada interfaces, para mais informações desses filtros use man shorewall-interfaces

com nosso arquivo de interfaces pronto, vamos configurar as zonas:
edite o arquivo /etc/shorewall/zones

fw firewall
net ipv4
loc ipv4

no exemplo estamos dizendo que a interface net e a interface loc estão usando ipv4, a zona firewall esta definindo a propria maquina.

configurando as politicas padrões:
Essas politicas, serão a ação tomada por padrão caso não tenha uma regra especifica para a determinada ação, se você tem intimidade com o IPTABLES ela faz o mesmo papel das cadeias (CHAINS).
edite o arquivo /etc/shorewall/policy

#SOURCE DEST POLICY LOG LEVEL LIMIT:BURST
loc net DROP info
loc fw REJECT info
loc all DROP info

net fw DROP info
net loc DROP info
net all DROP info

fw loc ACCEPT
fw net ACCEPT
fw all ACCEPT info
# THE FOLLOWING POLICY MUST BE LAST
all all REJECT info


O arquivo segue o padrão: origem , destino , ação a ser tomada.
exemplo:
a linha:
loc net DROP info
diz que os pacotes originados na interface loc (rede local) com destino net (internet) vão ser bloqueados e as informações sobre esse pacote serão logadas no formato info ( /var/log/messages )

Finalmente vamos configurar as regras
as regras são responsaveis pelas ações a serem tomadas
edite o arquivo /etc/shorewall/rules


#ACTION SOURCE DEST PROTO DEST(port) SOURCE(port)

esse é o padrão que o arquivo obedece, vamos a alguns exemplos para ficar mais facil de entender:
ACCEPT $FW loc icmp
#pacotes originados no firewall com destino a rede local o qual usam o protocolo ICMP (ping) serão aceitos

ACCEPT loc net tcp 22
#todos os pacotes originados na rede local com destino a internet usando o protocolo TCP na porta 22 serão aceitos

ACCEPT net fw tcp 80
#todos os pacotes originados na interface net (internet) com destino o proprio firewall usando o protocolo tcp na porta 80 serão aceitos

DROP net fw tcp 22
#todos os pacotes originados na interface net (internet) com destino o proprio firewall usando TCP com destino a porta 22 serão bloqueados

Proto! nosso firewall esta configurado, personalize as regras conforme sua necessidade.
depois disso podemos verificar as configurações do shorewall usando o comando:

#shorewall check

se tudo estiver OK, voçê pode iniciar o shorewall usando o comando:

#shorewall start

para segurança, por padrão o debian não deixa você iniciar o shorewall sem que isso seja definido dentro do arquivo /etc/default/shorewall
apenas altere a opção startup=0 para startup=1

Você pode obter mais informações em www.shorewall.net , a documentação esta em ingles mas é bem clara e simples.

iptables para liberar o FTP ativo

iptables -F FORWARD
iptables -F OUTPUT
iptables -F INPUT
iptables -F -t nat

#isso é o importante
depmod -a
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_nat
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_filter
#/sbin/modprobe ipt_unclean
/sbin/modprobe ipt_tos
/sbin/modprobe ipt_tcpmss
/sbin/modprobe ipt_state
/sbin/modprobe ipt_owner
/sbin/modprobe ipt_multiport
/sbin/modprobe ipt_mark
/sbin/modprobe ipt_mac
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_TOS
/sbin/modprobe ipt_TCPMSS
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_REDIRECT
#/sbin/modprobe ipt_MIRROR
modprobe ip_nat_ftp
iptables -I FORWARD -m state –state RELATED,ESTABLISHED -j ACCEPT
##

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Allow FTP connections @ port 21
iptables -A INPUT -p tcp –sport 21 -m state –state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT

# Allow Active FTP Connections
iptables -A INPUT -p tcp –sport 20 -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp –dport 20 -m state –state ESTABLISHED -j ACCEPT

# Allow Passive FTP Connections
iptables -A INPUT -p tcp –sport 1024: –dport 1024: -m state –state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp –sport 1024: –dport 1024: -m state –state ESTABLISHED,RELATED -j ACCEPT