Write by lyc at 2018-01-29
Modify by lyc at 2020-8-28
一、iptables 命令
1.iptables 安装
CentOS7 以上版本默认没有安装 iptables,需要另外安装
1 2 3 4 5 6
| $ yum install -y iptables iptables-services $ iptables -F;iptables -X;iptables -Z; $ iptables -t nat -F;iptables -t nat -X;iptables -t nat -Z $ service iptables save $ systemctl start iptables $ systemctl enable iptables
|
2.iptables 语法
1
| $ iptables -t TABLE -[A|I|D] CHAIN rule-specification [options]
|
--table
, -t
指定要操作的表,默认 filter
表, filter
, nat
, mangle
--append
, -A
在链的末尾处添加规则;INPUT
对流入的数据包进行操作。
--insert
, -I
插入规则到指定链的第一行或指定行,-I INPUT 2
插入规则到第二行
--delete
, -D
删除规则role
--replace
, -R
修改指定的链的规则,-R INPUT 1
表示修改INPUT链的第1条规则
--policy
, -P
修改链的默认动作
--source
, -s
匹配源地址 address[/mask][...]
--destination
, -d
匹配目的地址 address[/mask][...]
--sport
匹配源端口号,需要启用扩展匹配 -m pro
--dport
匹配目的端口号,需要启用扩展匹配 -m pro,另外必须事先指定了使用哪种协议,即必须先使用-p选项
--protocol
, -p
匹配协议,默认all (tcp, udp, icmp)
- centos6支持:tcp, udp, udplite, icmp, esp, ah, sctp
- centos7支持:tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
--in-interface
, -i
判断报文是从哪个网卡流入的,**-i 选项只能用于PREROUTING链、INPUT链、FORWARD链**
--out-interface
, -o
匹配报文将由哪块网卡流出的,**-o选项只能用于FORWARD链、OUTPUT链、POSTROUTING链**
--match
, -m
启用扩展匹配,在使用扩展匹配条件的时候,**如果没有使用-m指定使用哪个扩展模块,iptables会默认使用”-m 协议名”**,而协议名就是-p选项对应的协议名。
--jump
, -j
指定行为:
ACCEPT
允许数据包通过
DROP
直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT
拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT
源地址转换,解决内网用户用同一个公网地址上网的问题
MASQUERADE
是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT
目标地址转换
REDIRECT
在本机做端口映射。
- -A, -I, -D 指定操作链名时,英文要大写:
INPUT
, OUTPUT
, FORWARD
, PREROUTING
, POSTROUTING
-j
指定行为时英文要大写: DROP
(丢弃),ACCEPT
(接受),REJECT
(拒绝)。且DROP
优于REJECT
3.iptables 查看规则
-L
以列表的形式列出链的规则
-n
以数值的形式输出IP和Port
-v
查看详细信息,收发包字节数量
--line-numbers
输出行号,便于操作
1 2 3 4 5 6 7
| $ iptables -nvL $ iptables -nvL --line-numbers $ iptables -t filter -nvL --line-numbers $ iptables -t nat -nvL --line-numbers
$ iptables -t filter -L INPUT
|
4.保存iptables规则
- 命令添加的规则,仅在内存里临时生效
- 需要永久生效需要保存到配置文件
/etc/sysconfig/iptables
CentOS6
1 2
| $ /etc/init.d/iptables save $ service iptables save
|
CentOS7
1 2 3 4 5
| $ service iptables save $ iptables-save > /etc/sysconfig/iptables
$ iptables-restore < /etc/sysconfig/iptables
|
二、iptables 添加规则
1.添加规则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $ iptables -t filter -A INPUT -s 192.168.99.208,192.168.99.209 -p all -j DROP $ iptables -t filter -A INPUT -s 192.168.99.0/24 -p all -j DROP
$ iptables -t filter -A INPUT -p tcp -s 192.168.99.208/32 --dport 873 -j DROP $ iptables -t filter -A INPUT -p tcp -s 192.168.99.208/32 -d 192.168.99.207/32 --dport 873 -j DROP
$ iptables -t filter -A INPUT -p tcp -m tcp -s 192.168.99.208/32 -d 192.168.99.207/32 --dport 873 -j DROP
$ iptables -A INPUT -s 10.0.0.8 -p icmp --icmp-type 8 -j DROP $ iptables -A INPUT -s 10.0.0.8 -p icmp --icmp-type any -j DROP
$ iptables -t filter -A INPUT -i eth0 -p icmp -j DROP
|
2.按序号插入规则
1 2
| $ iptables -t filter -I INPUT 2 -p tcp --dport 80 -j DROP
|
配置允许某个端口
1 2 3
| $ iptables -A INPUT -s 106.75.xx.xx/32 -p tcp --dport 22 -j ACCEPT $ iptables -A INPUT -s 10.19.0.0/16 -p tcp --dport 22 -j ACCEPT $ iptables -A INPUT -p tcp --dport 22 -j DROP
|
! 非的使用
1 2 3 4
| $ iptables -A INPUT ! -s 106.75.xx.xx/32 -p tcp -m tcp --dport 5666 -j DROP $ iptables -I INPUT ! -s 10.0.0.0/24 -j DROP 等价于: $ iptables -I INPUT -s 10.0.0.0/24 -j ACCEPT
|
三、iptables 删除规则
1.根据规则的编号去删除规则
1 2 3
| $ iptables -nvL --line-numbers $ iptables -t filter -D OUTPUT 13 $ iptables -t filter -D INPUT 2
|
2.根据具体的匹配条件与动作删除规则
1 2
| $ iptables -t filter -D INPUT -s 192.168.99.208/32 -j REJECT
|
3.清空所有规则
-F
flush,刷新指定链中的所有规则
iptables -t 表名 -F 链名
1 2 3 4 5 6 7 8 9 10
| $ iptables -t filter -F $ iptables -t filter -X $ iptables -t filter -Z
$ iptables -t nat -F $ iptables -t nat -X $ iptables -t nat -Z
|
四、iptables 修改规则(不推荐)
- 注意修改 -s 源地址不可省略。命令没有使用-s指定对应规则中原本的源地址,那么在修改完成后,你修改的规则中的源地址会自动变为0.0.0.0/0(此IP表示匹配所有网段的IP地址)
- 不建议使用修改规则,不如删除规则重新添加
1 2
| $ iptables -t filter -R INPUT 1 -s 192.168.99.208/32 -j DROP
|
修改链的默认策略
1 2 3 4 5 6 7 8 9 10 11
| $ iptables -t filter -P FORWARD DROP $ iptables -t filter -nvL Chain INPUT (policy ACCEPT 43 packets, 7095 bytes) pkts bytes target prot opt in out source destination 386 32424 DROP all -- * * 192.168.99.208 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 26 packets, 3552 bytes) pkts bytes target prot opt in out source destination
|