17.Linux之iptables常用操作

iptables的四表五链(iptables规则注意大小写区分)

filter表: 负责过滤功能,防火墙;内核模块: iptables_filter                                        (常用)filter表中有三链:INPUT链   FORWARD链   OUTPUT链

nat表:   network address translation,网络地址转换功能;内核模块: iptable_nat          (常用)nat表中有三链: PREROUTING链    POSTROUTING链  

mangle表:  拆解报文,做出修改,并重新封装的功能; iptable_mangle                              mangle中有五链:PREROUTING链    POSTROUTING链  INPUT链  OUTPUT链  FORWARD链

raw表:  关闭nat表上启用的连接追踪机制; iptable_raw                                                   raw表中有两链:  PREROUTING链    OUTPUT链
  1. 查看网络监听的端口:
netstat -tunlp
  1. 查看本机的路由规则:
route

[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.217.99.1     0.0.0.0         UG    0      0        0 eth0
10.217.99.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 vboxnet0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

Destination-->network
Genmask-->netmask
这两者组成一个完整的网段

Gateway
如果为0.0.0.0,表示该路由直接由本机传送出去,即通过局域网的MAC直接传送,
如果显示IP的话,表示改路由要经过路由器才能传送出去。

Flags:有多个标志,代表的意义如下:
U (route is up):该路由是启动的;
H (target is a host):目标是一部主机 (IP) 而非网域;
G (use gateway):需要透过外部的主机 (gateway) 来转递封包;
R (reinstate route for dynamic routing):使用动态路由时,恢复路由信息的标志;
D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由
M (modified from routing daemon or redirect):路由已经被修改了;
! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)

Iface
这个路由传递封包的接口。

路由过程是有顺序的,从小网络传送到大网络,当最后没有合适的路由可以匹配时,就使用default路由,即destination是0.0.0.0的路由

  1. /etc/services文件
每个port和各种service服务的对应关系

  1. 查看本地的网络服务
netstat -tunlp  #列出正在监听的网络服务和端口
netstat -tunp   #列出已联机的网络联机状态和端口
kill -9 PID     #杀掉sshd进程,即可关闭该远程连接

  1. 查看网络上的开放的网络服务
nmap IP
nmap localhost

6.iptables

  1. 查看防火墙格式化输出
iptables [-t tables] [-L] [-nv]

选项与参数:
-t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用默认的filter
-L :列出目前的 table 的规则
-n :不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!
-v :列出更多的信息,包括通过该规则的封包总位数、相关的网络接口等

eg:

查看filter表的chain
[root@localhost ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

说明:
target:代表进行的动作, ACCEPT 是放行,而 REJECT 则是拒绝,此外,尚有 DROP (丢弃) 的项目!
prot:代表使用的封包协议,主要有 tcp, udp 及 icmp 三种封包格式;
opt:额外的选项说明
source :代表此规则是针对哪个『来源 IP』进行限制?
destination :代表此规则是针对哪个『目标 IP』进行限制?

以上的每个chain中的规则,对封包进行过滤的时候是有顺序的,按从上到下的顺序,只要有一个规则符合,那么就可以通过防火墙,
如果一直不符合,就一直向下继续匹配,如果都不符合,那么就执行预设的动作。
可以看到FORWORD的最后两个rule的target是REJECT,这说明,如果前面的rule都不符合,那么到这条规则的时候,就拒绝。

查看nat表的chain
[root@localhost ~]# iptables -t nat -L -n

  1. 查看完整的防火墙规则:
查看所有的表的规则
[root@localhost ~]# iptables-save

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013

*nat
:PREROUTING ACCEPT [512:70935]
:INPUT ACCEPT [371:61561]
:OUTPUT ACCEPT [2352:148261]
:POSTROUTING ACCEPT [2343:147796]
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
COMMIT

# Completed on Fri Jan 18 14:26:06 2013

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013

*mangle
:PREROUTING ACCEPT [26824:23528990]
:INPUT ACCEPT [26682:23519288]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22885:4162471]
:POSTROUTING ACCEPT [23023:4179687]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT

