iptables

Linux:网络防火墙
netfilter:frame
iptables:数据报文过滤,nat、mangle等规则生成的工具
转换为能够通过网络发送的数据格式;
文本
二进制
网络:IP报文首部,TCP报文首部;

防火墙:硬件,软件:规则(匹配标准,处理办法)

framework:
默认规则:
开放:堵
关闭:通

规则:匹配标准
IP:源IP,目标IP
TCP:sport,dport;syn=1,fin=0,rst=0,ack=0;syn=1,ack=1,fin=0,rst=0;ack=1,syn=0,rst=0,fin=0(ESTABLISHED)
udp:sport,dport
icmp:icmp-type

数据报文过滤

Linux2.0:ipfw/firewall
Linux2.2:ipchain/firewall
Linux2.4:iptables/netfilter

hook function:钩子函数
prerouting
input
output
forward
postrouting

规则链:
PREROUTING
INPUT
OUTPUT
FORWARD
POSTROUTING

filter(过滤表)
INPUT
OUTPUT
FORWARD

nat(地址转换表)
PREROUTING
OUTPUT
POSTROUTING

mangle(拆开、修改、封装表)
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING

raw():
PREROUTING
OUTPUT

iptables:
可以使用自定义链,但只在被调用时才能发挥作用,而且如果没有自定义链中的任何规则匹配,还应该有返回机制;
只能删除自定义的空链,默认链无法删除;
每个规则都有两个内置的计数器:
被匹配的报文个数
被匹配的报文大小之和

规则:匹配标准,处理动作
iptables [-t TABLE] COMMAND CHAIN [NUM] 匹配标准 -j 处理办法

匹配标准:
通用匹配
-s,--src:指定源地址
-d,--dst:指定目标地址
-p {tcp|udp|icmp}:指定协议
-i INTERFACE:指定数据报文流入的接口
可用于定义标准的链:PREROUTING,INPUT,FORWARD
-o INTERFACE:指定数据报文流出的接口
可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD
扩展匹配
隐含扩展:不用特别指明由哪个模块进行的扩展,因此此时使用-p {tcp|udp|icmp}
--sport PORT[-PORT]:源端口
--dport PORT[-PORT]:目标端口
--tcp-flags mask comp:只检查mask指定的标志位,是逗号分隔的标志位列表:comp:此列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;
--tcp-flags SYN,FIN,ACK,RST,SYN = --syn

  -p icmp
  --icmp-type
     0: echo-reply
         8: echo-request

-p udp
--sport
--dport

显示扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项课完成此功能,使用额外的匹配机制
   -m EXTESTION --spe-opt

state:状态扩展
    结合ip_conntrack追踪会话的状态
            NEW:新连接请求
            ESTABLISHED:已建立的连接
            INVALID:非法连接
        RELATED:相关联的
 -m state --state NEW,ESTABLISHED -j ACCEPT

multiport:离散的多端口匹配扩展
       --source-ports
       --destination-ports
       --ports

   -m multiport --destination-ports 21,22,80 -j ACCEPT

条件取反:!,-s ! 172.16.100.6

   -m iprange
      --src-range
      --dst-range

iptables -A INPUT -p tcp -m iprange --src-range 172.16.100.3-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

   -m connlimit:连接数限制
    !  --connlimit-above n

iptables -A INPUT -p -d 172.16.100.7 -p tcp --dport 80 -m connlimit ! --connlimit-above 2 -j ACCEPT(表示连接数没有达到2个时候就接受)

  -m limit
    --limit RATE
    --limit-burst 7

iptables -I INPUT -d 172.16.100.7 -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT(每分钟放行三个,第一批的放行量为5个)

iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 5/minute -j ACCEPT
iptables -R OUTPUT 1 -s 172.16.100.7 -m state --state RELATED,ESTABLISHED -j ACCEPT

-m string 
   --algo (bm|kmp)
   --string "STRING"

iptables -I INPUT -s 172.16.100.7 -m string --algo kmp --string "h7n9" -j REJECT(请求包含h7n9地址的字符串就拒绝)

比如:http://www.mageedu.com/h7n9.html

