Примерно должно быть так, FORWARD весь убран, у тебя же не шлюз.
скрипт
text
IPT="/sbin/iptables"
EXT="ppp0" # - сетевой интерфейс подключен к интернету
SSHPORT=22
# Чистка всех правил
CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`
for i in $CHAINS
do
$IPT -t $i -F;
done
for i in $CHAINS
do
$IPT -t $i -X;
done
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A INPUT --fragment -p icmp -j DROP
$IPT -A OUTPUT --fragment -p icmp -j DROP
# SYN наводнение (связывание сист. ресурсов)
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# Если интерфейс не lo, то запрещаем входить в список его адресов.
$IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP
$IPT -A INPUT \! -i lo -s 127.0.0.0/8 -j DROP
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешаем локальный траффик для loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# Разрешаем ICMP соединение. Значительная часть ICMP используется для передачи сообщений о
# том, что происходит с тем или иным UDP или TCP соединением.
$IPT -A INPUT -i $EXT -p icmp -m icmp --icmp-type source-quench -j ACCEPT
$IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type source-quench -j ACCEPT
# Разрешаем ping снаружи
$IPT -A INPUT -i $EXT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
$IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
# Разрешаем ping самому серверу
$IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
$IPT -A INPUT -i $EXT -p icmp -m icmp --icmp-type parameter-problem -j ACCEPT
$IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type parameter-problem -j ACCEPT
Что бы было удобнее. В данном случаи короче писать. А вообще интерефейсы лучше загонять в переменные, как сделано и тут. Для чего? А вдруг вы пересели с ppp на eth? Для того что бы поменять все строчки нужно усилия, а так всего одно значение переменной.
можно и так. Но иногда нужно например юзать системную iptables, если есть ещё и тестовая в /usr/local/. /usr/local оно раньше идёт в $PATH, потому which покажет не то, что нужно. Короче - удобное средство для быстрого костылестроения ;)