# Completed on Fri Jan 18 14:26:06 2013

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013

*filter
:INPUT ACCEPT [26671:23518302]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22874:4161485]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
COMMIT

# Completed on Fri Jan 18 14:26:06 2013

查看某一个表的规则
[root@localhost ~]# iptables-save -t filter

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:29:14 2013

*filter
:INPUT ACCEPT [26774:23531129]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22956:4173130]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
COMMIT

# Completed on Fri Jan 18 14:29:14 2013

对比

[root@localhost ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

  1. 清除防火墙
iptables [-t tables] [-FXZ]

选项与参数:
-F :清除所有的已订定的规则;
-X :杀掉所有使用者 "自定义" 的 chain (应该说的是 tables )啰;
-Z :将所有的 chain 的计数与流量统计都归零

  1. 定义预设的政策(policy)
当你的封包不在你设定的规则之内时,则该封包的通过与否,是以 Policy 的设定为准。即封包不符合你定义的所有规则的话,执行什么操作。
有两个可选:ACCEPT, DROP。
policy是和chain对应的,一个chain对应一个policy.

iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

选项与参数:
-P : 定义链( chain )。注意,这个 P 为大写!
ACCEPT : 该封包可接受。
DROP : 该封包直接丢弃,不会让 client 端知道为何被丢弃。

eg:
iptables -P INPUT DROP  #将filter表的INPUT链的预设政策设置为DROP

  1. 为某个chain增加规则
iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源 IP/网域] [-d 目标 IP/网域] -j [ACCEPT|DROP|REJECT|LOG]
选项与参数:
-AI 链名:针对某的链进行规则的 "插入" 或 "累加"
-A :新增加一条规则,该规则增加在原本规则的最后面。例如原本已经有四条规则,使用 -A 就可以加上第五条规则!
-I :插入一条规则。如果没有指定此规则的顺序,默认是插入变成第一条规则。例如原本有四条规则,使用 -I 则该规则变成第一条,而原本四条变成 2~5 号。
链 :有 INPUT, OUTPUT, FORWARD 等,
-io 网络接口:设定封包进出的接口规范
-i :封包所进入的那个网络接口,例如 eth0, lo 等接口。需与 INPUT 链配合;
-o :封包所传出的那个网络接口,需与 OUTPUT 链配合;
-p 协议:设定此规则适用于哪种封包格式,主要的封包格式有: tcp, udp, icmp 及 all 。
-s 来源 IP/网域:设定此规则之封包的来源项目,可指定单纯的 IP 或包括网域,
   例如: IP:192.168.0.100,网域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
   若规范为『不许』时,则加上 ! 即可,例如:
   -s ! 192.168.100.0/24 表示不许 192.168.100.0/24 之封包来源;
-d 目标 IP/网域:同 -s ,只不过这里指的是目标的 IP 或网域。
-j :后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG),
    LOG 这个动作仅在进行记录而已,并不会影响到这个封包的其他规则比对的。

eg:
#1. 给filter表的INPUT链加上一条规则,设定 lo 成为受信任的装置,亦即进出 lo 的封包都予以接受
iptables -A INPUT -i lo -j ACCEPT

#2. 给filter表的INPUT链加上一条规则,设定来自eth1接口的192.168.100.0/24网段的封包都接受
iptables -A INPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT

#3. 给filter表的INPUT链加上一条规则,设定来自eth1接口的 192.168.100.230 IP的封包都丢弃
iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP

#4. 记录来自192.168.2.200这个IP的请求记录
iptables -A INPUT -s 192.168.2.200 -j LOG

  1. 设定规则具体到端口
iptables [-AI 链名] [-io 网络接口] [-p tcp|udp] \
         [-s 来源 IP/网域] [--sport 端口范围]  \
         [-d 目标 IP/网域] [--dport 端口范围] \
      -j [ACCEPT|DROP|REJECT|LOG]

因为仅有 tcp 与 udp 封包具有端口,因此你想要使用--dport,--sport 时,得要加上 -p tcp 或 -p udp 的参数才会成功.