iptables -I OUTPUT -d 172.16.100.7 -m string --algo kmp --string "h7n9" -j REJECT(请求的内容包含n7n9的字符串就拒绝)

cat /var/www/html/test.html
h7n9

-j target
ACCEPT
DROP
REJECT

iptables -t filter -A INPUT -s 192.168.1.0/24 -d 192.168.1.1 -j DROP

命令:
管理规则
-A:附加一条规则,添加在链的尾部
-I:CHAIN [num]:插入一条规则,插入为对应CHAIN上的第num条
-D CHAIN [num]:删除指定链中的第num条规则
-R CHAIN [num]:替换指定的规则
管理链:
-F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
-P CHAIN:设定指定链的默认策略
-N:自定义一个新的空链
-X:删除一个自定义的空链
-Z:置零指定链中所有规则的计数器
-E:重命名自定义的链
查看类:
-L:显示指定表中的所有规则
-n:以数字格式显示主机地址和端口号
-v:显示链及规则详细信息
-x:显示计数器的精确值
--line-numbers:显示规则号码

动作(target):
ACCECT:放行
DROP:丢弃
REJECT:拒绝
DNAT:目标地址转换
SNAT:源地址转换
REDIRECT:端口重定向
MASQUERADE:地址伪装
LOG:日志
MARK:打标记

开放ssh服务访问:
iptables -t filter -A INPUT -s 172.0.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT

iptables不是服务,但有服务脚本;服务脚本的主要作用在于管理保存的规则
装载及移除iptables/netfilter相关的内核模块:
iptables_nat,iptables_filter,iptables_mangle,iptables_raw,ip_nat,ip_conntrack

设定默认策略:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

开放web服务访问:
iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -j ACCEPT
iptables -I OUTPUT -s 172.16.100.7 -p tcp --sport 80 -j ACCEPT

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT

允许自己ping别人,别人不能ping你:
iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT

cat /proc/net/ip_conntrack
cat /proc/sys/net/ipv4/ip_conntrack_max

lsmod | grep ip_conntrack(在高并发集中不要启动此模块要卸载掉)

ipstate

保存规则:
service iptables save
/etc/sysconfig/iptables
iptables-save > /etc/sysconfig/iptables.2013041801
iptables-restore < /etc/sysconfig/iptables.2013041801

显示扩展模块实例:
iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 22 -m state ESTABLISHED -j ACCEPT

cat /proc/sys/net/ipv4/netfilter/ip_conntrack_icmp_timeout
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 8 -m state --state ESTABLISHED -j ACCEPT

iptables -I OUTPUT -s 172.16.100.7 -m state --state ESTABLISHED -j ACCEPT

开放vsftp服务:
首先加载ftp的防火墙模块
vim /etc/sysconfig/iptables-cinfig
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"

iptables -A INPUT -d 172.16.100.7 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT(开放命令端口)
iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT(开放数据端口)
iptables -R OUTPUT 1 -s 172.16.100.7 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT -2 -d 172.16.100.7 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT

-j LOG:
--log-prefix "string"

iptables -I INPUT 4 -d 172.16.100.7 -p icmp --icmp-type 8 -j LOG --log-prefix "firewalld log for icmp-- "(记录ping请求日志记录在message里面)

自定义链:

iptables -N clean_in
iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
iptabls -A clean_in -d 172.16.100.7 -j RERUTN(返回主链)
iptables -I INPUT -j clean_in(调用主链)

利用iptables的recent模块来抵御DOS***:
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP

======================================================================================>
DNAT:IP目标地址,PEREOUTING
PNAT
SNAT:IP报文源地址,POSTROUTING,OUTPUT

-j TARGET
DNAT --to-destination IP[-IP:port],端口映射
SNAT --to-source

内核编译:
2.6 --> 3.0

 单内核:模块化(文件系统,驱动,安全)
 配置: .config(/proc/cpuinfo.lspic,lsusb,hal-device)
     make menuconfig
     make gconfig
     make kconfig
     make config
     make oldconfig
 编译
     make
     只编译部分源码:
        make SUBDIR=arch/
        make drives/net/pcnet32.ko
        make dir/
      转存编译结果
        make O=/path/to/somewhere
 安装内核模块
        make modules_install
 安装内核
        make install

 make clean
 make mrproper

