1.基本概念
是与2.4.x和2.6.x系统版本linux内核集成的ip信息包过滤系统。
2.使用规则
规则其实就是管理员预设定的的条件,规则存储在内核空间的信息过滤表中,这些规则分别指定了源地址,目的地址,传输协议及服务类型等所有待检查数据包的特征和目标。当数据包与规则不匹配时,将该数据包送往该链中下一条规则检查;当数据包与规则匹配时,iptables就根据规则所定义的方法处理数据包,如通过(ACCEPT),丢弃(DROP),拒绝(REJECT),排队(QUEUE)或者返回(RETURN)等。
链——————链是数据包传播的路径, 每个链其实就是众多规则中的一个检查清单,每条链中可以有一条或者数条规则。
表——————表是包含仅处理特定类型信息包的规则和链的信息包过滤表。iptables内置了三种表:filter,nat和mangle,分别用于实现包过滤,网络地址和包重构功能。
Filter-----过滤表
Nat--------网络地址转换表
mangle-----数据包处理表
INPUT链----处理输入包的规则链
OUTPUT链---处理输出包的规则链
FORWORD----处理转发包的规则链
PREROUTING-对到达且未经路由判断之前的包进行处理的规则链
filter表是iptables的默认表,如果没有指定使用那个表,iptables默认使用filter表执行所有的命令。filter表包含了INPUT链(处理进入的数据包),FORWORD链(处理转发的数据包)和OUTPUT链(处理本地生成的数据包)。
nat表主要用于进行网络地址转换。nat表有OUTPUT、PREROUTING、POSTROUTING三种链形式
*DNAT操作主要出现这样一种情况,即假设一个合法ip地址,要把对防火墙的访问重定向到其他机器上,改变的是目的地址,以使包能重路由到某台主机。
*SNAT改变包的源地址,这在极大程度上可以隐藏本地网络
iptables
-t ##指定表名称
-n ##不做解析
-L ##列出指定表中的策略
-A ##增加策略
-p ##网络协议
--dport ##端口
-s ##数据来源
-j ##动作
ACCEPT ##允许数据包通过
REJECT ##拒绝
DROP ##丢弃
-N ##增加链
-E ##修改链名称
-X ##删除链
-D ##删除指定策略
-I ##插入指定策略
-R ##修改策略
-P ##修改默认策略
[root@desktop ~]# systemctl stop firewalld ##关闭firewalld火墙服务
[root@desktop ~]# systemctl disable firewalld
[root@desktop ~]# systemctl start iptables ##启动iptables火墙服务
[root@desktop ~]# iptables -F ##刷新filter表中的策略,当没有用-t指定表名称时默认filter表
[root@desktop ~]# iptables -t filter -nL
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]##存放位置
[root@desktop ~]# vim /etc/sysconfig/iptables
[root@desktop ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT ##允许访问22端口
[root@desktop ~]# iptables -A INPUT -s 172.25.254.66 -j ACCEPT ##允许66主及访问本机所有端口
[root@desktop ~]# iptables -A INPUP -j REJECT ##拒绝所有主机的数据来源
测试
66主机可以访问,其他主机不能
[root@desktop ~]# iptables -N lee ##增加链lee
[root@desktop ~]# iptables -E lee eel ##改变链名称
[root@desktop ~]# iptables -X eel ##删除eel链
[root@desktop ~]# iptables -D INPUT 2 ##删除INPUT链中的第二条策略
[root@desktop ~]# iptables -I INPUT -p tcp --dport 80 -j REJECT ##插入策略到INPUT中的第一条
[root@desktop ~]# iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT##修改第一条策略
[root@desktop ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@desktop ~]# iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
[root@desktop ~]# iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
[root@desktop ~]# iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
[root@desktop ~]# iptables -A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
[root@desktop ~]# iptables -A INPUT -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT
[root@desktop ~]# iptables -A INPUT -j REJECT
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@desktop ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@desktop ~]# sysctl -p
[root@desktop ~]# iptables -t nat -A PREROUTING -i eth1 -j DNAT --to-dest 172.25.34.234
[root@desktop ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.254.134
[root@desktop ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT all -- 0.0.0.0/0 0.0.0.0/0 to:172.25.34.234
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 0.0.0.0/0 0.0.0.0/0 to:172.25.254.134
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
IPADDR=172.25.34.234
PREFIX=24
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
PERSISTENT_DHCLIENT=1
GATEWAY=172.25.34.134
root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.25.34.134 0.0.0.0 UG 1024 0 0 eth0
172.25.34.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
[root@localhost ~]# ping 172.25.254.134
PING 172.25.254.134 (172.25.254.134) 56(84) bytes of data.
64 bytes from 172.25.254.134: icmp_seq=1 ttl=64 time=0.123 ms
64 bytes from 172.25.254.134: icmp_seq=2 ttl=64 time=0.326 ms