linux之iptables
1. 查看网络监听的端口:netstat -tunlp2. 查看本机的路由规则:routestack@ubuntu:~$ route -nKernel IP routing tableDestinationGatewayGenmaskFlags Metric RefUse Iface0.0.0.010.217
·
1. 查看网络监听的端口:
netstat -tunlp
2. 查看本机的路由规则:
route
stack@ubuntu:~$ 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的路由
3./etc/services文件:port和service的对应关系
4.查看本地的网络服务
netstat -tunlp #列出正在监听的网络服务和端口
netstat -tunp #列出已联机的网络联机状态和端口
kill -9 PID #杀掉sshd进程,即可关闭该远程连接
5.查看网络上的开放的网络服务:
nmap IP
nmap localhost
6. 如何查阅 rpcbind 这个程序一开机就执行? 如果开机就执行,
如何将他改为开机时不要启动? 如何立即关闭这个 rpcbind 服务?
1) chkconfig --list | grep rpcbind
runlevel
确认一下你的环境与 rpcbind 是否启动
2) 如果有启动,可透过chkconfig --level 35 rpcbind off来设定开机时不要启动;
3) 可以透过 /etc/init.d/rpcbind stop 来立即关闭它
7.iptables
1) 查看防火墙格式化输出
iptables [-t tables] [-L] [-nv]
选项与参数:
-t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用默认的filter
-L :列出目前的 table 的规则
-n :不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!
-v :列出更多的信息,包括通过该规则的封包总位数、相关的网络接口等
eg:
查看filter表的chain
stack@ubuntu:~$ sudo 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
stack@ubuntu:~$ sudo iptables -t nat -L -n
2) 查看完整的防火墙规则:
查看所有的表的规则
stack@ubuntu:~$ sudo 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
查看某一个表的规则
stack@ubuntu:~$ sudo 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
对比
stack@ubuntu:~$ sudo 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
3) 清除防火墙
iptables [-t tables] [-FXZ]
选项与参数:
-F :清除所有的已订定的规则;
-X :杀掉所有使用者 "自定义" 的 chain (应该说的是 tables )啰;
-Z :将所有的 chain 的计数与流量统计都归零
4) 定义预设的政策(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
5) 为某个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
6) 设定规则具体到端口
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
7) 外挂模块
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
8) 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
9) 删除某一个规则
我们可以用两种办法中的任一种删除规则。
首先,因为知道这是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)一样精确。如果链中有多个相同的规则,只会删除第一个。
10) 将iptables规则开机自启动
http://www.hjwahjl.net/archives/67
更多推荐
已为社区贡献2条内容
所有评论(0)