busybox+kernel = Linux

iptables:三、四
string

netfilter:http,smtp,
netfilter:rules
iptables:语法正确

升级iptables:

内核打补丁:
tar -zxvf linux-2.6.28.1.tar.gz -C /usr/src/
tar -zxvf netfilter-layer7-v2.22.tar.gz -C /usr/src

cd /usr/src/
ln -sv linux-2.6.28.10 linux
cd linux
patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch
cp /boot/config-2.6.18-308.el5 .config
make menuconfig
make localmodconfig(centos 7需要此步)
screen
make
make modules_install
make install

vim /etc/grub.conf(centos6需要此步)
default=0

reboot

升级内核
cp /etc/init.d/iptables /root/
cp /etc/sysconfig/iptables-config /root/
cp /etc/sysconfig/iptables /root/iptables.rules

rpm -e iptables-ipv6 iptables iptstate --nodeps

tar -jxvf iptables-1.4.6.tar.bz2 -C /usr/src/
cd /usr/src/iptables-1.4.6/
cp ../netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/* ./extensions/
./configure --prefix=/usr --with-ksource=/usr/src/linux
make
make install

which iptables

vim /root/iptables(吧其中iptables路径改成当前命令的路径)

cp /root/iptables /etc/init.d/
chkconfig --add iptables

cp iptables-config /etc/sysconfig/

service iptables start

tar -zxvf l7-protocols-2009-05-28.tar.gz
cd l7-protocols-2009-05-28
make install
service iptables restart

根据服务协议控制防火墙规则:
iptables -t nat -A PORTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.7(首先允许客户端上互联网)
iptables -A FORWARD -s 192.168.10.0/24 -m layer7 --l7proto -j DROP(禁止qq登陆)

-m time
--datestart --datestop
--timestart --timestop

禁止某个时间访问
iptables -A FORWARD -s 192.168.10.0/24 -m time --timstart 08:10:00 --timestop 12:00:00 -j DROP

iptables脚本:
#! /bin/bash
#
ipt=/usr/sbin/iptables
einterface=eth1
iinterface=eth0

eip=172.16.100.7
iip=192.168.10.6

$ipt -t nat -F
$ipt -t filter -F
$ipt -t mangle -F

$ipt -N clean_up
$ipt -A clean_up -d 255.255.255.255 -p icmp -j DROP
$ipt -A clean_up -j RETURN

$iptables -A

IDS:
nids: snort + iptables = NIPS
hids:

NAT: Network Address Translation

nat和路由器的区别:路由器需要指定网关(意思是你和你请求的别人都要指网关),nat不用指向网关(意思是别人回复你的请求时,不需要指网关),但是都要打开路由转发功能

DNAT:目标地址转换
SNAT:源地址转换(POSTROUTING,OUTPUT)

-j SNAT
--to-source
-j MASQUERADE(当外网地址是动态获取的时候使用)

ADSL:123.2.3.2

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SANT --to-source 123.2.3.2
192.168.0.223-->192.168.0.254-->www.magedu.com

-j DNAT
--to-destination IP[:port]

PNAT: Port NAT

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A FORARD -s 192.168.10.0 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT

snat:
客户端:192.168.1.10(内部的客户端访问外部的服务器)
nat:eth0 192.168.1.20
eth1 202.1.1.1
web:202.1.1.2
策略:iptables -t nat -A POSTROUTING -s 192.168.1.10 -j SNAT --to-source 202.1.1.1

dnat:
客户端:202.1.1.2(外面的客户端访问内部web服务器)
nat:eth1 202.1.1.1
eth0 192.168.1.20
web :192.168.1.10
策略:iptables -t nat -A PREROUTING -d 202.1.1.1 -p tcp --dport 80 -j DANT --to-destionation 192.168.1.10
如果后端的web服务器采用8080端口则策略改为:iptables -t nat -A PREROUTING -d 202.1.1.1 -p tcp --dport 80 -j DANT --to-destionation 192.168.1.10:8080

iptables -A FORWARD -m string --algo kmp --string "h7n9" -j DROP

转载于:https://blog.51cto.com/12406012/2368191

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值