一.默认的四张表
1.filter:用于防火墙,默认有INPUT/OUTPUT/FORWARD三条链
2.nat:网络地址转换,PREROUTING/POSTROUTING/OUTPUT 三条链
3.mangle:流量×××,五条链
4.raw:确定是否对数据包进行状态跟踪
 
二.默认的五条规则链
1.INPUT:如果一个数据包的目的地址是LINUX本身,则进入INPUT链
2.OUTPUT:源地址是LINUX本身
3.FORWARD:数据包从一块网卡接收,从另一块网卡发出,经过LINUX的包,进入这条链
4..PREROUTING路由前
5.POSTROUTING路由后
 
三.编写规则
类别       选项         用途
添加规则       -A        在链的末尾追加一条规则
在链的开头(或指定序号)插入一条规则
查看规则       -L      列出所有的规则条目
以数字形式显示地址,端口等信息
查看规则时,显示规则的序号
删除规则       -D        删除链内指定序号(或内容)的一条规则
清空所有规则
默认策略       -P        为指定的链设置默认规则
 
 
 
 
ACCEPT:允许通行/放行
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志,然后传给下一条规则
 
 
工具程序位置
-         /sbin/iptables
指令组成
- [ -t 表名 ] 选项 [ 链名 ] [ 链名 ] [ 条件 ] [  -j 目标操作
 
Iptables –nL //查看规则,以数字形式显示
Iptables –t filter –L  //可直接写iptalbes –L  查filter表
Iptables –F   //清除规则
Iptables –L
Iptables –P INPUT DROP  //DROP 丢弃,不允许访问
Iptables –A INPUT –p tcp –dport 80 –jACCEPT   //追加tcp 80 端口 ACCEPT允许 –J跳转
Iptables –A INPUT –p tcp –dport 443 –jACCEPT
Iptables –A INPUT –s 192.168.10.3 –p tcp –-dport80 –j ACCEPT   //-s源
Iptables –I INPUT 3 –S 192.168.1.1 –p –tcp  --doport 80 –j ACCERT 在第三行插入
Iptables –nL --line-numbers    //显示规则的序列号
Iptables –D INPUT 3 //删除第3排的规则
# watch –n 1 iptables –nvL //每隔一少钟刷新后面的命令
 
 
1.拒绝ping防火墙本身
# iptables -F
# iptables –A INPUT –p icmp –j DROP
2.ping linux 的IP地址
3.把防火墙规则再清空,把拒绝ICMP的目标规则改为REJECT,再次ping测试,看结果,
4.查看防火墙规则
#iptables –nvl
5.允许指定ip地址的主机ping防火墙
# iptables –I INPUT 1 –s 192.168.1.1 –picmp –j ACCEPT
6.查看防火墙规则,每个规则注说序号
# iptables –nL –-line-numbers
7.删除防火墙的INPUT链中第二条规则
# iptables –D INPUT 2
8.把OUTPUT的默认规则改为DROP
# iptables –P OUTPUT DROP
9.清空OUTPUT这条规刚
# iptables –F OUTPUT
10.iptables –nvL  //匹配的条数
 
 
四,规则的基本匹配条件
类别                     选项                                   用法
协义匹配                            -P协义名
通用匹配        地址匹配                            -s     源地址  -d  目标地址
接口匹配                            -i   收数据的网卡  -o  发数据的网卡
             
端口匹配                            --sport源端口  --dport 目标端口
隐含匹配              ICMP类型匹配                   --icmp-type    ICMP类型
标记匹配                     --tcp-flags检查哪些位 哪些位被设置
 
 
1.      允许特定ip地址访问LINUX 的telnet服务
(1)# yum –y install telnet-server
 #service xinetd start
 #chkconfig telnet on
(2) # iptables –P INPUT DROP
(3) #iptables –A INPUT –s 192.168.1.1 –p tcp –-dport 23 –j ACCEPT
2.继续第一步,向INPUT链插入规则,第一条,从eth0网卡收到的、访问telnet服务的数据包,拒绝
# iptables –I INPUT –i eth0 p tcp –dport 23–j REJECT
 
五.打开LINUX的路由功能(转发功能)
IS:中间系统路由器
ES:终端系统,主机系统
1.      临时打开路由功能
# echo 1 > /proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_ forward
 
2.      永久打开转发功能
# echo `echo 1 > /proc/sys/net/ipv4/ip_forward` >>/etc/rc.local
或
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
:wq
Sysctl –q //马上生效
 
六.使用FORWARD链
 
主机1                                 主机2                                 主机3
Eth0:192.1681.1                                                     eth0:192.168.2.1
                                Eth0:192.168.1.2
                                   Eth0:192.168.2.2
3.      拒绝192.168.195.0//24 网段访问192.168.194.0、24网段的telnet服务
4.      # iptables –A FORWARD –s192.168.195.0/24 –d 192.168.2.0/24 –p tcp –doprt 23 –i eth1 -0 eth0 –j REJECT
 
2.      拒绝SSH协议通过防火墙
3.      iptables –A FORWARD –p tcp –dport22 –j REJECT
4.      不是192.168.195.0/24 网段的主机访问SSH服务,可通过
# iptables –I FORWARD ! –s 192.168.195.0/24–p tcp –dport 22 –j ACCEPT
 
5.      防火墙拒绝icmp的请求
# iptables –A INPUT –p icmp –-icmp-typeecho-request –j REJECT .
 
6.      允许192.168.195.0/24网段进行PING
# iptables –I INPUT –s 192.168.195.0/24 –picpm –-icmp-type echo-request –j ACCEPT
 
7.      防火墙拒绝发送echo-reply
# iptables –A OUTPUT –p icmp –-icmp-typeecho-reply –j REJECT
 
8.      允许防火墙回应192.168.195.0/24网段的ping
# iptables –I OUTPUT –s 192.168.195.0/24 –picmp –icmp-type echo-reply –j ACCEPT
 
9.防火墙拒绝192.168.195.0/24对其进行TCP连接
检查SYN/ACK/RST/FIN四个位置,其中SYN被置位
# iptables –I INPUT –s 192.168.195.0/24 –ptcp –-tcp-flags SYN,ACK,RST,FIN SYN –j REJECT
或
# iptables –A INPUT –i eth1 –p tcp ! –-syn –jACCEPT
 
 
 
5.      主机1拼通主机3 主机3拼通主机1   主机2设置
# iptables –I FORWARD –s 192.168.2.0/24 –d192.168.1.0/24 –p icmp –j ACCEPT
# iptables –I FORWARD 2 –s 192.168.1.0/24 –d192.168.2.0/24 –p icmp –j ACCEPT
# iptables –I FORWARD –s 192.168.2.0/24 –d192.168.1.0/24 –i eth1 –o eth0 –p tcp –dport 22 –j ACCEPT
# iptables –I FORWARD –s 192.168.1.0/24 –d192.168.2.0/24 –i eth0 –o eth1 –p tcp –dport 22 –j ACCEPT
 
 
 
主机2设置 执行单向拼通主机1拼主机3
 #iptables –I FORWARD –s 192.168.1.0/24 –d 192.168.2.0/24 –p icmp –-icmp-typeecho-request –j ACCEPT
 
主机2设置
# iptables –I FORWARD –s 192.168.2..0/24 –d192..168.1.0./24 –p icmp  icmp-typeecho-reply –j ACCEPT
 
七.扩展匹配
类别                     选项                                          用法
状态匹配                            -mstate   --state 状态值
地址匹配                    -mmac –-mac-source MAC地址
 
显示匹配              多端口匹配                         -mmultiport –-sports 源端口列表
目标端口列表
 
范围匹配
                                                                      -miprange –-dst-range IP1-IP2
根据MAC地址封锁主机
适用于交换网络,针对源MAC地址
-         不管其IP地址变成多少
-         # iptables –A INPUT –m mac –-mac–source 00:0C:29:34:45:25–j DROP
-         1、阻止MAC地址为XX:XX:XX:XX:XX:XX主机的所有通信:
-         iptables -AINPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP
-          
-         2、允许MAC地址为XX:XX:XX:XX:XX:XX主机访问22端口:
-         iptables -AINPUT -p tcp --destination-port 22 -m mac --mac-source XX:XX:XX:XX:XX:XX -jACCEPT
-         3、允许IP地址为192.168.1.21,MAC地址为XX:XX:XX:XX:XX:XX的主机通信,拒绝多有其他主机:
-         iptables -AINPUT -s 192.168.1.21 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
-         iptables -PINPUT DROP
-         4、可以写脚本限制MAC:
-         iptables -PFORWARD DROP
-         for mac in$(cat ipaddressfile); do
-         iptables -AFORWARD -m mac --mac-source $mac -j ACCEPT
-         done 
-         
 
简化服务开启规则
条规则开放多个端口
比如Web FTP MailSSH等等
# iptables –A –INPUT –s 192.168.20.0/24 –p tcp –mmultiport --dport 20:22,25,80,110,143,16501:16800 –j ACCEPT
 
//20到23的端口都需要拒统
# iptables –A INPUT –p tcp –dport 20:23 –j REJECT  
 
根据IP范围封锁主机
SSH登陆的IP范围控制
-允许从192.168.4.10-192.168.4.20登陆
-禁止从192.168.4.0、24网段其他的主机登陆
# iptables A INPUT –p tcp –dport 22 –m iprange –src-range192.168.4.10-192.168.4.20 –j ACCEPT
# iptables –A INPUT –p tcp –dport 22 –s 192.168.4.0/24 –jDROP
 
 
1.      网络连接的五种状态
NEW,请求建立连接的包,完全陌生的包
ESTABLISHED,将要或已经建立连接的包
,与已知某个连接相关联的包
无对应连接,以通讯连接无效的包
,未跟踪状态的包
 
# iptables –P FORWARD DROP
# iptables –A FORWARD –s 192.168.10.0/24 –jACCEPT
# iptables –A FORWARD –d 192.168.10.0/24 –m state –-stateESTABLSHED,RELATED –j ACCEPT
 
不做重点
 
DOS: Denial OF Service 拒绝服务功击
 
# iptables –A INPUT –m state –state NEW –ptcp –syn –j DROP
# iptables –A FORWARD –m state –state NEW –ptcp ! –syn DROP
 
识别FTP数据链接
针对FTP被动模式,数据端口未知
# iptables –A FORWARD –d 192.168.4.100 –ptcp –dport 20:21 –j –ACCEPT
# iptables –A FORWARD –s 192.168.4.100 –ptcp –sport 20:21 –j ACCEPT
 
# iptables -A FORWARD –d 192.168.4.100 –m state –stateESTABLISHED,RELATED –j  ACCEPT
# iptables -A FORWARD –s 192.168.4.100 –m state –stateESTABLISHED,RELATED –j ACCEPT
 
 
禁止从内网访问外网的服务
# iptables –A FORWARD –s 192.168.4.0/24 –oeth0 –j ACCEPT
# iptables –A FORWARD –d 192.168.4..0/24 –i eth0 –mstate –state ESTABLISHED,RELATED –j DROP
# iptables –A FORWARD –d 192.168.4.0/24 –ieth0 –m state –state NEW –j DROP
 
比如,访问量较大的Web服务
# iptables –t raw –A PREROUTING –d192.168.4.100 –p tcp –dport 80 –j NOTRACK
# iptables –t raw –A PREROUTING –s192.168.4.100 –P tcp –sport 80 –j NOTRACK
# iptables –A FORWARD –m state –stateUNTRACKED –j ACCEPT

 

https://blog.51cto.com/yht1990/1790282