1.删除所有配置

iptables -F

注:如果是远程连接,一定一定不要使用这个命令,所有规则删除后,你将无法连接到你的服务器

2.更改默认策略:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

2.添加指定IP可以访问本机所有端口

iptables -A INPUT -s xx.xx.xx.xx(IP) -p all -j ACCEPT

注:-A (Append)代表追回加

3.添加指定IP可以访问本机的某端口

iptables -I INPUT -s xx.xx.xx.xx(IP) -p all --dport 8080 -j ACCEPT

4.查看当前配置的规则

iptables -nvL

5.保存当前配置的结果

iptabels-save 【默认保存结果在 /etc/sysconfig/iptables】

6.删除规则

iptables -D INPUT 2

可配合如下语句显示编号使用:

iptables -nvL --line-numbers

7.从配置中载入规则

iptables-restore < /etc/sysconfig/iptables

8.iptabels 和docker的配置

如果使用了docker 那需要额外添加关于docker的规则。

a.首先查看docker通信的IP地址(ifconfig),假如docker地址是:172.18.0.1

  配置规则:iptables -A INPUT -s 172.18.0.0/24 -j ACCEPT


9.重启和停止-(一般是这样,我测试的时候报错没有这个命令,可能是我系统有问题)

service iptables stop
service iptables start

10.追加规则

iptables -A 命令追加新规则

11.一些语句样例

11.1 开放指定的端口

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机)

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行

iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问

iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口

iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口

iptables -A INPUT -j reject #禁止其他未允许的规则访问

iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问

11.2 屏蔽IP

iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是


11.命令参数介绍

(参考:[https://blog.csdn.net/u011537073/article/details/82685586] 侵删)

-p 协议(protocol)

指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。

如果不指定-p参数,则默认是all值。这并不明智,请总是明确指定协议名称。

可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols

还可以使用–protocol参数代替-p参数

-s 源地址(source)

指定数据包的源地址

参数可以使IP地址、网络地址、主机名

例如:-s 192.168.1.101指定IP地址

例如:-s 192.168.1.10/24指定网络地址

如果不指定-s参数,就代表所有地址

还可以使用–src或者–source

-d 目的地址(destination)

指定目的地址

参数和-s相同

还可以使用–dst或者–destination

-j 执行目标(jump to target)

-j代表”jump to target”

-j指定了当与规则(Rule)匹配时如何处理数据包

可能的值是ACCEPT, DROP, QUEUE, RETURN,MASQUERADE

还可以指定其他链(Chain)作为目标

注:MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat(详情见上一篇文章)。

-i 输入接口(input interface)

-i代表输入接口(input interface)

-i指定了要处理来自哪个接口的数据包

这些数据包即将进入INPUT, FORWARD, PREROUTE链

例如:-i eth0指定了要处理经由eth0进入的数据包

如果不指定-i参数,那么将处理进入所有接口的数据包

如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包

如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包

还可以使用–in-interface参数

-o 输出(out interface)

-o代表”output interface”

-o指定了数据包由哪个接口输出

这些数据包即将进入FORWARD, OUTPUT, POSTROUTING链

如果不指定-o选项,那么系统上的所有接口都可以作为输出接口

如果出现! -o eth0,那么将从eth0以外的接口输出

如果出现-i eth+,那么将仅从eth开头的接口输出

还可以使用–out-interface参数

–sport 源端口(source port)针对 -p tcp 或者 -p udp

缺省情况下,将匹配所有端口

可以指定端口号或者端口名称,例如”–sport 22″与”–sport ssh”。

/etc/services文件描述了上述映射关系。

从性能上讲,使用端口号更好

使用冒号可以匹配端口范围,如”–sport 22:100″

还可以使用”–source-port”

–-dport 目的端口(destination port)针对-p tcp 或者 -p udp

参数和–sport类似

还可以使用”–destination-port”

-–tcp-flags TCP标志 针对-p tcp

可以指定由逗号分隔的多个参数

有效值可以是:SYN, ACK, FIN, RST, URG, PSH

可以使用ALL或者NONE

-–icmp-type ICMP类型 针对-p icmp

–icmp-type 0 表示Echo Reply

–icmp-type 8 表示Echo