eg:

#1. 只要来自 192.168.1.0/24 的 1024:65535 端口的封包,且想要联机到本机的 ssh port 就予以抵挡
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65534 --dport ssh -j DROP

#2. 将来自任何地方来源 port 1:1023 的主动联机到本机端的 1:1023 联机丢弃
iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 --syn -j DROP

  1. 外挂模块
iptables -A INPUT [-m state] [--state 状态]
选项与参数:
-m :一些 iptables 的外挂模块,主要常见的有:
    state :状态模块
    mac:网络卡硬件地址 (hardware address)
--state :一些封包的状态,主要有:
    INVALID:无效的封包,例如数据破损的封包状态
    ESTABLISHED:已经联机成功的联机状态;
    NEW:想要新建立联机的封包状态;
    RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关
--mac-source :就是来源主机的 MAC 啦!

eg:
#1. 只要已建立或相关封包就予以通过,只要是不合法封包就丢弃
 $ iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 $ iptables -A INPUT -m state --state INVALID -j DROP

#2. 针对局域网络内的 aa:bb:cc:dd:ee:ff 主机开放其联机
$ iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT

#3. 接受ssh联机
$ iptables -A INPUT -m state --state NEW -j ACCEPT

  1. icmp封包规则
iptables -A INPUT [-p icmp] [--icmp-type 类型] -j ACCEPT
选项与参数:
--icmp-type :后面必须要接 ICMP 的封包类型,也可以使用代号,例如 8 代表 echo request 的意思

0	Echo Reply (代表一个回应信息)
3	Destination Unreachable (表示目的地不可到达)
4	Source Quench (当 router 的负载过高时,此类别码可用来让发送端停止发送讯息)
5	Redirect (用来重新导向路由路径的资讯)
8	Echo Request (请求回应讯息)
11	Time Exceeded for a Datagram (当资料封包在某些路由传送的现象中造成逾时状态,此类别码可告知来源该封包已被忽略的讯息)
12	Parameter Problem on a Datagram (当一个 ICMP 封包重複之前的错误时,会回覆来源主机关于参数错误的讯息)
13	Timestamp Request (要求对方送出时间讯息,用以计算路由时间的差异,以满足同步性协定的要求)
14	Timestamp Reply (此讯息纯粹是回应 Timestamp Request 用的)
15	Information Request (在 RARP 协定应用之前,此讯息是用来在开机时取得网路信息)
16	Information Reply (用以回应 Infromation Request 讯息)
17	Address Mask Request (这讯息是用来查询子网路 mask 设定信息)
18	Address Mask Reply (回应子网路 mask 查询讯息的)

eg:
#接受所有的icmp请求
$ iptables -A INPUT -p icmp -j ACCEPT

  1. 删除某一个规则
我们可以用两种办法中的任一种删除规则。
首先,因为知道这是INPUT链中唯一的规则,我们用编号删除:
#删除INPUT链中的编号为1的规则
$ iptables -D INPUT 1

第二种办法是 -A 命令的映射,不过用-D替换-A。
当你的链中规则很复杂,而你不想计算它们的编号的时候这就十分有用了。这样的话,我们可以使用:
$ iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
-D的语法必须和-A(或者-I或者-R)一样精确。如果链中有多个相同的规则,只会删除第一个。

  1. 将iptables规则导出设置开机自启动
iptables-save >/etc/iptables.rules 

vim /etc/network/if-pre-up.d/iptables
#!/bin/bash
iptables-restore < /etc/iptables.rules

chmod  +x /etc/network/if-pre-up.d/iptables

  1. 工作中日常使用最简单iptables
[root@cashier001 ~]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
### ssh ### 跳板机ip manage ### ip 堡垒机###
-A INPUT -s 堡垒机ip -p tcp --dport 堡垒机端口-j ACCEPT
-A INPUT -s 跳板机ip -p tcp --dport ssh端口 -j ACCEPT
-A INPUT -p tcp --dport ssh端口-j DROP
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 12345 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值